; LLVM IR from guanzhi/GmSSL :: tools (certgen)

; 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.SM2_KEY = type { %struct.SM2_Z256_POINT, [4 x i64] }
%struct.SM2_Z256_POINT = type { [4 x i64], [4 x i64], [4 x i64] }

@stdout = external global ptr, align 8
@stderr = external global ptr, align 8
@.str = external hidden unnamed_addr constant [20 x i8], align 1
@options = external hidden global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [4 x i8], align 1
@usage = external hidden global ptr, align 8
@.str.4 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [31 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @certgen_main(i32 noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca [20 x i8], align 16
  %10 = alloca i32, align 4
  %11 = alloca [256 x i8], align 16
  %12 = alloca i64, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca %struct.SM2_KEY, align 8
  %25 = alloca [8192 x i8], align 16
  %26 = alloca i64, align 8
  %27 = alloca ptr, align 8
  %28 = alloca i64, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca [4096 x i8], align 16
  %33 = alloca i64, align 8
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca [2048 x i8], align 16
  %38 = alloca i64, align 8
  %39 = alloca [512 x i8], align 16
  %40 = alloca i64, align 8
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca [12 x i32], align 16
  %44 = alloca i64, align 8
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca i32, align 4
  %48 = alloca ptr, align 8
  %49 = alloca ptr, align 8
  %50 = alloca i32, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #9
  store i32 1, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #9
  %51 = load ptr, ptr %5, align 8, !tbaa !9
  %52 = getelementptr inbounds ptr, ptr %51, i64 0
  %53 = load ptr, ptr %52, align 8, !tbaa !9
  store ptr %53, ptr %7, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #9
  call void @llvm.lifetime.start.p0(i64 20, ptr %9) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #9
  store i32 12, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 256, ptr %11) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #9
  store ptr null, ptr %13, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #9
  store ptr null, ptr %14, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #9
  store ptr null, ptr %15, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #9
  store ptr null, ptr %16, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #9
  store ptr null, ptr %17, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #9
  store ptr null, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #9
  store i32 0, ptr %19, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #9
  store ptr null, ptr %22, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  store ptr null, ptr %23, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 128, ptr %24) #9
  call void @llvm.lifetime.start.p0(i64 8192, ptr %25) #9
  call void @llvm.memset.p0.i64(ptr align 16 %25, i8 0, i64 8192, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #9
  store i64 0, ptr %26, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #9
  store ptr null, ptr %27, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  store i64 0, ptr %28, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  %54 = load ptr, ptr @stdout, align 8, !tbaa !9
  store ptr %54, ptr %29, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #9
  store ptr null, ptr %30, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.start.p0(i64 4096, ptr %32) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #9
  store i64 0, ptr %33, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #9
  store i32 0, ptr %34, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #9
  store i32 0, ptr %35, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #9
  store i32 0, ptr %36, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 2048, ptr %37) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #9
  store i64 0, ptr %38, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 512, ptr %39) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #9
  store i64 0, ptr %40, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #9
  store i32 -1, ptr %41, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #9
  store i32 -1, ptr %42, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 48, ptr %43) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #9
  store i64 0, ptr %44, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #9
  store ptr null, ptr %45, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #9
  store ptr null, ptr %46, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #9
  store i32 -1, ptr %47, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #9
  store ptr null, ptr %48, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #9
  store ptr null, ptr %49, align 8, !tbaa !9
  %55 = load i32, ptr %4, align 4, !tbaa !5
  %56 = add nsw i32 %55, -1
  store i32 %56, ptr %4, align 4, !tbaa !5
  %57 = load ptr, ptr %5, align 8, !tbaa !9
  %58 = getelementptr inbounds ptr, ptr %57, i32 1
  store ptr %58, ptr %5, align 8, !tbaa !9
  %59 = load i32, ptr %4, align 4, !tbaa !5
  %60 = icmp slt i32 %59, 1
  br i1 %60, label %61, label %66

61:                                               ; preds = %2
  %62 = load ptr, ptr @stderr, align 8, !tbaa !9
  %63 = load ptr, ptr %7, align 8, !tbaa !9
  %64 = load ptr, ptr @options, align 8, !tbaa !9
  %65 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %62, ptr noundef @.str, ptr noundef %63, ptr noundef %64) #9
  store i32 1, ptr %3, align 4
  store i32 1, ptr %50, align 4
  br label %960

66:                                               ; preds = %2
  br label %67

67:                                               ; preds = %611, %66
  %68 = load i32, ptr %4, align 4, !tbaa !5
  %69 = icmp sgt i32 %68, 0
  br i1 %69, label %70, label %616

70:                                               ; preds = %67
  %71 = load ptr, ptr %5, align 8, !tbaa !9
  %72 = load ptr, ptr %71, align 8, !tbaa !9
  %73 = call i32 @strcmp(ptr noundef %72, ptr noundef @.str.1) #10
  %74 = icmp ne i32 %73, 0
  br i1 %74, label %81, label %75

75:                                               ; preds = %70
  %76 = load ptr, ptr %7, align 8, !tbaa !9
  %77 = load ptr, ptr @options, align 8, !tbaa !9
  %78 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef %76, ptr noundef %77)
  %79 = load ptr, ptr @usage, align 8, !tbaa !9
  %80 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, ptr noundef %79)
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %938

81:                                               ; preds = %70
  %82 = load ptr, ptr %5, align 8, !tbaa !9
  %83 = load ptr, ptr %82, align 8, !tbaa !9
  %84 = call i32 @strcmp(ptr noundef %83, ptr noundef @.str.4) #10
  %85 = icmp ne i32 %84, 0
  br i1 %85, label %107, label %86

86:                                               ; preds = %81
  %87 = load i32, ptr %4, align 4, !tbaa !5
  %88 = add nsw i32 %87, -1
  store i32 %88, ptr %4, align 4, !tbaa !5
  %89 = icmp slt i32 %88, 1
  br i1 %89, label %90, label %91

90:                                               ; preds = %86
  br label %579

91:                                               ; preds = %86
  %92 = load ptr, ptr %5, align 8, !tbaa !9
  %93 = getelementptr inbounds ptr, ptr %92, i32 1
  store ptr %93, ptr %5, align 8, !tbaa !9
  %94 = load ptr, ptr %93, align 8, !tbaa !9
  %95 = call i32 @atoi(ptr noundef %94) #10
  store i32 %95, ptr %10, align 4, !tbaa !5
  %96 = load i32, ptr %10, align 4, !tbaa !5
  %97 = icmp sle i32 %96, 0
  br i1 %97, label %102, label %98

98:                                               ; preds = %91
  %99 = load i32, ptr %10, align 4, !tbaa !5
  %100 = sext i32 %99 to i64
  %101 = icmp ugt i64 %100, 20
  br i1 %101, label %102, label %106

102:                                              ; preds = %98, %91
  %103 = load ptr, ptr @stderr, align 8, !tbaa !9
  %104 = load ptr, ptr %7, align 8, !tbaa !9
  %105 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %103, ptr noundef @.str.5, ptr noundef %104, i64 noundef 20) #9
  br label %938

106:                                              ; preds = %98
  br label %610

107:                                              ; preds = %81
  %108 = load ptr, ptr %5, align 8, !tbaa !9
  %109 = load ptr, ptr %108, align 8, !tbaa !9
  %110 = call i32 @strcmp(ptr noundef %109, ptr noundef @.str.6) #10
  %111 = icmp ne i32 %110, 0
  br i1 %111, label %121, label %112

112:                                              ; preds = %107
  %113 = load i32, ptr %4, align 4, !tbaa !5
  %114 = add nsw i32 %113, -1
  store i32 %114, ptr %4, align 4, !tbaa !5
  %115 = icmp slt i32 %114, 1
  br i1 %115, label %116, label %117

116:                                              ; preds = %112
  br label %579

117:                                              ; preds = %112
  %118 = load ptr, ptr %5, align 8, !tbaa !9
  %119 = getelementptr inbounds ptr, ptr %118, i32 1
  store ptr %119, ptr %5, align 8, !tbaa !9
  %120 = load ptr, ptr %119, align 8, !tbaa !9
  store ptr %120, ptr %18, align 8, !tbaa !9
  br label %609

121:                                              ; preds = %107
  %122 = load ptr, ptr %5, align 8, !tbaa !9
  %123 = load ptr, ptr %122, align 8, !tbaa !9
  %124 = call i32 @strcmp(ptr noundef %123, ptr noundef @.str.7) #10
  %125 = icmp ne i32 %124, 0
  br i1 %125, label %135, label %126

126:                                              ; preds = %121
  %127 = load i32, ptr %4, align 4, !tbaa !5
  %128 = add nsw i32 %127, -1
  store i32 %128, ptr %4, align 4, !tbaa !5
  %129 = icmp slt i32 %128, 1
  br i1 %129, label %130, label %131

130:                                              ; preds = %126
  br label %579

131:                                              ; preds = %126
  %132 = load ptr, ptr %5, align 8, !tbaa !9
  %133 = getelementptr inbounds ptr, ptr %132, i32 1
  store ptr %133, ptr %5, align 8, !tbaa !9
  %134 = load ptr, ptr %133, align 8, !tbaa !9
  store ptr %134, ptr %16, align 8, !tbaa !9
  br label %608

135:                                              ; preds = %121
  %136 = load ptr, ptr %5, align 8, !tbaa !9
  %137 = load ptr, ptr %136, align 8, !tbaa !9
  %138 = call i32 @strcmp(ptr noundef %137, ptr noundef @.str.8) #10
  %139 = icmp ne i32 %138, 0
  br i1 %139, label %149, label %140

140:                                              ; preds = %135
  %141 = load i32, ptr %4, align 4, !tbaa !5
  %142 = add nsw i32 %141, -1
  store i32 %142, ptr %4, align 4, !tbaa !5
  %143 = icmp slt i32 %142, 1
  br i1 %143, label %144, label %145

144:                                              ; preds = %140
  br label %579

145:                                              ; preds = %140
  %146 = load ptr, ptr %5, align 8, !tbaa !9
  %147 = getelementptr inbounds ptr, ptr %146, i32 1
  store ptr %147, ptr %5, align 8, !tbaa !9
  %148 = load ptr, ptr %147, align 8, !tbaa !9
  store ptr %148, ptr %17, align 8, !tbaa !9
  br label %607

149:                                              ; preds = %135
  %150 = load ptr, ptr %5, align 8, !tbaa !9
  %151 = load ptr, ptr %150, align 8, !tbaa !9
  %152 = call i32 @strcmp(ptr noundef %151, ptr noundef @.str.9) #10
  %153 = icmp ne i32 %152, 0
  br i1 %153, label %171, label %154

154:                                              ; preds = %149
  %155 = load i32, ptr %4, align 4, !tbaa !5
  %156 = add nsw i32 %155, -1
  store i32 %156, ptr %4, align 4, !tbaa !5
  %157 = icmp slt i32 %156, 1
  br i1 %157, label %158, label %159

158:                                              ; preds = %154
  br label %579

159:                                              ; preds = %154
  %160 = load ptr, ptr %5, align 8, !tbaa !9
  %161 = getelementptr inbounds ptr, ptr %160, i32 1
  store ptr %161, ptr %5, align 8, !tbaa !9
  %162 = load ptr, ptr %161, align 8, !tbaa !9
  store ptr %162, ptr %13, align 8, !tbaa !9
  %163 = load ptr, ptr %13, align 8, !tbaa !9
  %164 = call i64 @strlen(ptr noundef %163) #10
  %165 = icmp ne i64 %164, 2
  br i1 %165, label %166, label %170

166:                                              ; preds = %159
  %167 = load ptr, ptr @stderr, align 8, !tbaa !9
  %168 = load ptr, ptr %7, align 8, !tbaa !9
  %169 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %167, ptr noundef @.str.10, ptr noundef %168) #9
  br label %938

170:                                              ; preds = %159
  br label %606

171:                                              ; preds = %149
  %172 = load ptr, ptr %5, align 8, !tbaa !9
  %173 = load ptr, ptr %172, align 8, !tbaa !9
  %174 = call i32 @strcmp(ptr noundef %173, ptr noundef @.str.11) #10
  %175 = icmp ne i32 %174, 0
  br i1 %175, label %185, label %176

176:                                              ; preds = %171
  %177 = load i32, ptr %4, align 4, !tbaa !5
  %178 = add nsw i32 %177, -1
  store i32 %178, ptr %4, align 4, !tbaa !5
  %179 = icmp slt i32 %178, 1
  br i1 %179, label %180, label %181

180:                                              ; preds = %176
  br label %579

181:                                              ; preds = %176
  %182 = load ptr, ptr %5, align 8, !tbaa !9
  %183 = getelementptr inbounds ptr, ptr %182, i32 1
  store ptr %183, ptr %5, align 8, !tbaa !9
  %184 = load ptr, ptr %183, align 8, !tbaa !9
  store ptr %184, ptr %14, align 8, !tbaa !9
  br label %605

185:                                              ; preds = %171
  %186 = load ptr, ptr %5, align 8, !tbaa !9
  %187 = load ptr, ptr %186, align 8, !tbaa !9
  %188 = call i32 @strcmp(ptr noundef %187, ptr noundef @.str.12) #10
  %189 = icmp ne i32 %188, 0
  br i1 %189, label %199, label %190

190:                                              ; preds = %185
  %191 = load i32, ptr %4, align 4, !tbaa !5
  %192 = add nsw i32 %191, -1
  store i32 %192, ptr %4, align 4, !tbaa !5
  %193 = icmp slt i32 %192, 1
  br i1 %193, label %194, label %195

194:                                              ; preds = %190
  br label %579

195:                                              ; preds = %190
  %196 = load ptr, ptr %5, align 8, !tbaa !9
  %197 = getelementptr inbounds ptr, ptr %196, i32 1
  store ptr %197, ptr %5, align 8, !tbaa !9
  %198 = load ptr, ptr %197, align 8, !tbaa !9
  store ptr %198, ptr %15, align 8, !tbaa !9
  br label %604

199:                                              ; preds = %185
  %200 = load ptr, ptr %5, align 8, !tbaa !9
  %201 = load ptr, ptr %200, align 8, !tbaa !9
  %202 = call i32 @strcmp(ptr noundef %201, ptr noundef @.str.13) #10
  %203 = icmp ne i32 %202, 0
  br i1 %203, label %221, label %204

204:                                              ; preds = %199
  %205 = load i32, ptr %4, align 4, !tbaa !5
  %206 = add nsw i32 %205, -1
  store i32 %206, ptr %4, align 4, !tbaa !5
  %207 = icmp slt i32 %206, 1
  br i1 %207, label %208, label %209

208:                                              ; preds = %204
  br label %579

209:                                              ; preds = %204
  %210 = load ptr, ptr %5, align 8, !tbaa !9
  %211 = getelementptr inbounds ptr, ptr %210, i32 1
  store ptr %211, ptr %5, align 8, !tbaa !9
  %212 = load ptr, ptr %211, align 8, !tbaa !9
  %213 = call i32 @atoi(ptr noundef %212) #10
  store i32 %213, ptr %19, align 4, !tbaa !5
  %214 = load i32, ptr %19, align 4, !tbaa !5
  %215 = icmp sle i32 %214, 0
  br i1 %215, label %216, label %220

216:                                              ; preds = %209
  %217 = load ptr, ptr @stderr, align 8, !tbaa !9
  %218 = load ptr, ptr %7, align 8, !tbaa !9
  %219 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %217, ptr noundef @.str.14, ptr noundef %218) #9
  br label %938

220:                                              ; preds = %209
  br label %603

221:                                              ; preds = %199
  %222 = load ptr, ptr %5, align 8, !tbaa !9
  %223 = load ptr, ptr %222, align 8, !tbaa !9
  %224 = call i32 @strcmp(ptr noundef %223, ptr noundef @.str.15) #10
  %225 = icmp ne i32 %224, 0
  br i1 %225, label %247, label %226

226:                                              ; preds = %221
  %227 = load i32, ptr %4, align 4, !tbaa !5
  %228 = add nsw i32 %227, -1
  store i32 %228, ptr %4, align 4, !tbaa !5
  %229 = icmp slt i32 %228, 1
  br i1 %229, label %230, label %231

230:                                              ; preds = %226
  br label %579

231:                                              ; preds = %226
  %232 = load ptr, ptr %5, align 8, !tbaa !9
  %233 = getelementptr inbounds ptr, ptr %232, i32 1
  store ptr %233, ptr %5, align 8, !tbaa !9
  %234 = load ptr, ptr %233, align 8, !tbaa !9
  store ptr %234, ptr %8, align 8, !tbaa !9
  %235 = load ptr, ptr %8, align 8, !tbaa !9
  %236 = call noalias ptr @fopen(ptr noundef %235, ptr noundef @.str.16)
  store ptr %236, ptr %22, align 8, !tbaa !9
  %237 = icmp ne ptr %236, null
  br i1 %237, label %246, label %238

238:                                              ; preds = %231
  %239 = load ptr, ptr @stderr, align 8, !tbaa !9
  %240 = load ptr, ptr %7, align 8, !tbaa !9
  %241 = load ptr, ptr %8, align 8, !tbaa !9
  %242 = call ptr @__errno_location() #11
  %243 = load i32, ptr %242, align 4, !tbaa !5
  %244 = call ptr @strerror(i32 noundef %243) #9
  %245 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %239, ptr noundef @.str.17, ptr noundef %240, ptr noundef %241, ptr noundef %244) #9
  br label %938

246:                                              ; preds = %231
  br label %602

247:                                              ; preds = %221
  %248 = load ptr, ptr %5, align 8, !tbaa !9
  %249 = load ptr, ptr %248, align 8, !tbaa !9
  %250 = call i32 @strcmp(ptr noundef %249, ptr noundef @.str.18) #10
  %251 = icmp ne i32 %250, 0
  br i1 %251, label %261, label %252

252:                                              ; preds = %247
  %253 = load i32, ptr %4, align 4, !tbaa !5
  %254 = add nsw i32 %253, -1
  store i32 %254, ptr %4, align 4, !tbaa !5
  %255 = icmp slt i32 %254, 1
  br i1 %255, label %256, label %257

256:                                              ; preds = %252
  br label %579

257:                                              ; preds = %252
  %258 = load ptr, ptr %5, align 8, !tbaa !9
  %259 = getelementptr inbounds ptr, ptr %258, i32 1
  store ptr %259, ptr %5, align 8, !tbaa !9
  %260 = load ptr, ptr %259, align 8, !tbaa !9
  store ptr %260, ptr %23, align 8, !tbaa !9
  br label %601

261:                                              ; preds = %247
  %262 = load ptr, ptr %5, align 8, !tbaa !9
  %263 = load ptr, ptr %262, align 8, !tbaa !9
  %264 = call i32 @strcmp(ptr noundef %263, ptr noundef @.str.19) #10
  %265 = icmp ne i32 %264, 0
  br i1 %265, label %288, label %266

266:                                              ; preds = %261
  %267 = load i32, ptr %4, align 4, !tbaa !5
  %268 = add nsw i32 %267, -1
  store i32 %268, ptr %4, align 4, !tbaa !5
  %269 = icmp slt i32 %268, 1
  br i1 %269, label %270, label %271

270:                                              ; preds = %266
  br label %579

271:                                              ; preds = %266
  %272 = load ptr, ptr %5, align 8, !tbaa !9
  %273 = getelementptr inbounds ptr, ptr %272, i32 1
  store ptr %273, ptr %5, align 8, !tbaa !9
  %274 = load ptr, ptr %273, align 8, !tbaa !9
  store ptr %274, ptr %8, align 8, !tbaa !9
  %275 = load ptr, ptr %8, align 8, !tbaa !9
  %276 = call i64 @strlen(ptr noundef %275) #10
  %277 = icmp ugt i64 %276, 8191
  br i1 %277, label %278, label %282

278:                                              ; preds = %271
  %279 = load ptr, ptr @stderr, align 8, !tbaa !9
  %280 = load ptr, ptr %7, align 8, !tbaa !9
  %281 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %279, ptr noundef @.str.20, ptr noundef %280) #9
  br label %938

282:                                              ; preds = %271
  %283 = getelementptr inbounds [8192 x i8], ptr %25, i64 0, i64 0
  %284 = load ptr, ptr %8, align 8, !tbaa !9
  %285 = call ptr @strncpy(ptr noundef %283, ptr noundef %284, i64 noundef 8192) #9
  %286 = load ptr, ptr %8, align 8, !tbaa !9
  %287 = call i64 @strlen(ptr noundef %286) #10
  store i64 %287, ptr %26, align 8, !tbaa !11
  br label %600

288:                                              ; preds = %261
  %289 = load ptr, ptr %5, align 8, !tbaa !9
  %290 = load ptr, ptr %289, align 8, !tbaa !9
  %291 = call i32 @strcmp(ptr noundef %290, ptr noundef @.str.21) #10
  %292 = icmp ne i32 %291, 0
  br i1 %292, label %321, label %293

293:                                              ; preds = %288
  %294 = load i32, ptr %4, align 4, !tbaa !5
  %295 = add nsw i32 %294, -1
  store i32 %295, ptr %4, align 4, !tbaa !5
  %296 = icmp slt i32 %295, 1
  br i1 %296, label %297, label %298

297:                                              ; preds = %293
  br label %579

298:                                              ; preds = %293
  %299 = load ptr, ptr %5, align 8, !tbaa !9
  %300 = getelementptr inbounds ptr, ptr %299, i32 1
  store ptr %300, ptr %5, align 8, !tbaa !9
  %301 = load ptr, ptr %300, align 8, !tbaa !9
  store ptr %301, ptr %8, align 8, !tbaa !9
  %302 = load ptr, ptr %8, align 8, !tbaa !9
  %303 = call i64 @strlen(ptr noundef %302) #10
  %304 = icmp ugt i64 %303, 16382
  br i1 %304, label %305, label %309

305:                                              ; preds = %298
  %306 = load ptr, ptr @stderr, align 8, !tbaa !9
  %307 = load ptr, ptr %7, align 8, !tbaa !9
  %308 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %306, ptr noundef @.str.22, ptr noundef %307) #9
  br label %938

309:                                              ; preds = %298
  %310 = load ptr, ptr %8, align 8, !tbaa !9
  %311 = load ptr, ptr %8, align 8, !tbaa !9
  %312 = call i64 @strlen(ptr noundef %311) #10
  %313 = getelementptr inbounds [8192 x i8], ptr %25, i64 0, i64 0
  %314 = call i32 @hex_to_bytes(ptr noundef %310, i64 noundef %312, ptr noundef %313, ptr noundef %26)
  %315 = icmp ne i32 %314, 1
  br i1 %315, label %316, label %320

316:                                              ; preds = %309
  %317 = load ptr, ptr @stderr, align 8, !tbaa !9
  %318 = load ptr, ptr %7, align 8, !tbaa !9
  %319 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %317, ptr noundef @.str.23, ptr noundef %318) #9
  br label %938

320:                                              ; preds = %309
  br label %599

321:                                              ; preds = %288
  %322 = load ptr, ptr %5, align 8, !tbaa !9
  %323 = load ptr, ptr %322, align 8, !tbaa !9
  %324 = call i32 @strcmp(ptr noundef %323, ptr noundef @.str.24) #10
  %325 = icmp ne i32 %324, 0
  br i1 %325, label %327, label %326

326:                                              ; preds = %321
  store i32 1, ptr %34, align 4, !tbaa !5
  br label %598

327:                                              ; preds = %321
  %328 = load ptr, ptr %5, align 8, !tbaa !9
  %329 = load ptr, ptr %328, align 8, !tbaa !9
  %330 = call i32 @strcmp(ptr noundef %329, ptr noundef @.str.25) #10
  %331 = icmp ne i32 %330, 0
  br i1 %331, label %333, label %332

332:                                              ; preds = %327
  store i32 1, ptr %35, align 4, !tbaa !5
  br label %597

333:                                              ; preds = %327
  %334 = load ptr, ptr %5, align 8, !tbaa !9
  %335 = load ptr, ptr %334, align 8, !tbaa !9
  %336 = call i32 @strcmp(ptr noundef %335, ptr noundef @.str.26) #10
  %337 = icmp ne i32 %336, 0
  br i1 %337, label %356, label %338

338:                                              ; preds = %333
  %339 = load i32, ptr %4, align 4, !tbaa !5
  %340 = add nsw i32 %339, -1
  store i32 %340, ptr %4, align 4, !tbaa !5
  %341 = icmp slt i32 %340, 1
  br i1 %341, label %342, label %343

342:                                              ; preds = %338
  br label %579

343:                                              ; preds = %338
  %344 = load ptr, ptr %5, align 8, !tbaa !9
  %345 = getelementptr inbounds ptr, ptr %344, i32 1
  store ptr %345, ptr %5, align 8, !tbaa !9
  %346 = load ptr, ptr %345, align 8, !tbaa !9
  store ptr %346, ptr %8, align 8, !tbaa !9
  %347 = load ptr, ptr %8, align 8, !tbaa !9
  %348 = call i32 @ext_key_usage_set(ptr noundef %36, ptr noundef %347)
  %349 = icmp ne i32 %348, 1
  br i1 %349, label %350, label %355

350:                                              ; preds = %343
  %351 = load ptr, ptr @stderr, align 8, !tbaa !9
  %352 = load ptr, ptr %7, align 8, !tbaa !9
  %353 = load ptr, ptr %8, align 8, !tbaa !9
  %354 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %351, ptr noundef @.str.27, ptr noundef %352, ptr noundef %353) #9
  br label %938

355:                                              ; preds = %343
  br label %596

356:                                              ; preds = %333
  %357 = load ptr, ptr %5, align 8, !tbaa !9
  %358 = load ptr, ptr %357, align 8, !tbaa !9
  %359 = call i32 @strcmp(ptr noundef %358, ptr noundef @.str.28) #10
  %360 = icmp ne i32 %359, 0
  br i1 %360, label %381, label %361

361:                                              ; preds = %356
  %362 = load i32, ptr %4, align 4, !tbaa !5
  %363 = add nsw i32 %362, -1
  store i32 %363, ptr %4, align 4, !tbaa !5
  %364 = icmp slt i32 %363, 1
  br i1 %364, label %365, label %366

365:                                              ; preds = %361
  br label %579

366:                                              ; preds = %361
  %367 = load ptr, ptr %5, align 8, !tbaa !9
  %368 = getelementptr inbounds ptr, ptr %367, i32 1
  store ptr %368, ptr %5, align 8, !tbaa !9
  %369 = load ptr, ptr %368, align 8, !tbaa !9
  store ptr %369, ptr %8, align 8, !tbaa !9
  %370 = getelementptr inbounds [2048 x i8], ptr %37, i64 0, i64 0
  %371 = load ptr, ptr %8, align 8, !tbaa !9
  %372 = load ptr, ptr %8, align 8, !tbaa !9
  %373 = call i64 @strlen(ptr noundef %372) #10
  %374 = call i32 @x509_general_names_add_general_name(ptr noundef %370, ptr noundef %38, i64 noundef 2048, i32 noundef 2, ptr noundef %371, i64 noundef %373)
  %375 = icmp ne i32 %374, 1
  br i1 %375, label %376, label %380

376:                                              ; preds = %366
  %377 = load ptr, ptr @stderr, align 8, !tbaa !9
  %378 = load ptr, ptr %7, align 8, !tbaa !9
  %379 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %377, ptr noundef @.str.29, ptr noundef %378) #9
  br label %938

380:                                              ; preds = %366
  br label %595

381:                                              ; preds = %356
  %382 = load ptr, ptr %5, align 8, !tbaa !9
  %383 = load ptr, ptr %382, align 8, !tbaa !9
  %384 = call i32 @strcmp(ptr noundef %383, ptr noundef @.str.30) #10
  %385 = icmp ne i32 %384, 0
  br i1 %385, label %406, label %386

386:                                              ; preds = %381
  %387 = load i32, ptr %4, align 4, !tbaa !5
  %388 = add nsw i32 %387, -1
  store i32 %388, ptr %4, align 4, !tbaa !5
  %389 = icmp slt i32 %388, 1
  br i1 %389, label %390, label %391

390:                                              ; preds = %386
  br label %579

391:                                              ; preds = %386
  %392 = load ptr, ptr %5, align 8, !tbaa !9
  %393 = getelementptr inbounds ptr, ptr %392, i32 1
  store ptr %393, ptr %5, align 8, !tbaa !9
  %394 = load ptr, ptr %393, align 8, !tbaa !9
  store ptr %394, ptr %8, align 8, !tbaa !9
  %395 = getelementptr inbounds [512 x i8], ptr %39, i64 0, i64 0
  %396 = load ptr, ptr %8, align 8, !tbaa !9
  %397 = load ptr, ptr %8, align 8, !tbaa !9
  %398 = call i64 @strlen(ptr noundef %397) #10
  %399 = call i32 @x509_general_names_add_general_name(ptr noundef %395, ptr noundef %40, i64 noundef 512, i32 noundef 2, ptr noundef %396, i64 noundef %398)
  %400 = icmp ne i32 %399, 1
  br i1 %400, label %401, label %405

401:                                              ; preds = %391
  %402 = load ptr, ptr @stderr, align 8, !tbaa !9
  %403 = load ptr, ptr %7, align 8, !tbaa !9
  %404 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %402, ptr noundef @.str.31, ptr noundef %403) #9
  br label %938

405:                                              ; preds = %391
  br label %594

406:                                              ; preds = %381
  %407 = load ptr, ptr %5, align 8, !tbaa !9
  %408 = load ptr, ptr %407, align 8, !tbaa !9
  %409 = call i32 @strcmp(ptr noundef %408, ptr noundef @.str.32) #10
  %410 = icmp ne i32 %409, 0
  br i1 %410, label %412, label %411

411:                                              ; preds = %406
  store i32 1, ptr %41, align 4, !tbaa !5
  br label %593

412:                                              ; preds = %406
  %413 = load ptr, ptr %5, align 8, !tbaa !9
  %414 = load ptr, ptr %413, align 8, !tbaa !9
  %415 = call i32 @strcmp(ptr noundef %414, ptr noundef @.str.33) #10
  %416 = icmp ne i32 %415, 0
  br i1 %416, label %434, label %417

417:                                              ; preds = %412
  %418 = load i32, ptr %4, align 4, !tbaa !5
  %419 = add nsw i32 %418, -1
  store i32 %419, ptr %4, align 4, !tbaa !5
  %420 = icmp slt i32 %419, 1
  br i1 %420, label %421, label %422

421:                                              ; preds = %417
  br label %579

422:                                              ; preds = %417
  %423 = load ptr, ptr %5, align 8, !tbaa !9
  %424 = getelementptr inbounds ptr, ptr %423, i32 1
  store ptr %424, ptr %5, align 8, !tbaa !9
  %425 = load ptr, ptr %424, align 8, !tbaa !9
  %426 = call i32 @atoi(ptr noundef %425) #10
  store i32 %426, ptr %42, align 4, !tbaa !5
  %427 = load i32, ptr %42, align 4, !tbaa !5
  %428 = icmp slt i32 %427, 0
  br i1 %428, label %429, label %433

429:                                              ; preds = %422
  %430 = load ptr, ptr @stderr, align 8, !tbaa !9
  %431 = load ptr, ptr %7, align 8, !tbaa !9
  %432 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %430, ptr noundef @.str.34, ptr noundef %431) #9
  br label %938

433:                                              ; preds = %422
  br label %592

434:                                              ; preds = %412
  %435 = load ptr, ptr %5, align 8, !tbaa !9
  %436 = load ptr, ptr %435, align 8, !tbaa !9
  %437 = call i32 @strcmp(ptr noundef %436, ptr noundef @.str.35) #10
  %438 = icmp ne i32 %437, 0
  br i1 %438, label %469, label %439

439:                                              ; preds = %434
  %440 = load i32, ptr %4, align 4, !tbaa !5
  %441 = add nsw i32 %440, -1
  store i32 %441, ptr %4, align 4, !tbaa !5
  %442 = icmp slt i32 %441, 1
  br i1 %442, label %443, label %444

443:                                              ; preds = %439
  br label %579

444:                                              ; preds = %439
  %445 = load ptr, ptr %5, align 8, !tbaa !9
  %446 = getelementptr inbounds ptr, ptr %445, i32 1
  store ptr %446, ptr %5, align 8, !tbaa !9
  %447 = load ptr, ptr %446, align 8, !tbaa !9
  store ptr %447, ptr %8, align 8, !tbaa !9
  %448 = load ptr, ptr %8, align 8, !tbaa !9
  %449 = call i32 @x509_key_purpose_from_name(ptr noundef %448)
  %450 = icmp sle i32 %449, 0
  br i1 %450, label %451, label %456

451:                                              ; preds = %444
  %452 = load ptr, ptr @stderr, align 8, !tbaa !9
  %453 = load ptr, ptr %7, align 8, !tbaa !9
  %454 = load ptr, ptr %8, align 8, !tbaa !9
  %455 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %452, ptr noundef @.str.36, ptr noundef %453, ptr noundef %454) #9
  br label %938

456:                                              ; preds = %444
  %457 = load i64, ptr %44, align 8, !tbaa !11
  %458 = icmp uge i64 %457, 12
  br i1 %458, label %459, label %463

459:                                              ; preds = %456
  %460 = load ptr, ptr @stderr, align 8, !tbaa !9
  %461 = load ptr, ptr %7, align 8, !tbaa !9
  %462 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %460, ptr noundef @.str.37, ptr noundef %461) #9
  br label %938

463:                                              ; preds = %456
  %464 = load ptr, ptr %8, align 8, !tbaa !9
  %465 = call i32 @x509_key_purpose_from_name(ptr noundef %464)
  %466 = load i64, ptr %44, align 8, !tbaa !11
  %467 = add i64 %466, 1
  store i64 %467, ptr %44, align 8, !tbaa !11
  %468 = getelementptr inbounds [12 x i32], ptr %43, i64 0, i64 %466
  store i32 %465, ptr %468, align 4, !tbaa !5
  br label %591

469:                                              ; preds = %434
  %470 = load ptr, ptr %5, align 8, !tbaa !9
  %471 = load ptr, ptr %470, align 8, !tbaa !9
  %472 = call i32 @strcmp(ptr noundef %471, ptr noundef @.str.38) #10
  %473 = icmp ne i32 %472, 0
  br i1 %473, label %483, label %474

474:                                              ; preds = %469
  %475 = load i32, ptr %4, align 4, !tbaa !5
  %476 = add nsw i32 %475, -1
  store i32 %476, ptr %4, align 4, !tbaa !5
  %477 = icmp slt i32 %476, 1
  br i1 %477, label %478, label %479

478:                                              ; preds = %474
  br label %579

479:                                              ; preds = %474
  %480 = load ptr, ptr %5, align 8, !tbaa !9
  %481 = getelementptr inbounds ptr, ptr %480, i32 1
  store ptr %481, ptr %5, align 8, !tbaa !9
  %482 = load ptr, ptr %481, align 8, !tbaa !9
  store ptr %482, ptr %45, align 8, !tbaa !9
  br label %590

483:                                              ; preds = %469
  %484 = load ptr, ptr %5, align 8, !tbaa !9
  %485 = load ptr, ptr %484, align 8, !tbaa !9
  %486 = call i32 @strcmp(ptr noundef %485, ptr noundef @.str.39) #10
  %487 = icmp ne i32 %486, 0
  br i1 %487, label %497, label %488

488:                                              ; preds = %483
  %489 = load i32, ptr %4, align 4, !tbaa !5
  %490 = add nsw i32 %489, -1
  store i32 %490, ptr %4, align 4, !tbaa !5
  %491 = icmp slt i32 %490, 1
  br i1 %491, label %492, label %493

492:                                              ; preds = %488
  br label %579

493:                                              ; preds = %488
  %494 = load ptr, ptr %5, align 8, !tbaa !9
  %495 = getelementptr inbounds ptr, ptr %494, i32 1
  store ptr %495, ptr %5, align 8, !tbaa !9
  %496 = load ptr, ptr %495, align 8, !tbaa !9
  store ptr %496, ptr %46, align 8, !tbaa !9
  br label %589

497:                                              ; preds = %483
  %498 = load ptr, ptr %5, align 8, !tbaa !9
  %499 = load ptr, ptr %498, align 8, !tbaa !9
  %500 = call i32 @strcmp(ptr noundef %499, ptr noundef @.str.40) #10
  %501 = icmp ne i32 %500, 0
  br i1 %501, label %519, label %502

502:                                              ; preds = %497
  %503 = load i32, ptr %4, align 4, !tbaa !5
  %504 = add nsw i32 %503, -1
  store i32 %504, ptr %4, align 4, !tbaa !5
  %505 = icmp slt i32 %504, 1
  br i1 %505, label %506, label %507

506:                                              ; preds = %502
  br label %579

507:                                              ; preds = %502
  %508 = load ptr, ptr %5, align 8, !tbaa !9
  %509 = getelementptr inbounds ptr, ptr %508, i32 1
  store ptr %509, ptr %5, align 8, !tbaa !9
  %510 = load ptr, ptr %509, align 8, !tbaa !9
  %511 = call i32 @atoi(ptr noundef %510) #10
  store i32 %511, ptr %47, align 4, !tbaa !5
  %512 = load i32, ptr %47, align 4, !tbaa !5
  %513 = icmp slt i32 %512, 0
  br i1 %513, label %514, label %518

514:                                              ; preds = %507
  %515 = load ptr, ptr @stderr, align 8, !tbaa !9
  %516 = load ptr, ptr %7, align 8, !tbaa !9
  %517 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %515, ptr noundef @.str.41, ptr noundef %516) #9
  br label %938

518:                                              ; preds = %507
  br label %588

519:                                              ; preds = %497
  %520 = load ptr, ptr %5, align 8, !tbaa !9
  %521 = load ptr, ptr %520, align 8, !tbaa !9
  %522 = call i32 @strcmp(ptr noundef %521, ptr noundef @.str.42) #10
  %523 = icmp ne i32 %522, 0
  br i1 %523, label %533, label %524

524:                                              ; preds = %519
  %525 = load i32, ptr %4, align 4, !tbaa !5
  %526 = add nsw i32 %525, -1
  store i32 %526, ptr %4, align 4, !tbaa !5
  %527 = icmp slt i32 %526, 1
  br i1 %527, label %528, label %529

528:                                              ; preds = %524
  br label %579

529:                                              ; preds = %524
  %530 = load ptr, ptr %5, align 8, !tbaa !9
  %531 = getelementptr inbounds ptr, ptr %530, i32 1
  store ptr %531, ptr %5, align 8, !tbaa !9
  %532 = load ptr, ptr %531, align 8, !tbaa !9
  store ptr %532, ptr %48, align 8, !tbaa !9
  br label %587

533:                                              ; preds = %519
  %534 = load ptr, ptr %5, align 8, !tbaa !9
  %535 = load ptr, ptr %534, align 8, !tbaa !9
  %536 = call i32 @strcmp(ptr noundef %535, ptr noundef @.str.43) #10
  %537 = icmp ne i32 %536, 0
  br i1 %537, label %547, label %538

538:                                              ; preds = %533
  %539 = load i32, ptr %4, align 4, !tbaa !5
  %540 = add nsw i32 %539, -1
  store i32 %540, ptr %4, align 4, !tbaa !5
  %541 = icmp slt i32 %540, 1
  br i1 %541, label %542, label %543

542:                                              ; preds = %538
  br label %579

543:                                              ; preds = %538
  %544 = load ptr, ptr %5, align 8, !tbaa !9
  %545 = getelementptr inbounds ptr, ptr %544, i32 1
  store ptr %545, ptr %5, align 8, !tbaa !9
  %546 = load ptr, ptr %545, align 8, !tbaa !9
  store ptr %546, ptr %49, align 8, !tbaa !9
  br label %586

547:                                              ; preds = %533
  %548 = load ptr, ptr %5, align 8, !tbaa !9
  %549 = load ptr, ptr %548, align 8, !tbaa !9
  %550 = call i32 @strcmp(ptr noundef %549, ptr noundef @.str.44) #10
  %551 = icmp ne i32 %550, 0
  br i1 %551, label %573, label %552

552:                                              ; preds = %547
  %553 = load i32, ptr %4, align 4, !tbaa !5
  %554 = add nsw i32 %553, -1
  store i32 %554, ptr %4, align 4, !tbaa !5
  %555 = icmp slt i32 %554, 1
  br i1 %555, label %556, label %557

556:                                              ; preds = %552
  br label %579

557:                                              ; preds = %552
  %558 = load ptr, ptr %5, align 8, !tbaa !9
  %559 = getelementptr inbounds ptr, ptr %558, i32 1
  store ptr %559, ptr %5, align 8, !tbaa !9
  %560 = load ptr, ptr %559, align 8, !tbaa !9
  store ptr %560, ptr %30, align 8, !tbaa !9
  %561 = load ptr, ptr %30, align 8, !tbaa !9
  %562 = call noalias ptr @fopen(ptr noundef %561, ptr noundef @.str.45)
  store ptr %562, ptr %29, align 8, !tbaa !9
  %563 = icmp ne ptr %562, null
  br i1 %563, label %572, label %564

564:                                              ; preds = %557
  %565 = load ptr, ptr @stderr, align 8, !tbaa !9
  %566 = load ptr, ptr %7, align 8, !tbaa !9
  %567 = load ptr, ptr %30, align 8, !tbaa !9
  %568 = call ptr @__errno_location() #11
  %569 = load i32, ptr %568, align 4, !tbaa !5
  %570 = call ptr @strerror(i32 noundef %569) #9
  %571 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %565, ptr noundef @.str.17, ptr noundef %566, ptr noundef %567, ptr noundef %570) #9
  br label %938

572:                                              ; preds = %557
  br label %585

573:                                              ; preds = %547
  %574 = load ptr, ptr @stderr, align 8, !tbaa !9
  %575 = load ptr, ptr %7, align 8, !tbaa !9
  %576 = load ptr, ptr %5, align 8, !tbaa !9
  %577 = load ptr, ptr %576, align 8, !tbaa !9
  %578 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %574, ptr noundef @.str.46, ptr noundef %575, ptr noundef %577) #9
  br label %938

579:                                              ; preds = %556, %542, %528, %506, %492, %478, %443, %421, %390, %365, %342, %297, %270, %256, %230, %208, %194, %180, %158, %144, %130, %116, %90
  %580 = load ptr, ptr @stderr, align 8, !tbaa !9
  %581 = load ptr, ptr %7, align 8, !tbaa !9
  %582 = load ptr, ptr %5, align 8, !tbaa !9
  %583 = load ptr, ptr %582, align 8, !tbaa !9
  %584 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %580, ptr noundef @.str.47, ptr noundef %581, ptr noundef %583) #9
  br label %938

585:                                              ; preds = %572
  br label %586

586:                                              ; preds = %585, %543
  br label %587

587:                                              ; preds = %586, %529
  br label %588

588:                                              ; preds = %587, %518
  br label %589

589:                                              ; preds = %588, %493
  br label %590

590:                                              ; preds = %589, %479
  br label %591

591:                                              ; preds = %590, %463
  br label %592

592:                                              ; preds = %591, %433
  br label %593

593:                                              ; preds = %592, %411
  br label %594

594:                                              ; preds = %593, %405
  br label %595

595:                                              ; preds = %594, %380
  br label %596

596:                                              ; preds = %595, %355
  br label %597

597:                                              ; preds = %596, %332
  br label %598

598:                                              ; preds = %597, %326
  br label %599

599:                                              ; preds = %598, %320
  br label %600

600:                                              ; preds = %599, %282
  br label %601

601:                                              ; preds = %600, %257
  br label %602

602:                                              ; preds = %601, %246
  br label %603

603:                                              ; preds = %602, %220
  br label %604

604:                                              ; preds = %603, %195
  br label %605

605:                                              ; preds = %604, %181
  br label %606

606:                                              ; preds = %605, %170
  br label %607

607:                                              ; preds = %606, %145
  br label %608

608:                                              ; preds = %607, %131
  br label %609

609:                                              ; preds = %608, %117
  br label %610

610:                                              ; preds = %609, %106
  br label %611

611:                                              ; preds = %610
  %612 = load i32, ptr %4, align 4, !tbaa !5
  %613 = add nsw i32 %612, -1
  store i32 %613, ptr %4, align 4, !tbaa !5
  %614 = load ptr, ptr %5, align 8, !tbaa !9
  %615 = getelementptr inbounds ptr, ptr %614, i32 1
  store ptr %615, ptr %5, align 8, !tbaa !9
  br label %67, !llvm.loop !13

616:                                              ; preds = %67
  %617 = load ptr, ptr %18, align 8, !tbaa !9
  %618 = icmp ne ptr %617, null
  br i1 %618, label %626, label %619

619:                                              ; preds = %616
  %620 = load ptr, ptr @stderr, align 8, !tbaa !9
  %621 = load ptr, ptr %7, align 8, !tbaa !9
  %622 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %620, ptr noundef @.str.48, ptr noundef %621) #9
  %623 = load ptr, ptr %7, align 8, !tbaa !9
  %624 = load ptr, ptr @options, align 8, !tbaa !9
  %625 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef %623, ptr noundef %624)
  br label %938

626:                                              ; preds = %616
  %627 = load i32, ptr %19, align 4, !tbaa !5
  %628 = icmp ne i32 %627, 0
  br i1 %628, label %636, label %629

629:                                              ; preds = %626
  %630 = load ptr, ptr @stderr, align 8, !tbaa !9
  %631 = load ptr, ptr %7, align 8, !tbaa !9
  %632 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %630, ptr noundef @.str.49, ptr noundef %631) #9
  %633 = load ptr, ptr %7, align 8, !tbaa !9
  %634 = load ptr, ptr @options, align 8, !tbaa !9
  %635 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef %633, ptr noundef %634)
  br label %938

636:                                              ; preds = %626
  %637 = load ptr, ptr %22, align 8, !tbaa !9
  %638 = icmp ne ptr %637, null
  br i1 %638, label %646, label %639

639:                                              ; preds = %636
  %640 = load ptr, ptr @stderr, align 8, !tbaa !9
  %641 = load ptr, ptr %7, align 8, !tbaa !9
  %642 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %640, ptr noundef @.str.50, ptr noundef %641) #9
  %643 = load ptr, ptr %7, align 8, !tbaa !9
  %644 = load ptr, ptr @options, align 8, !tbaa !9
  %645 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef %643, ptr noundef %644)
  br label %938

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

649:                                              ; preds = %646
  %650 = load ptr, ptr @stderr, align 8, !tbaa !9
  %651 = load ptr, ptr %7, align 8, !tbaa !9
  %652 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %650, ptr noundef @.str.51, ptr noundef %651) #9
  %653 = load ptr, ptr %7, align 8, !tbaa !9
  %654 = load ptr, ptr @options, align 8, !tbaa !9
  %655 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef %653, ptr noundef %654)
  br label %938

656:                                              ; preds = %646
  %657 = load ptr, ptr %23, align 8, !tbaa !9
  %658 = load ptr, ptr %22, align 8, !tbaa !9
  %659 = call i32 @sm2_private_key_info_decrypt_from_pem(ptr noundef %24, ptr noundef %657, ptr noundef %658)
  %660 = icmp ne i32 %659, 1
  br i1 %660, label %661, label %665

661:                                              ; preds = %656
  %662 = load ptr, ptr @stderr, align 8, !tbaa !9
  %663 = load ptr, ptr %7, align 8, !tbaa !9
  %664 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %662, ptr noundef @.str.52, ptr noundef %663) #9
  br label %938

665:                                              ; preds = %656
  %666 = load i64, ptr %26, align 8, !tbaa !11
  %667 = icmp ne i64 %666, 0
  br i1 %667, label %671, label %668

668:                                              ; preds = %665
  %669 = getelementptr inbounds [8192 x i8], ptr %25, i64 0, i64 0
  %670 = call ptr @strcpy(ptr noundef %669, ptr noundef @.str.53) #9
  store i64 16, ptr %26, align 8, !tbaa !11
  br label %671

671:                                              ; preds = %668, %665
  %672 = getelementptr inbounds [20 x i8], ptr %9, i64 0, i64 0
  %673 = call i32 @rand_bytes(ptr noundef %672, i64 noundef 20)
  %674 = icmp ne i32 %673, 1
  br i1 %674, label %675, label %679

675:                                              ; preds = %671
  %676 = load ptr, ptr @stderr, align 8, !tbaa !9
  %677 = load ptr, ptr %7, align 8, !tbaa !9
  %678 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %676, ptr noundef @.str.54, ptr noundef %677) #9
  br label %938

679:                                              ; preds = %671
  %680 = getelementptr inbounds [256 x i8], ptr %11, i64 0, i64 0
  %681 = load ptr, ptr %13, align 8, !tbaa !9
  %682 = load ptr, ptr %14, align 8, !tbaa !9
  %683 = load ptr, ptr %15, align 8, !tbaa !9
  %684 = load ptr, ptr %16, align 8, !tbaa !9
  %685 = load ptr, ptr %17, align 8, !tbaa !9
  %686 = load ptr, ptr %18, align 8, !tbaa !9
  %687 = call i32 @x509_name_set(ptr noundef %680, ptr noundef %12, i64 noundef 256, ptr noundef %681, ptr noundef %682, ptr noundef %683, ptr noundef %684, ptr noundef %685, ptr noundef %686)
  %688 = icmp ne i32 %687, 1
  br i1 %688, label %689, label %693

689:                                              ; preds = %679
  %690 = load ptr, ptr @stderr, align 8, !tbaa !9
  %691 = load ptr, ptr %7, align 8, !tbaa !9
  %692 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %690, ptr noundef @.str.55, ptr noundef %691) #9
  br label %938

693:                                              ; preds = %679
  %694 = call i64 @time(ptr noundef %20) #9
  %695 = load i64, ptr %20, align 8, !tbaa !11
  %696 = load i32, ptr %19, align 4, !tbaa !5
  %697 = call i32 @x509_validity_add_days(ptr noundef %21, i64 noundef %695, i32 noundef %696)
  %698 = icmp ne i32 %697, 1
  br i1 %698, label %699, label %703

699:                                              ; preds = %693
  %700 = load ptr, ptr @stderr, align 8, !tbaa !9
  %701 = load ptr, ptr %7, align 8, !tbaa !9
  %702 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %700, ptr noundef @.str.56, ptr noundef %701) #9
  br label %938

703:                                              ; preds = %693
  %704 = load i32, ptr %34, align 4, !tbaa !5
  %705 = icmp ne i32 %704, 0
  br i1 %705, label %706, label %715

706:                                              ; preds = %703
  %707 = getelementptr inbounds [4096 x i8], ptr %32, i64 0, i64 0
  %708 = call i32 @x509_exts_add_default_authority_key_identifier(ptr noundef %707, ptr noundef %33, i64 noundef 4096, ptr noundef %24)
  %709 = icmp ne i32 %708, 1
  br i1 %709, label %710, label %714

710:                                              ; preds = %706
  %711 = load ptr, ptr @stderr, align 8, !tbaa !9
  %712 = load ptr, ptr %7, align 8, !tbaa !9
  %713 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %711, ptr noundef @.str.57, ptr noundef %712) #9
  br label %938

714:                                              ; preds = %706
  br label %715

715:                                              ; preds = %714, %703
  %716 = load i32, ptr %35, align 4, !tbaa !5
  %717 = icmp ne i32 %716, 0
  br i1 %717, label %718, label %727

718:                                              ; preds = %715
  %719 = getelementptr inbounds [4096 x i8], ptr %32, i64 0, i64 0
  %720 = call i32 @x509_exts_add_subject_key_identifier_ex(ptr noundef %719, ptr noundef %33, i64 noundef 4096, i32 noundef -1, ptr noundef %24)
  %721 = icmp ne i32 %720, 1
  br i1 %721, label %722, label %726

722:                                              ; preds = %718
  %723 = load ptr, ptr @stderr, align 8, !tbaa !9
  %724 = load ptr, ptr %7, align 8, !tbaa !9
  %725 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %723, ptr noundef @.str.58, ptr noundef %724) #9
  br label %938

726:                                              ; preds = %718
  br label %727

727:                                              ; preds = %726, %715
  %728 = load i32, ptr %36, align 4, !tbaa !5
  %729 = icmp ne i32 %728, 0
  br i1 %729, label %730, label %740

730:                                              ; preds = %727
  %731 = getelementptr inbounds [4096 x i8], ptr %32, i64 0, i64 0
  %732 = load i32, ptr %36, align 4, !tbaa !5
  %733 = call i32 @x509_exts_add_key_usage(ptr noundef %731, ptr noundef %33, i64 noundef 4096, i32 noundef 1, i32 noundef %732)
  %734 = icmp ne i32 %733, 1
  br i1 %734, label %735, label %739

735:                                              ; preds = %730
  %736 = load ptr, ptr @stderr, align 8, !tbaa !9
  %737 = load ptr, ptr %7, align 8, !tbaa !9
  %738 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %736, ptr noundef @.str.59, ptr noundef %737) #9
  br label %938

739:                                              ; preds = %730
  br label %740

740:                                              ; preds = %739, %727
  %741 = load i64, ptr %38, align 8, !tbaa !11
  %742 = icmp ne i64 %741, 0
  br i1 %742, label %743, label %754

743:                                              ; preds = %740
  %744 = getelementptr inbounds [4096 x i8], ptr %32, i64 0, i64 0
  %745 = getelementptr inbounds [2048 x i8], ptr %37, i64 0, i64 0
  %746 = load i64, ptr %38, align 8, !tbaa !11
  %747 = call i32 @x509_exts_add_subject_alt_name(ptr noundef %744, ptr noundef %33, i64 noundef 4096, i32 noundef -1, ptr noundef %745, i64 noundef %746)
  %748 = icmp ne i32 %747, 1
  br i1 %748, label %749, label %753

749:                                              ; preds = %743
  %750 = load ptr, ptr @stderr, align 8, !tbaa !9
  %751 = load ptr, ptr %7, align 8, !tbaa !9
  %752 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %750, ptr noundef @.str.60, ptr noundef %751) #9
  br label %938

753:                                              ; preds = %743
  br label %754

754:                                              ; preds = %753, %740
  %755 = load i64, ptr %40, align 8, !tbaa !11
  %756 = icmp ne i64 %755, 0
  br i1 %756, label %757, label %768

757:                                              ; preds = %754
  %758 = getelementptr inbounds [4096 x i8], ptr %32, i64 0, i64 0
  %759 = getelementptr inbounds [512 x i8], ptr %39, i64 0, i64 0
  %760 = load i64, ptr %40, align 8, !tbaa !11
  %761 = call i32 @x509_exts_add_issuer_alt_name(ptr noundef %758, ptr noundef %33, i64 noundef 4096, i32 noundef -1, ptr noundef %759, i64 noundef %760)
  %762 = icmp ne i32 %761, 1
  br i1 %762, label %763, label %767

763:                                              ; preds = %757
  %764 = load ptr, ptr @stderr, align 8, !tbaa !9
  %765 = load ptr, ptr %7, align 8, !tbaa !9
  %766 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %764, ptr noundef @.str.61, ptr noundef %765) #9
  br label %938

767:                                              ; preds = %757
  br label %768

768:                                              ; preds = %767, %754
  %769 = load i32, ptr %41, align 4, !tbaa !5
  %770 = icmp sge i32 %769, 0
  br i1 %770, label %774, label %771

771:                                              ; preds = %768
  %772 = load i32, ptr %42, align 4, !tbaa !5
  %773 = icmp sge i32 %772, 0
  br i1 %773, label %774, label %785

774:                                              ; preds = %771, %768
  %775 = getelementptr inbounds [4096 x i8], ptr %32, i64 0, i64 0
  %776 = load i32, ptr %41, align 4, !tbaa !5
  %777 = load i32, ptr %42, align 4, !tbaa !5
  %778 = call i32 @x509_exts_add_basic_constraints(ptr noundef %775, ptr noundef %33, i64 noundef 4096, i32 noundef 1, i32 noundef %776, i32 noundef %777)
  %779 = icmp ne i32 %778, 1
  br i1 %779, label %780, label %784

780:                                              ; preds = %774
  %781 = load ptr, ptr @stderr, align 8, !tbaa !9
  %782 = load ptr, ptr %7, align 8, !tbaa !9
  %783 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %781, ptr noundef @.str.62, ptr noundef %782) #9
  br label %938

784:                                              ; preds = %774
  br label %785

785:                                              ; preds = %784, %771
  %786 = load i64, ptr %44, align 8, !tbaa !11
  %787 = icmp ne i64 %786, 0
  br i1 %787, label %788, label %799

788:                                              ; preds = %785
  %789 = getelementptr inbounds [4096 x i8], ptr %32, i64 0, i64 0
  %790 = getelementptr inbounds [12 x i32], ptr %43, i64 0, i64 0
  %791 = load i64, ptr %44, align 8, !tbaa !11
  %792 = call i32 @x509_exts_add_ext_key_usage(ptr noundef %789, ptr noundef %33, i64 noundef 4096, i32 noundef -1, ptr noundef %790, i64 noundef %791)
  %793 = icmp ne i32 %792, 1
  br i1 %793, label %794, label %798

794:                                              ; preds = %788
  %795 = load ptr, ptr @stderr, align 8, !tbaa !9
  %796 = load ptr, ptr %7, align 8, !tbaa !9
  %797 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %795, ptr noundef @.str.63, ptr noundef %796) #9
  br label %938

798:                                              ; preds = %788
  br label %799

799:                                              ; preds = %798, %785
  %800 = load ptr, ptr %45, align 8, !tbaa !9
  %801 = icmp ne ptr %800, null
  br i1 %801, label %805, label %802

802:                                              ; preds = %799
  %803 = load ptr, ptr %46, align 8, !tbaa !9
  %804 = icmp ne ptr %803, null
  br i1 %804, label %805, label %832

805:                                              ; preds = %802, %799
  %806 = getelementptr inbounds [4096 x i8], ptr %32, i64 0, i64 0
  %807 = load ptr, ptr %45, align 8, !tbaa !9
  %808 = load ptr, ptr %45, align 8, !tbaa !9
  %809 = icmp ne ptr %808, null
  br i1 %809, label %810, label %813

810:                                              ; preds = %805
  %811 = load ptr, ptr %45, align 8, !tbaa !9
  %812 = call i64 @strlen(ptr noundef %811) #10
  br label %814

813:                                              ; preds = %805
  br label %814

814:                                              ; preds = %813, %810
  %815 = phi i64 [ %812, %810 ], [ 0, %813 ]
  %816 = load ptr, ptr %46, align 8, !tbaa !9
  %817 = load ptr, ptr %46, align 8, !tbaa !9
  %818 = icmp ne ptr %817, null
  br i1 %818, label %819, label %822

819:                                              ; preds = %814
  %820 = load ptr, ptr %46, align 8, !tbaa !9
  %821 = call i64 @strlen(ptr noundef %820) #10
  br label %823

822:                                              ; preds = %814
  br label %823

823:                                              ; preds = %822, %819
  %824 = phi i64 [ %821, %819 ], [ 0, %822 ]
  %825 = call i32 @x509_exts_add_crl_distribution_points(ptr noundef %806, ptr noundef %33, i64 noundef 4096, i32 noundef -1, ptr noundef %807, i64 noundef %815, ptr noundef %816, i64 noundef %824)
  %826 = icmp ne i32 %825, 1
  br i1 %826, label %827, label %831

827:                                              ; preds = %823
  %828 = load ptr, ptr @stderr, align 8, !tbaa !9
  %829 = load ptr, ptr %7, align 8, !tbaa !9
  %830 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %828, ptr noundef @.str.64, ptr noundef %829) #9
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %50, align 4
  br label %960

831:                                              ; preds = %823
  br label %832

832:                                              ; preds = %831, %802
  %833 = load i32, ptr %47, align 4, !tbaa !5
  %834 = icmp sge i32 %833, 0
  br i1 %834, label %835, label %845

835:                                              ; preds = %832
  %836 = getelementptr inbounds [4096 x i8], ptr %32, i64 0, i64 0
  %837 = load i32, ptr %47, align 4, !tbaa !5
  %838 = call i32 @x509_exts_add_inhibit_any_policy(ptr noundef %836, ptr noundef %33, i64 noundef 4096, i32 noundef 1, i32 noundef %837)
  %839 = icmp ne i32 %838, 1
  br i1 %839, label %840, label %844

840:                                              ; preds = %835
  %841 = load ptr, ptr @stderr, align 8, !tbaa !9
  %842 = load ptr, ptr %7, align 8, !tbaa !9
  %843 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %841, ptr noundef @.str.65, ptr noundef %842) #9
  br label %938

844:                                              ; preds = %835
  br label %845

845:                                              ; preds = %844, %832
  %846 = load ptr, ptr %48, align 8, !tbaa !9
  %847 = icmp ne ptr %846, null
  br i1 %847, label %851, label %848

848:                                              ; preds = %845
  %849 = load ptr, ptr %49, align 8, !tbaa !9
  %850 = icmp ne ptr %849, null
  br i1 %850, label %851, label %878

851:                                              ; preds = %848, %845
  %852 = getelementptr inbounds [4096 x i8], ptr %32, i64 0, i64 0
  %853 = load ptr, ptr %48, align 8, !tbaa !9
  %854 = load ptr, ptr %48, align 8, !tbaa !9
  %855 = icmp ne ptr %854, null
  br i1 %855, label %856, label %859

856:                                              ; preds = %851
  %857 = load ptr, ptr %48, align 8, !tbaa !9
  %858 = call i64 @strlen(ptr noundef %857) #10
  br label %860

859:                                              ; preds = %851
  br label %860

860:                                              ; preds = %859, %856
  %861 = phi i64 [ %858, %856 ], [ 0, %859 ]
  %862 = load ptr, ptr %49, align 8, !tbaa !9
  %863 = load ptr, ptr %49, align 8, !tbaa !9
  %864 = icmp ne ptr %863, null
  br i1 %864, label %865, label %868

865:                                              ; preds = %860
  %866 = load ptr, ptr %49, align 8, !tbaa !9
  %867 = call i64 @strlen(ptr noundef %866) #10
  br label %869

868:                                              ; preds = %860
  br label %869

869:                                              ; preds = %868, %865
  %870 = phi i64 [ %867, %865 ], [ 0, %868 ]
  %871 = call i32 @x509_exts_add_authority_info_access(ptr noundef %852, ptr noundef %33, i64 noundef 4096, i32 noundef 0, ptr noundef %853, i64 noundef %861, ptr noundef %862, i64 noundef %870)
  %872 = icmp ne i32 %871, 1
  br i1 %872, label %873, label %877

873:                                              ; preds = %869
  %874 = load ptr, ptr @stderr, align 8, !tbaa !9
  %875 = load ptr, ptr %7, align 8, !tbaa !9
  %876 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %874, ptr noundef @.str.66, ptr noundef %875) #9
  br label %938

877:                                              ; preds = %869
  br label %878

878:                                              ; preds = %877, %848
  %879 = getelementptr inbounds [20 x i8], ptr %9, i64 0, i64 0
  %880 = load i32, ptr %10, align 4, !tbaa !5
  %881 = sext i32 %880 to i64
  %882 = getelementptr inbounds [256 x i8], ptr %11, i64 0, i64 0
  %883 = load i64, ptr %12, align 8, !tbaa !11
  %884 = load i64, ptr %20, align 8, !tbaa !11
  %885 = load i64, ptr %21, align 8, !tbaa !11
  %886 = getelementptr inbounds [256 x i8], ptr %11, i64 0, i64 0
  %887 = load i64, ptr %12, align 8, !tbaa !11
  %888 = getelementptr inbounds [4096 x i8], ptr %32, i64 0, i64 0
  %889 = load i64, ptr %33, align 8, !tbaa !11
  %890 = getelementptr inbounds [8192 x i8], ptr %25, i64 0, i64 0
  %891 = load i64, ptr %26, align 8, !tbaa !11
  %892 = call i32 @x509_cert_sign_to_der(i32 noundef 2, ptr noundef %879, i64 noundef %881, i32 noundef 16, ptr noundef %882, i64 noundef %883, i64 noundef %884, i64 noundef %885, ptr noundef %886, i64 noundef %887, ptr noundef %24, ptr noundef null, i64 noundef 0, ptr noundef null, i64 noundef 0, ptr noundef %888, i64 noundef %889, ptr noundef %24, ptr noundef %890, i64 noundef %891, ptr noundef null, ptr noundef %28)
  %893 = icmp ne i32 %892, 1
  br i1 %893, label %894, label %898

894:                                              ; preds = %878
  %895 = load ptr, ptr @stderr, align 8, !tbaa !9
  %896 = load ptr, ptr %7, align 8, !tbaa !9
  %897 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %895, ptr noundef @.str.67, ptr noundef %896) #9
  br label %938

898:                                              ; preds = %878
  %899 = load i64, ptr %28, align 8, !tbaa !11
  %900 = call noalias ptr @malloc(i64 noundef %899) #12
  store ptr %900, ptr %27, align 8, !tbaa !9
  %901 = icmp ne ptr %900, null
  br i1 %901, label %906, label %902

902:                                              ; preds = %898
  %903 = load ptr, ptr @stderr, align 8, !tbaa !9
  %904 = load ptr, ptr %7, align 8, !tbaa !9
  %905 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %903, ptr noundef @.str.68, ptr noundef %904) #9
  br label %938

906:                                              ; preds = %898
  %907 = load ptr, ptr %27, align 8, !tbaa !9
  store ptr %907, ptr %31, align 8, !tbaa !9
  store i64 0, ptr %28, align 8, !tbaa !11
  %908 = getelementptr inbounds [20 x i8], ptr %9, i64 0, i64 0
  %909 = load i32, ptr %10, align 4, !tbaa !5
  %910 = sext i32 %909 to i64
  %911 = getelementptr inbounds [256 x i8], ptr %11, i64 0, i64 0
  %912 = load i64, ptr %12, align 8, !tbaa !11
  %913 = load i64, ptr %20, align 8, !tbaa !11
  %914 = load i64, ptr %21, align 8, !tbaa !11
  %915 = getelementptr inbounds [256 x i8], ptr %11, i64 0, i64 0
  %916 = load i64, ptr %12, align 8, !tbaa !11
  %917 = getelementptr inbounds [4096 x i8], ptr %32, i64 0, i64 0
  %918 = load i64, ptr %33, align 8, !tbaa !11
  %919 = getelementptr inbounds [8192 x i8], ptr %25, i64 0, i64 0
  %920 = load i64, ptr %26, align 8, !tbaa !11
  %921 = call i32 @x509_cert_sign_to_der(i32 noundef 2, ptr noundef %908, i64 noundef %910, i32 noundef 16, ptr noundef %911, i64 noundef %912, i64 noundef %913, i64 noundef %914, ptr noundef %915, i64 noundef %916, ptr noundef %24, ptr noundef null, i64 noundef 0, ptr noundef null, i64 noundef 0, ptr noundef %917, i64 noundef %918, ptr noundef %24, ptr noundef %919, i64 noundef %920, ptr noundef %31, ptr noundef %28)
  %922 = icmp ne i32 %921, 1
  br i1 %922, label %923, label %927

923:                                              ; preds = %906
  %924 = load ptr, ptr @stderr, align 8, !tbaa !9
  %925 = load ptr, ptr %7, align 8, !tbaa !9
  %926 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %924, ptr noundef @.str.67, ptr noundef %925) #9
  br label %938

927:                                              ; preds = %906
  %928 = load ptr, ptr %27, align 8, !tbaa !9
  %929 = load i64, ptr %28, align 8, !tbaa !11
  %930 = load ptr, ptr %29, align 8, !tbaa !9
  %931 = call i32 @x509_cert_to_pem(ptr noundef %928, i64 noundef %929, ptr noundef %930)
  %932 = icmp ne i32 %931, 1
  br i1 %932, label %933, label %937

933:                                              ; preds = %927
  %934 = load ptr, ptr @stderr, align 8, !tbaa !9
  %935 = load ptr, ptr %7, align 8, !tbaa !9
  %936 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %934, ptr noundef @.str.69, ptr noundef %935) #9
  br label %938

937:                                              ; preds = %927
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %938

938:                                              ; preds = %937, %933, %923, %902, %894, %873, %840, %794, %780, %763, %749, %735, %722, %710, %699, %689, %675, %661, %649, %639, %629, %619, %579, %573, %564, %514, %459, %451, %429, %401, %376, %350, %316, %305, %278, %238, %216, %166, %102, %75
  call void @gmssl_secure_clear(ptr noundef %24, i64 noundef 128)
  %939 = load ptr, ptr %27, align 8, !tbaa !9
  %940 = icmp ne ptr %939, null
  br i1 %940, label %941, label %943

941:                                              ; preds = %938
  %942 = load ptr, ptr %27, align 8, !tbaa !9
  call void @free(ptr noundef %942) #9
  br label %943

943:                                              ; preds = %941, %938
  %944 = load ptr, ptr %22, align 8, !tbaa !9
  %945 = icmp ne ptr %944, null
  br i1 %945, label %946, label %949

946:                                              ; preds = %943
  %947 = load ptr, ptr %22, align 8, !tbaa !9
  %948 = call i32 @fclose(ptr noundef %947)
  br label %949

949:                                              ; preds = %946, %943
  %950 = load ptr, ptr %30, align 8, !tbaa !9
  %951 = icmp ne ptr %950, null
  br i1 %951, label %952, label %958

952:                                              ; preds = %949
  %953 = load ptr, ptr %29, align 8, !tbaa !9
  %954 = icmp ne ptr %953, null
  br i1 %954, label %955, label %958

955:                                              ; preds = %952
  %956 = load ptr, ptr %29, align 8, !tbaa !9
  %957 = call i32 @fclose(ptr noundef %956)
  br label %958

958:                                              ; preds = %955, %952, %949
  %959 = load i32, ptr %6, align 4, !tbaa !5
  store i32 %959, ptr %3, align 4
  store i32 1, ptr %50, align 4
  br label %960

960:                                              ; preds = %958, %827, %61
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 48, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 512, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 4096, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 8192, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 256, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 20, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #9
  %961 = load i32, ptr %3, align 4
  ret i32 %961
}

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #2

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

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcmp(ptr noundef, ptr noundef) #4

declare i32 @printf(ptr noundef, ...) #5

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr noundef nonnull) #6

; Function Attrs: nounwind willreturn memory(read)
declare i64 @strlen(ptr noundef) #4

declare noalias ptr @fopen(ptr noundef, ptr noundef) #5

; Function Attrs: nounwind
declare ptr @strerror(i32 noundef) #3

; Function Attrs: nounwind willreturn memory(none)
declare ptr @__errno_location() #7

; Function Attrs: nounwind
declare ptr @strncpy(ptr noundef, ptr noundef, i64 noundef) #3

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

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

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

declare i32 @x509_key_purpose_from_name(ptr noundef) #5

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

; Function Attrs: nounwind
declare ptr @strcpy(ptr noundef, ptr noundef) #3

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

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

; Function Attrs: nounwind
declare i64 @time(ptr noundef) #3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

declare void @gmssl_secure_clear(ptr noundef, i64 noundef) #5

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

declare i32 @fclose(ptr noundef) #5

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

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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind willreturn memory(read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint nounwind willreturn memory(read) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind willreturn memory(none) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { nounwind }
attributes #10 = { nounwind willreturn memory(read) }
attributes #11 = { nounwind willreturn memory(none) }
attributes #12 = { nounwind allocsize(0) }

!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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}


; 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.SM2_KEY = type { %struct.SM2_Z256_POINT, [4 x i64] }
%struct.SM2_Z256_POINT = type { [4 x i64], [4 x i64], [4 x i64] }

@stdout = external local_unnamed_addr global ptr, align 8
@stderr = external local_unnamed_addr global ptr, align 8
@.str = external hidden unnamed_addr constant [20 x i8], align 1
@options = external hidden local_unnamed_addr global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [4 x i8], align 1
@usage = external hidden local_unnamed_addr global ptr, align 8
@.str.4 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [31 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local range(i32 -1, 2) i32 @certgen_main(i32 noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 {
  %3 = alloca [20 x i8], align 16
  %4 = alloca [256 x i8], align 16
  %5 = alloca i64, align 8
  %6 = alloca i64, align 8
  %7 = alloca i64, align 8
  %8 = alloca %struct.SM2_KEY, align 8
  %9 = alloca [8192 x i8], align 16
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca ptr, align 8
  %13 = alloca [4096 x i8], align 16
  %14 = alloca i64, align 8
  %15 = alloca i32, align 4
  %16 = alloca [2048 x i8], align 16
  %17 = alloca i64, align 8
  %18 = alloca [512 x i8], align 16
  %19 = alloca i64, align 8
  %20 = alloca [12 x i32], align 16
  %21 = load ptr, ptr %1, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 20, ptr nonnull %3) #12
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %4) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #12
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %8) #12
  call void @llvm.lifetime.start.p0(i64 8192, ptr nonnull %9) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(8192) %9, i8 0, i64 8192, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #12
  store i64 0, ptr %10, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #12
  store i64 0, ptr %11, align 8, !tbaa !9
  %22 = load ptr, ptr @stdout, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #12
  call void @llvm.lifetime.start.p0(i64 4096, ptr nonnull %13) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #12
  store i64 0, ptr %14, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #12
  store i32 0, ptr %15, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %16) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #12
  store i64 0, ptr %17, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 512, ptr nonnull %18) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #12
  store i64 0, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %20) #12
  %23 = icmp slt i32 %0, 2
  br i1 %23, label %24, label %.preheader

24:                                               ; preds = %2
  %25 = load ptr, ptr @stderr, align 8, !tbaa !5
  %26 = load ptr, ptr @options, align 8, !tbaa !5
  %27 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %25, ptr noundef nonnull @.str, ptr noundef %21, ptr noundef %26) #13
  br label %490

.preheader:                                       ; preds = %2, %315
  %.0853 = phi ptr [ %.1, %315 ], [ null, %2 ]
  %.0216852 = phi ptr [ %.1217, %315 ], [ null, %2 ]
  %.0218851 = phi i32 [ %.1219, %315 ], [ -1, %2 ]
  %.0220850 = phi ptr [ %.1221, %315 ], [ null, %2 ]
  %.0222849 = phi ptr [ %.1223, %315 ], [ null, %2 ]
  %.0224848 = phi i64 [ %.1225, %315 ], [ 0, %2 ]
  %.0226847 = phi i32 [ %.1227, %315 ], [ -1, %2 ]
  %.0228846 = phi i32 [ %.1229, %315 ], [ -1, %2 ]
  %.0230845 = phi i32 [ %.1231, %315 ], [ 0, %2 ]
  %.0232844 = phi i32 [ %.1233, %315 ], [ 0, %2 ]
  %.0234843 = phi ptr [ %.1235, %315 ], [ null, %2 ]
  %.0236842 = phi ptr [ %.1237, %315 ], [ %22, %2 ]
  %.0240841 = phi ptr [ %.1241, %315 ], [ null, %2 ]
  %.0242840 = phi ptr [ %.1243, %315 ], [ null, %2 ]
  %.0245839 = phi i32 [ %.1246, %315 ], [ 0, %2 ]
  %.0247838 = phi ptr [ %.1248, %315 ], [ null, %2 ]
  %.0249837 = phi ptr [ %.1250, %315 ], [ null, %2 ]
  %.0251836 = phi ptr [ %.1252, %315 ], [ null, %2 ]
  %.0253835 = phi ptr [ %.1254, %315 ], [ null, %2 ]
  %.0255834 = phi ptr [ %.1256, %315 ], [ null, %2 ]
  %.0257833 = phi ptr [ %.1258, %315 ], [ null, %2 ]
  %.0259832 = phi i32 [ %.1260, %315 ], [ 12, %2 ]
  %.pn831 = phi ptr [ %.1264, %315 ], [ %1, %2 ]
  %.0265.in830 = phi i32 [ %.1266, %315 ], [ %0, %2 ]
  %.0263854 = getelementptr inbounds i8, ptr %.pn831, i64 8
  %.0265855 = add nsw i32 %.0265.in830, -1
  %28 = load ptr, ptr %.0263854, align 8, !tbaa !5
  %29 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.1) #14
  %.not333 = icmp eq i32 %29, 0
  br i1 %.not333, label %30, label %35

30:                                               ; preds = %.preheader
  %31 = load ptr, ptr @options, align 8, !tbaa !5
  %32 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, ptr noundef %21, ptr noundef %31)
  %33 = load ptr, ptr @usage, align 8, !tbaa !5
  %34 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, ptr noundef %33)
  br label %482

35:                                               ; preds = %.preheader
  %36 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.4) #14
  %.not334 = icmp eq i32 %36, 0
  br i1 %.not334, label %37, label %48

37:                                               ; preds = %35
  %38 = icmp eq i32 %.0265.in830, 2
  br i1 %38, label %312, label %39

39:                                               ; preds = %37
  %40 = add nsw i32 %.0265.in830, -2
  %41 = getelementptr inbounds i8, ptr %.pn831, i64 16
  %42 = load ptr, ptr %41, align 8, !tbaa !5
  %43 = call i32 @atoi(ptr nocapture noundef %42) #14
  %44 = add i32 %43, -21
  %or.cond = icmp ult i32 %44, -20
  br i1 %or.cond, label %45, label %315

45:                                               ; preds = %39
  %46 = load ptr, ptr @stderr, align 8, !tbaa !5
  %47 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %46, ptr noundef nonnull @.str.5, ptr noundef %21, i64 noundef 20) #13
  br label %482

48:                                               ; preds = %35
  %49 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.6) #14
  %.not335 = icmp eq i32 %49, 0
  br i1 %.not335, label %50, label %56

50:                                               ; preds = %48
  %51 = icmp eq i32 %.0265.in830, 2
  br i1 %51, label %312, label %52

52:                                               ; preds = %50
  %53 = add nsw i32 %.0265.in830, -2
  %54 = getelementptr inbounds i8, ptr %.pn831, i64 16
  %55 = load ptr, ptr %54, align 8, !tbaa !5
  br label %315

56:                                               ; preds = %48
  %57 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.7) #14
  %.not336 = icmp eq i32 %57, 0
  br i1 %.not336, label %58, label %64

58:                                               ; preds = %56
  %59 = icmp eq i32 %.0265.in830, 2
  br i1 %59, label %312, label %60

60:                                               ; preds = %58
  %61 = add nsw i32 %.0265.in830, -2
  %62 = getelementptr inbounds i8, ptr %.pn831, i64 16
  %63 = load ptr, ptr %62, align 8, !tbaa !5
  br label %315

64:                                               ; preds = %56
  %65 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.8) #14
  %.not337 = icmp eq i32 %65, 0
  br i1 %.not337, label %66, label %72

66:                                               ; preds = %64
  %67 = icmp eq i32 %.0265.in830, 2
  br i1 %67, label %312, label %68

68:                                               ; preds = %66
  %69 = add nsw i32 %.0265.in830, -2
  %70 = getelementptr inbounds i8, ptr %.pn831, i64 16
  %71 = load ptr, ptr %70, align 8, !tbaa !5
  br label %315

72:                                               ; preds = %64
  %73 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.9) #14
  %.not338 = icmp eq i32 %73, 0
  br i1 %.not338, label %74, label %84

74:                                               ; preds = %72
  %75 = icmp eq i32 %.0265.in830, 2
  br i1 %75, label %312, label %76

76:                                               ; preds = %74
  %77 = add nsw i32 %.0265.in830, -2
  %78 = getelementptr inbounds i8, ptr %.pn831, i64 16
  %79 = load ptr, ptr %78, align 8, !tbaa !5
  %80 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %79) #14
  %.not339 = icmp eq i64 %80, 2
  br i1 %.not339, label %315, label %81

81:                                               ; preds = %76
  %82 = load ptr, ptr @stderr, align 8, !tbaa !5
  %83 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %82, ptr noundef nonnull @.str.10, ptr noundef %21) #13
  br label %482

84:                                               ; preds = %72
  %85 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.11) #14
  %.not340 = icmp eq i32 %85, 0
  br i1 %.not340, label %86, label %92

86:                                               ; preds = %84
  %87 = icmp eq i32 %.0265.in830, 2
  br i1 %87, label %312, label %88

88:                                               ; preds = %86
  %89 = add nsw i32 %.0265.in830, -2
  %90 = getelementptr inbounds i8, ptr %.pn831, i64 16
  %91 = load ptr, ptr %90, align 8, !tbaa !5
  br label %315

92:                                               ; preds = %84
  %93 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.12) #14
  %.not341 = icmp eq i32 %93, 0
  br i1 %.not341, label %94, label %100

94:                                               ; preds = %92
  %95 = icmp eq i32 %.0265.in830, 2
  br i1 %95, label %312, label %96

96:                                               ; preds = %94
  %97 = add nsw i32 %.0265.in830, -2
  %98 = getelementptr inbounds i8, ptr %.pn831, i64 16
  %99 = load ptr, ptr %98, align 8, !tbaa !5
  br label %315

100:                                              ; preds = %92
  %101 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.13) #14
  %.not342 = icmp eq i32 %101, 0
  br i1 %.not342, label %102, label %113

102:                                              ; preds = %100
  %103 = icmp eq i32 %.0265.in830, 2
  br i1 %103, label %312, label %104

104:                                              ; preds = %102
  %105 = add nsw i32 %.0265.in830, -2
  %106 = getelementptr inbounds i8, ptr %.pn831, i64 16
  %107 = load ptr, ptr %106, align 8, !tbaa !5
  %108 = call i32 @atoi(ptr nocapture noundef %107) #14
  %109 = icmp slt i32 %108, 1
  br i1 %109, label %110, label %315

110:                                              ; preds = %104
  %111 = load ptr, ptr @stderr, align 8, !tbaa !5
  %112 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %111, ptr noundef nonnull @.str.14, ptr noundef %21) #13
  br label %482

113:                                              ; preds = %100
  %114 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.15) #14
  %.not343 = icmp eq i32 %114, 0
  br i1 %.not343, label %115, label %128

115:                                              ; preds = %113
  %116 = icmp eq i32 %.0265.in830, 2
  br i1 %116, label %312, label %117

117:                                              ; preds = %115
  %118 = add nsw i32 %.0265.in830, -2
  %119 = getelementptr inbounds i8, ptr %.pn831, i64 16
  %120 = load ptr, ptr %119, align 8, !tbaa !5
  %121 = call noalias ptr @fopen(ptr noundef %120, ptr noundef nonnull @.str.16)
  %.not344 = icmp eq ptr %121, null
  br i1 %.not344, label %122, label %315

122:                                              ; preds = %117
  %123 = load ptr, ptr @stderr, align 8, !tbaa !5
  %124 = tail call ptr @__errno_location() #15
  %125 = load i32, ptr %124, align 4, !tbaa !11
  %126 = call ptr @strerror(i32 noundef %125) #12
  %127 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %123, ptr noundef nonnull @.str.17, ptr noundef %21, ptr noundef %120, ptr noundef %126) #13
  br label %.thread400

128:                                              ; preds = %113
  %129 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.18) #14
  %.not345 = icmp eq i32 %129, 0
  br i1 %.not345, label %130, label %136

130:                                              ; preds = %128
  %131 = icmp eq i32 %.0265.in830, 2
  br i1 %131, label %312, label %132

132:                                              ; preds = %130
  %133 = add nsw i32 %.0265.in830, -2
  %134 = getelementptr inbounds i8, ptr %.pn831, i64 16
  %135 = load ptr, ptr %134, align 8, !tbaa !5
  br label %315

136:                                              ; preds = %128
  %137 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.19) #14
  %.not346 = icmp eq i32 %137, 0
  br i1 %.not346, label %138, label %152

138:                                              ; preds = %136
  %139 = add nsw i32 %.0265.in830, -2
  %140 = icmp eq i32 %.0265.in830, 2
  br i1 %140, label %312, label %141

141:                                              ; preds = %138
  %142 = getelementptr inbounds i8, ptr %.pn831, i64 16
  %143 = load ptr, ptr %142, align 8, !tbaa !5
  %144 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %143) #14
  %145 = icmp ugt i64 %144, 8191
  br i1 %145, label %146, label %149

146:                                              ; preds = %141
  %147 = load ptr, ptr @stderr, align 8, !tbaa !5
  %148 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %147, ptr noundef nonnull @.str.20, ptr noundef %21) #13
  br label %482

149:                                              ; preds = %141
  %150 = call ptr @strncpy(ptr noundef nonnull dereferenceable(1) %9, ptr noundef nonnull dereferenceable(1) %143, i64 noundef 8192) #12
  %151 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %143) #14
  store i64 %151, ptr %10, align 8, !tbaa !9
  br label %315

152:                                              ; preds = %136
  %153 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.21) #14
  %.not347 = icmp eq i32 %153, 0
  br i1 %.not347, label %154, label %170

154:                                              ; preds = %152
  %155 = add nsw i32 %.0265.in830, -2
  %156 = icmp eq i32 %.0265.in830, 2
  br i1 %156, label %312, label %157

157:                                              ; preds = %154
  %158 = getelementptr inbounds i8, ptr %.pn831, i64 16
  %159 = load ptr, ptr %158, align 8, !tbaa !5
  %160 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %159) #14
  %161 = icmp ugt i64 %160, 16382
  br i1 %161, label %162, label %165

162:                                              ; preds = %157
  %163 = load ptr, ptr @stderr, align 8, !tbaa !5
  %164 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %163, ptr noundef nonnull @.str.22, ptr noundef %21) #13
  br label %482

165:                                              ; preds = %157
  %166 = call i32 @hex_to_bytes(ptr noundef %159, i64 noundef %160, ptr noundef nonnull %9, ptr noundef nonnull %10) #12
  %.not348 = icmp eq i32 %166, 1
  br i1 %.not348, label %315, label %167

167:                                              ; preds = %165
  %168 = load ptr, ptr @stderr, align 8, !tbaa !5
  %169 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %168, ptr noundef nonnull @.str.23, ptr noundef %21) #13
  br label %482

170:                                              ; preds = %152
  %171 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.24) #14
  %.not349 = icmp eq i32 %171, 0
  br i1 %.not349, label %315, label %172

172:                                              ; preds = %170
  %173 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.25) #14
  %.not350 = icmp eq i32 %173, 0
  br i1 %.not350, label %315, label %174

174:                                              ; preds = %172
  %175 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.26) #14
  %.not351 = icmp eq i32 %175, 0
  br i1 %.not351, label %176, label %186

176:                                              ; preds = %174
  %177 = icmp eq i32 %.0265.in830, 2
  br i1 %177, label %312, label %178

178:                                              ; preds = %176
  %179 = add nsw i32 %.0265.in830, -2
  %180 = getelementptr inbounds i8, ptr %.pn831, i64 16
  %181 = load ptr, ptr %180, align 8, !tbaa !5
  %182 = call i32 @ext_key_usage_set(ptr noundef nonnull %15, ptr noundef %181)
  %.not352 = icmp eq i32 %182, 1
  br i1 %.not352, label %315, label %183

183:                                              ; preds = %178
  %184 = load ptr, ptr @stderr, align 8, !tbaa !5
  %185 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %184, ptr noundef nonnull @.str.27, ptr noundef %21, ptr noundef %181) #13
  br label %482

186:                                              ; preds = %174
  %187 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.28) #14
  %.not353 = icmp eq i32 %187, 0
  br i1 %.not353, label %188, label %199

188:                                              ; preds = %186
  %189 = icmp eq i32 %.0265.in830, 2
  br i1 %189, label %312, label %190

190:                                              ; preds = %188
  %191 = add nsw i32 %.0265.in830, -2
  %192 = getelementptr inbounds i8, ptr %.pn831, i64 16
  %193 = load ptr, ptr %192, align 8, !tbaa !5
  %194 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %193) #14
  %195 = call i32 @x509_general_names_add_general_name(ptr noundef nonnull %16, ptr noundef nonnull %17, i64 noundef 2048, i32 noundef 2, ptr noundef %193, i64 noundef %194) #12
  %.not354 = icmp eq i32 %195, 1
  br i1 %.not354, label %315, label %196

196:                                              ; preds = %190
  %197 = load ptr, ptr @stderr, align 8, !tbaa !5
  %198 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %197, ptr noundef nonnull @.str.29, ptr noundef %21) #13
  br label %482

199:                                              ; preds = %186
  %200 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.30) #14
  %.not355 = icmp eq i32 %200, 0
  br i1 %.not355, label %201, label %212

201:                                              ; preds = %199
  %202 = icmp eq i32 %.0265.in830, 2
  br i1 %202, label %312, label %203

203:                                              ; preds = %201
  %204 = add nsw i32 %.0265.in830, -2
  %205 = getelementptr inbounds i8, ptr %.pn831, i64 16
  %206 = load ptr, ptr %205, align 8, !tbaa !5
  %207 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %206) #14
  %208 = call i32 @x509_general_names_add_general_name(ptr noundef nonnull %18, ptr noundef nonnull %19, i64 noundef 512, i32 noundef 2, ptr noundef %206, i64 noundef %207) #12
  %.not356 = icmp eq i32 %208, 1
  br i1 %.not356, label %315, label %209

209:                                              ; preds = %203
  %210 = load ptr, ptr @stderr, align 8, !tbaa !5
  %211 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %210, ptr noundef nonnull @.str.31, ptr noundef %21) #13
  br label %482

212:                                              ; preds = %199
  %213 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.32) #14
  %.not357 = icmp eq i32 %213, 0
  br i1 %.not357, label %315, label %214

214:                                              ; preds = %212
  %215 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.33) #14
  %.not358 = icmp eq i32 %215, 0
  br i1 %.not358, label %216, label %227

216:                                              ; preds = %214
  %217 = icmp eq i32 %.0265.in830, 2
  br i1 %217, label %312, label %218

218:                                              ; preds = %216
  %219 = add nsw i32 %.0265.in830, -2
  %220 = getelementptr inbounds i8, ptr %.pn831, i64 16
  %221 = load ptr, ptr %220, align 8, !tbaa !5
  %222 = call i32 @atoi(ptr nocapture noundef %221) #14
  %223 = icmp slt i32 %222, 0
  br i1 %223, label %224, label %315

224:                                              ; preds = %218
  %225 = load ptr, ptr @stderr, align 8, !tbaa !5
  %226 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %225, ptr noundef nonnull @.str.34, ptr noundef %21) #13
  br label %482

227:                                              ; preds = %214
  %228 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.35) #14
  %.not359 = icmp eq i32 %228, 0
  br i1 %.not359, label %229, label %249

229:                                              ; preds = %227
  %230 = add nsw i32 %.0265.in830, -2
  %231 = icmp eq i32 %.0265.in830, 2
  br i1 %231, label %312, label %232

232:                                              ; preds = %229
  %233 = getelementptr inbounds i8, ptr %.pn831, i64 16
  %234 = load ptr, ptr %233, align 8, !tbaa !5
  %235 = call i32 @x509_key_purpose_from_name(ptr noundef %234) #12
  %236 = icmp slt i32 %235, 1
  br i1 %236, label %237, label %240

237:                                              ; preds = %232
  %238 = load ptr, ptr @stderr, align 8, !tbaa !5
  %239 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %238, ptr noundef nonnull @.str.36, ptr noundef %21, ptr noundef %234) #13
  br label %482

240:                                              ; preds = %232
  %241 = icmp ugt i64 %.0224848, 11
  br i1 %241, label %242, label %245

242:                                              ; preds = %240
  %243 = load ptr, ptr @stderr, align 8, !tbaa !5
  %244 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %243, ptr noundef nonnull @.str.37, ptr noundef %21) #13
  br label %482

245:                                              ; preds = %240
  %246 = call i32 @x509_key_purpose_from_name(ptr noundef %234) #12
  %247 = add nuw nsw i64 %.0224848, 1
  %248 = getelementptr inbounds [12 x i32], ptr %20, i64 0, i64 %.0224848
  store i32 %246, ptr %248, align 4, !tbaa !11
  br label %315

249:                                              ; preds = %227
  %250 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.38) #14
  %.not360 = icmp eq i32 %250, 0
  br i1 %.not360, label %251, label %257

251:                                              ; preds = %249
  %252 = icmp eq i32 %.0265.in830, 2
  br i1 %252, label %312, label %253

253:                                              ; preds = %251
  %254 = add nsw i32 %.0265.in830, -2
  %255 = getelementptr inbounds i8, ptr %.pn831, i64 16
  %256 = load ptr, ptr %255, align 8, !tbaa !5
  br label %315

257:                                              ; preds = %249
  %258 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.39) #14
  %.not361 = icmp eq i32 %258, 0
  br i1 %.not361, label %259, label %265

259:                                              ; preds = %257
  %260 = icmp eq i32 %.0265.in830, 2
  br i1 %260, label %312, label %261

261:                                              ; preds = %259
  %262 = add nsw i32 %.0265.in830, -2
  %263 = getelementptr inbounds i8, ptr %.pn831, i64 16
  %264 = load ptr, ptr %263, align 8, !tbaa !5
  br label %315

265:                                              ; preds = %257
  %266 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.40) #14
  %.not362 = icmp eq i32 %266, 0
  br i1 %.not362, label %267, label %278

267:                                              ; preds = %265
  %268 = icmp eq i32 %.0265.in830, 2
  br i1 %268, label %312, label %269

269:                                              ; preds = %267
  %270 = add nsw i32 %.0265.in830, -2
  %271 = getelementptr inbounds i8, ptr %.pn831, i64 16
  %272 = load ptr, ptr %271, align 8, !tbaa !5
  %273 = call i32 @atoi(ptr nocapture noundef %272) #14
  %274 = icmp slt i32 %273, 0
  br i1 %274, label %275, label %315

275:                                              ; preds = %269
  %276 = load ptr, ptr @stderr, align 8, !tbaa !5
  %277 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %276, ptr noundef nonnull @.str.41, ptr noundef %21) #13
  br label %482

278:                                              ; preds = %265
  %279 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.42) #14
  %.not363 = icmp eq i32 %279, 0
  br i1 %.not363, label %280, label %286

280:                                              ; preds = %278
  %281 = icmp eq i32 %.0265.in830, 2
  br i1 %281, label %312, label %282

282:                                              ; preds = %280
  %283 = add nsw i32 %.0265.in830, -2
  %284 = getelementptr inbounds i8, ptr %.pn831, i64 16
  %285 = load ptr, ptr %284, align 8, !tbaa !5
  br label %315

286:                                              ; preds = %278
  %287 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.43) #14
  %.not364 = icmp eq i32 %287, 0
  br i1 %.not364, label %288, label %294

288:                                              ; preds = %286
  %289 = icmp eq i32 %.0265.in830, 2
  br i1 %289, label %312, label %290

290:                                              ; preds = %288
  %291 = add nsw i32 %.0265.in830, -2
  %292 = getelementptr inbounds i8, ptr %.pn831, i64 16
  %293 = load ptr, ptr %292, align 8, !tbaa !5
  br label %315

294:                                              ; preds = %286
  %295 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %28, ptr noundef nonnull dereferenceable(1) @.str.44) #14
  %.not365 = icmp eq i32 %295, 0
  br i1 %.not365, label %296, label %309

296:                                              ; preds = %294
  %297 = icmp eq i32 %.0265.in830, 2
  br i1 %297, label %312, label %298

298:                                              ; preds = %296
  %299 = add nsw i32 %.0265.in830, -2
  %300 = getelementptr inbounds i8, ptr %.pn831, i64 16
  %301 = load ptr, ptr %300, align 8, !tbaa !5
  %302 = call noalias ptr @fopen(ptr noundef %301, ptr noundef nonnull @.str.45)
  %.not366 = icmp eq ptr %302, null
  br i1 %.not366, label %303, label %315

303:                                              ; preds = %298
  %304 = load ptr, ptr @stderr, align 8, !tbaa !5
  %305 = tail call ptr @__errno_location() #15
  %306 = load i32, ptr %305, align 4, !tbaa !11
  %307 = call ptr @strerror(i32 noundef %306) #12
  %308 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %304, ptr noundef nonnull @.str.17, ptr noundef %21, ptr noundef %301, ptr noundef %307) #13
  br label %482

309:                                              ; preds = %294
  %310 = load ptr, ptr @stderr, align 8, !tbaa !5
  %311 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %310, ptr noundef nonnull @.str.46, ptr noundef %21, ptr noundef %28) #13
  br label %482

312:                                              ; preds = %296, %288, %280, %267, %259, %251, %229, %216, %201, %188, %176, %154, %138, %130, %115, %102, %94, %86, %74, %66, %58, %50, %37
  %313 = load ptr, ptr @stderr, align 8, !tbaa !5
  %314 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %313, ptr noundef nonnull @.str.47, ptr noundef %21, ptr noundef %28) #13
  br label %482

315:                                              ; preds = %212, %172, %170, %39, %60, %76, %96, %117, %149, %178, %203, %218, %253, %269, %290, %298, %282, %261, %245, %190, %165, %132, %104, %88, %68, %52
  %.1266 = phi i32 [ %299, %298 ], [ %291, %290 ], [ %283, %282 ], [ %270, %269 ], [ %262, %261 ], [ %254, %253 ], [ %230, %245 ], [ %219, %218 ], [ %204, %203 ], [ %191, %190 ], [ %179, %178 ], [ %155, %165 ], [ %139, %149 ], [ %133, %132 ], [ %118, %117 ], [ %105, %104 ], [ %97, %96 ], [ %89, %88 ], [ %77, %76 ], [ %69, %68 ], [ %61, %60 ], [ %53, %52 ], [ %40, %39 ], [ %.0265855, %170 ], [ %.0265855, %172 ], [ %.0265855, %212 ]
  %.1264 = phi ptr [ %300, %298 ], [ %292, %290 ], [ %284, %282 ], [ %271, %269 ], [ %263, %261 ], [ %255, %253 ], [ %233, %245 ], [ %220, %218 ], [ %205, %203 ], [ %192, %190 ], [ %180, %178 ], [ %158, %165 ], [ %142, %149 ], [ %134, %132 ], [ %119, %117 ], [ %106, %104 ], [ %98, %96 ], [ %90, %88 ], [ %78, %76 ], [ %70, %68 ], [ %62, %60 ], [ %54, %52 ], [ %41, %39 ], [ %.0263854, %170 ], [ %.0263854, %172 ], [ %.0263854, %212 ]
  %.1260 = phi i32 [ %.0259832, %298 ], [ %.0259832, %290 ], [ %.0259832, %282 ], [ %.0259832, %269 ], [ %.0259832, %261 ], [ %.0259832, %253 ], [ %.0259832, %245 ], [ %.0259832, %218 ], [ %.0259832, %203 ], [ %.0259832, %190 ], [ %.0259832, %178 ], [ %.0259832, %165 ], [ %.0259832, %149 ], [ %.0259832, %132 ], [ %.0259832, %117 ], [ %.0259832, %104 ], [ %.0259832, %96 ], [ %.0259832, %88 ], [ %.0259832, %76 ], [ %.0259832, %68 ], [ %.0259832, %60 ], [ %.0259832, %52 ], [ %43, %39 ], [ %.0259832, %170 ], [ %.0259832, %172 ], [ %.0259832, %212 ]
  %.1258 = phi ptr [ %.0257833, %298 ], [ %.0257833, %290 ], [ %.0257833, %282 ], [ %.0257833, %269 ], [ %.0257833, %261 ], [ %.0257833, %253 ], [ %.0257833, %245 ], [ %.0257833, %218 ], [ %.0257833, %203 ], [ %.0257833, %190 ], [ %.0257833, %178 ], [ %.0257833, %165 ], [ %.0257833, %149 ], [ %.0257833, %132 ], [ %.0257833, %117 ], [ %.0257833, %104 ], [ %.0257833, %96 ], [ %.0257833, %88 ], [ %79, %76 ], [ %.0257833, %68 ], [ %.0257833, %60 ], [ %.0257833, %52 ], [ %.0257833, %39 ], [ %.0257833, %170 ], [ %.0257833, %172 ], [ %.0257833, %212 ]
  %.1256 = phi ptr [ %.0255834, %298 ], [ %.0255834, %290 ], [ %.0255834, %282 ], [ %.0255834, %269 ], [ %.0255834, %261 ], [ %.0255834, %253 ], [ %.0255834, %245 ], [ %.0255834, %218 ], [ %.0255834, %203 ], [ %.0255834, %190 ], [ %.0255834, %178 ], [ %.0255834, %165 ], [ %.0255834, %149 ], [ %.0255834, %132 ], [ %.0255834, %117 ], [ %.0255834, %104 ], [ %.0255834, %96 ], [ %91, %88 ], [ %.0255834, %76 ], [ %.0255834, %68 ], [ %.0255834, %60 ], [ %.0255834, %52 ], [ %.0255834, %39 ], [ %.0255834, %170 ], [ %.0255834, %172 ], [ %.0255834, %212 ]
  %.1254 = phi ptr [ %.0253835, %298 ], [ %.0253835, %290 ], [ %.0253835, %282 ], [ %.0253835, %269 ], [ %.0253835, %261 ], [ %.0253835, %253 ], [ %.0253835, %245 ], [ %.0253835, %218 ], [ %.0253835, %203 ], [ %.0253835, %190 ], [ %.0253835, %178 ], [ %.0253835, %165 ], [ %.0253835, %149 ], [ %.0253835, %132 ], [ %.0253835, %117 ], [ %.0253835, %104 ], [ %99, %96 ], [ %.0253835, %88 ], [ %.0253835, %76 ], [ %.0253835, %68 ], [ %.0253835, %60 ], [ %.0253835, %52 ], [ %.0253835, %39 ], [ %.0253835, %170 ], [ %.0253835, %172 ], [ %.0253835, %212 ]
  %.1252 = phi ptr [ %.0251836, %298 ], [ %.0251836, %290 ], [ %.0251836, %282 ], [ %.0251836, %269 ], [ %.0251836, %261 ], [ %.0251836, %253 ], [ %.0251836, %245 ], [ %.0251836, %218 ], [ %.0251836, %203 ], [ %.0251836, %190 ], [ %.0251836, %178 ], [ %.0251836, %165 ], [ %.0251836, %149 ], [ %.0251836, %132 ], [ %.0251836, %117 ], [ %.0251836, %104 ], [ %.0251836, %96 ], [ %.0251836, %88 ], [ %.0251836, %76 ], [ %.0251836, %68 ], [ %63, %60 ], [ %.0251836, %52 ], [ %.0251836, %39 ], [ %.0251836, %170 ], [ %.0251836, %172 ], [ %.0251836, %212 ]
  %.1250 = phi ptr [ %.0249837, %298 ], [ %.0249837, %290 ], [ %.0249837, %282 ], [ %.0249837, %269 ], [ %.0249837, %261 ], [ %.0249837, %253 ], [ %.0249837, %245 ], [ %.0249837, %218 ], [ %.0249837, %203 ], [ %.0249837, %190 ], [ %.0249837, %178 ], [ %.0249837, %165 ], [ %.0249837, %149 ], [ %.0249837, %132 ], [ %.0249837, %117 ], [ %.0249837, %104 ], [ %.0249837, %96 ], [ %.0249837, %88 ], [ %.0249837, %76 ], [ %71, %68 ], [ %.0249837, %60 ], [ %.0249837, %52 ], [ %.0249837, %39 ], [ %.0249837, %170 ], [ %.0249837, %172 ], [ %.0249837, %212 ]
  %.1248 = phi ptr [ %.0247838, %298 ], [ %.0247838, %290 ], [ %.0247838, %282 ], [ %.0247838, %269 ], [ %.0247838, %261 ], [ %.0247838, %253 ], [ %.0247838, %245 ], [ %.0247838, %218 ], [ %.0247838, %203 ], [ %.0247838, %190 ], [ %.0247838, %178 ], [ %.0247838, %165 ], [ %.0247838, %149 ], [ %.0247838, %132 ], [ %.0247838, %117 ], [ %.0247838, %104 ], [ %.0247838, %96 ], [ %.0247838, %88 ], [ %.0247838, %76 ], [ %.0247838, %68 ], [ %.0247838, %60 ], [ %55, %52 ], [ %.0247838, %39 ], [ %.0247838, %170 ], [ %.0247838, %172 ], [ %.0247838, %212 ]
  %.1246 = phi i32 [ %.0245839, %298 ], [ %.0245839, %290 ], [ %.0245839, %282 ], [ %.0245839, %269 ], [ %.0245839, %261 ], [ %.0245839, %253 ], [ %.0245839, %245 ], [ %.0245839, %218 ], [ %.0245839, %203 ], [ %.0245839, %190 ], [ %.0245839, %178 ], [ %.0245839, %165 ], [ %.0245839, %149 ], [ %.0245839, %132 ], [ %.0245839, %117 ], [ %108, %104 ], [ %.0245839, %96 ], [ %.0245839, %88 ], [ %.0245839, %76 ], [ %.0245839, %68 ], [ %.0245839, %60 ], [ %.0245839, %52 ], [ %.0245839, %39 ], [ %.0245839, %170 ], [ %.0245839, %172 ], [ %.0245839, %212 ]
  %.1243 = phi ptr [ %.0242840, %298 ], [ %.0242840, %290 ], [ %.0242840, %282 ], [ %.0242840, %269 ], [ %.0242840, %261 ], [ %.0242840, %253 ], [ %.0242840, %245 ], [ %.0242840, %218 ], [ %.0242840, %203 ], [ %.0242840, %190 ], [ %.0242840, %178 ], [ %.0242840, %165 ], [ %.0242840, %149 ], [ %.0242840, %132 ], [ %121, %117 ], [ %.0242840, %104 ], [ %.0242840, %96 ], [ %.0242840, %88 ], [ %.0242840, %76 ], [ %.0242840, %68 ], [ %.0242840, %60 ], [ %.0242840, %52 ], [ %.0242840, %39 ], [ %.0242840, %170 ], [ %.0242840, %172 ], [ %.0242840, %212 ]
  %.1241 = phi ptr [ %.0240841, %298 ], [ %.0240841, %290 ], [ %.0240841, %282 ], [ %.0240841, %269 ], [ %.0240841, %261 ], [ %.0240841, %253 ], [ %.0240841, %245 ], [ %.0240841, %218 ], [ %.0240841, %203 ], [ %.0240841, %190 ], [ %.0240841, %178 ], [ %.0240841, %165 ], [ %.0240841, %149 ], [ %135, %132 ], [ %.0240841, %117 ], [ %.0240841, %104 ], [ %.0240841, %96 ], [ %.0240841, %88 ], [ %.0240841, %76 ], [ %.0240841, %68 ], [ %.0240841, %60 ], [ %.0240841, %52 ], [ %.0240841, %39 ], [ %.0240841, %170 ], [ %.0240841, %172 ], [ %.0240841, %212 ]
  %.1237 = phi ptr [ %302, %298 ], [ %.0236842, %290 ], [ %.0236842, %282 ], [ %.0236842, %269 ], [ %.0236842, %261 ], [ %.0236842, %253 ], [ %.0236842, %245 ], [ %.0236842, %218 ], [ %.0236842, %203 ], [ %.0236842, %190 ], [ %.0236842, %178 ], [ %.0236842, %165 ], [ %.0236842, %149 ], [ %.0236842, %132 ], [ %.0236842, %117 ], [ %.0236842, %104 ], [ %.0236842, %96 ], [ %.0236842, %88 ], [ %.0236842, %76 ], [ %.0236842, %68 ], [ %.0236842, %60 ], [ %.0236842, %52 ], [ %.0236842, %39 ], [ %.0236842, %170 ], [ %.0236842, %172 ], [ %.0236842, %212 ]
  %.1235 = phi ptr [ %301, %298 ], [ %.0234843, %290 ], [ %.0234843, %282 ], [ %.0234843, %269 ], [ %.0234843, %261 ], [ %.0234843, %253 ], [ %.0234843, %245 ], [ %.0234843, %218 ], [ %.0234843, %203 ], [ %.0234843, %190 ], [ %.0234843, %178 ], [ %.0234843, %165 ], [ %.0234843, %149 ], [ %.0234843, %132 ], [ %.0234843, %117 ], [ %.0234843, %104 ], [ %.0234843, %96 ], [ %.0234843, %88 ], [ %.0234843, %76 ], [ %.0234843, %68 ], [ %.0234843, %60 ], [ %.0234843, %52 ], [ %.0234843, %39 ], [ %.0234843, %170 ], [ %.0234843, %172 ], [ %.0234843, %212 ]
  %.1233 = phi i32 [ %.0232844, %298 ], [ %.0232844, %290 ], [ %.0232844, %282 ], [ %.0232844, %269 ], [ %.0232844, %261 ], [ %.0232844, %253 ], [ %.0232844, %245 ], [ %.0232844, %218 ], [ %.0232844, %203 ], [ %.0232844, %190 ], [ %.0232844, %178 ], [ %.0232844, %165 ], [ %.0232844, %149 ], [ %.0232844, %132 ], [ %.0232844, %117 ], [ %.0232844, %104 ], [ %.0232844, %96 ], [ %.0232844, %88 ], [ %.0232844, %76 ], [ %.0232844, %68 ], [ %.0232844, %60 ], [ %.0232844, %52 ], [ %.0232844, %39 ], [ 1, %170 ], [ %.0232844, %172 ], [ %.0232844, %212 ]
  %.1231 = phi i32 [ %.0230845, %298 ], [ %.0230845, %290 ], [ %.0230845, %282 ], [ %.0230845, %269 ], [ %.0230845, %261 ], [ %.0230845, %253 ], [ %.0230845, %245 ], [ %.0230845, %218 ], [ %.0230845, %203 ], [ %.0230845, %190 ], [ %.0230845, %178 ], [ %.0230845, %165 ], [ %.0230845, %149 ], [ %.0230845, %132 ], [ %.0230845, %117 ], [ %.0230845, %104 ], [ %.0230845, %96 ], [ %.0230845, %88 ], [ %.0230845, %76 ], [ %.0230845, %68 ], [ %.0230845, %60 ], [ %.0230845, %52 ], [ %.0230845, %39 ], [ %.0230845, %170 ], [ 1, %172 ], [ %.0230845, %212 ]
  %.1229 = phi i32 [ %.0228846, %298 ], [ %.0228846, %290 ], [ %.0228846, %282 ], [ %.0228846, %269 ], [ %.0228846, %261 ], [ %.0228846, %253 ], [ %.0228846, %245 ], [ %.0228846, %218 ], [ %.0228846, %203 ], [ %.0228846, %190 ], [ %.0228846, %178 ], [ %.0228846, %165 ], [ %.0228846, %149 ], [ %.0228846, %132 ], [ %.0228846, %117 ], [ %.0228846, %104 ], [ %.0228846, %96 ], [ %.0228846, %88 ], [ %.0228846, %76 ], [ %.0228846, %68 ], [ %.0228846, %60 ], [ %.0228846, %52 ], [ %.0228846, %39 ], [ %.0228846, %170 ], [ %.0228846, %172 ], [ 1, %212 ]
  %.1227 = phi i32 [ %.0226847, %298 ], [ %.0226847, %290 ], [ %.0226847, %282 ], [ %.0226847, %269 ], [ %.0226847, %261 ], [ %.0226847, %253 ], [ %.0226847, %245 ], [ %222, %218 ], [ %.0226847, %203 ], [ %.0226847, %190 ], [ %.0226847, %178 ], [ %.0226847, %165 ], [ %.0226847, %149 ], [ %.0226847, %132 ], [ %.0226847, %117 ], [ %.0226847, %104 ], [ %.0226847, %96 ], [ %.0226847, %88 ], [ %.0226847, %76 ], [ %.0226847, %68 ], [ %.0226847, %60 ], [ %.0226847, %52 ], [ %.0226847, %39 ], [ %.0226847, %170 ], [ %.0226847, %172 ], [ %.0226847, %212 ]
  %.1225 = phi i64 [ %.0224848, %298 ], [ %.0224848, %290 ], [ %.0224848, %282 ], [ %.0224848, %269 ], [ %.0224848, %261 ], [ %.0224848, %253 ], [ %247, %245 ], [ %.0224848, %218 ], [ %.0224848, %203 ], [ %.0224848, %190 ], [ %.0224848, %178 ], [ %.0224848, %165 ], [ %.0224848, %149 ], [ %.0224848, %132 ], [ %.0224848, %117 ], [ %.0224848, %104 ], [ %.0224848, %96 ], [ %.0224848, %88 ], [ %.0224848, %76 ], [ %.0224848, %68 ], [ %.0224848, %60 ], [ %.0224848, %52 ], [ %.0224848, %39 ], [ %.0224848, %170 ], [ %.0224848, %172 ], [ %.0224848, %212 ]
  %.1223 = phi ptr [ %.0222849, %298 ], [ %.0222849, %290 ], [ %.0222849, %282 ], [ %.0222849, %269 ], [ %.0222849, %261 ], [ %256, %253 ], [ %.0222849, %245 ], [ %.0222849, %218 ], [ %.0222849, %203 ], [ %.0222849, %190 ], [ %.0222849, %178 ], [ %.0222849, %165 ], [ %.0222849, %149 ], [ %.0222849, %132 ], [ %.0222849, %117 ], [ %.0222849, %104 ], [ %.0222849, %96 ], [ %.0222849, %88 ], [ %.0222849, %76 ], [ %.0222849, %68 ], [ %.0222849, %60 ], [ %.0222849, %52 ], [ %.0222849, %39 ], [ %.0222849, %170 ], [ %.0222849, %172 ], [ %.0222849, %212 ]
  %.1221 = phi ptr [ %.0220850, %298 ], [ %.0220850, %290 ], [ %.0220850, %282 ], [ %.0220850, %269 ], [ %264, %261 ], [ %.0220850, %253 ], [ %.0220850, %245 ], [ %.0220850, %218 ], [ %.0220850, %203 ], [ %.0220850, %190 ], [ %.0220850, %178 ], [ %.0220850, %165 ], [ %.0220850, %149 ], [ %.0220850, %132 ], [ %.0220850, %117 ], [ %.0220850, %104 ], [ %.0220850, %96 ], [ %.0220850, %88 ], [ %.0220850, %76 ], [ %.0220850, %68 ], [ %.0220850, %60 ], [ %.0220850, %52 ], [ %.0220850, %39 ], [ %.0220850, %170 ], [ %.0220850, %172 ], [ %.0220850, %212 ]
  %.1219 = phi i32 [ %.0218851, %298 ], [ %.0218851, %290 ], [ %.0218851, %282 ], [ %273, %269 ], [ %.0218851, %261 ], [ %.0218851, %253 ], [ %.0218851, %245 ], [ %.0218851, %218 ], [ %.0218851, %203 ], [ %.0218851, %190 ], [ %.0218851, %178 ], [ %.0218851, %165 ], [ %.0218851, %149 ], [ %.0218851, %132 ], [ %.0218851, %117 ], [ %.0218851, %104 ], [ %.0218851, %96 ], [ %.0218851, %88 ], [ %.0218851, %76 ], [ %.0218851, %68 ], [ %.0218851, %60 ], [ %.0218851, %52 ], [ %.0218851, %39 ], [ %.0218851, %170 ], [ %.0218851, %172 ], [ %.0218851, %212 ]
  %.1217 = phi ptr [ %.0216852, %298 ], [ %.0216852, %290 ], [ %285, %282 ], [ %.0216852, %269 ], [ %.0216852, %261 ], [ %.0216852, %253 ], [ %.0216852, %245 ], [ %.0216852, %218 ], [ %.0216852, %203 ], [ %.0216852, %190 ], [ %.0216852, %178 ], [ %.0216852, %165 ], [ %.0216852, %149 ], [ %.0216852, %132 ], [ %.0216852, %117 ], [ %.0216852, %104 ], [ %.0216852, %96 ], [ %.0216852, %88 ], [ %.0216852, %76 ], [ %.0216852, %68 ], [ %.0216852, %60 ], [ %.0216852, %52 ], [ %.0216852, %39 ], [ %.0216852, %170 ], [ %.0216852, %172 ], [ %.0216852, %212 ]
  %.1 = phi ptr [ %.0853, %298 ], [ %293, %290 ], [ %.0853, %282 ], [ %.0853, %269 ], [ %.0853, %261 ], [ %.0853, %253 ], [ %.0853, %245 ], [ %.0853, %218 ], [ %.0853, %203 ], [ %.0853, %190 ], [ %.0853, %178 ], [ %.0853, %165 ], [ %.0853, %149 ], [ %.0853, %132 ], [ %.0853, %117 ], [ %.0853, %104 ], [ %.0853, %96 ], [ %.0853, %88 ], [ %.0853, %76 ], [ %.0853, %68 ], [ %.0853, %60 ], [ %.0853, %52 ], [ %.0853, %39 ], [ %.0853, %170 ], [ %.0853, %172 ], [ %.0853, %212 ]
  %316 = icmp sgt i32 %.1266, 1
  br i1 %316, label %.preheader, label %317, !llvm.loop !13

317:                                              ; preds = %315
  %.not = icmp eq ptr %.1248, null
  br i1 %.not, label %318, label %323

318:                                              ; preds = %317
  %319 = load ptr, ptr @stderr, align 8, !tbaa !5
  %320 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %319, ptr noundef nonnull @.str.48, ptr noundef %21) #13
  %321 = load ptr, ptr @options, align 8, !tbaa !5
  %322 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, ptr noundef %21, ptr noundef %321)
  br label %482

323:                                              ; preds = %317
  %.not305 = icmp eq i32 %.1246, 0
  br i1 %.not305, label %324, label %329

324:                                              ; preds = %323
  %325 = load ptr, ptr @stderr, align 8, !tbaa !5
  %326 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %325, ptr noundef nonnull @.str.49, ptr noundef %21) #13
  %327 = load ptr, ptr @options, align 8, !tbaa !5
  %328 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, ptr noundef %21, ptr noundef %327)
  br label %482

329:                                              ; preds = %323
  %.not306 = icmp eq ptr %.1243, null
  br i1 %.not306, label %330, label %335

330:                                              ; preds = %329
  %331 = load ptr, ptr @stderr, align 8, !tbaa !5
  %332 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %331, ptr noundef nonnull @.str.50, ptr noundef %21) #13
  %333 = load ptr, ptr @options, align 8, !tbaa !5
  %334 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, ptr noundef %21, ptr noundef %333)
  br label %.thread400

335:                                              ; preds = %329
  %.not307 = icmp eq ptr %.1241, null
  br i1 %.not307, label %336, label %341

336:                                              ; preds = %335
  %337 = load ptr, ptr @stderr, align 8, !tbaa !5
  %338 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %337, ptr noundef nonnull @.str.51, ptr noundef %21) #13
  %339 = load ptr, ptr @options, align 8, !tbaa !5
  %340 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, ptr noundef %21, ptr noundef %339)
  br label %.thread393

341:                                              ; preds = %335
  %342 = call i32 @sm2_private_key_info_decrypt_from_pem(ptr noundef nonnull %8, ptr noundef nonnull %.1241, ptr noundef nonnull %.1243) #12
  %.not308 = icmp eq i32 %342, 1
  br i1 %.not308, label %346, label %343

343:                                              ; preds = %341
  %344 = load ptr, ptr @stderr, align 8, !tbaa !5
  %345 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %344, ptr noundef nonnull @.str.52, ptr noundef %21) #13
  br label %.thread393

346:                                              ; preds = %341
  %347 = load i64, ptr %10, align 8, !tbaa !9
  %.not309 = icmp eq i64 %347, 0
  br i1 %.not309, label %348, label %350

348:                                              ; preds = %346
  %349 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %9, ptr noundef nonnull dereferenceable(1) @.str.53) #12
  store i64 16, ptr %10, align 8, !tbaa !9
  br label %350

350:                                              ; preds = %348, %346
  %351 = call i32 @rand_bytes(ptr noundef nonnull %3, i64 noundef 20) #12
  %.not310 = icmp eq i32 %351, 1
  br i1 %.not310, label %355, label %352

352:                                              ; preds = %350
  %353 = load ptr, ptr @stderr, align 8, !tbaa !5
  %354 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %353, ptr noundef nonnull @.str.54, ptr noundef %21) #13
  br label %.thread393

355:                                              ; preds = %350
  %356 = call i32 @x509_name_set(ptr noundef nonnull %4, ptr noundef nonnull %5, i64 noundef 256, ptr noundef %.1258, ptr noundef %.1256, ptr noundef %.1254, ptr noundef %.1252, ptr noundef %.1250, ptr noundef nonnull %.1248) #12
  %.not311 = icmp eq i32 %356, 1
  br i1 %.not311, label %360, label %357

357:                                              ; preds = %355
  %358 = load ptr, ptr @stderr, align 8, !tbaa !5
  %359 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %358, ptr noundef nonnull @.str.55, ptr noundef %21) #13
  br label %.thread393

360:                                              ; preds = %355
  %361 = call i64 @time(ptr noundef nonnull %6) #12
  %362 = load i64, ptr %6, align 8, !tbaa !9
  %363 = call i32 @x509_validity_add_days(ptr noundef nonnull %7, i64 noundef %362, i32 noundef %.1246) #12
  %.not312 = icmp eq i32 %363, 1
  br i1 %.not312, label %367, label %364

364:                                              ; preds = %360
  %365 = load ptr, ptr @stderr, align 8, !tbaa !5
  %366 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %365, ptr noundef nonnull @.str.56, ptr noundef %21) #13
  br label %.thread393

367:                                              ; preds = %360
  %.not313 = icmp eq i32 %.1233, 0
  br i1 %.not313, label %373, label %368

368:                                              ; preds = %367
  %369 = call i32 @x509_exts_add_default_authority_key_identifier(ptr noundef nonnull %13, ptr noundef nonnull %14, i64 noundef 4096, ptr noundef nonnull %8) #12
  %.not314 = icmp eq i32 %369, 1
  br i1 %.not314, label %373, label %370

370:                                              ; preds = %368
  %371 = load ptr, ptr @stderr, align 8, !tbaa !5
  %372 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %371, ptr noundef nonnull @.str.57, ptr noundef %21) #13
  br label %.thread393

373:                                              ; preds = %368, %367
  %.not315 = icmp eq i32 %.1231, 0
  br i1 %.not315, label %379, label %374

374:                                              ; preds = %373
  %375 = call i32 @x509_exts_add_subject_key_identifier_ex(ptr noundef nonnull %13, ptr noundef nonnull %14, i64 noundef 4096, i32 noundef -1, ptr noundef nonnull %8) #12
  %.not316 = icmp eq i32 %375, 1
  br i1 %.not316, label %379, label %376

376:                                              ; preds = %374
  %377 = load ptr, ptr @stderr, align 8, !tbaa !5
  %378 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %377, ptr noundef nonnull @.str.58, ptr noundef %21) #13
  br label %.thread393

379:                                              ; preds = %374, %373
  %380 = load i32, ptr %15, align 4, !tbaa !11
  %.not317 = icmp eq i32 %380, 0
  br i1 %.not317, label %386, label %381

381:                                              ; preds = %379
  %382 = call i32 @x509_exts_add_key_usage(ptr noundef nonnull %13, ptr noundef nonnull %14, i64 noundef 4096, i32 noundef 1, i32 noundef %380) #12
  %.not318 = icmp eq i32 %382, 1
  br i1 %.not318, label %386, label %383

383:                                              ; preds = %381
  %384 = load ptr, ptr @stderr, align 8, !tbaa !5
  %385 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %384, ptr noundef nonnull @.str.59, ptr noundef %21) #13
  br label %.thread393

386:                                              ; preds = %381, %379
  %387 = load i64, ptr %17, align 8, !tbaa !9
  %.not319 = icmp eq i64 %387, 0
  br i1 %.not319, label %393, label %388

388:                                              ; preds = %386
  %389 = call i32 @x509_exts_add_subject_alt_name(ptr noundef nonnull %13, ptr noundef nonnull %14, i64 noundef 4096, i32 noundef -1, ptr noundef nonnull %16, i64 noundef %387) #12
  %.not320 = icmp eq i32 %389, 1
  br i1 %.not320, label %393, label %390

390:                                              ; preds = %388
  %391 = load ptr, ptr @stderr, align 8, !tbaa !5
  %392 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %391, ptr noundef nonnull @.str.60, ptr noundef %21) #13
  br label %.thread393

393:                                              ; preds = %388, %386
  %394 = load i64, ptr %19, align 8, !tbaa !9
  %.not321 = icmp eq i64 %394, 0
  br i1 %.not321, label %400, label %395

395:                                              ; preds = %393
  %396 = call i32 @x509_exts_add_issuer_alt_name(ptr noundef nonnull %13, ptr noundef nonnull %14, i64 noundef 4096, i32 noundef -1, ptr noundef nonnull %18, i64 noundef %394) #12
  %.not322 = icmp eq i32 %396, 1
  br i1 %.not322, label %400, label %397

397:                                              ; preds = %395
  %398 = load ptr, ptr @stderr, align 8, !tbaa !5
  %399 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %398, ptr noundef nonnull @.str.61, ptr noundef %21) #13
  br label %.thread393

400:                                              ; preds = %395, %393
  %401 = icmp sgt i32 %.1229, -1
  %402 = icmp sgt i32 %.1227, -1
  %or.cond4 = select i1 %401, i1 true, i1 %402
  br i1 %or.cond4, label %403, label %408

403:                                              ; preds = %400
  %404 = call i32 @x509_exts_add_basic_constraints(ptr noundef nonnull %13, ptr noundef nonnull %14, i64 noundef 4096, i32 noundef 1, i32 noundef %.1229, i32 noundef %.1227) #12
  %.not323 = icmp eq i32 %404, 1
  br i1 %.not323, label %408, label %405

405:                                              ; preds = %403
  %406 = load ptr, ptr @stderr, align 8, !tbaa !5
  %407 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %406, ptr noundef nonnull @.str.62, ptr noundef %21) #13
  br label %.thread393

408:                                              ; preds = %403, %400
  %.not324 = icmp eq i64 %.1225, 0
  br i1 %.not324, label %414, label %409

409:                                              ; preds = %408
  %410 = call i32 @x509_exts_add_ext_key_usage(ptr noundef nonnull %13, ptr noundef nonnull %14, i64 noundef 4096, i32 noundef -1, ptr noundef nonnull %20, i64 noundef %.1225) #12
  %.not325 = icmp eq i32 %410, 1
  br i1 %.not325, label %414, label %411

411:                                              ; preds = %409
  %412 = load ptr, ptr @stderr, align 8, !tbaa !5
  %413 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %412, ptr noundef nonnull @.str.63, ptr noundef %21) #13
  br label %.thread393

414:                                              ; preds = %409, %408
  %415 = icmp ne ptr %.1223, null
  %416 = icmp ne ptr %.1221, null
  %or.cond6 = select i1 %415, i1 true, i1 %416
  br i1 %or.cond6, label %417, label %430

417:                                              ; preds = %414
  br i1 %415, label %418, label %420

418:                                              ; preds = %417
  %419 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %.1223) #14
  br label %420

420:                                              ; preds = %417, %418
  %421 = phi i64 [ %419, %418 ], [ 0, %417 ]
  br i1 %416, label %422, label %424

422:                                              ; preds = %420
  %423 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %.1221) #14
  br label %424

424:                                              ; preds = %420, %422
  %425 = phi i64 [ %423, %422 ], [ 0, %420 ]
  %426 = call i32 @x509_exts_add_crl_distribution_points(ptr noundef nonnull %13, ptr noundef nonnull %14, i64 noundef 4096, i32 noundef -1, ptr noundef %.1223, i64 noundef %421, ptr noundef %.1221, i64 noundef %425) #12
  %.not326 = icmp eq i32 %426, 1
  br i1 %.not326, label %430, label %427

427:                                              ; preds = %424
  %428 = load ptr, ptr @stderr, align 8, !tbaa !5
  %429 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %428, ptr noundef nonnull @.str.64, ptr noundef %21) #13
  br label %490

430:                                              ; preds = %424, %414
  %431 = icmp sgt i32 %.1219, -1
  br i1 %431, label %432, label %437

432:                                              ; preds = %430
  %433 = call i32 @x509_exts_add_inhibit_any_policy(ptr noundef nonnull %13, ptr noundef nonnull %14, i64 noundef 4096, i32 noundef 1, i32 noundef %.1219) #12
  %.not327 = icmp eq i32 %433, 1
  br i1 %.not327, label %437, label %434

434:                                              ; preds = %432
  %435 = load ptr, ptr @stderr, align 8, !tbaa !5
  %436 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %435, ptr noundef nonnull @.str.65, ptr noundef %21) #13
  br label %.thread393

437:                                              ; preds = %432, %430
  %438 = icmp ne ptr %.1217, null
  %439 = icmp ne ptr %.1, null
  %or.cond8 = select i1 %438, i1 true, i1 %439
  br i1 %or.cond8, label %440, label %453

440:                                              ; preds = %437
  br i1 %438, label %441, label %443

441:                                              ; preds = %440
  %442 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %.1217) #14
  br label %443

443:                                              ; preds = %440, %441
  %444 = phi i64 [ %442, %441 ], [ 0, %440 ]
  br i1 %439, label %445, label %447

445:                                              ; preds = %443
  %446 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %.1) #14
  br label %447

447:                                              ; preds = %443, %445
  %448 = phi i64 [ %446, %445 ], [ 0, %443 ]
  %449 = call i32 @x509_exts_add_authority_info_access(ptr noundef nonnull %13, ptr noundef nonnull %14, i64 noundef 4096, i32 noundef 0, ptr noundef %.1217, i64 noundef %444, ptr noundef %.1, i64 noundef %448) #12
  %.not328 = icmp eq i32 %449, 1
  br i1 %.not328, label %453, label %450

450:                                              ; preds = %447
  %451 = load ptr, ptr @stderr, align 8, !tbaa !5
  %452 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %451, ptr noundef nonnull @.str.66, ptr noundef %21) #13
  br label %.thread393

453:                                              ; preds = %447, %437
  %454 = zext nneg i32 %.1260 to i64
  %455 = load i64, ptr %5, align 8, !tbaa !9
  %456 = load i64, ptr %6, align 8, !tbaa !9
  %457 = load i64, ptr %7, align 8, !tbaa !9
  %458 = load i64, ptr %14, align 8, !tbaa !9
  %459 = load i64, ptr %10, align 8, !tbaa !9
  %460 = call i32 @x509_cert_sign_to_der(i32 noundef 2, ptr noundef nonnull %3, i64 noundef %454, i32 noundef 16, ptr noundef nonnull %4, i64 noundef %455, i64 noundef %456, i64 noundef %457, ptr noundef nonnull %4, i64 noundef %455, ptr noundef nonnull %8, ptr noundef null, i64 noundef 0, ptr noundef null, i64 noundef 0, ptr noundef nonnull %13, i64 noundef %458, ptr noundef nonnull %8, ptr noundef nonnull %9, i64 noundef %459, ptr noundef null, ptr noundef nonnull %11) #12
  %.not329 = icmp eq i32 %460, 1
  br i1 %.not329, label %464, label %461

461:                                              ; preds = %453
  %462 = load ptr, ptr @stderr, align 8, !tbaa !5
  %463 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %462, ptr noundef nonnull @.str.67, ptr noundef %21) #13
  br label %.thread393

464:                                              ; preds = %453
  %465 = load i64, ptr %11, align 8, !tbaa !9
  %466 = call noalias ptr @malloc(i64 noundef %465) #16
  %.not330 = icmp eq ptr %466, null
  br i1 %.not330, label %467, label %470

467:                                              ; preds = %464
  %468 = load ptr, ptr @stderr, align 8, !tbaa !5
  %469 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %468, ptr noundef nonnull @.str.68, ptr noundef %21) #13
  br label %.thread393

470:                                              ; preds = %464
  store ptr %466, ptr %12, align 8, !tbaa !5
  store i64 0, ptr %11, align 8, !tbaa !9
  %471 = load i64, ptr %5, align 8, !tbaa !9
  %472 = load i64, ptr %6, align 8, !tbaa !9
  %473 = load i64, ptr %7, align 8, !tbaa !9
  %474 = load i64, ptr %14, align 8, !tbaa !9
  %475 = load i64, ptr %10, align 8, !tbaa !9
  %476 = call i32 @x509_cert_sign_to_der(i32 noundef 2, ptr noundef nonnull %3, i64 noundef %454, i32 noundef 16, ptr noundef nonnull %4, i64 noundef %471, i64 noundef %472, i64 noundef %473, ptr noundef nonnull %4, i64 noundef %471, ptr noundef nonnull %8, ptr noundef null, i64 noundef 0, ptr noundef null, i64 noundef 0, ptr noundef nonnull %13, i64 noundef %474, ptr noundef nonnull %8, ptr noundef nonnull %9, i64 noundef %475, ptr noundef nonnull %12, ptr noundef nonnull %11) #12
  %.not331 = icmp eq i32 %476, 1
  br i1 %.not331, label %477, label %.thread379.sink.split

477:                                              ; preds = %470
  %478 = load i64, ptr %11, align 8, !tbaa !9
  %479 = call i32 @x509_cert_to_pem(ptr noundef nonnull %466, i64 noundef %478, ptr noundef %.1237) #12
  %.not332 = icmp eq i32 %479, 1
  br i1 %.not332, label %.thread379, label %.thread379.sink.split

.thread379.sink.split:                            ; preds = %477, %470
  %.str.69.sink = phi ptr [ @.str.67, %470 ], [ @.str.69, %477 ]
  %480 = load ptr, ptr @stderr, align 8, !tbaa !5
  %481 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %480, ptr noundef nonnull %.str.69.sink, ptr noundef %21) #13
  br label %.thread379

.thread379:                                       ; preds = %.thread379.sink.split, %477
  %.0262 = phi i32 [ 0, %477 ], [ 1, %.thread379.sink.split ]
  call void @gmssl_secure_clear(ptr noundef nonnull %8, i64 noundef 128) #12
  call void @free(ptr noundef nonnull %466) #12
  br label %483

.thread393:                                       ; preds = %336, %467, %461, %450, %434, %411, %405, %397, %390, %383, %376, %370, %364, %357, %352, %343
  call void @gmssl_secure_clear(ptr noundef nonnull %8, i64 noundef 128) #12
  br label %483

.thread400:                                       ; preds = %330, %122
  %.0236627 = phi ptr [ %.1237, %330 ], [ %.0236842, %122 ]
  %.0234608 = phi ptr [ %.1235, %330 ], [ %.0234843, %122 ]
  call void @gmssl_secure_clear(ptr noundef nonnull %8, i64 noundef 128) #12
  br label %485

482:                                              ; preds = %309, %312, %303, %275, %237, %242, %224, %209, %196, %183, %162, %167, %146, %110, %81, %45, %30, %324, %318
  %.0242665 = phi ptr [ %.1243, %318 ], [ %.1243, %324 ], [ %.0242840, %30 ], [ %.0242840, %45 ], [ %.0242840, %81 ], [ %.0242840, %110 ], [ %.0242840, %146 ], [ %.0242840, %167 ], [ %.0242840, %162 ], [ %.0242840, %183 ], [ %.0242840, %196 ], [ %.0242840, %209 ], [ %.0242840, %224 ], [ %.0242840, %242 ], [ %.0242840, %237 ], [ %.0242840, %275 ], [ %.0242840, %303 ], [ %.0242840, %312 ], [ %.0242840, %309 ]
  %.0262.ph = phi i32 [ 1, %318 ], [ 1, %324 ], [ 0, %30 ], [ 1, %45 ], [ 1, %81 ], [ 1, %110 ], [ 1, %146 ], [ 1, %167 ], [ 1, %162 ], [ 1, %183 ], [ 1, %196 ], [ 1, %209 ], [ 1, %224 ], [ 1, %242 ], [ 1, %237 ], [ 1, %275 ], [ 1, %303 ], [ 1, %312 ], [ 1, %309 ]
  %.2238.ph = phi ptr [ %.1237, %318 ], [ %.1237, %324 ], [ %.0236842, %30 ], [ %.0236842, %45 ], [ %.0236842, %81 ], [ %.0236842, %110 ], [ %.0236842, %146 ], [ %.0236842, %167 ], [ %.0236842, %162 ], [ %.0236842, %183 ], [ %.0236842, %196 ], [ %.0236842, %209 ], [ %.0236842, %224 ], [ %.0236842, %242 ], [ %.0236842, %237 ], [ %.0236842, %275 ], [ null, %303 ], [ %.0236842, %312 ], [ %.0236842, %309 ]
  %.2.ph = phi ptr [ %.1235, %318 ], [ %.1235, %324 ], [ %.0234843, %30 ], [ %.0234843, %45 ], [ %.0234843, %81 ], [ %.0234843, %110 ], [ %.0234843, %146 ], [ %.0234843, %167 ], [ %.0234843, %162 ], [ %.0234843, %183 ], [ %.0234843, %196 ], [ %.0234843, %209 ], [ %.0234843, %224 ], [ %.0234843, %242 ], [ %.0234843, %237 ], [ %.0234843, %275 ], [ %301, %303 ], [ %.0234843, %312 ], [ %.0234843, %309 ]
  call void @gmssl_secure_clear(ptr noundef nonnull %8, i64 noundef 128) #12
  %.not368 = icmp eq ptr %.0242665, null
  br i1 %.not368, label %485, label %483

483:                                              ; preds = %.thread393, %.thread379, %482
  %.0242664 = phi ptr [ %.1243, %.thread379 ], [ %.0242665, %482 ], [ %.1243, %.thread393 ]
  %.0262375390 = phi i32 [ %.0262, %.thread379 ], [ %.0262.ph, %482 ], [ 1, %.thread393 ]
  %.2238377387 = phi ptr [ %.1237, %.thread379 ], [ %.2238.ph, %482 ], [ %.1237, %.thread393 ]
  %.2378385 = phi ptr [ %.1235, %.thread379 ], [ %.2.ph, %482 ], [ %.1235, %.thread393 ]
  %484 = call i32 @fclose(ptr noundef nonnull %.0242664)
  br label %485

485:                                              ; preds = %.thread400, %483, %482
  %.0262375391 = phi i32 [ %.0262375390, %483 ], [ %.0262.ph, %482 ], [ 1, %.thread400 ]
  %.2238377388 = phi ptr [ %.2238377387, %483 ], [ %.2238.ph, %482 ], [ %.0236627, %.thread400 ]
  %.2378386 = phi ptr [ %.2378385, %483 ], [ %.2.ph, %482 ], [ %.0234608, %.thread400 ]
  %486 = icmp ne ptr %.2378386, null
  %487 = icmp ne ptr %.2238377388, null
  %or.cond10 = select i1 %486, i1 %487, i1 false
  br i1 %or.cond10, label %488, label %490

488:                                              ; preds = %485
  %489 = call i32 @fclose(ptr noundef nonnull %.2238377388)
  br label %490

490:                                              ; preds = %485, %488, %427, %24
  %.0261 = phi i32 [ 1, %24 ], [ -1, %427 ], [ %.0262375391, %488 ], [ %.0262375391, %485 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %20) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #12
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %18) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #12
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %16) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #12
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %13) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #12
  call void @llvm.lifetime.end.p0(i64 8192, ptr nonnull %9) #12
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %8) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #12
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %4) #12
  call void @llvm.lifetime.end.p0(i64 20, ptr nonnull %3) #12
  ret i32 %.0261
}

; 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 nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #2

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strcmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #4

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

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr nocapture noundef nonnull) local_unnamed_addr #5

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #4

; Function Attrs: nofree nounwind
declare noalias noundef ptr @fopen(ptr nocapture noundef readonly, ptr nocapture noundef readonly) local_unnamed_addr #3

; Function Attrs: nounwind
declare ptr @strerror(i32 noundef) local_unnamed_addr #6

; Function Attrs: mustprogress nofree nosync nounwind willreturn memory(none)
declare ptr @__errno_location() local_unnamed_addr #7

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: readwrite)
declare ptr @strncpy(ptr noalias noundef returned writeonly, ptr noalias nocapture noundef readonly, i64 noundef) local_unnamed_addr #8

declare i32 @hex_to_bytes(ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #9

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

declare i32 @x509_general_names_add_general_name(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef) local_unnamed_addr #9

declare i32 @x509_key_purpose_from_name(ptr noundef) local_unnamed_addr #9

declare i32 @sm2_private_key_info_decrypt_from_pem(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #9

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: readwrite)
declare ptr @strcpy(ptr noalias noundef returned writeonly, ptr noalias nocapture noundef readonly) local_unnamed_addr #8

declare i32 @rand_bytes(ptr noundef, i64 noundef) local_unnamed_addr #9

declare i32 @x509_name_set(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #9

; Function Attrs: nounwind
declare i64 @time(ptr noundef) local_unnamed_addr #6

declare i32 @x509_validity_add_days(ptr noundef, i64 noundef, i32 noundef) local_unnamed_addr #9

declare i32 @x509_exts_add_default_authority_key_identifier(ptr noundef, ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #9

declare i32 @x509_exts_add_subject_key_identifier_ex(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef) local_unnamed_addr #9

declare i32 @x509_exts_add_key_usage(ptr noundef, ptr noundef, i64 noundef, i32 noundef, i32 noundef) local_unnamed_addr #9

declare i32 @x509_exts_add_subject_alt_name(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef) local_unnamed_addr #9

declare i32 @x509_exts_add_issuer_alt_name(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef) local_unnamed_addr #9

declare i32 @x509_exts_add_basic_constraints(ptr noundef, ptr noundef, i64 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #9

declare i32 @x509_exts_add_ext_key_usage(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef) local_unnamed_addr #9

declare i32 @x509_exts_add_crl_distribution_points(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #9

declare i32 @x509_exts_add_inhibit_any_policy(ptr noundef, ptr noundef, i64 noundef, i32 noundef, i32 noundef) local_unnamed_addr #9

declare i32 @x509_exts_add_authority_info_access(ptr noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #9

declare i32 @x509_cert_sign_to_der(i32 noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #9

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

declare i32 @x509_cert_to_pem(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #9

declare void @gmssl_secure_clear(ptr noundef, i64 noundef) local_unnamed_addr #9

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

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

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

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 nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nofree nounwind willreturn memory(argmem: read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress nofree nounwind willreturn memory(read) 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 #6 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress nofree nosync nounwind willreturn memory(none) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { mustprogress nofree nounwind willreturn memory(argmem: readwrite) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { "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 #10 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #11 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #12 = { nounwind }
attributes #13 = { cold nounwind }
attributes #14 = { nounwind willreturn memory(read) }
attributes #15 = { nounwind willreturn memory(none) }
attributes #16 = { nounwind allocsize(0) }

!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 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass