diff --git a/subprojects/frontends/c-frontend/src/main/antlr/C.g4 b/subprojects/frontends/c-frontend/src/main/antlr/C.g4 index e6ea2c984e..e8cb557d48 100644 --- a/subprojects/frontends/c-frontend/src/main/antlr/C.g4 +++ b/subprojects/frontends/c-frontend/src/main/antlr/C.g4 @@ -31,7 +31,8 @@ grammar C; primaryExpression - : Identifier # primaryExpressionId + : '__PRETTY_FUNC__' # gccPrettyFunc + | Identifier # primaryExpressionId | Constant # primaryExpressionConstant | StringLiteral+ # primaryExpressionStrings | '(' expression ')' # primaryExpressionBraceExpression diff --git a/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/grammar/expression/ExpressionVisitor.java b/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/grammar/expression/ExpressionVisitor.java index 90dd48cbce..4fcd245c6a 100644 --- a/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/grammar/expression/ExpressionVisitor.java +++ b/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/grammar/expression/ExpressionVisitor.java @@ -388,6 +388,7 @@ public Expr visitMultiplicativeExpression(CParser.MultiplicativeExpressionCon /** * Conversion from C (/) semantics to solver (div) semantics. + * * @param a dividend * @param b divisor * @return expression representing C division semantics with solver operations @@ -395,21 +396,22 @@ public Expr visitMultiplicativeExpression(CParser.MultiplicativeExpressionCon private Expr createIntDiv(Expr a, Expr b) { DivExpr aDivB = Div(a, b); return Ite(Geq(a, Int(0)), // if (a >= 0) - aDivB, // a div b - // else - Ite(Neq(Mod(a, b), Int(0)), // if (a mod b != 0) - Ite(Geq(b, Int(0)), // if (b >= 0) - Add(aDivB, Int(1)), // a div b + 1 - // else - Sub(aDivB, Int(1)) // a div b - 1 - ), // else - aDivB // a div b - ) + aDivB, // a div b + // else + Ite(Neq(Mod(a, b), Int(0)), // if (a mod b != 0) + Ite(Geq(b, Int(0)), // if (b >= 0) + Add(aDivB, Int(1)), // a div b + 1 + // else + Sub(aDivB, Int(1)) // a div b - 1 + ), // else + aDivB // a div b + ) ); } /** * Conversion from C (%) semantics to solver (mod) semantics. + * * @param a dividend * @param b divisor * @return expression representing C modulo semantics with solver operations @@ -417,12 +419,12 @@ private Expr createIntDiv(Expr a, Expr b) { private Expr createIntMod(Expr a, Expr b) { ModExpr aModB = Mod(a, b); return Ite(Geq(a, Int(0)), // if (a >= 0) - aModB, // a mod b - // else - Ite(Geq(b, Int(0)), // if (b >= 0) - Sub(aModB, b), // a mod b - b - Add(aModB, b) // a mod b + b - ) + aModB, // a mod b + // else + Ite(Geq(b, Int(0)), // if (b >= 0) + Sub(aModB, b), // a mod b - b + Add(aModB, b) // a mod b + b + ) ); } @@ -625,6 +627,15 @@ public Expr visitPostfixExpressionBrackets(CParser.PostfixExpressionBracketsC return ctx.expression().accept(this); } + @Override + public Expr visitGccPrettyFunc(CParser.GccPrettyFuncContext ctx) { + System.err.println("WARNING: gcc intrinsic encountered in place of an expression, using a literal 0 instead."); + CComplexType signedInt = CComplexType.getSignedInt(parseContext); + LitExpr zero = signedInt.getNullValue(); + parseContext.getMetadata().create(zero, "cType", signedInt); + return zero; + } + @Override public Expr visitPrimaryExpressionId(CParser.PrimaryExpressionIdContext ctx) { return getVar(ctx.Identifier().getText()).getRef(); diff --git a/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/grammar/expression/UnsupportedInitializer.java b/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/grammar/expression/UnsupportedInitializer.java new file mode 100644 index 0000000000..042df61d24 --- /dev/null +++ b/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/grammar/expression/UnsupportedInitializer.java @@ -0,0 +1,42 @@ +/* + * Copyright 2023 Budapest University of Technology and Economics + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package hu.bme.mit.theta.frontend.transformation.grammar.expression; + +import hu.bme.mit.theta.core.model.Valuation; +import hu.bme.mit.theta.core.type.LitExpr; +import hu.bme.mit.theta.core.type.NullaryExpr; +import hu.bme.mit.theta.core.type.inttype.IntType; + +import static hu.bme.mit.theta.core.type.inttype.IntExprs.Int; + +public class UnsupportedInitializer extends NullaryExpr { + + @Override + public IntType getType() { + return Int(); + } + + @Override + public LitExpr eval(Valuation val) { + throw new UnsupportedOperationException("UnsupportedInitializer expressions are not supported."); + } + + @Override + public String toString() { + return "UnsupportedInitializer"; + } +} diff --git a/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/grammar/type/DeclarationVisitor.java b/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/grammar/type/DeclarationVisitor.java index 4dd23f9ad9..7442159bbe 100644 --- a/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/grammar/type/DeclarationVisitor.java +++ b/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/grammar/type/DeclarationVisitor.java @@ -19,9 +19,11 @@ import hu.bme.mit.theta.c.frontend.dsl.gen.CBaseVisitor; import hu.bme.mit.theta.c.frontend.dsl.gen.CParser; import hu.bme.mit.theta.frontend.ParseContext; +import hu.bme.mit.theta.frontend.transformation.grammar.expression.UnsupportedInitializer; import hu.bme.mit.theta.frontend.transformation.grammar.function.FunctionVisitor; import hu.bme.mit.theta.frontend.transformation.grammar.preprocess.TypedefVisitor; import hu.bme.mit.theta.frontend.transformation.model.declaration.CDeclaration; +import hu.bme.mit.theta.frontend.transformation.model.statements.CExpr; import hu.bme.mit.theta.frontend.transformation.model.statements.CInitializerList; import hu.bme.mit.theta.frontend.transformation.model.statements.CStatement; import hu.bme.mit.theta.frontend.transformation.model.types.simple.CSimpleType; @@ -81,13 +83,17 @@ public List getDeclarations(CParser.DeclarationSpecifiersContext d "Initializer list designators not yet implemented!"); CInitializerList cInitializerList = new CInitializerList( cSimpleType.getActualType(), parseContext); - for (CParser.InitializerContext initializer : context.initializer() - .initializerList().initializers) { - CStatement expr = initializer.assignmentExpression() - .accept(functionVisitor); - cInitializerList.addStatement(null /* TODO: add designator */, expr); + try { + for (CParser.InitializerContext initializer : context.initializer() + .initializerList().initializers) { + CStatement expr = initializer.assignmentExpression().accept(functionVisitor); + cInitializerList.addStatement(null /* TODO: add designator */, expr); + } + initializerExpression = cInitializerList; + } catch (NullPointerException e) { + initializerExpression = new CExpr(new UnsupportedInitializer(), parseContext); + parseContext.getMetadata().create(initializerExpression.getExpression(), "cType", cSimpleType); } - initializerExpression = cInitializerList; } else { initializerExpression = context.initializer().assignmentExpression() .accept(functionVisitor); diff --git a/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/model/types/complex/CComplexType.java b/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/model/types/complex/CComplexType.java index c9ddba7eaf..3887001ff6 100644 --- a/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/model/types/complex/CComplexType.java +++ b/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/model/types/complex/CComplexType.java @@ -20,6 +20,9 @@ import hu.bme.mit.theta.core.type.Expr; import hu.bme.mit.theta.core.type.LitExpr; import hu.bme.mit.theta.core.type.Type; +import hu.bme.mit.theta.core.type.arraytype.ArrayType; +import hu.bme.mit.theta.core.type.booltype.BoolType; +import hu.bme.mit.theta.core.type.inttype.IntType; import hu.bme.mit.theta.frontend.ParseContext; import hu.bme.mit.theta.frontend.transformation.model.types.complex.compound.CArray; import hu.bme.mit.theta.frontend.transformation.model.types.complex.compound.CCompound; @@ -117,7 +120,7 @@ public CComplexType getSmallestCommonType(CComplexType type) { } public String getTypeName() { - throw new RuntimeException("Type name could not be queried from this type!"); + throw new RuntimeException("Type name could not be queried from this type: " + this); } public int width() { @@ -138,7 +141,20 @@ public static CComplexType getType(Expr expr, ParseContext parseContext) { return (CComplexType) cTypeOptional.get(); } else if (cTypeOptional.isPresent() && cTypeOptional.get() instanceof CSimpleType) { return ((CSimpleType) cTypeOptional.get()).getActualType(); - } else throw new RuntimeException("Type not known for expression: " + expr); + } else { + return getType(expr.getType(), parseContext); +// throw new RuntimeException("Type not known for expression: " + expr); + } + } + + private static CComplexType getType(Type type, ParseContext parseContext) { + if (type instanceof IntType) { + return new CSignedInt(null, parseContext); + } else if (type instanceof ArrayType aType) { + return new CArray(null, getType(aType.getElemType(), parseContext), parseContext); + } else if (type instanceof BoolType) { + return new CBool(null, parseContext); + } else throw new RuntimeException("Not yet implemented for type: " + type); } diff --git a/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/model/types/complex/CVoid.java b/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/model/types/complex/CVoid.java index 9b28e816f3..1d9e69f09f 100644 --- a/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/model/types/complex/CVoid.java +++ b/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/model/types/complex/CVoid.java @@ -28,4 +28,9 @@ public CVoid(CSimpleType origin, ParseContext parseContext) { public R accept(CComplexTypeVisitor visitor, T param) { return visitor.visit(this, param); } + + @Override + public String getTypeName() { + return "void"; + } } diff --git a/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/model/types/complex/real/CDouble.java b/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/model/types/complex/real/CDouble.java index ab3693376f..08187a9f15 100644 --- a/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/model/types/complex/real/CDouble.java +++ b/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/model/types/complex/real/CDouble.java @@ -31,4 +31,9 @@ public CDouble(CSimpleType origin, ParseContext parseContext) { public R accept(CComplexTypeVisitor visitor, T param) { return visitor.visit(this, param); } + + @Override + public String getTypeName() { + return "double"; + } } diff --git a/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/model/types/complex/real/CFloat.java b/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/model/types/complex/real/CFloat.java index b71acbf65e..58612af384 100644 --- a/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/model/types/complex/real/CFloat.java +++ b/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/model/types/complex/real/CFloat.java @@ -31,4 +31,9 @@ public CFloat(CSimpleType origin, ParseContext parseContext) { public R accept(CComplexTypeVisitor visitor, T param) { return visitor.visit(this, param); } + + @Override + public String getTypeName() { + return "float"; + } } diff --git a/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/model/types/complex/real/CLongDouble.java b/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/model/types/complex/real/CLongDouble.java index ed12111dbe..963beb80a6 100644 --- a/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/model/types/complex/real/CLongDouble.java +++ b/subprojects/frontends/c-frontend/src/main/java/hu/bme/mit/theta/frontend/transformation/model/types/complex/real/CLongDouble.java @@ -31,4 +31,9 @@ public CLongDouble(CSimpleType origin, ParseContext parseContext) { public R accept(CComplexTypeVisitor visitor, T param) { return visitor.visit(this, param); } + + @Override + public String getTypeName() { + return "long double"; + } } diff --git a/subprojects/frontends/chc-frontend/src/main/java/hu/bme/mit/theta/frontend/chc/ChcBackwardXcfaBuilder.java b/subprojects/frontends/chc-frontend/src/main/java/hu/bme/mit/theta/frontend/chc/ChcBackwardXcfaBuilder.java index 6721326fff..0bd2d0d290 100644 --- a/subprojects/frontends/chc-frontend/src/main/java/hu/bme/mit/theta/frontend/chc/ChcBackwardXcfaBuilder.java +++ b/subprojects/frontends/chc-frontend/src/main/java/hu/bme/mit/theta/frontend/chc/ChcBackwardXcfaBuilder.java @@ -26,21 +26,41 @@ import hu.bme.mit.theta.core.type.Type; import hu.bme.mit.theta.core.type.booltype.BoolLitExpr; import hu.bme.mit.theta.core.type.booltype.BoolType; -import hu.bme.mit.theta.xcfa.model.*; -import hu.bme.mit.theta.xcfa.passes.ChcPasses; +import hu.bme.mit.theta.xcfa.model.EmptyMetaData; +import hu.bme.mit.theta.xcfa.model.InvokeLabel; +import hu.bme.mit.theta.xcfa.model.ParamDirection; +import hu.bme.mit.theta.xcfa.model.SequenceLabel; +import hu.bme.mit.theta.xcfa.model.StmtLabel; +import hu.bme.mit.theta.xcfa.model.XcfaBuilder; +import hu.bme.mit.theta.xcfa.model.XcfaEdge; +import hu.bme.mit.theta.xcfa.model.XcfaLocation; +import hu.bme.mit.theta.xcfa.model.XcfaProcedureBuilder; +import hu.bme.mit.theta.xcfa.passes.ProcedurePassManager; import kotlin.Pair; import org.antlr.v4.runtime.RuleContext; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; import static hu.bme.mit.theta.core.type.booltype.BoolExprs.Bool; -import static hu.bme.mit.theta.frontend.chc.ChcUtils.*; +import static hu.bme.mit.theta.frontend.chc.ChcUtils.createVars; +import static hu.bme.mit.theta.frontend.chc.ChcUtils.getTailConditionLabels; +import static hu.bme.mit.theta.frontend.chc.ChcUtils.transformConst; +import static hu.bme.mit.theta.frontend.chc.ChcUtils.transformSort; public class ChcBackwardXcfaBuilder extends CHCBaseVisitor implements ChcXcfaBuilder { private final Map procedures = new HashMap<>(); + private final ProcedurePassManager procedurePassManager; private XcfaBuilder xcfaBuilder; private int callCount = 0; + public ChcBackwardXcfaBuilder(final ProcedurePassManager procedurePassManager) { + this.procedurePassManager = procedurePassManager; + } + @Override public XcfaBuilder buildXcfa(CHCParser parser) { xcfaBuilder = new XcfaBuilder("chc"); @@ -123,7 +143,7 @@ private XcfaLocation createLocation(XcfaProcedureBuilder builder) { } private XcfaProcedureBuilder createProcedure(String procName) { - XcfaProcedureBuilder builder = new XcfaProcedureBuilder(procName, new ChcPasses()); + XcfaProcedureBuilder builder = new XcfaProcedureBuilder(procName, procedurePassManager); builder.setName(procName); builder.addParam(Decls.Var(procName + "_ret", Bool()), ParamDirection.OUT); diff --git a/subprojects/frontends/chc-frontend/src/main/java/hu/bme/mit/theta/frontend/chc/ChcForwardXcfaBuilder.java b/subprojects/frontends/chc-frontend/src/main/java/hu/bme/mit/theta/frontend/chc/ChcForwardXcfaBuilder.java index ffd2119d62..71b06b1aa7 100644 --- a/subprojects/frontends/chc-frontend/src/main/java/hu/bme/mit/theta/frontend/chc/ChcForwardXcfaBuilder.java +++ b/subprojects/frontends/chc-frontend/src/main/java/hu/bme/mit/theta/frontend/chc/ChcForwardXcfaBuilder.java @@ -22,27 +22,41 @@ import hu.bme.mit.theta.core.stmt.AssignStmt; import hu.bme.mit.theta.core.stmt.HavocStmt; import hu.bme.mit.theta.core.type.Type; -import hu.bme.mit.theta.xcfa.model.*; -import hu.bme.mit.theta.xcfa.passes.ChcPasses; +import hu.bme.mit.theta.xcfa.model.EmptyMetaData; +import hu.bme.mit.theta.xcfa.model.SequenceLabel; +import hu.bme.mit.theta.xcfa.model.StmtLabel; +import hu.bme.mit.theta.xcfa.model.XcfaBuilder; +import hu.bme.mit.theta.xcfa.model.XcfaEdge; +import hu.bme.mit.theta.xcfa.model.XcfaLabel; +import hu.bme.mit.theta.xcfa.model.XcfaLocation; +import hu.bme.mit.theta.xcfa.model.XcfaProcedureBuilder; +import hu.bme.mit.theta.xcfa.passes.ProcedurePassManager; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import static hu.bme.mit.theta.core.type.booltype.BoolExprs.Bool; -import static hu.bme.mit.theta.frontend.chc.ChcUtils.*; +import static hu.bme.mit.theta.frontend.chc.ChcUtils.createVars; +import static hu.bme.mit.theta.frontend.chc.ChcUtils.getTailConditionLabels; +import static hu.bme.mit.theta.frontend.chc.ChcUtils.transformConst; +import static hu.bme.mit.theta.frontend.chc.ChcUtils.transformSort; public class ChcForwardXcfaBuilder extends CHCBaseVisitor implements ChcXcfaBuilder { + private final ProcedurePassManager procedurePassManager; private XcfaProcedureBuilder builder; private XcfaLocation initLocation; private XcfaLocation errorLocation; private final Map locations = new HashMap<>(); + public ChcForwardXcfaBuilder(final ProcedurePassManager procedurePassManager) { + this.procedurePassManager = procedurePassManager; + } + @Override public XcfaBuilder buildXcfa(CHCParser parser) { XcfaBuilder xcfaBuilder = new XcfaBuilder("chc"); - builder = new XcfaProcedureBuilder("main", new ChcPasses()); + builder = new XcfaProcedureBuilder("main", procedurePassManager); builder.createInitLoc(); builder.createErrorLoc(); builder.createFinalLoc(); diff --git a/subprojects/frontends/chc-frontend/src/main/java/hu/bme/mit/theta/frontend/chc/ChcFrontend.java b/subprojects/frontends/chc-frontend/src/main/java/hu/bme/mit/theta/frontend/chc/ChcFrontend.java index afbfbf24c5..58e992a895 100644 --- a/subprojects/frontends/chc-frontend/src/main/java/hu/bme/mit/theta/frontend/chc/ChcFrontend.java +++ b/subprojects/frontends/chc-frontend/src/main/java/hu/bme/mit/theta/frontend/chc/ChcFrontend.java @@ -18,6 +18,8 @@ import hu.bme.mit.theta.chc.frontend.dsl.gen.CHCLexer; import hu.bme.mit.theta.chc.frontend.dsl.gen.CHCParser; import hu.bme.mit.theta.xcfa.model.XcfaBuilder; +import hu.bme.mit.theta.xcfa.passes.ProcedurePassManager; +import org.antlr.v4.runtime.BailErrorStrategy; import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.CommonTokenStream; @@ -35,12 +37,13 @@ public ChcFrontend(ChcTransformation transformation) { chcTransformation = transformation; } - public XcfaBuilder buildXcfa(CharStream charStream) { + public XcfaBuilder buildXcfa(CharStream charStream, ProcedurePassManager procedurePassManager) { ChcUtils.init(charStream); CHCParser parser = new CHCParser(new CommonTokenStream(new CHCLexer(charStream))); + parser.setErrorHandler(new BailErrorStrategy()); ChcXcfaBuilder chcXcfaBuilder = switch (chcTransformation) { - case FORWARD -> new ChcForwardXcfaBuilder(); - case BACKWARD -> new ChcBackwardXcfaBuilder(); + case FORWARD -> new ChcForwardXcfaBuilder(procedurePassManager); + case BACKWARD -> new ChcBackwardXcfaBuilder(procedurePassManager); default -> throw new RuntimeException("Should not be here; adapt PORTFOLIO to FW/BW beforehand."); }; diff --git a/subprojects/frontends/llvm/build.gradle.kts b/subprojects/frontends/llvm/build.gradle.kts index d8feb6aec1..770ff1161a 100644 --- a/subprojects/frontends/llvm/build.gradle.kts +++ b/subprojects/frontends/llvm/build.gradle.kts @@ -52,7 +52,7 @@ fun llvmConfigFlags(vararg args: String): Array { } catch (e: IOException) { e.printStackTrace() arrayOf() - }.also { println("LLVM flags (${args.toList()}): ${it.toList()}") } + }//.also { println("LLVM flags (${args.toList()}): ${it.toList()}") } } fun jniConfigFlags(): Array { @@ -67,7 +67,7 @@ fun jniConfigFlags(): Array { return arrayOf( "-I${mainInclude.absolutePath}", "-I${linuxInclude.absolutePath}", - ).also { println("JNI flags: ${it.toList()}") } + )//.also { println("JNI flags: ${it.toList()}") } } library { diff --git a/subprojects/xcfa/llvm2xcfa/src/main/java/hu/bme/mit/theta/llvm2xcfa/handlers/states/FunctionState.java b/subprojects/xcfa/llvm2xcfa/src/main/java/hu/bme/mit/theta/llvm2xcfa/handlers/states/FunctionState.java index 9198b2fb51..907865b70a 100644 --- a/subprojects/xcfa/llvm2xcfa/src/main/java/hu/bme/mit/theta/llvm2xcfa/handlers/states/FunctionState.java +++ b/subprojects/xcfa/llvm2xcfa/src/main/java/hu/bme/mit/theta/llvm2xcfa/handlers/states/FunctionState.java @@ -58,7 +58,7 @@ public class FunctionState { public FunctionState(GlobalState globalState, Tuple3, List>> function) { this.globalState = globalState; this.function = function; - procedureBuilder = new XcfaProcedureBuilder(function.get1(), new ProcedurePassManager(List.of())); + procedureBuilder = new XcfaProcedureBuilder(function.get1(), new ProcedurePassManager()); // procedureBuilder.setName(function.get1()); localVars = new HashMap<>(); params = new HashSet<>(); diff --git a/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/XcfaAnalysis.kt b/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/XcfaAnalysis.kt index 29f55d2bdb..3abddfbfaf 100644 --- a/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/XcfaAnalysis.kt +++ b/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/XcfaAnalysis.kt @@ -37,14 +37,12 @@ import hu.bme.mit.theta.core.stmt.Stmts import hu.bme.mit.theta.core.type.booltype.BoolExprs.True import hu.bme.mit.theta.core.utils.TypeUtils import hu.bme.mit.theta.solver.Solver +import hu.bme.mit.theta.xcfa.* import hu.bme.mit.theta.xcfa.analysis.XcfaProcessState.Companion.createLookup import hu.bme.mit.theta.xcfa.analysis.coi.ConeOfInfluence -import hu.bme.mit.theta.xcfa.getFlatLabels -import hu.bme.mit.theta.xcfa.getGlobalVars import hu.bme.mit.theta.xcfa.isWritten import hu.bme.mit.theta.xcfa.model.* import hu.bme.mit.theta.xcfa.passes.changeVars -import hu.bme.mit.theta.xcfa.startsAtomic import java.util.* import java.util.function.Predicate @@ -153,15 +151,16 @@ fun getXcfaErrorPredicate( if (process1.key != process2.key) for (edge1 in process1.value.locs.peek().outgoingEdges) for (edge2 in process2.value.locs.peek().outgoingEdges) { - val globalVars1 = edge1.getGlobalVars(xcfa) - val globalVars2 = edge2.getGlobalVars(xcfa) - val isAtomic1 = edge1.startsAtomic() - val isAtomic2 = edge2.startsAtomic() - if (!isAtomic1 || !isAtomic2) { - val intersection = globalVars1.keys intersect globalVars2.keys - if (intersection.any { globalVars1[it].isWritten || globalVars2[it].isWritten }) - return@Predicate true - } + val mutexes1 = s.mutexes.filterValues { it == process1.key }.keys + val mutexes2 = s.mutexes.filterValues { it == process2.key }.keys + val globalVars1 = edge1.getGlobalVarsWithNeededMutexes(xcfa, mutexes1) + val globalVars2 = edge2.getGlobalVarsWithNeededMutexes(xcfa, mutexes2) + for (v1 in globalVars1) + for (v2 in globalVars2) + if (v1.varDecl == v2.varDecl) + if (v1.access.isWritten || v2.access.isWritten) + if ((v1.mutexes intersect v2.mutexes).isEmpty()) + return@Predicate true } false } diff --git a/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/coi/XcfaCoi.kt b/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/coi/XcfaCoi.kt index fc38995493..6b3238eca4 100644 --- a/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/coi/XcfaCoi.kt +++ b/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/coi/XcfaCoi.kt @@ -1,3 +1,19 @@ +/* + * Copyright 2023 Budapest University of Technology and Economics + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package hu.bme.mit.theta.xcfa.analysis.coi import hu.bme.mit.theta.analysis.LTS @@ -88,7 +104,7 @@ abstract class XcfaCoi(protected val xcfa: XCFA) { protected fun findDirectObservers(edge: XcfaEdge, prec: Prec) { val precVars = prec.usedVars - val writtenVars = edge.getVars().filter { it.value.isWritten && it.key in precVars } + val writtenVars = edge.collectVarsWithAccessType().filter { it.value.isWritten && it.key in precVars } if (writtenVars.isEmpty()) return val toVisit = mutableListOf(edge) @@ -105,7 +121,7 @@ abstract class XcfaCoi(protected val xcfa: XCFA) { source: XcfaEdge, target: XcfaEdge, observableVars: Map, AccessType>, precVars: Collection>, relation: MutableMap> ) { - val vars = target.getVars() + val vars = target.collectVarsWithAccessType() var relevantAction = vars.any { it.value.isWritten && it.key in precVars } if (!relevantAction) { val assumeVars = target.label.collectAssumesVars() diff --git a/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/coi/XcfaCoiMultiThread.kt b/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/coi/XcfaCoiMultiThread.kt index 14802dc422..7774dafb16 100644 --- a/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/coi/XcfaCoiMultiThread.kt +++ b/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/coi/XcfaCoiMultiThread.kt @@ -1,9 +1,25 @@ +/* + * Copyright 2023 Budapest University of Technology and Economics + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package hu.bme.mit.theta.xcfa.analysis.coi import hu.bme.mit.theta.analysis.LTS import hu.bme.mit.theta.analysis.Prec import hu.bme.mit.theta.xcfa.getFlatLabels -import hu.bme.mit.theta.xcfa.getVars +import hu.bme.mit.theta.xcfa.collectVarsWithAccessType import hu.bme.mit.theta.xcfa.isWritten import hu.bme.mit.theta.xcfa.model.StartLabel import hu.bme.mit.theta.xcfa.model.XCFA @@ -125,7 +141,7 @@ class XcfaCoiMultiThread(xcfa: XCFA) : XcfaCoi(xcfa) { private fun findInterProcessObservers(edge: XcfaEdge, prec: Prec) { val precVars = prec.usedVars - val writtenVars = edge.getVars().filter { it.value.isWritten && it.key in precVars } + val writtenVars = edge.collectVarsWithAccessType().filter { it.value.isWritten && it.key in precVars } if (writtenVars.isEmpty()) return xcfa.procedures.forEach { procedure -> diff --git a/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/coi/XcfaCoiSingleThread.kt b/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/coi/XcfaCoiSingleThread.kt index e86648fd6d..9d6b3fa8bb 100644 --- a/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/coi/XcfaCoiSingleThread.kt +++ b/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/coi/XcfaCoiSingleThread.kt @@ -1,3 +1,19 @@ +/* + * Copyright 2023 Budapest University of Technology and Economics + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package hu.bme.mit.theta.xcfa.analysis.coi import hu.bme.mit.theta.analysis.LTS diff --git a/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/por/XcfaAasporCoiLts.kt b/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/por/XcfaAasporCoiLts.kt index 562dd1e800..247eadcf47 100644 --- a/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/por/XcfaAasporCoiLts.kt +++ b/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/por/XcfaAasporCoiLts.kt @@ -1,3 +1,19 @@ +/* + * Copyright 2023 Budapest University of Technology and Economics + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package hu.bme.mit.theta.xcfa.analysis.por import hu.bme.mit.theta.analysis.LTS diff --git a/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/por/XcfaAasporLts.kt b/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/por/XcfaAasporLts.kt index ee5bcc5e21..6bcdb06dff 100644 --- a/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/por/XcfaAasporLts.kt +++ b/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/por/XcfaAasporLts.kt @@ -23,8 +23,10 @@ import hu.bme.mit.theta.xcfa.analysis.XcfaAction import hu.bme.mit.theta.xcfa.analysis.XcfaState import hu.bme.mit.theta.xcfa.model.XCFA -open class XcfaAasporLts(xcfa: XCFA, private val ignoredVarRegistry: MutableMap, MutableSet>) : - XcfaSporLts(xcfa) { +open class XcfaAasporLts( + xcfa: XCFA, + private val ignoredVarRegistry: MutableMap, MutableSet> +) : XcfaSporLts(xcfa) { override fun

getEnabledActionsFor(state: XcfaState<*>, exploredActions: Collection, prec: P): Set { diff --git a/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/por/XcfaDporLts.kt b/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/por/XcfaDporLts.kt index 6a60b9a5ae..88be0f44ed 100644 --- a/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/por/XcfaDporLts.kt +++ b/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/por/XcfaDporLts.kt @@ -25,7 +25,7 @@ import hu.bme.mit.theta.analysis.waitlist.Waitlist import hu.bme.mit.theta.xcfa.analysis.XcfaAction import hu.bme.mit.theta.xcfa.analysis.XcfaState import hu.bme.mit.theta.xcfa.analysis.getXcfaLts -import hu.bme.mit.theta.xcfa.getGlobalVars +import hu.bme.mit.theta.xcfa.collectIndirectGlobalVarAccesses import hu.bme.mit.theta.xcfa.isWritten import hu.bme.mit.theta.xcfa.model.XCFA import java.util.* @@ -456,8 +456,8 @@ open class XcfaDporLts(private val xcfa: XCFA) : LTS { protected open fun dependent(a: A, b: A): Boolean { if (a.pid == b.pid) return true - val aGlobalVars = a.edge.getGlobalVars(xcfa) - val bGlobalVars = b.edge.getGlobalVars(xcfa) + val aGlobalVars = a.edge.collectIndirectGlobalVarAccesses(xcfa) + val bGlobalVars = b.edge.collectIndirectGlobalVarAccesses(xcfa) // dependent if they access the same variable (at least one write) return (aGlobalVars.keys intersect bGlobalVars.keys).any { aGlobalVars[it].isWritten || bGlobalVars[it].isWritten } } @@ -488,8 +488,8 @@ class XcfaAadporLts(private val xcfa: XCFA) : XcfaDporLts(xcfa) { if (a.pid == b.pid) return true val precVars = prec?.usedVars?.toSet() ?: return super.dependent(a, b) - val aGlobalVars = a.edge.getGlobalVars(xcfa) - val bGlobalVars = b.edge.getGlobalVars(xcfa) + val aGlobalVars = a.edge.collectIndirectGlobalVarAccesses(xcfa) + val bGlobalVars = b.edge.collectIndirectGlobalVarAccesses(xcfa) // dependent if they access the same variable in the precision (at least one write) return (aGlobalVars.keys intersect bGlobalVars.keys intersect precVars).any { aGlobalVars[it].isWritten || bGlobalVars[it].isWritten } } diff --git a/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/por/XcfaSporLts.kt b/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/por/XcfaSporLts.kt index b384f1bc25..c2dac34f9e 100644 --- a/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/por/XcfaSporLts.kt +++ b/subprojects/xcfa/xcfa-analysis/src/main/java/hu/bme/mit/theta/xcfa/analysis/por/XcfaSporLts.kt @@ -19,13 +19,10 @@ import hu.bme.mit.theta.analysis.LTS import hu.bme.mit.theta.core.decl.Decl import hu.bme.mit.theta.core.decl.VarDecl import hu.bme.mit.theta.core.type.Type +import hu.bme.mit.theta.xcfa.* import hu.bme.mit.theta.xcfa.analysis.XcfaAction import hu.bme.mit.theta.xcfa.analysis.XcfaState import hu.bme.mit.theta.xcfa.analysis.getXcfaLts -import hu.bme.mit.theta.xcfa.collectVars -import hu.bme.mit.theta.xcfa.getFlatLabels -import hu.bme.mit.theta.xcfa.isAtomicBegin -import hu.bme.mit.theta.xcfa.isAtomicEnd import hu.bme.mit.theta.xcfa.model.* import java.util.* import java.util.function.Predicate @@ -78,7 +75,7 @@ open class XcfaSporLts(protected val xcfa: XCFA) : LTS, XcfaAction> */ override fun getEnabledActionsFor(state: XcfaState<*>): Set { // Collecting enabled actions - val allEnabledActions = getAllEnabledActionsFor(state) + val allEnabledActions = simpleXcfaLts.getEnabledActionsFor(state) // Calculating the source set starting from every (or some of the) enabled transition; the minimal source set is stored var minimalSourceSet = setOf() @@ -92,15 +89,6 @@ open class XcfaSporLts(protected val xcfa: XCFA) : LTS, XcfaAction> return minimalSourceSet } - /** - * Returns all enabled actions in the given state. - * - * @param state the state whose enabled actions we would like to know - * @return the enabled actions - */ - protected fun getAllEnabledActionsFor(state: XcfaState<*>): Collection = - simpleXcfaLts.getEnabledActionsFor(state) - /** * Returns the possible starting actions of a source set. * @@ -230,21 +218,11 @@ open class XcfaSporLts(protected val xcfa: XCFA) : LTS, XcfaAction> */ private fun getUsedSharedObjects(edge: XcfaEdge): Set> { val flatLabels = edge.getFlatLabels() - return if (flatLabels.any(XcfaLabel::isAtomicBegin)) { - getSharedObjectsWithBFS(edge) { it.getFlatLabels().none(XcfaLabel::isAtomicEnd) }.toSet() + val mutexes = flatLabels.filterIsInstance().flatMap { it.acquiredMutexes }.toMutableSet() + return if (mutexes.isEmpty()) { + getDirectlyUsedSharedObjects(edge) } else { - val lock = flatLabels.firstOrNull { - it is FenceLabel && it.labels.any { l -> l.startsWith("mutex_lock") } - } as FenceLabel? - if (lock != null) { - val mutex = lock.labels.first { l -> l.startsWith("mutex_lock") } - .substringAfter('(').substringBefore(')') - getSharedObjectsWithBFS(edge) { - it.getFlatLabels().none { fl -> fl is FenceLabel && "mutex_unlock(${mutex})" in fl.labels } - }.toSet() - } else { - getDirectlyUsedSharedObjects(edge) - } + getSharedObjectsWithBFS(edge) { it.mutexOperations(mutexes) }.toSet() } } @@ -287,21 +265,21 @@ open class XcfaSporLts(protected val xcfa: XCFA) : LTS, XcfaAction> private fun getSharedObjectsWithBFS(startTransition: XcfaEdge, goFurther: Predicate): Set> { val vars = mutableSetOf>() - val exploredTransitions = mutableListOf() - val transitionsToExplore = mutableListOf() - transitionsToExplore.add(startTransition) - while (transitionsToExplore.isNotEmpty()) { - val exploring = transitionsToExplore.removeFirst() + val exploredEdges = mutableListOf() + val edgesToExplore = mutableListOf() + edgesToExplore.add(startTransition) + while (edgesToExplore.isNotEmpty()) { + val exploring = edgesToExplore.removeFirst() vars.addAll(getDirectlyUsedSharedObjects(exploring)) if (goFurther.test(exploring)) { - val successiveTransitions = getSuccessiveTransitions(exploring) - for (newTransition in successiveTransitions) { - if (newTransition !in exploredTransitions) { - transitionsToExplore.add(newTransition) + val successiveEdges = getSuccessiveTransitions(exploring) + for (newEdge in successiveEdges) { + if (newEdge !in exploredEdges) { + edgesToExplore.add(newEdge) } } } - exploredTransitions.add(exploring) + exploredEdges.add(exploring) } return vars } @@ -325,8 +303,7 @@ open class XcfaSporLts(protected val xcfa: XCFA) : LTS, XcfaAction> val startThreads = edge.getFlatLabels().filterIsInstance().toList() if (startThreads.isNotEmpty()) { // for start thread labels, the thread procedure must be explored, too! startThreads.forEach { startThread -> - outgoingEdges.addAll( - xcfa.procedures.first { it.name == startThread.name }.initLoc.outgoingEdges) + outgoingEdges.addAll(xcfa.procedures.first { it.name == startThread.name }.initLoc.outgoingEdges) } } return outgoingEdges diff --git a/subprojects/xcfa/xcfa-analysis/src/test/java/hu/bme/mit/theta/xcfa/analysis/XcfaExplAnalysisTest.kt b/subprojects/xcfa/xcfa-analysis/src/test/java/hu/bme/mit/theta/xcfa/analysis/XcfaExplAnalysisTest.kt index 769a6d5845..5550cdb22b 100644 --- a/subprojects/xcfa/xcfa-analysis/src/test/java/hu/bme/mit/theta/xcfa/analysis/XcfaExplAnalysisTest.kt +++ b/subprojects/xcfa/xcfa-analysis/src/test/java/hu/bme/mit/theta/xcfa/analysis/XcfaExplAnalysisTest.kt @@ -32,6 +32,9 @@ import hu.bme.mit.theta.common.logging.NullLogger import hu.bme.mit.theta.core.type.booltype.BoolExprs import hu.bme.mit.theta.frontend.ParseContext import hu.bme.mit.theta.solver.z3.Z3SolverFactory +import hu.bme.mit.theta.xcfa.analysis.coi.ConeOfInfluence +import hu.bme.mit.theta.xcfa.analysis.coi.XcfaCoiMultiThread +import hu.bme.mit.theta.xcfa.analysis.coi.XcfaCoiSingleThread import hu.bme.mit.theta.xcfa.analysis.por.* import org.junit.jupiter.api.Assertions import org.junit.jupiter.params.ParameterizedTest @@ -65,6 +68,7 @@ class XcfaExplAnalysisTest { println("Testing NOPOR on $filepath...") val stream = javaClass.getResourceAsStream(filepath) val xcfa = getXcfaFromC(stream!!, ParseContext(), false, false).first + ConeOfInfluence = XcfaCoiMultiThread(xcfa) val analysis = ExplXcfaAnalysis( xcfa, @@ -108,6 +112,7 @@ class XcfaExplAnalysisTest { println("Testing SPOR on $filepath...") val stream = javaClass.getResourceAsStream(filepath) val xcfa = getXcfaFromC(stream!!, ParseContext(), false, false).first + ConeOfInfluence = XcfaCoiMultiThread(xcfa) val analysis = ExplXcfaAnalysis( xcfa, @@ -152,6 +157,7 @@ class XcfaExplAnalysisTest { println("Testing DPOR on $filepath...") val stream = javaClass.getResourceAsStream(filepath) val xcfa = getXcfaFromC(stream!!, ParseContext(), false, false).first + ConeOfInfluence = XcfaCoiMultiThread(xcfa) val analysis = ExplXcfaAnalysis( xcfa, @@ -194,6 +200,7 @@ class XcfaExplAnalysisTest { println("Testing AASPOR on $filepath...") val stream = javaClass.getResourceAsStream(filepath) val xcfa = getXcfaFromC(stream!!, ParseContext(), false, false).first + ConeOfInfluence = XcfaCoiMultiThread(xcfa) val analysis = ExplXcfaAnalysis( xcfa, @@ -239,6 +246,7 @@ class XcfaExplAnalysisTest { println("Testing AADPOR on $filepath...") val stream = javaClass.getResourceAsStream(filepath) val xcfa = getXcfaFromC(stream!!, ParseContext(), false, false).first + ConeOfInfluence = XcfaCoiMultiThread(xcfa) val analysis = ExplXcfaAnalysis( xcfa, diff --git a/subprojects/xcfa/xcfa-analysis/src/test/java/hu/bme/mit/theta/xcfa/analysis/XcfaPredAnalysisTest.kt b/subprojects/xcfa/xcfa-analysis/src/test/java/hu/bme/mit/theta/xcfa/analysis/XcfaPredAnalysisTest.kt index 42d75b94d6..c8caf4ef11 100644 --- a/subprojects/xcfa/xcfa-analysis/src/test/java/hu/bme/mit/theta/xcfa/analysis/XcfaPredAnalysisTest.kt +++ b/subprojects/xcfa/xcfa-analysis/src/test/java/hu/bme/mit/theta/xcfa/analysis/XcfaPredAnalysisTest.kt @@ -32,6 +32,8 @@ import hu.bme.mit.theta.common.logging.NullLogger import hu.bme.mit.theta.core.type.booltype.BoolExprs import hu.bme.mit.theta.frontend.ParseContext import hu.bme.mit.theta.solver.z3.Z3SolverFactory +import hu.bme.mit.theta.xcfa.analysis.coi.ConeOfInfluence +import hu.bme.mit.theta.xcfa.analysis.coi.XcfaCoiMultiThread import hu.bme.mit.theta.xcfa.analysis.por.* import org.junit.jupiter.api.Assertions import org.junit.jupiter.params.ParameterizedTest @@ -65,6 +67,7 @@ class XcfaPredAnalysisTest { println("Testing NOPOR on $filepath...") val stream = javaClass.getResourceAsStream(filepath) val xcfa = getXcfaFromC(stream!!, ParseContext(), false, false).first + ConeOfInfluence = XcfaCoiMultiThread(xcfa) val solver = Z3SolverFactory.getInstance().createSolver() val analysis = PredXcfaAnalysis( @@ -110,6 +113,7 @@ class XcfaPredAnalysisTest { println("Testing SPOR on $filepath...") val stream = javaClass.getResourceAsStream(filepath) val xcfa = getXcfaFromC(stream!!, ParseContext(), false, false).first + ConeOfInfluence = XcfaCoiMultiThread(xcfa) val solver = Z3SolverFactory.getInstance().createSolver() val analysis = PredXcfaAnalysis( @@ -156,6 +160,7 @@ class XcfaPredAnalysisTest { println("Testing DPOR on $filepath...") val stream = javaClass.getResourceAsStream(filepath) val xcfa = getXcfaFromC(stream!!, ParseContext(), false, false).first + ConeOfInfluence = XcfaCoiMultiThread(xcfa) val solver = Z3SolverFactory.getInstance().createSolver() val analysis = PredXcfaAnalysis( @@ -200,6 +205,7 @@ class XcfaPredAnalysisTest { println("Testing AASPOR on $filepath...") val stream = javaClass.getResourceAsStream(filepath) val xcfa = getXcfaFromC(stream!!, ParseContext(), false, false).first + ConeOfInfluence = XcfaCoiMultiThread(xcfa) val solver = Z3SolverFactory.getInstance().createSolver() val analysis = PredXcfaAnalysis( @@ -246,6 +252,7 @@ class XcfaPredAnalysisTest { println("Testing AADPOR on $filepath...") val stream = javaClass.getResourceAsStream(filepath) val xcfa = getXcfaFromC(stream!!, ParseContext(), false, false).first + ConeOfInfluence = XcfaCoiMultiThread(xcfa) val solver = Z3SolverFactory.getInstance().createSolver() val analysis = PredXcfaAnalysis( diff --git a/subprojects/xcfa/xcfa-cli/src/main/java/hu/bme/mit/theta/xcfa/cli/ConfigOptions.kt b/subprojects/xcfa/xcfa-cli/src/main/java/hu/bme/mit/theta/xcfa/cli/ConfigOptions.kt index 5dda459fa4..e015dca75e 100644 --- a/subprojects/xcfa/xcfa-cli/src/main/java/hu/bme/mit/theta/xcfa/cli/ConfigOptions.kt +++ b/subprojects/xcfa/xcfa-cli/src/main/java/hu/bme/mit/theta/xcfa/cli/ConfigOptions.kt @@ -181,7 +181,7 @@ enum class Refinement( ), MULTI_SEQ( refiner = { s, m -> - if(m == CexMonitorOptions.CHECK) error("CexMonitor is not implemented for MULTI_SEQ") + if (m == CexMonitorOptions.CHECK) error("CexMonitor is not implemented for MULTI_SEQ") ExprTraceSeqItpChecker.create(BoolExprs.True(), BoolExprs.True(), s.createItpSolver()) }, stopCriterion = StopCriterions.fullExploration() @@ -333,12 +333,14 @@ enum class ConeOfInfluenceMode( XcfaAasporCoiLts(xcfa, ivr, ConeOfInfluence.lts) }) ; + var porLts: LTS, XcfaAction>? = null } // TODO CexMonitor: disable for multi_seq // TODO add new monitor to xsts cli enum class CexMonitorOptions { + CHECK, DISABLE } diff --git a/subprojects/xcfa/xcfa-cli/src/main/java/hu/bme/mit/theta/xcfa/cli/XcfaCegarConfig.kt b/subprojects/xcfa/xcfa-cli/src/main/java/hu/bme/mit/theta/xcfa/cli/XcfaCegarConfig.kt index 13b080036f..04f274e821 100644 --- a/subprojects/xcfa/xcfa-cli/src/main/java/hu/bme/mit/theta/xcfa/cli/XcfaCegarConfig.kt +++ b/subprojects/xcfa/xcfa-cli/src/main/java/hu/bme/mit/theta/xcfa/cli/XcfaCegarConfig.kt @@ -92,7 +92,7 @@ data class XcfaCegarConfig( var pruneStrategy: PruneStrategy = PruneStrategy.LAZY, @Parameter(names = ["--cex-monitor"], description = "Warning: With some configurations (e.g. lazy pruning) it is POSSIBLE (but rare) that analysis is stopped, " + - "even though it could still progress. If in doubt, disable this monitor and check results.") + "even though it could still progress. If in doubt, disable this monitor and check results.") var cexMonitor: CexMonitorOptions = CexMonitorOptions.DISABLE, @Parameter(names = ["--timeout-ms"], description = "Timeout for verification (only valid with --strategy SERVER), use 0 for no timeout") diff --git a/subprojects/xcfa/xcfa-cli/src/main/java/hu/bme/mit/theta/xcfa/cli/XcfaCli.kt b/subprojects/xcfa/xcfa-cli/src/main/java/hu/bme/mit/theta/xcfa/cli/XcfaCli.kt index 19cd03eb05..dc63bc4cbe 100644 --- a/subprojects/xcfa/xcfa-cli/src/main/java/hu/bme/mit/theta/xcfa/cli/XcfaCli.kt +++ b/subprojects/xcfa/xcfa-cli/src/main/java/hu/bme/mit/theta/xcfa/cli/XcfaCli.kt @@ -51,8 +51,10 @@ import hu.bme.mit.theta.xcfa.cli.utils.XcfaWitnessWriter import hu.bme.mit.theta.xcfa.cli.witnesses.XcfaTraceConcretizer import hu.bme.mit.theta.xcfa.model.XCFA import hu.bme.mit.theta.xcfa.model.toDot +import hu.bme.mit.theta.xcfa.passes.ChcPasses import hu.bme.mit.theta.xcfa.passes.LbePass import hu.bme.mit.theta.xcfa.passes.LoopUnrollPass +import hu.bme.mit.theta.xcfa.toC import org.antlr.v4.runtime.CharStreams import java.io.File import java.io.FileInputStream @@ -142,6 +144,15 @@ class XcfaCli(private val args: Array) { @Parameter(names = ["--cex-solver"], description = "Concretizer solver name") var concretizerSolver: String = "Z3" + @Parameter(names = ["--to-c-use-arrays"]) + var useArr: Boolean = false + + @Parameter(names = ["--to-c-use-exact-arrays"]) + var useExArr: Boolean = false + + @Parameter(names = ["--to-c-use-ranges"]) + var useRange: Boolean = false + @Parameter(names = ["--validate-cex-solver"], description = "Activates a wrapper, which validates the assertions in the solver in each (SAT) check. Filters some solver issues.") var validateConcretizerSolver: Boolean = false @@ -149,7 +160,8 @@ class XcfaCli(private val args: Array) { @Parameter(names = ["--seed"], description = "Random seed used for DPOR") var randomSeed: Int = -1 - @Parameter(names = ["--arg-to-file"], description = "Visualize the resulting file here: https://ftsrg-edu.github.io/student-sisak-argviz/") + @Parameter(names = ["--arg-to-file"], + description = "Visualize the resulting file here: https://ftsrg-edu.github.io/student-sisak-argviz/") var argToFile: Boolean = false @Parameter @@ -197,7 +209,7 @@ class XcfaCli(private val args: Array) { stopwatch.elapsed(TimeUnit.MILLISECONDS) } ms)\n") - preVerificationLogging(logger, xcfa, gsonForOutput) + preVerificationLogging(logger, xcfa, gsonForOutput, parseContext) if (noAnalysis) { logger.write(Logger.Level.RESULT, "ParsingResult Success") @@ -283,7 +295,8 @@ class XcfaCli(private val args: Array) { } } - private fun preVerificationLogging(logger: ConsoleLogger, xcfa: XCFA, gsonForOutput: Gson) { + private fun preVerificationLogging(logger: ConsoleLogger, xcfa: XCFA, gsonForOutput: Gson, + parseContext: ParseContext) { if (outputResults && !svcomp) { resultFolder.mkdirs() @@ -293,6 +306,13 @@ class XcfaCli(private val args: Array) { val xcfaDotFile = File(resultFolder, "xcfa.dot") xcfaDotFile.writeText(xcfa.toDot()) + try { + val xcfaCFile = File(resultFolder, "xcfa.c") + xcfaCFile.writeText(xcfa.toC(parseContext, useArr, useExArr, useRange)) + } catch (e: Throwable) { + logger.write(Logger.Level.VERBOSE, "Could not emit C file") + } + val xcfaJsonFile = File(resultFolder, "xcfa.json") val uglyJson = gsonForOutput.toJson(xcfa) val create = GsonBuilder().setPrettyPrinting().create() @@ -330,7 +350,7 @@ class XcfaCli(private val args: Array) { try { when (inputType) { InputType.CHC -> { - parseChc(logger) + parseChc(logger, parseContext) } InputType.C -> { @@ -361,20 +381,20 @@ class XcfaCli(private val args: Array) { exitProcess(ExitCodes.FRONTEND_FAILED.code) } - private fun parseChc(logger: ConsoleLogger): XCFA { + private fun parseChc(logger: ConsoleLogger, parseContext: ParseContext): XCFA { var chcFrontend: ChcFrontend val xcfaBuilder = if (chcTransformation == ChcFrontend.ChcTransformation.PORTFOLIO) { // try forward, fallback to backward chcFrontend = ChcFrontend(ChcFrontend.ChcTransformation.FORWARD) try { - chcFrontend.buildXcfa(CharStreams.fromStream(FileInputStream(input!!))) + chcFrontend.buildXcfa(CharStreams.fromStream(FileInputStream(input!!)), ChcPasses(parseContext)) } catch (e: UnsupportedOperationException) { logger.write(Logger.Level.INFO, "Non-linear CHC found, retrying using backward transformation...") chcFrontend = ChcFrontend(ChcFrontend.ChcTransformation.BACKWARD) - chcFrontend.buildXcfa(CharStreams.fromStream(FileInputStream(input!!))) + chcFrontend.buildXcfa(CharStreams.fromStream(FileInputStream(input!!)), ChcPasses(parseContext)) } } else { chcFrontend = ChcFrontend(chcTransformation) - chcFrontend.buildXcfa(CharStreams.fromStream(FileInputStream(input!!))) + chcFrontend.buildXcfa(CharStreams.fromStream(FileInputStream(input!!)), ChcPasses(parseContext)) } return xcfaBuilder.build() } diff --git a/subprojects/xcfa/xcfa-cli/src/test/java/hu/bme/mit/theta/xcfa/cli/XcfaCliParseTest.kt b/subprojects/xcfa/xcfa-cli/src/test/java/hu/bme/mit/theta/xcfa/cli/XcfaCliParseTest.kt index 741b263fe6..c639fe37be 100644 --- a/subprojects/xcfa/xcfa-cli/src/test/java/hu/bme/mit/theta/xcfa/cli/XcfaCliParseTest.kt +++ b/subprojects/xcfa/xcfa-cli/src/test/java/hu/bme/mit/theta/xcfa/cli/XcfaCliParseTest.kt @@ -20,7 +20,6 @@ import hu.bme.mit.theta.xcfa.cli.XcfaCli.Companion.main import org.junit.jupiter.params.ParameterizedTest import org.junit.jupiter.params.provider.Arguments import org.junit.jupiter.params.provider.MethodSource -import java.util.* import java.util.stream.Stream import kotlin.io.path.createTempDirectory @@ -58,6 +57,23 @@ class XcfaCliParseTest { ) } + @JvmStatic + fun simpleCFiles(): Stream { + return Stream.of( + Arguments.of("/c/litmustest/singlethread/00assignment.c"), + Arguments.of("/c/litmustest/singlethread/01cast.c"), + Arguments.of("/c/litmustest/singlethread/02types.c"), + Arguments.of("/c/litmustest/singlethread/03bitwise.c"), + Arguments.of("/c/litmustest/singlethread/14ushort.c"), + Arguments.of("/c/litmustest/singlethread/15addition.c"), + Arguments.of("/c/litmustest/singlethread/16loop.c"), + Arguments.of("/c/litmustest/singlethread/17recursive.c"), + Arguments.of("/c/litmustest/singlethread/21namecollision.c"), + Arguments.of("/c/litmustest/singlethread/22nondet.c"), + Arguments.of("/c/litmustest/singlethread/23overflow.c"), + ) + } + @JvmStatic fun llvmFiles(): Stream { return Stream.of( @@ -95,19 +111,16 @@ class XcfaCliParseTest { Arguments.of("/chc/chc-LIA-Arrays_000.smt2", ChcFrontend.ChcTransformation.PORTFOLIO), Arguments.of("/chc/chc-LIA-Lin-Arrays_000.smt2", ChcFrontend.ChcTransformation.PORTFOLIO), Arguments.of("/chc/chc-LIA-Lin_000.smt2", ChcFrontend.ChcTransformation.PORTFOLIO), - Arguments.of("/chc/chc-LIA-nonlin-Arrays-nonrecADT_000.smt2", ChcFrontend.ChcTransformation.PORTFOLIO), Arguments.of("/chc/chc-LIA_000.smt2", ChcFrontend.ChcTransformation.PORTFOLIO), // Arguments.of("/chc/chc-LIA-Arrays_000.smt2", ChcFrontend.ChcTransformation.FORWARD), // nonlin Arguments.of("/chc/chc-LIA-Lin-Arrays_000.smt2", ChcFrontend.ChcTransformation.FORWARD), Arguments.of("/chc/chc-LIA-Lin_000.smt2", ChcFrontend.ChcTransformation.FORWARD), - Arguments.of("/chc/chc-LIA-nonlin-Arrays-nonrecADT_000.smt2", ChcFrontend.ChcTransformation.FORWARD), // Arguments.of("/chc/chc-LIA_000.smt2", ChcFrontend.ChcTransformation.FORWARD), // nonlin Arguments.of("/chc/chc-LIA-Arrays_000.smt2", ChcFrontend.ChcTransformation.BACKWARD), Arguments.of("/chc/chc-LIA-Lin-Arrays_000.smt2", ChcFrontend.ChcTransformation.BACKWARD), Arguments.of("/chc/chc-LIA-Lin_000.smt2", ChcFrontend.ChcTransformation.BACKWARD), - Arguments.of("/chc/chc-LIA-nonlin-Arrays-nonrecADT_000.smt2", ChcFrontend.ChcTransformation.BACKWARD), Arguments.of("/chc/chc-LIA_000.smt2", ChcFrontend.ChcTransformation.BACKWARD), ) } @@ -229,4 +242,26 @@ class XcfaCliParseTest { temp.toFile().deleteRecursively() } + @ParameterizedTest + @MethodSource("simpleCFiles") + fun testCParseRoundTrip(filePath: String) { + val temp = createTempDirectory() + main(arrayOf( + "--input-type", "C", + "--input", javaClass.getResource(filePath)!!.path, + "--parse-only", + "--stacktrace", + "--output-results", + "--output-directory", temp.toAbsolutePath().toString(), + )) + val xcfaC = temp.resolve("xcfa.c").toFile() + main(arrayOf( + "--input-type", "C", + "--input", xcfaC.absolutePath.toString(), + "--parse-only", + "--stacktrace", + )) + temp.toFile().deleteRecursively() + } + } diff --git a/subprojects/xcfa/xcfa-cli/src/test/java/hu/bme/mit/theta/xcfa/cli/XcfaToCTest.kt b/subprojects/xcfa/xcfa-cli/src/test/java/hu/bme/mit/theta/xcfa/cli/XcfaToCTest.kt new file mode 100644 index 0000000000..29fdfbce7e --- /dev/null +++ b/subprojects/xcfa/xcfa-cli/src/test/java/hu/bme/mit/theta/xcfa/cli/XcfaToCTest.kt @@ -0,0 +1,66 @@ +/* + * Copyright 2023 Budapest University of Technology and Economics + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package hu.bme.mit.theta.xcfa.cli + +import hu.bme.mit.theta.frontend.ParseContext +import hu.bme.mit.theta.frontend.chc.ChcFrontend +import hu.bme.mit.theta.frontend.chc.ChcFrontend.ChcTransformation +import hu.bme.mit.theta.xcfa.passes.ChcPasses +import hu.bme.mit.theta.xcfa.toC +import org.antlr.v4.runtime.CharStreams +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.Arguments +import org.junit.jupiter.params.provider.MethodSource +import java.io.FileInputStream +import java.util.stream.Stream +import kotlin.io.path.createTempDirectory + +class XcfaToCTest { + companion object { + + @JvmStatic + fun chcFiles(): Stream { + return Stream.of( + Arguments.of("/chc/chc-LIA-Lin-Arrays_000.smt2", ChcFrontend.ChcTransformation.FORWARD), + Arguments.of("/chc/chc-LIA-Arrays_000.smt2", ChcFrontend.ChcTransformation.BACKWARD), + ) + } + + @JvmStatic + fun dslFiles(): Stream { + return Stream.of( + Arguments.of("/dsl/async.xcfa.kts"), + Arguments.of("/dsl/sync.xcfa.kts"), + ) + } + } + + @ParameterizedTest + @MethodSource("chcFiles") + fun testRoundTrip(filePath: String, chcTransformation: ChcTransformation) { + val chcFrontend = ChcFrontend(chcTransformation) + val xcfa = chcFrontend.buildXcfa( + CharStreams.fromStream(FileInputStream(javaClass.getResource(filePath)!!.path)), ChcPasses( + ParseContext())).build() + val temp = createTempDirectory() + val file = temp.resolve("${filePath.split("/").last()}.c").also { + it.toFile().writeText(xcfa.toC(ParseContext(), + true, false, false)) + } + System.err.println(file) + } + +} diff --git a/subprojects/xcfa/xcfa-cli/src/test/resources/chc/chc-LIA-nonlin-Arrays-nonrecADT_000.smt2 b/subprojects/xcfa/xcfa-cli/src/test/resources/chc/chc-LIA-nonlin-Arrays-nonrecADT_000.smt2 deleted file mode 100644 index ed5bfd9131..0000000000 --- a/subprojects/xcfa/xcfa-cli/src/test/resources/chc/chc-LIA-nonlin-Arrays-nonrecADT_000.smt2 +++ /dev/null @@ -1,5209 +0,0 @@ -; ./prepared/solidity/./unit_tests/operators/delete_multid_array.sol_16_000.smt2 -(set-logic HORN) - -(declare-datatypes ((abi_type 0)) (((abi_type )))) -(declare-datatypes ((uint_array_tuple 0)) (((uint_array_tuple (uint_array_tuple_accessor_array (Array Int Int)) (uint_array_tuple_accessor_length Int))))) -(declare-datatypes ((uint_array_tuple_array_tuple 0)) (((uint_array_tuple_array_tuple (uint_array_tuple_array_tuple_accessor_array (Array Int uint_array_tuple)) (uint_array_tuple_array_tuple_accessor_length Int))))) -(declare-datatypes ((bytes_tuple 0)) (((bytes_tuple (bytes_tuple_accessor_array (Array Int Int)) (bytes_tuple_accessor_length Int))))) -(declare-datatypes ((state_type 0)) (((state_type (balances (Array Int Int)))))) -(declare-datatypes ((tx_type 0)) (((tx_type (block.basefee Int) (block.chainid Int) (block.coinbase Int) (block.difficulty Int) (block.gaslimit Int) (block.number Int) (block.timestamp Int) (blockhash (Array Int Int)) (msg.data bytes_tuple) (msg.sender Int) (msg.sig Int) (msg.value Int) (tx.gasprice Int) (tx.origin Int))))) -(declare-datatypes ((ecrecover_input_type 0)) (((ecrecover_input_type (hash Int) (v Int) (r Int) (s Int))))) -(declare-datatypes ((crypto_type 0)) (((crypto_type (ecrecover (Array ecrecover_input_type Int)) (keccak256 (Array bytes_tuple Int)) (ripemd160 (Array bytes_tuple Int)) (sha256 (Array bytes_tuple Int)))))) - -(declare-fun |block_39_function_g__102_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_60_function_i__205_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |summary_11_function_h__150_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |contract_initializer_entry_88_C_335_0| ( Int Int abi_type crypto_type tx_type state_type state_type uint_array_tuple uint_array_tuple_array_tuple uint_array_tuple uint_array_tuple_array_tuple ) Bool) -(declare-fun |summary_19_function_setB__334_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |summary_17_function_setA__300_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int ) Bool) -(declare-fun |block_70_function_j__279_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int ) Bool) -(declare-fun |block_31_return_function_f__58_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int ) Bool) -(declare-fun |block_42_function_g__102_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_41_function_g__102_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_56_function_i__205_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_65_return_function_j__279_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int ) Bool) -(declare-fun |block_74_function_j__279_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int ) Bool) -(declare-fun |summary_6_function_q__27_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple state_type uint_array_tuple uint_array_tuple_array_tuple ) Bool) -(declare-fun |block_37_return_function_g__102_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_73_function_j__279_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int ) Bool) -(declare-fun |block_85_function_setB__334_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_34_function_f__58_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int ) Bool) -(declare-fun |summary_9_function_g__102_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_82_return_function_setB__334_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |summary_8_function_f__58_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int ) Bool) -(declare-fun |block_36_g_101_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |error_target_45_0| ( ) Bool) -(declare-fun |summary_15_function_j__279_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int ) Bool) -(declare-fun |block_24_function_p__16_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple state_type uint_array_tuple uint_array_tuple_array_tuple ) Bool) -(declare-fun |block_44_h_149_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |summary_20_function_setB__334_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_75_function_setA__300_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int ) Bool) -(declare-fun |block_43_function_h__150_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |summary_14_function_i__205_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_86_function_setB__334_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |summary_constructor_2_C_335_0| ( Int Int abi_type crypto_type tx_type state_type state_type uint_array_tuple uint_array_tuple_array_tuple uint_array_tuple uint_array_tuple_array_tuple ) Bool) -(declare-fun |block_38_function_g__102_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_48_function_h__150_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_77_return_function_setA__300_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int ) Bool) -(declare-fun |block_54_i_204_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_71_function_j__279_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int ) Bool) -(declare-fun |block_22_p_15_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple state_type uint_array_tuple uint_array_tuple_array_tuple ) Bool) -(declare-fun |block_21_function_p__16_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple state_type uint_array_tuple uint_array_tuple_array_tuple ) Bool) -(declare-fun |contract_initializer_after_init_89_C_335_0| ( Int Int abi_type crypto_type tx_type state_type state_type uint_array_tuple uint_array_tuple_array_tuple uint_array_tuple uint_array_tuple_array_tuple ) Bool) -(declare-fun |block_79_function_setA__300_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int ) Bool) -(declare-fun |summary_7_function_f__58_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int ) Bool) -(declare-fun |block_49_function_h__150_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_27_return_function_q__27_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple state_type uint_array_tuple uint_array_tuple_array_tuple ) Bool) -(declare-fun |block_58_function_i__205_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |summary_16_function_j__279_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int ) Bool) -(declare-fun |block_76_setA_299_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int ) Bool) -(declare-fun |block_46_function_h__150_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_51_function_h__150_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |summary_13_function_i__205_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |implicit_constructor_entry_90_C_335_0| ( Int Int abi_type crypto_type tx_type state_type state_type uint_array_tuple uint_array_tuple_array_tuple uint_array_tuple uint_array_tuple_array_tuple ) Bool) -(declare-fun |block_28_function_q__27_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple state_type uint_array_tuple uint_array_tuple_array_tuple ) Bool) -(declare-fun |interface_0_C_335_0| ( Int abi_type crypto_type state_type uint_array_tuple uint_array_tuple_array_tuple ) Bool) -(declare-fun |block_72_function_j__279_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int ) Bool) -(declare-fun |block_29_function_f__58_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int ) Bool) -(declare-fun |block_23_return_function_p__16_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple state_type uint_array_tuple uint_array_tuple_array_tuple ) Bool) -(declare-fun |block_80_function_setB__334_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_68_function_j__279_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int ) Bool) -(declare-fun |block_25_function_q__27_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple state_type uint_array_tuple uint_array_tuple_array_tuple ) Bool) -(declare-fun |block_30_f_57_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int ) Bool) -(declare-fun |summary_3_function_p__16_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple state_type uint_array_tuple uint_array_tuple_array_tuple ) Bool) -(declare-fun |block_40_function_g__102_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |summary_4_function_p__16_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple state_type uint_array_tuple uint_array_tuple_array_tuple ) Bool) -(declare-fun |block_83_function_setB__334_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |contract_initializer_87_C_335_0| ( Int Int abi_type crypto_type tx_type state_type state_type uint_array_tuple uint_array_tuple_array_tuple uint_array_tuple uint_array_tuple_array_tuple ) Bool) -(declare-fun |block_35_function_g__102_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |summary_12_function_h__150_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_69_function_j__279_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int ) Bool) -(declare-fun |summary_5_function_q__27_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple state_type uint_array_tuple uint_array_tuple_array_tuple ) Bool) -(declare-fun |summary_10_function_g__102_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_57_function_i__205_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_63_function_j__279_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int ) Bool) -(declare-fun |block_53_function_i__205_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_66_function_j__279_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int ) Bool) -(declare-fun |block_47_function_h__150_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_50_function_h__150_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_33_function_f__58_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int ) Bool) -(declare-fun |summary_18_function_setA__300_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int ) Bool) -(declare-fun |block_52_function_h__150_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_67_function_j__279_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int ) Bool) -(declare-fun |block_59_function_i__205_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_61_function_i__205_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_26_q_26_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple state_type uint_array_tuple uint_array_tuple_array_tuple ) Bool) -(declare-fun |block_55_return_function_i__205_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_32_function_f__58_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int ) Bool) -(declare-fun |block_81_setB_333_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_78_function_setA__300_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int ) Bool) -(declare-fun |block_64_j_278_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int Int ) Bool) -(declare-fun |block_84_function_setB__334_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_62_function_i__205_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) -(declare-fun |block_45_return_function_h__150_335_0| ( Int Int abi_type crypto_type tx_type state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int state_type uint_array_tuple uint_array_tuple_array_tuple Int Int Int ) Bool) - -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) ) - (=> - (and - true - ) - (block_21_function_p__16_335_0 G J C F K H A D I B E) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) ) - (=> - (and - (block_21_function_p__16_335_0 G J C F K H A D I B E) - (and (= B A) (= I H) (= G 0) (= E D)) - ) - (block_22_p_15_335_0 G J C F K H A D I B E) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C uint_array_tuple) (D abi_type) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G crypto_type) (H Int) (I uint_array_tuple) (J uint_array_tuple) (K Int) (L state_type) (M state_type) (N Int) (O tx_type) ) - (=> - (and - (block_22_p_15_335_0 H N D G O L A E M B F) - (and (= I B) - (= C J) - (= (uint_array_tuple_accessor_length J) - (+ 1 (uint_array_tuple_accessor_length I))) - (= K 0) - (>= (uint_array_tuple_accessor_length I) 0) - (>= K 0) - (not (<= 115792089237316195423570985008687907853269984665640564039457584007913129639933 - (uint_array_tuple_accessor_length I))) - (<= K - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (= (uint_array_tuple_accessor_array J) - (store (uint_array_tuple_accessor_array I) - (uint_array_tuple_accessor_length I) - 0))) - ) - (block_23_return_function_p__16_335_0 H N D G O L A E M C F) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) ) - (=> - (and - (block_23_return_function_p__16_335_0 G J C F K H A D I B E) - true - ) - (summary_3_function_p__16_335_0 G J C F K H A D I B E) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) ) - (=> - (and - true - ) - (block_24_function_p__16_335_0 G J C F K H A D I B E) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C uint_array_tuple) (D abi_type) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K Int) (L state_type) (M state_type) (N state_type) (O state_type) (P Int) (Q tx_type) ) - (=> - (and - (block_24_function_p__16_335_0 I P D H Q L A E M B F) - (summary_3_function_p__16_335_0 J P D H Q N B F O C G) - (let ((a!1 (store (balances M) P (+ (select (balances M) P) K))) - (a!2 (= (select (bytes_tuple_accessor_array (msg.data Q)) 3) 106)) - (a!3 (= (select (bytes_tuple_accessor_array (msg.data Q)) 2) 136)) - (a!4 (= (select (bytes_tuple_accessor_array (msg.data Q)) 1) 232)) - (a!5 (= (select (bytes_tuple_accessor_array (msg.data Q)) 0) 154)) - (a!6 (>= (+ (select (balances M) P) K) 0)) - (a!7 (<= (+ (select (balances M) P) K) - 115792089237316195423570985008687907853269984665640564039457584007913129639935))) - (and (= B A) - (= N (state_type a!1)) - (= M L) - a!2 - a!3 - a!4 - a!5 - (= (msg.value Q) 0) - (= (msg.sig Q) 2598930538) - (= I 0) - (>= (tx.origin Q) 0) - (>= (tx.gasprice Q) 0) - (>= (msg.value Q) 0) - (>= (msg.sender Q) 0) - (>= (block.timestamp Q) 0) - (>= (block.number Q) 0) - (>= (block.gaslimit Q) 0) - (>= (block.difficulty Q) 0) - (>= (block.coinbase Q) 0) - (>= (block.chainid Q) 0) - (>= (block.basefee Q) 0) - (>= (bytes_tuple_accessor_length (msg.data Q)) 4) - a!6 - (>= K (msg.value Q)) - (<= (tx.origin Q) 1461501637330902918203684832716283019655932542975) - (<= (tx.gasprice Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (msg.value Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (msg.sender Q) 1461501637330902918203684832716283019655932542975) - (<= (block.timestamp Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.number Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.gaslimit Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.difficulty Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.coinbase Q) 1461501637330902918203684832716283019655932542975) - (<= (block.chainid Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.basefee Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - a!7 - (= F E))) - ) - (summary_4_function_p__16_335_0 J P D H Q L A E O C G) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) ) - (=> - (and - (summary_4_function_p__16_335_0 G J C F K H A D I B E) - (interface_0_C_335_0 J C F H A D) - (= G 0) - ) - (interface_0_C_335_0 J C F I B E) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) ) - (=> - (and - (summary_6_function_q__27_335_0 G J C F K H A D I B E) - (interface_0_C_335_0 J C F H A D) - (= G 0) - ) - (interface_0_C_335_0 J C F I B E) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) ) - (=> - (and - (summary_8_function_f__58_335_0 G J C F K H A D N L I B E O M) - (interface_0_C_335_0 J C F H A D) - (= G 0) - ) - (interface_0_C_335_0 J C F I B E) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (summary_10_function_g__102_335_0 G J C F K H A D N P L I B E O Q M) - (interface_0_C_335_0 J C F H A D) - (= G 0) - ) - (interface_0_C_335_0 J C F I B E) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (summary_12_function_h__150_335_0 G J C F K H A D N P L I B E O Q M) - (interface_0_C_335_0 J C F H A D) - (= G 0) - ) - (interface_0_C_335_0 J C F I B E) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (summary_14_function_i__205_335_0 G J C F K H A D N P L I B E O Q M) - (interface_0_C_335_0 J C F H A D) - (= G 0) - ) - (interface_0_C_335_0 J C F I B E) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) ) - (=> - (and - (summary_16_function_j__279_335_0 G J C F K H A D N P R L I B E O Q S M) - (interface_0_C_335_0 J C F H A D) - (= G 0) - ) - (interface_0_C_335_0 J C F I B E) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) ) - (=> - (and - (summary_18_function_setA__300_335_0 G J C F K H A D L N I B E M O) - (interface_0_C_335_0 J C F H A D) - (= G 0) - ) - (interface_0_C_335_0 J C F I B E) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (summary_20_function_setB__334_335_0 G J C F K H A D L N P I B E M O Q) - (interface_0_C_335_0 J C F H A D) - (= G 0) - ) - (interface_0_C_335_0 J C F I B E) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) ) - (=> - (and - (summary_constructor_2_C_335_0 G J C F K H I A D B E) - (and (= G 0) - (>= (tx.origin K) 0) - (>= (tx.gasprice K) 0) - (>= (msg.value K) 0) - (>= (msg.sender K) 0) - (>= (block.timestamp K) 0) - (>= (block.number K) 0) - (>= (block.gaslimit K) 0) - (>= (block.difficulty K) 0) - (>= (block.coinbase K) 0) - (>= (block.chainid K) 0) - (>= (block.basefee K) 0) - (<= (tx.origin K) 1461501637330902918203684832716283019655932542975) - (<= (tx.gasprice K) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (msg.value K) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (msg.sender K) 1461501637330902918203684832716283019655932542975) - (<= (block.timestamp K) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.number K) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.gaslimit K) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.difficulty K) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.coinbase K) 1461501637330902918203684832716283019655932542975) - (<= (block.chainid K) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.basefee K) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (= (msg.value K) 0)) - ) - (interface_0_C_335_0 J C F I B E) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) ) - (=> - (and - true - ) - (block_25_function_q__27_335_0 G J C F K H A D I B E) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) ) - (=> - (and - (block_25_function_q__27_335_0 G J C F K H A D I B E) - (and (= B A) (= I H) (= G 0) (= E D)) - ) - (block_26_q_26_335_0 G J C F K H A D I B E) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J uint_array_tuple_array_tuple) (K uint_array_tuple_array_tuple) (L uint_array_tuple_array_tuple) (M uint_array_tuple) (N uint_array_tuple) (O Int) (P state_type) (Q state_type) (R Int) (S tx_type) ) - (=> - (and - (block_26_q_26_335_0 I R C H S P A D Q B E) - (let ((a!1 (= (uint_array_tuple_array_tuple_accessor_array K) - (store (uint_array_tuple_array_tuple_accessor_array J) - (uint_array_tuple_array_tuple_accessor_length J) - (uint_array_tuple ((as const (Array Int Int)) 0) 0)))) - (a!2 (= (uint_array_tuple_array_tuple_accessor_array L) - (store (uint_array_tuple_array_tuple_accessor_array K) - (+ (- 1) (uint_array_tuple_array_tuple_accessor_length K)) - N)))) - (and a!1 - (= (uint_array_tuple_accessor_array N) - (store (uint_array_tuple_accessor_array M) - (uint_array_tuple_accessor_length M) - 0)) - (= F K) - (= G L) - (= J E) - (= M (uint_array_tuple ((as const (Array Int Int)) 0) 0)) - (= (uint_array_tuple_array_tuple_accessor_length L) - (uint_array_tuple_array_tuple_accessor_length K)) - (= (uint_array_tuple_array_tuple_accessor_length K) - (+ 1 (uint_array_tuple_array_tuple_accessor_length J))) - (= (uint_array_tuple_accessor_length N) - (+ 1 (uint_array_tuple_accessor_length M))) - (= O 0) - (>= (uint_array_tuple_array_tuple_accessor_length J) 0) - (>= (uint_array_tuple_accessor_length M) 0) - (>= O 0) - (not (<= 115792089237316195423570985008687907853269984665640564039457584007913129639933 - (uint_array_tuple_array_tuple_accessor_length J))) - (not (<= 115792089237316195423570985008687907853269984665640564039457584007913129639933 - (uint_array_tuple_accessor_length M))) - (<= O - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - a!2)) - ) - (block_27_return_function_q__27_335_0 I R C H S P A D Q B G) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) ) - (=> - (and - (block_27_return_function_q__27_335_0 G J C F K H A D I B E) - true - ) - (summary_5_function_q__27_335_0 G J C F K H A D I B E) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) ) - (=> - (and - true - ) - (block_28_function_q__27_335_0 G J C F K H A D I B E) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C uint_array_tuple) (D abi_type) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K Int) (L state_type) (M state_type) (N state_type) (O state_type) (P Int) (Q tx_type) ) - (=> - (and - (block_28_function_q__27_335_0 I P D H Q L A E M B F) - (summary_5_function_q__27_335_0 J P D H Q N B F O C G) - (let ((a!1 (store (balances M) P (+ (select (balances M) P) K))) - (a!2 (= (select (bytes_tuple_accessor_array (msg.data Q)) 3) 130)) - (a!3 (= (select (bytes_tuple_accessor_array (msg.data Q)) 2) 178)) - (a!4 (= (select (bytes_tuple_accessor_array (msg.data Q)) 1) 58)) - (a!5 (= (select (bytes_tuple_accessor_array (msg.data Q)) 0) 253)) - (a!6 (>= (+ (select (balances M) P) K) 0)) - (a!7 (<= (+ (select (balances M) P) K) - 115792089237316195423570985008687907853269984665640564039457584007913129639935))) - (and (= B A) - (= N (state_type a!1)) - (= M L) - a!2 - a!3 - a!4 - a!5 - (= (msg.value Q) 0) - (= (msg.sig Q) 4248482434) - (= I 0) - (>= (tx.origin Q) 0) - (>= (tx.gasprice Q) 0) - (>= (msg.value Q) 0) - (>= (msg.sender Q) 0) - (>= (block.timestamp Q) 0) - (>= (block.number Q) 0) - (>= (block.gaslimit Q) 0) - (>= (block.difficulty Q) 0) - (>= (block.coinbase Q) 0) - (>= (block.chainid Q) 0) - (>= (block.basefee Q) 0) - (>= (bytes_tuple_accessor_length (msg.data Q)) 4) - a!6 - (>= K (msg.value Q)) - (<= (tx.origin Q) 1461501637330902918203684832716283019655932542975) - (<= (tx.gasprice Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (msg.value Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (msg.sender Q) 1461501637330902918203684832716283019655932542975) - (<= (block.timestamp Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.number Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.gaslimit Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.difficulty Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.coinbase Q) 1461501637330902918203684832716283019655932542975) - (<= (block.chainid Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.basefee Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - a!7 - (= F E))) - ) - (summary_6_function_q__27_335_0 J P D H Q L A E O C G) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) ) - (=> - (and - true - ) - (block_29_function_f__58_335_0 G J C F K H A D N L I B E O M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) ) - (=> - (and - (block_29_function_f__58_335_0 G J C F K H A D N L I B E O M) - (and (= B A) (= I H) (= G 0) (= O N) (= M L) (= E D)) - ) - (block_30_f_57_335_0 G J C F K H A D N L I B E O M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H Int) (I Int) (J uint_array_tuple) (K Int) (L Bool) (M uint_array_tuple) (N Int) (O Int) (P state_type) (Q state_type) (R Int) (S tx_type) (T Int) (U Int) (V Int) (W Int) ) - (=> - (and - (block_30_f_57_335_0 G R C F S P A D V T Q B E W U) - (and (= M B) - (= J B) - (= K (uint_array_tuple_accessor_length J)) - (= O U) - (= I W) - (= H 2) - (= N W) - (>= K 0) - (>= O 0) - (>= I 0) - (>= W 0) - (>= U 0) - (>= N 0) - (<= K - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= O - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= W - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= N - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 N)) (>= N (uint_array_tuple_accessor_length M))) - (= L true) - (not (= (<= K I) L))) - ) - (block_32_function_f__58_335_0 H R C F S P A D V T Q B E W U) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) ) - (=> - (and - (block_32_function_f__58_335_0 G J C F K H A D N L I B E O M) - true - ) - (summary_7_function_f__58_335_0 G J C F K H A D N L I B E O M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) ) - (=> - (and - (block_33_function_f__58_335_0 G J C F K H A D N L I B E O M) - true - ) - (summary_7_function_f__58_335_0 G J C F K H A D N L I B E O M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) ) - (=> - (and - (block_31_return_function_f__58_335_0 G J C F K H A D N L I B E O M) - true - ) - (summary_7_function_f__58_335_0 G J C F K H A D N L I B E O M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C uint_array_tuple) (D uint_array_tuple) (E abi_type) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K Int) (L Int) (M uint_array_tuple) (N Int) (O Bool) (P uint_array_tuple) (Q uint_array_tuple) (R uint_array_tuple) (S Int) (T Int) (U Int) (V Int) (W Int) (X uint_array_tuple) (Y uint_array_tuple) (Z Int) (A1 Int) (B1 Bool) (C1 state_type) (D1 state_type) (E1 Int) (F1 tx_type) (G1 Int) (H1 Int) (I1 Int) (J1 Int) ) - (=> - (and - (block_30_f_57_335_0 I E1 E H F1 C1 A F I1 G1 D1 B G J1 H1) - (let ((a!1 (= C - (uint_array_tuple (store (uint_array_tuple_accessor_array Q) S W) - (uint_array_tuple_accessor_length Q))))) - (and (= B1 (= Z A1)) - (= M B) - (= Y D) - a!1 - (= D (uint_array_tuple ((as const (Array Int Int)) 0) 0)) - (= R C) - (= Q B) - (= P B) - (= X C) - (= J I) - (= W V) - (= L J1) - (= K 3) - (= V H1) - (= S J1) - (= N (uint_array_tuple_accessor_length M)) - (= U (select (uint_array_tuple_accessor_array Q) S)) - (= T (select (uint_array_tuple_accessor_array B) S)) - (= A1 0) - (= Z (uint_array_tuple_accessor_length Y)) - (>= W 0) - (>= L 0) - (>= V 0) - (>= S 0) - (>= N 0) - (>= U 0) - (>= T 0) - (>= J1 0) - (>= H1 0) - (>= Z 0) - (<= W - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= L - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= V - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= S - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= N - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= T - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= J1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= H1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Z - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (= O true) - (not B1) - (not (= (<= N L) O)))) - ) - (block_33_function_f__58_335_0 K E1 E H F1 C1 A F I1 G1 D1 D G J1 H1) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C uint_array_tuple) (D uint_array_tuple) (E abi_type) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K Int) (L Int) (M uint_array_tuple) (N Int) (O Bool) (P uint_array_tuple) (Q uint_array_tuple) (R uint_array_tuple) (S Int) (T Int) (U Int) (V Int) (W Int) (X uint_array_tuple) (Y uint_array_tuple) (Z Int) (A1 Int) (B1 Bool) (C1 state_type) (D1 state_type) (E1 Int) (F1 tx_type) (G1 Int) (H1 Int) (I1 Int) (J1 Int) ) - (=> - (and - (block_30_f_57_335_0 I E1 E H F1 C1 A F I1 G1 D1 B G J1 H1) - (let ((a!1 (= C - (uint_array_tuple (store (uint_array_tuple_accessor_array Q) S W) - (uint_array_tuple_accessor_length Q))))) - (and (= B1 (= Z A1)) - (= M B) - (= Y D) - a!1 - (= D (uint_array_tuple ((as const (Array Int Int)) 0) 0)) - (= R C) - (= Q B) - (= P B) - (= X C) - (= J I) - (= W V) - (= L J1) - (= K J) - (= V H1) - (= S J1) - (= N (uint_array_tuple_accessor_length M)) - (= U (select (uint_array_tuple_accessor_array Q) S)) - (= T (select (uint_array_tuple_accessor_array B) S)) - (= A1 0) - (= Z (uint_array_tuple_accessor_length Y)) - (>= W 0) - (>= L 0) - (>= V 0) - (>= S 0) - (>= N 0) - (>= U 0) - (>= T 0) - (>= J1 0) - (>= H1 0) - (>= Z 0) - (<= W - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= L - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= V - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= S - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= N - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= T - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= J1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= H1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Z - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (= O true) - (not (= (<= N L) O)))) - ) - (block_31_return_function_f__58_335_0 K E1 E H F1 C1 A F I1 G1 D1 D G J1 H1) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) ) - (=> - (and - true - ) - (block_34_function_f__58_335_0 G J C F K H A D N L I B E O M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C uint_array_tuple) (D abi_type) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K Int) (L state_type) (M state_type) (N state_type) (O state_type) (P Int) (Q tx_type) (R Int) (S Int) (T Int) (U Int) (V Int) (W Int) ) - (=> - (and - (block_34_function_f__58_335_0 I P D H Q L A E U R M B F V S) - (summary_7_function_f__58_335_0 J P D H Q N B F V S O C G W T) - (let ((a!1 (store (balances M) P (+ (select (balances M) P) K))) - (a!2 (= (select (bytes_tuple_accessor_array (msg.data Q)) 3) 46)) - (a!3 (= (select (bytes_tuple_accessor_array (msg.data Q)) 2) 170)) - (a!4 (= (select (bytes_tuple_accessor_array (msg.data Q)) 1) 209)) - (a!5 (= (select (bytes_tuple_accessor_array (msg.data Q)) 0) 19)) - (a!6 (>= (+ (select (balances M) P) K) 0)) - (a!7 (<= (+ (select (balances M) P) K) - 115792089237316195423570985008687907853269984665640564039457584007913129639935))) - (and (= B A) - (= M L) - (= N (state_type a!1)) - a!2 - a!3 - a!4 - a!5 - (= (msg.value Q) 0) - (= (msg.sig Q) 332507694) - (= S R) - (= I 0) - (= V U) - (>= (tx.origin Q) 0) - (>= (tx.gasprice Q) 0) - (>= (msg.value Q) 0) - (>= (msg.sender Q) 0) - (>= (block.timestamp Q) 0) - (>= (block.number Q) 0) - (>= (block.gaslimit Q) 0) - (>= (block.difficulty Q) 0) - (>= (block.coinbase Q) 0) - (>= (block.chainid Q) 0) - (>= (block.basefee Q) 0) - (>= (bytes_tuple_accessor_length (msg.data Q)) 4) - a!6 - (>= K (msg.value Q)) - (<= (tx.origin Q) 1461501637330902918203684832716283019655932542975) - (<= (tx.gasprice Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (msg.value Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (msg.sender Q) 1461501637330902918203684832716283019655932542975) - (<= (block.timestamp Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.number Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.gaslimit Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.difficulty Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.coinbase Q) 1461501637330902918203684832716283019655932542975) - (<= (block.chainid Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.basefee Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - a!7 - (= F E))) - ) - (summary_8_function_f__58_335_0 J P D H Q L A E U R O C G W T) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - true - ) - (block_35_function_g__102_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_35_function_g__102_335_0 G J C F K H A D N P L I B E O Q M) - (and (= B A) (= I H) (= M L) (= Q P) (= O N) (= G 0) (= E D)) - ) - (block_36_g_101_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H Int) (I Int) (J uint_array_tuple_array_tuple) (K Int) (L Bool) (M Int) (N uint_array_tuple_array_tuple) (O Int) (P state_type) (Q state_type) (R Int) (S tx_type) (T Int) (U Int) (V Int) (W Int) (X Int) (Y Int) ) - (=> - (and - (block_36_g_101_335_0 G R C F S P A D V X T Q B E W Y U) - (and (= J E) - (= N E) - (= M Y) - (= K (uint_array_tuple_array_tuple_accessor_length J)) - (= H 5) - (= I W) - (= O W) - (>= M 0) - (>= U 0) - (>= K 0) - (>= I 0) - (>= Y 0) - (>= W 0) - (>= O 0) - (<= M - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= K - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Y - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= W - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= O - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 O)) (>= O (uint_array_tuple_array_tuple_accessor_length N))) - (= L true) - (not (= (<= K I) L))) - ) - (block_38_function_g__102_335_0 H R C F S P A D V X T Q B E W Y U) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_38_function_g__102_335_0 G J C F K H A D N P L I B E O Q M) - true - ) - (summary_9_function_g__102_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_39_function_g__102_335_0 G J C F K H A D N P L I B E O Q M) - true - ) - (summary_9_function_g__102_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_40_function_g__102_335_0 G J C F K H A D N P L I B E O Q M) - true - ) - (summary_9_function_g__102_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_41_function_g__102_335_0 G J C F K H A D N P L I B E O Q M) - true - ) - (summary_9_function_g__102_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_37_return_function_g__102_335_0 G J C F K H A D N P L I B E O Q M) - true - ) - (summary_9_function_g__102_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H Int) (I Int) (J Int) (K uint_array_tuple_array_tuple) (L Int) (M Bool) (N Int) (O uint_array_tuple_array_tuple) (P Int) (Q uint_array_tuple) (R Int) (S Bool) (T uint_array_tuple_array_tuple) (U Int) (V Int) (W state_type) (X state_type) (Y Int) (Z tx_type) (A1 Int) (B1 Int) (C1 Int) (D1 Int) (E1 Int) (F1 Int) ) - (=> - (and - (block_36_g_101_335_0 G Y C F Z W A D C1 E1 A1 X B E D1 F1 B1) - (and (not (= (<= R N) S)) - (= T E) - (= O E) - (= K E) - (= Q (select (uint_array_tuple_array_tuple_accessor_array E) P)) - (= L (uint_array_tuple_array_tuple_accessor_length K)) - (= H G) - (= N F1) - (= I 6) - (= R (uint_array_tuple_accessor_length Q)) - (= J D1) - (= U D1) - (= P D1) - (= V B1) - (>= (uint_array_tuple_accessor_length Q) 0) - (>= L 0) - (>= B1 0) - (>= N 0) - (>= R 0) - (>= J 0) - (>= U 0) - (>= P 0) - (>= F1 0) - (>= D1 0) - (>= V 0) - (<= L - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= B1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= N - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= R - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= J - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= P - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= F1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= D1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= V - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 U)) (>= U (uint_array_tuple_array_tuple_accessor_length T))) - (= M true) - (= S true) - (not (= (<= L J) M))) - ) - (block_39_function_g__102_335_0 I Y C F Z W A D C1 E1 A1 X B E D1 F1 B1) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H Int) (I Int) (J Int) (K Int) (L uint_array_tuple_array_tuple) (M Int) (N Bool) (O Int) (P uint_array_tuple_array_tuple) (Q Int) (R uint_array_tuple) (S Int) (T Bool) (U uint_array_tuple_array_tuple) (V Int) (W Int) (X uint_array_tuple) (Y Int) (Z state_type) (A1 state_type) (B1 Int) (C1 tx_type) (D1 Int) (E1 Int) (F1 Int) (G1 Int) (H1 Int) (I1 Int) ) - (=> - (and - (block_36_g_101_335_0 G B1 C F C1 Z A D F1 H1 D1 A1 B E G1 I1 E1) - (and (not (= (<= S O) T)) - (= P E) - (= L E) - (= U E) - (= X (select (uint_array_tuple_array_tuple_accessor_array E) V)) - (= R (select (uint_array_tuple_array_tuple_accessor_array E) Q)) - (= I H) - (= W I1) - (= V G1) - (= O I1) - (= K G1) - (= J 7) - (= Q G1) - (= H G) - (= M (uint_array_tuple_array_tuple_accessor_length L)) - (= S (uint_array_tuple_accessor_length R)) - (= Y E1) - (>= (uint_array_tuple_accessor_length X) 0) - (>= (uint_array_tuple_accessor_length R) 0) - (>= W 0) - (>= V 0) - (>= O 0) - (>= E1 0) - (>= K 0) - (>= Q 0) - (>= M 0) - (>= S 0) - (>= I1 0) - (>= G1 0) - (>= Y 0) - (<= W - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= V - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= O - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= E1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= K - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Q - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= M - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= S - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= G1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Y - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 W)) (>= W (uint_array_tuple_accessor_length X))) - (= T true) - (= N true) - (not (= (<= M K) N))) - ) - (block_40_function_g__102_335_0 J B1 C F C1 Z A D F1 H1 D1 A1 B E G1 I1 E1) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O uint_array_tuple_array_tuple) (P Int) (Q Bool) (R Int) (S uint_array_tuple_array_tuple) (T Int) (U uint_array_tuple) (V Int) (W Bool) (X uint_array_tuple_array_tuple) (Y uint_array_tuple_array_tuple) (Z uint_array_tuple_array_tuple) (A1 Int) (B1 Int) (C1 uint_array_tuple) (D1 uint_array_tuple) (E1 Int) (F1 Int) (G1 Int) (H1 Int) (I1 uint_array_tuple_array_tuple) (J1 uint_array_tuple_array_tuple) (K1 Int) (L1 Int) (M1 Bool) (N1 state_type) (O1 state_type) (P1 Int) (Q1 tx_type) (R1 Int) (S1 Int) (T1 Int) (U1 Int) (V1 Int) (W1 Int) ) - (=> - (and - (block_36_g_101_335_0 I P1 C H Q1 N1 A D T1 V1 R1 O1 B E U1 W1 S1) - (let ((a!1 (store (uint_array_tuple_array_tuple_accessor_array Y) - A1 - (uint_array_tuple (store (uint_array_tuple_accessor_array C1) - B1 - H1) - (uint_array_tuple_accessor_length C1)))) - (a!2 (uint_array_tuple_array_tuple - ((as const (Array Int uint_array_tuple)) - (uint_array_tuple ((as const (Array Int Int)) 0) 0)) - 0))) - (and (not (= (<= V R) W)) - (= M1 (= K1 L1)) - (= F - (uint_array_tuple_array_tuple - a!1 - (uint_array_tuple_array_tuple_accessor_length Y))) - (= G a!2) - (= O E) - (= X E) - (= Y E) - (= J1 G) - (= S E) - (= Z F) - (= I1 F) - (= U (select (uint_array_tuple_array_tuple_accessor_array E) T)) - (= D1 (select (uint_array_tuple_array_tuple_accessor_array Y) A1)) - (= C1 (select (uint_array_tuple_array_tuple_accessor_array E) A1)) - (= K J) - (= L K) - (= K1 (uint_array_tuple_array_tuple_accessor_length J1)) - (= T U1) - (= P (uint_array_tuple_array_tuple_accessor_length O)) - (= J I) - (= R W1) - (= N U1) - (= M 8) - (= E1 (select (uint_array_tuple_accessor_array C1) B1)) - (= V (uint_array_tuple_accessor_length U)) - (= F1 (select (uint_array_tuple_accessor_array C1) B1)) - (= B1 W1) - (= A1 U1) - (= L1 0) - (= H1 G1) - (= G1 S1) - (>= (uint_array_tuple_accessor_length U) 0) - (>= (uint_array_tuple_accessor_length C1) 0) - (>= K1 0) - (>= T 0) - (>= P 0) - (>= S1 0) - (>= R 0) - (>= N 0) - (>= E1 0) - (>= V 0) - (>= F1 0) - (>= B1 0) - (>= A1 0) - (>= H1 0) - (>= G1 0) - (>= W1 0) - (>= U1 0) - (<= K1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= T - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= P - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= S1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= R - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= N - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= E1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= V - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= F1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= B1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= A1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= H1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= G1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= W1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (= Q true) - (= W true) - (not M1) - (not (= (<= P N) Q)))) - ) - (block_41_function_g__102_335_0 M P1 C H Q1 N1 A D T1 V1 R1 O1 B G U1 W1 S1) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O uint_array_tuple_array_tuple) (P Int) (Q Bool) (R Int) (S uint_array_tuple_array_tuple) (T Int) (U uint_array_tuple) (V Int) (W Bool) (X uint_array_tuple_array_tuple) (Y uint_array_tuple_array_tuple) (Z uint_array_tuple_array_tuple) (A1 Int) (B1 Int) (C1 uint_array_tuple) (D1 uint_array_tuple) (E1 Int) (F1 Int) (G1 Int) (H1 Int) (I1 uint_array_tuple_array_tuple) (J1 uint_array_tuple_array_tuple) (K1 Int) (L1 Int) (M1 Bool) (N1 state_type) (O1 state_type) (P1 Int) (Q1 tx_type) (R1 Int) (S1 Int) (T1 Int) (U1 Int) (V1 Int) (W1 Int) ) - (=> - (and - (block_36_g_101_335_0 I P1 C H Q1 N1 A D T1 V1 R1 O1 B E U1 W1 S1) - (let ((a!1 (store (uint_array_tuple_array_tuple_accessor_array Y) - A1 - (uint_array_tuple (store (uint_array_tuple_accessor_array C1) - B1 - H1) - (uint_array_tuple_accessor_length C1)))) - (a!2 (uint_array_tuple_array_tuple - ((as const (Array Int uint_array_tuple)) - (uint_array_tuple ((as const (Array Int Int)) 0) 0)) - 0))) - (and (not (= (<= V R) W)) - (= M1 (= K1 L1)) - (= F - (uint_array_tuple_array_tuple - a!1 - (uint_array_tuple_array_tuple_accessor_length Y))) - (= G a!2) - (= O E) - (= X E) - (= Y E) - (= J1 G) - (= S E) - (= Z F) - (= I1 F) - (= U (select (uint_array_tuple_array_tuple_accessor_array E) T)) - (= D1 (select (uint_array_tuple_array_tuple_accessor_array Y) A1)) - (= C1 (select (uint_array_tuple_array_tuple_accessor_array E) A1)) - (= K J) - (= L K) - (= K1 (uint_array_tuple_array_tuple_accessor_length J1)) - (= T U1) - (= P (uint_array_tuple_array_tuple_accessor_length O)) - (= J I) - (= R W1) - (= N U1) - (= M L) - (= E1 (select (uint_array_tuple_accessor_array C1) B1)) - (= V (uint_array_tuple_accessor_length U)) - (= F1 (select (uint_array_tuple_accessor_array C1) B1)) - (= B1 W1) - (= A1 U1) - (= L1 0) - (= H1 G1) - (= G1 S1) - (>= (uint_array_tuple_accessor_length U) 0) - (>= (uint_array_tuple_accessor_length C1) 0) - (>= K1 0) - (>= T 0) - (>= P 0) - (>= S1 0) - (>= R 0) - (>= N 0) - (>= E1 0) - (>= V 0) - (>= F1 0) - (>= B1 0) - (>= A1 0) - (>= H1 0) - (>= G1 0) - (>= W1 0) - (>= U1 0) - (<= K1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= T - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= P - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= S1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= R - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= N - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= E1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= V - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= F1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= B1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= A1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= H1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= G1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= W1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (= Q true) - (= W true) - (not (= (<= P N) Q)))) - ) - (block_37_return_function_g__102_335_0 - M - P1 - C - H - Q1 - N1 - A - D - T1 - V1 - R1 - O1 - B - G - U1 - W1 - S1) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - true - ) - (block_42_function_g__102_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C uint_array_tuple) (D abi_type) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K Int) (L state_type) (M state_type) (N state_type) (O state_type) (P Int) (Q tx_type) (R Int) (S Int) (T Int) (U Int) (V Int) (W Int) (X Int) (Y Int) (Z Int) ) - (=> - (and - (block_42_function_g__102_335_0 I P D H Q L A E U X R M B F V Y S) - (summary_9_function_g__102_335_0 J P D H Q N B F V Y S O C G W Z T) - (let ((a!1 (store (balances M) P (+ (select (balances M) P) K))) - (a!2 (= (select (bytes_tuple_accessor_array (msg.data Q)) 3) 209)) - (a!3 (= (select (bytes_tuple_accessor_array (msg.data Q)) 2) 87)) - (a!4 (= (select (bytes_tuple_accessor_array (msg.data Q)) 1) 17)) - (a!5 (= (select (bytes_tuple_accessor_array (msg.data Q)) 0) 25)) - (a!6 (>= (+ (select (balances M) P) K) 0)) - (a!7 (<= (+ (select (balances M) P) K) - 115792089237316195423570985008687907853269984665640564039457584007913129639935))) - (and (= B A) - (= N (state_type a!1)) - (= M L) - a!2 - a!3 - a!4 - a!5 - (= (msg.value Q) 0) - (= (msg.sig Q) 420566993) - (= V U) - (= I 0) - (= S R) - (= Y X) - (>= (tx.origin Q) 0) - (>= (tx.gasprice Q) 0) - (>= (msg.value Q) 0) - (>= (msg.sender Q) 0) - (>= (block.timestamp Q) 0) - (>= (block.number Q) 0) - (>= (block.gaslimit Q) 0) - (>= (block.difficulty Q) 0) - (>= (block.coinbase Q) 0) - (>= (block.chainid Q) 0) - (>= (block.basefee Q) 0) - (>= (bytes_tuple_accessor_length (msg.data Q)) 4) - a!6 - (>= K (msg.value Q)) - (<= (tx.origin Q) 1461501637330902918203684832716283019655932542975) - (<= (tx.gasprice Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (msg.value Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (msg.sender Q) 1461501637330902918203684832716283019655932542975) - (<= (block.timestamp Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.number Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.gaslimit Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.difficulty Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.coinbase Q) 1461501637330902918203684832716283019655932542975) - (<= (block.chainid Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.basefee Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - a!7 - (= F E))) - ) - (summary_10_function_g__102_335_0 J P D H Q L A E U X R O C G W Z T) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - true - ) - (block_43_function_h__150_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_43_function_h__150_335_0 G J C F K H A D N P L I B E O Q M) - (and (= B A) (= I H) (= M L) (= Q P) (= O N) (= G 0) (= E D)) - ) - (block_44_h_149_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H Int) (I Int) (J uint_array_tuple_array_tuple) (K Int) (L Bool) (M Int) (N uint_array_tuple_array_tuple) (O Int) (P state_type) (Q state_type) (R Int) (S tx_type) (T Int) (U Int) (V Int) (W Int) (X Int) (Y Int) ) - (=> - (and - (block_44_h_149_335_0 G R C F S P A D V X T Q B E W Y U) - (and (= J E) - (= N E) - (= M Y) - (= K (uint_array_tuple_array_tuple_accessor_length J)) - (= H 10) - (= I W) - (= O W) - (>= M 0) - (>= U 0) - (>= K 0) - (>= I 0) - (>= Y 0) - (>= W 0) - (>= O 0) - (<= M - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= K - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Y - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= W - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= O - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 O)) (>= O (uint_array_tuple_array_tuple_accessor_length N))) - (= L true) - (not (= (<= K I) L))) - ) - (block_46_function_h__150_335_0 H R C F S P A D V X T Q B E W Y U) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_46_function_h__150_335_0 G J C F K H A D N P L I B E O Q M) - true - ) - (summary_11_function_h__150_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_47_function_h__150_335_0 G J C F K H A D N P L I B E O Q M) - true - ) - (summary_11_function_h__150_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_48_function_h__150_335_0 G J C F K H A D N P L I B E O Q M) - true - ) - (summary_11_function_h__150_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_49_function_h__150_335_0 G J C F K H A D N P L I B E O Q M) - true - ) - (summary_11_function_h__150_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_50_function_h__150_335_0 G J C F K H A D N P L I B E O Q M) - true - ) - (summary_11_function_h__150_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_51_function_h__150_335_0 G J C F K H A D N P L I B E O Q M) - true - ) - (summary_11_function_h__150_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_45_return_function_h__150_335_0 G J C F K H A D N P L I B E O Q M) - true - ) - (summary_11_function_h__150_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H Int) (I Int) (J Int) (K uint_array_tuple_array_tuple) (L Int) (M Bool) (N Int) (O uint_array_tuple_array_tuple) (P Int) (Q uint_array_tuple) (R Int) (S Bool) (T uint_array_tuple_array_tuple) (U Int) (V Int) (W state_type) (X state_type) (Y Int) (Z tx_type) (A1 Int) (B1 Int) (C1 Int) (D1 Int) (E1 Int) (F1 Int) ) - (=> - (and - (block_44_h_149_335_0 G Y C F Z W A D C1 E1 A1 X B E D1 F1 B1) - (and (not (= (<= R N) S)) - (= T E) - (= O E) - (= K E) - (= Q (select (uint_array_tuple_array_tuple_accessor_array E) P)) - (= L (uint_array_tuple_array_tuple_accessor_length K)) - (= H G) - (= N F1) - (= I 11) - (= R (uint_array_tuple_accessor_length Q)) - (= J D1) - (= U D1) - (= P D1) - (= V B1) - (>= (uint_array_tuple_accessor_length Q) 0) - (>= L 0) - (>= B1 0) - (>= N 0) - (>= R 0) - (>= J 0) - (>= U 0) - (>= P 0) - (>= F1 0) - (>= D1 0) - (>= V 0) - (<= L - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= B1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= N - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= R - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= J - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= P - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= F1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= D1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= V - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 U)) (>= U (uint_array_tuple_array_tuple_accessor_length T))) - (= M true) - (= S true) - (not (= (<= L J) M))) - ) - (block_47_function_h__150_335_0 I Y C F Z W A D C1 E1 A1 X B E D1 F1 B1) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H Int) (I Int) (J Int) (K Int) (L uint_array_tuple_array_tuple) (M Int) (N Bool) (O Int) (P uint_array_tuple_array_tuple) (Q Int) (R uint_array_tuple) (S Int) (T Bool) (U uint_array_tuple_array_tuple) (V Int) (W Int) (X uint_array_tuple) (Y Int) (Z state_type) (A1 state_type) (B1 Int) (C1 tx_type) (D1 Int) (E1 Int) (F1 Int) (G1 Int) (H1 Int) (I1 Int) ) - (=> - (and - (block_44_h_149_335_0 G B1 C F C1 Z A D F1 H1 D1 A1 B E G1 I1 E1) - (and (not (= (<= S O) T)) - (= P E) - (= L E) - (= U E) - (= X (select (uint_array_tuple_array_tuple_accessor_array E) V)) - (= R (select (uint_array_tuple_array_tuple_accessor_array E) Q)) - (= I H) - (= W I1) - (= V G1) - (= O I1) - (= K G1) - (= J 12) - (= Q G1) - (= H G) - (= M (uint_array_tuple_array_tuple_accessor_length L)) - (= S (uint_array_tuple_accessor_length R)) - (= Y E1) - (>= (uint_array_tuple_accessor_length X) 0) - (>= (uint_array_tuple_accessor_length R) 0) - (>= W 0) - (>= V 0) - (>= O 0) - (>= E1 0) - (>= K 0) - (>= Q 0) - (>= M 0) - (>= S 0) - (>= I1 0) - (>= G1 0) - (>= Y 0) - (<= W - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= V - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= O - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= E1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= K - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Q - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= M - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= S - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= G1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Y - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 W)) (>= W (uint_array_tuple_accessor_length X))) - (= T true) - (= N true) - (not (= (<= M K) N))) - ) - (block_48_function_h__150_335_0 J B1 C F C1 Z A D F1 H1 D1 A1 B E G1 I1 E1) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G crypto_type) (H Int) (I Int) (J Int) (K Int) (L Int) (M Int) (N uint_array_tuple_array_tuple) (O Int) (P Bool) (Q Int) (R uint_array_tuple_array_tuple) (S Int) (T uint_array_tuple) (U Int) (V Bool) (W uint_array_tuple_array_tuple) (X uint_array_tuple_array_tuple) (Y uint_array_tuple_array_tuple) (Z Int) (A1 Int) (B1 uint_array_tuple) (C1 uint_array_tuple) (D1 Int) (E1 Int) (F1 Int) (G1 Int) (H1 uint_array_tuple_array_tuple) (I1 Int) (J1 state_type) (K1 state_type) (L1 Int) (M1 tx_type) (N1 Int) (O1 Int) (P1 Int) (Q1 Int) (R1 Int) (S1 Int) ) - (=> - (and - (block_44_h_149_335_0 H L1 C G M1 J1 A D P1 R1 N1 K1 B E Q1 S1 O1) - (let ((a!1 (store (uint_array_tuple_array_tuple_accessor_array X) - Z - (uint_array_tuple (store (uint_array_tuple_accessor_array B1) - A1 - G1) - (uint_array_tuple_accessor_length B1))))) - (and (not (= (<= U Q) V)) - (= F - (uint_array_tuple_array_tuple - a!1 - (uint_array_tuple_array_tuple_accessor_length X))) - (= N E) - (= R E) - (= Y F) - (= X E) - (= W E) - (= H1 F) - (= B1 (select (uint_array_tuple_array_tuple_accessor_array E) Z)) - (= C1 (select (uint_array_tuple_array_tuple_accessor_array X) Z)) - (= T (select (uint_array_tuple_array_tuple_accessor_array E) S)) - (= S Q1) - (= G1 F1) - (= F1 O1) - (= O (uint_array_tuple_array_tuple_accessor_length N)) - (= K J) - (= M Q1) - (= L 13) - (= U (uint_array_tuple_accessor_length T)) - (= J I) - (= I H) - (= A1 S1) - (= Z Q1) - (= Q S1) - (= E1 (select (uint_array_tuple_accessor_array B1) A1)) - (= D1 (select (uint_array_tuple_accessor_array B1) A1)) - (= I1 Q1) - (>= (uint_array_tuple_accessor_length B1) 0) - (>= (uint_array_tuple_accessor_length T) 0) - (>= S 0) - (>= G1 0) - (>= F1 0) - (>= O 0) - (>= M 0) - (>= O1 0) - (>= U 0) - (>= A1 0) - (>= Z 0) - (>= Q 0) - (>= E1 0) - (>= D1 0) - (>= S1 0) - (>= Q1 0) - (>= I1 0) - (<= S - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= G1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= F1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= O - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= M - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= O1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= A1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Z - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Q - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= E1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= D1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= S1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Q1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 I1)) - (>= I1 (uint_array_tuple_array_tuple_accessor_length H1))) - (= P true) - (= V true) - (not (= (<= O M) P)))) - ) - (block_49_function_h__150_335_0 L L1 C G M1 J1 A D P1 R1 N1 K1 B F Q1 S1 O1) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P uint_array_tuple_array_tuple) (Q Int) (R Bool) (S Int) (T uint_array_tuple_array_tuple) (U Int) (V uint_array_tuple) (W Int) (X Bool) (Y uint_array_tuple_array_tuple) (Z uint_array_tuple_array_tuple) (A1 uint_array_tuple_array_tuple) (B1 Int) (C1 Int) (D1 uint_array_tuple) (E1 uint_array_tuple) (F1 Int) (G1 Int) (H1 Int) (I1 Int) (J1 uint_array_tuple_array_tuple) (K1 uint_array_tuple_array_tuple) (L1 uint_array_tuple_array_tuple) (M1 Int) (N1 uint_array_tuple) (O1 uint_array_tuple) (P1 uint_array_tuple) (Q1 uint_array_tuple_array_tuple) (R1 Int) (S1 state_type) (T1 state_type) (U1 Int) (V1 tx_type) (W1 Int) (X1 Int) (Y1 Int) (Z1 Int) (A2 Int) (B2 Int) ) - (=> - (and - (block_44_h_149_335_0 I U1 C H V1 S1 A D Y1 A2 W1 T1 B E Z1 B2 X1) - (let ((a!1 (store (uint_array_tuple_array_tuple_accessor_array Z) - B1 - (uint_array_tuple (store (uint_array_tuple_accessor_array D1) - C1 - I1) - (uint_array_tuple_accessor_length D1)))) - (a!2 (= G - (uint_array_tuple_array_tuple - (store (uint_array_tuple_array_tuple_accessor_array K1) M1 O1) - (uint_array_tuple_array_tuple_accessor_length K1))))) - (and (not (= (<= W S) X)) - (= F - (uint_array_tuple_array_tuple - a!1 - (uint_array_tuple_array_tuple_accessor_length Z))) - a!2 - (= P E) - (= T E) - (= A1 F) - (= J1 F) - (= K1 F) - (= Z E) - (= Y E) - (= L1 G) - (= Q1 G) - (= D1 (select (uint_array_tuple_array_tuple_accessor_array E) B1)) - (= E1 (select (uint_array_tuple_array_tuple_accessor_array Z) B1)) - (= V (select (uint_array_tuple_array_tuple_accessor_array E) U)) - (= P1 (select (uint_array_tuple_array_tuple_accessor_array K1) M1)) - (= O1 (uint_array_tuple ((as const (Array Int Int)) 0) 0)) - (= N1 (select (uint_array_tuple_array_tuple_accessor_array F) M1)) - (= L K) - (= Q (uint_array_tuple_array_tuple_accessor_length P)) - (= B1 Z1) - (= J I) - (= K J) - (= H1 X1) - (= U Z1) - (= M L) - (= O Z1) - (= N 14) - (= C1 B2) - (= W (uint_array_tuple_accessor_length V)) - (= S B2) - (= I1 H1) - (= G1 (select (uint_array_tuple_accessor_array D1) C1)) - (= F1 (select (uint_array_tuple_accessor_array D1) C1)) - (= M1 Z1) - (= R1 Z1) - (>= (uint_array_tuple_accessor_length D1) 0) - (>= (uint_array_tuple_accessor_length V) 0) - (>= (uint_array_tuple_accessor_length N1) 0) - (>= Q 0) - (>= B1 0) - (>= H1 0) - (>= U 0) - (>= O 0) - (>= X1 0) - (>= C1 0) - (>= W 0) - (>= S 0) - (>= I1 0) - (>= G1 0) - (>= F1 0) - (>= M1 0) - (>= B2 0) - (>= Z1 0) - (>= R1 0) - (<= Q - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= B1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= H1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= O - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= X1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= C1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= W - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= S - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= G1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= F1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= M1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= B2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Z1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= R1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 R1)) - (>= R1 (uint_array_tuple_array_tuple_accessor_length Q1))) - (= R true) - (= X true) - (not (= (<= Q O) R)))) - ) - (block_50_function_h__150_335_0 N U1 C H V1 S1 A D Y1 A2 W1 T1 B G Z1 B2 X1) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q uint_array_tuple_array_tuple) (R Int) (S Bool) (T Int) (U uint_array_tuple_array_tuple) (V Int) (W uint_array_tuple) (X Int) (Y Bool) (Z uint_array_tuple_array_tuple) (A1 uint_array_tuple_array_tuple) (B1 uint_array_tuple_array_tuple) (C1 Int) (D1 Int) (E1 uint_array_tuple) (F1 uint_array_tuple) (G1 Int) (H1 Int) (I1 Int) (J1 Int) (K1 uint_array_tuple_array_tuple) (L1 uint_array_tuple_array_tuple) (M1 uint_array_tuple_array_tuple) (N1 Int) (O1 uint_array_tuple) (P1 uint_array_tuple) (Q1 uint_array_tuple) (R1 uint_array_tuple_array_tuple) (S1 Int) (T1 uint_array_tuple) (U1 Int) (V1 Int) (W1 Bool) (X1 state_type) (Y1 state_type) (Z1 Int) (A2 tx_type) (B2 Int) (C2 Int) (D2 Int) (E2 Int) (F2 Int) (G2 Int) ) - (=> - (and - (block_44_h_149_335_0 I Z1 C H A2 X1 A D D2 F2 B2 Y1 B E E2 G2 C2) - (let ((a!1 (= G - (uint_array_tuple_array_tuple - (store (uint_array_tuple_array_tuple_accessor_array L1) N1 P1) - (uint_array_tuple_array_tuple_accessor_length L1)))) - (a!2 (store (uint_array_tuple_array_tuple_accessor_array A1) - C1 - (uint_array_tuple (store (uint_array_tuple_accessor_array E1) - D1 - J1) - (uint_array_tuple_accessor_length E1))))) - (and (not (= (<= X T) Y)) - (= W1 (= U1 V1)) - (= Z E) - (= A1 E) - (= U E) - (= Q E) - (= B1 F) - (= M1 G) - a!1 - (= F - (uint_array_tuple_array_tuple - a!2 - (uint_array_tuple_array_tuple_accessor_length A1))) - (= L1 F) - (= K1 F) - (= R1 G) - (= W (select (uint_array_tuple_array_tuple_accessor_array E) V)) - (= E1 (select (uint_array_tuple_array_tuple_accessor_array E) C1)) - (= P1 (uint_array_tuple ((as const (Array Int Int)) 0) 0)) - (= Q1 (select (uint_array_tuple_array_tuple_accessor_array L1) N1)) - (= F1 (select (uint_array_tuple_array_tuple_accessor_array A1) C1)) - (= O1 (select (uint_array_tuple_array_tuple_accessor_array F) N1)) - (= T1 (select (uint_array_tuple_array_tuple_accessor_array G) S1)) - (= V E2) - (= G1 (select (uint_array_tuple_accessor_array E1) D1)) - (= U1 (uint_array_tuple_accessor_length T1)) - (= D1 G2) - (= C1 E2) - (= O 15) - (= P E2) - (= K J) - (= J I) - (= L K) - (= R (uint_array_tuple_array_tuple_accessor_length Q)) - (= N M) - (= M L) - (= T G2) - (= I1 C2) - (= H1 (select (uint_array_tuple_accessor_array E1) D1)) - (= X (uint_array_tuple_accessor_length W)) - (= N1 E2) - (= J1 I1) - (= S1 E2) - (= V1 0) - (>= (uint_array_tuple_accessor_length W) 0) - (>= (uint_array_tuple_accessor_length E1) 0) - (>= (uint_array_tuple_accessor_length O1) 0) - (>= (uint_array_tuple_accessor_length T1) 0) - (>= V 0) - (>= G1 0) - (>= U1 0) - (>= D1 0) - (>= C1 0) - (>= P 0) - (>= R 0) - (>= T 0) - (>= C2 0) - (>= I1 0) - (>= H1 0) - (>= X 0) - (>= N1 0) - (>= J1 0) - (>= S1 0) - (>= G2 0) - (>= E2 0) - (<= V - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= G1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= D1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= C1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= P - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= R - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= T - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= C2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= H1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= X - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= N1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= J1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= S1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= G2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= E2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (= S true) - (= Y true) - (not W1) - (not (= (<= R P) S)))) - ) - (block_51_function_h__150_335_0 O Z1 C H A2 X1 A D D2 F2 B2 Y1 B G E2 G2 C2) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q uint_array_tuple_array_tuple) (R Int) (S Bool) (T Int) (U uint_array_tuple_array_tuple) (V Int) (W uint_array_tuple) (X Int) (Y Bool) (Z uint_array_tuple_array_tuple) (A1 uint_array_tuple_array_tuple) (B1 uint_array_tuple_array_tuple) (C1 Int) (D1 Int) (E1 uint_array_tuple) (F1 uint_array_tuple) (G1 Int) (H1 Int) (I1 Int) (J1 Int) (K1 uint_array_tuple_array_tuple) (L1 uint_array_tuple_array_tuple) (M1 uint_array_tuple_array_tuple) (N1 Int) (O1 uint_array_tuple) (P1 uint_array_tuple) (Q1 uint_array_tuple) (R1 uint_array_tuple_array_tuple) (S1 Int) (T1 uint_array_tuple) (U1 Int) (V1 Int) (W1 Bool) (X1 state_type) (Y1 state_type) (Z1 Int) (A2 tx_type) (B2 Int) (C2 Int) (D2 Int) (E2 Int) (F2 Int) (G2 Int) ) - (=> - (and - (block_44_h_149_335_0 I Z1 C H A2 X1 A D D2 F2 B2 Y1 B E E2 G2 C2) - (let ((a!1 (= G - (uint_array_tuple_array_tuple - (store (uint_array_tuple_array_tuple_accessor_array L1) N1 P1) - (uint_array_tuple_array_tuple_accessor_length L1)))) - (a!2 (store (uint_array_tuple_array_tuple_accessor_array A1) - C1 - (uint_array_tuple (store (uint_array_tuple_accessor_array E1) - D1 - J1) - (uint_array_tuple_accessor_length E1))))) - (and (not (= (<= X T) Y)) - (= W1 (= U1 V1)) - (= Z E) - (= A1 E) - (= U E) - (= Q E) - (= B1 F) - (= M1 G) - a!1 - (= F - (uint_array_tuple_array_tuple - a!2 - (uint_array_tuple_array_tuple_accessor_length A1))) - (= L1 F) - (= K1 F) - (= R1 G) - (= W (select (uint_array_tuple_array_tuple_accessor_array E) V)) - (= E1 (select (uint_array_tuple_array_tuple_accessor_array E) C1)) - (= P1 (uint_array_tuple ((as const (Array Int Int)) 0) 0)) - (= Q1 (select (uint_array_tuple_array_tuple_accessor_array L1) N1)) - (= F1 (select (uint_array_tuple_array_tuple_accessor_array A1) C1)) - (= O1 (select (uint_array_tuple_array_tuple_accessor_array F) N1)) - (= T1 (select (uint_array_tuple_array_tuple_accessor_array G) S1)) - (= V E2) - (= G1 (select (uint_array_tuple_accessor_array E1) D1)) - (= U1 (uint_array_tuple_accessor_length T1)) - (= D1 G2) - (= C1 E2) - (= O N) - (= P E2) - (= K J) - (= J I) - (= L K) - (= R (uint_array_tuple_array_tuple_accessor_length Q)) - (= N M) - (= M L) - (= T G2) - (= I1 C2) - (= H1 (select (uint_array_tuple_accessor_array E1) D1)) - (= X (uint_array_tuple_accessor_length W)) - (= N1 E2) - (= J1 I1) - (= S1 E2) - (= V1 0) - (>= (uint_array_tuple_accessor_length W) 0) - (>= (uint_array_tuple_accessor_length E1) 0) - (>= (uint_array_tuple_accessor_length O1) 0) - (>= (uint_array_tuple_accessor_length T1) 0) - (>= V 0) - (>= G1 0) - (>= U1 0) - (>= D1 0) - (>= C1 0) - (>= P 0) - (>= R 0) - (>= T 0) - (>= C2 0) - (>= I1 0) - (>= H1 0) - (>= X 0) - (>= N1 0) - (>= J1 0) - (>= S1 0) - (>= G2 0) - (>= E2 0) - (<= V - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= G1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= D1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= C1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= P - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= R - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= T - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= C2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= H1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= X - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= N1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= J1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= S1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= G2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= E2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (= S true) - (= Y true) - (not (= (<= R P) S)))) - ) - (block_45_return_function_h__150_335_0 - O - Z1 - C - H - A2 - X1 - A - D - D2 - F2 - B2 - Y1 - B - G - E2 - G2 - C2) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - true - ) - (block_52_function_h__150_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C uint_array_tuple) (D abi_type) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K Int) (L state_type) (M state_type) (N state_type) (O state_type) (P Int) (Q tx_type) (R Int) (S Int) (T Int) (U Int) (V Int) (W Int) (X Int) (Y Int) (Z Int) ) - (=> - (and - (block_52_function_h__150_335_0 I P D H Q L A E U X R M B F V Y S) - (summary_11_function_h__150_335_0 J P D H Q N B F V Y S O C G W Z T) - (let ((a!1 (store (balances M) P (+ (select (balances M) P) K))) - (a!2 (= (select (bytes_tuple_accessor_array (msg.data Q)) 3) 47)) - (a!3 (= (select (bytes_tuple_accessor_array (msg.data Q)) 2) 58)) - (a!4 (= (select (bytes_tuple_accessor_array (msg.data Q)) 1) 197)) - (a!5 (= (select (bytes_tuple_accessor_array (msg.data Q)) 0) 122)) - (a!6 (>= (+ (select (balances M) P) K) 0)) - (a!7 (<= (+ (select (balances M) P) K) - 115792089237316195423570985008687907853269984665640564039457584007913129639935))) - (and (= B A) - (= N (state_type a!1)) - (= M L) - a!2 - a!3 - a!4 - a!5 - (= (msg.value Q) 0) - (= (msg.sig Q) 2059745839) - (= V U) - (= I 0) - (= S R) - (= Y X) - (>= (tx.origin Q) 0) - (>= (tx.gasprice Q) 0) - (>= (msg.value Q) 0) - (>= (msg.sender Q) 0) - (>= (block.timestamp Q) 0) - (>= (block.number Q) 0) - (>= (block.gaslimit Q) 0) - (>= (block.difficulty Q) 0) - (>= (block.coinbase Q) 0) - (>= (block.chainid Q) 0) - (>= (block.basefee Q) 0) - (>= (bytes_tuple_accessor_length (msg.data Q)) 4) - a!6 - (>= K (msg.value Q)) - (<= (tx.origin Q) 1461501637330902918203684832716283019655932542975) - (<= (tx.gasprice Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (msg.value Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (msg.sender Q) 1461501637330902918203684832716283019655932542975) - (<= (block.timestamp Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.number Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.gaslimit Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.difficulty Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.coinbase Q) 1461501637330902918203684832716283019655932542975) - (<= (block.chainid Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.basefee Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - a!7 - (= F E))) - ) - (summary_12_function_h__150_335_0 J P D H Q L A E U X R O C G W Z T) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - true - ) - (block_53_function_i__205_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_53_function_i__205_335_0 G J C F K H A D N P L I B E O Q M) - (and (= B A) (= I H) (= M L) (= Q P) (= O N) (= G 0) (= E D)) - ) - (block_54_i_204_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H Int) (I Int) (J uint_array_tuple_array_tuple) (K Int) (L Bool) (M Int) (N uint_array_tuple_array_tuple) (O Int) (P state_type) (Q state_type) (R Int) (S tx_type) (T Int) (U Int) (V Int) (W Int) (X Int) (Y Int) ) - (=> - (and - (block_54_i_204_335_0 G R C F S P A D V X T Q B E W Y U) - (and (= J E) - (= N E) - (= M Y) - (= K (uint_array_tuple_array_tuple_accessor_length J)) - (= H 17) - (= I W) - (= O W) - (>= M 0) - (>= U 0) - (>= K 0) - (>= I 0) - (>= Y 0) - (>= W 0) - (>= O 0) - (<= M - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= K - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Y - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= W - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= O - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 O)) (>= O (uint_array_tuple_array_tuple_accessor_length N))) - (= L true) - (not (= (<= K I) L))) - ) - (block_56_function_i__205_335_0 H R C F S P A D V X T Q B E W Y U) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_56_function_i__205_335_0 G J C F K H A D N P L I B E O Q M) - true - ) - (summary_13_function_i__205_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_57_function_i__205_335_0 G J C F K H A D N P L I B E O Q M) - true - ) - (summary_13_function_i__205_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_58_function_i__205_335_0 G J C F K H A D N P L I B E O Q M) - true - ) - (summary_13_function_i__205_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_59_function_i__205_335_0 G J C F K H A D N P L I B E O Q M) - true - ) - (summary_13_function_i__205_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_60_function_i__205_335_0 G J C F K H A D N P L I B E O Q M) - true - ) - (summary_13_function_i__205_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_61_function_i__205_335_0 G J C F K H A D N P L I B E O Q M) - true - ) - (summary_13_function_i__205_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_55_return_function_i__205_335_0 G J C F K H A D N P L I B E O Q M) - true - ) - (summary_13_function_i__205_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H Int) (I Int) (J Int) (K uint_array_tuple_array_tuple) (L Int) (M Bool) (N Int) (O uint_array_tuple_array_tuple) (P Int) (Q uint_array_tuple) (R Int) (S Bool) (T uint_array_tuple_array_tuple) (U Int) (V Int) (W state_type) (X state_type) (Y Int) (Z tx_type) (A1 Int) (B1 Int) (C1 Int) (D1 Int) (E1 Int) (F1 Int) ) - (=> - (and - (block_54_i_204_335_0 G Y C F Z W A D C1 E1 A1 X B E D1 F1 B1) - (and (not (= (<= R N) S)) - (= T E) - (= O E) - (= K E) - (= Q (select (uint_array_tuple_array_tuple_accessor_array E) P)) - (= L (uint_array_tuple_array_tuple_accessor_length K)) - (= H G) - (= N F1) - (= I 18) - (= R (uint_array_tuple_accessor_length Q)) - (= J D1) - (= U D1) - (= P D1) - (= V B1) - (>= (uint_array_tuple_accessor_length Q) 0) - (>= L 0) - (>= B1 0) - (>= N 0) - (>= R 0) - (>= J 0) - (>= U 0) - (>= P 0) - (>= F1 0) - (>= D1 0) - (>= V 0) - (<= L - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= B1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= N - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= R - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= J - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= P - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= F1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= D1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= V - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 U)) (>= U (uint_array_tuple_array_tuple_accessor_length T))) - (= M true) - (= S true) - (not (= (<= L J) M))) - ) - (block_57_function_i__205_335_0 I Y C F Z W A D C1 E1 A1 X B E D1 F1 B1) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H Int) (I Int) (J Int) (K Int) (L uint_array_tuple_array_tuple) (M Int) (N Bool) (O Int) (P uint_array_tuple_array_tuple) (Q Int) (R uint_array_tuple) (S Int) (T Bool) (U uint_array_tuple_array_tuple) (V Int) (W Int) (X uint_array_tuple) (Y Int) (Z state_type) (A1 state_type) (B1 Int) (C1 tx_type) (D1 Int) (E1 Int) (F1 Int) (G1 Int) (H1 Int) (I1 Int) ) - (=> - (and - (block_54_i_204_335_0 G B1 C F C1 Z A D F1 H1 D1 A1 B E G1 I1 E1) - (and (not (= (<= S O) T)) - (= P E) - (= L E) - (= U E) - (= X (select (uint_array_tuple_array_tuple_accessor_array E) V)) - (= R (select (uint_array_tuple_array_tuple_accessor_array E) Q)) - (= I H) - (= W I1) - (= V G1) - (= O I1) - (= K G1) - (= J 19) - (= Q G1) - (= H G) - (= M (uint_array_tuple_array_tuple_accessor_length L)) - (= S (uint_array_tuple_accessor_length R)) - (= Y E1) - (>= (uint_array_tuple_accessor_length X) 0) - (>= (uint_array_tuple_accessor_length R) 0) - (>= W 0) - (>= V 0) - (>= O 0) - (>= E1 0) - (>= K 0) - (>= Q 0) - (>= M 0) - (>= S 0) - (>= I1 0) - (>= G1 0) - (>= Y 0) - (<= W - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= V - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= O - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= E1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= K - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Q - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= M - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= S - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= G1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Y - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 W)) (>= W (uint_array_tuple_accessor_length X))) - (= T true) - (= N true) - (not (= (<= M K) N))) - ) - (block_58_function_i__205_335_0 J B1 C F C1 Z A D F1 H1 D1 A1 B E G1 I1 E1) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G crypto_type) (H Int) (I Int) (J Int) (K Int) (L Int) (M Int) (N uint_array_tuple_array_tuple) (O Int) (P Bool) (Q Int) (R uint_array_tuple_array_tuple) (S Int) (T uint_array_tuple) (U Int) (V Bool) (W uint_array_tuple_array_tuple) (X uint_array_tuple_array_tuple) (Y uint_array_tuple_array_tuple) (Z Int) (A1 Int) (B1 uint_array_tuple) (C1 uint_array_tuple) (D1 Int) (E1 Int) (F1 Int) (G1 Int) (H1 Int) (I1 uint_array_tuple_array_tuple) (J1 Int) (K1 Bool) (L1 uint_array_tuple_array_tuple) (M1 Int) (N1 state_type) (O1 state_type) (P1 Int) (Q1 tx_type) (R1 Int) (S1 Int) (T1 Int) (U1 Int) (V1 Int) (W1 Int) ) - (=> - (and - (block_54_i_204_335_0 H P1 C G Q1 N1 A D T1 V1 R1 O1 B E U1 W1 S1) - (let ((a!1 (store (uint_array_tuple_array_tuple_accessor_array X) - Z - (uint_array_tuple (store (uint_array_tuple_accessor_array B1) - A1 - G1) - (uint_array_tuple_accessor_length B1))))) - (and (not (= (<= O M) P)) - (not (= (<= U Q) V)) - (= W E) - (= F - (uint_array_tuple_array_tuple - a!1 - (uint_array_tuple_array_tuple_accessor_length X))) - (= X E) - (= Y F) - (= R E) - (= N E) - (= I1 F) - (= L1 F) - (= T (select (uint_array_tuple_array_tuple_accessor_array E) S)) - (= B1 (select (uint_array_tuple_array_tuple_accessor_array E) Z)) - (= C1 (select (uint_array_tuple_array_tuple_accessor_array X) Z)) - (= K J) - (= L 20) - (= J1 (uint_array_tuple_array_tuple_accessor_length I1)) - (= S U1) - (= O (uint_array_tuple_array_tuple_accessor_length N)) - (= Q W1) - (= J I) - (= I H) - (= M U1) - (= E1 (select (uint_array_tuple_accessor_array B1) A1)) - (= D1 (select (uint_array_tuple_accessor_array B1) A1)) - (= Z U1) - (= U (uint_array_tuple_accessor_length T)) - (= F1 S1) - (= A1 W1) - (= H1 W1) - (= G1 F1) - (= M1 W1) - (>= (uint_array_tuple_accessor_length T) 0) - (>= (uint_array_tuple_accessor_length B1) 0) - (>= J1 0) - (>= S 0) - (>= O 0) - (>= Q 0) - (>= S1 0) - (>= M 0) - (>= E1 0) - (>= D1 0) - (>= Z 0) - (>= U 0) - (>= F1 0) - (>= A1 0) - (>= H1 0) - (>= G1 0) - (>= W1 0) - (>= U1 0) - (>= M1 0) - (<= J1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= S - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= O - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Q - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= S1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= M - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= E1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= D1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Z - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= F1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= A1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= H1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= G1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= W1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= M1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 M1)) - (>= M1 (uint_array_tuple_array_tuple_accessor_length L1))) - (= P true) - (= V true) - (= K1 true) - (not (= (<= J1 H1) K1)))) - ) - (block_59_function_i__205_335_0 L P1 C G Q1 N1 A D T1 V1 R1 O1 B F U1 W1 S1) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P uint_array_tuple_array_tuple) (Q Int) (R Bool) (S Int) (T uint_array_tuple_array_tuple) (U Int) (V uint_array_tuple) (W Int) (X Bool) (Y uint_array_tuple_array_tuple) (Z uint_array_tuple_array_tuple) (A1 uint_array_tuple_array_tuple) (B1 Int) (C1 Int) (D1 uint_array_tuple) (E1 uint_array_tuple) (F1 Int) (G1 Int) (H1 Int) (I1 Int) (J1 Int) (K1 uint_array_tuple_array_tuple) (L1 Int) (M1 Bool) (N1 uint_array_tuple_array_tuple) (O1 uint_array_tuple_array_tuple) (P1 uint_array_tuple_array_tuple) (Q1 Int) (R1 uint_array_tuple) (S1 uint_array_tuple) (T1 uint_array_tuple) (U1 uint_array_tuple_array_tuple) (V1 Int) (W1 state_type) (X1 state_type) (Y1 Int) (Z1 tx_type) (A2 Int) (B2 Int) (C2 Int) (D2 Int) (E2 Int) (F2 Int) ) - (=> - (and - (block_54_i_204_335_0 I Y1 C H Z1 W1 A D C2 E2 A2 X1 B E D2 F2 B2) - (let ((a!1 (store (uint_array_tuple_array_tuple_accessor_array Z) - B1 - (uint_array_tuple (store (uint_array_tuple_accessor_array D1) - C1 - I1) - (uint_array_tuple_accessor_length D1)))) - (a!2 (= G - (uint_array_tuple_array_tuple - (store (uint_array_tuple_array_tuple_accessor_array O1) Q1 S1) - (uint_array_tuple_array_tuple_accessor_length O1))))) - (and (not (= (<= Q O) R)) - (not (= (<= W S) X)) - (= Y E) - (= Z E) - (= T E) - (= P E) - (= A1 F) - (= N1 F) - (= O1 F) - (= F - (uint_array_tuple_array_tuple - a!1 - (uint_array_tuple_array_tuple_accessor_length Z))) - a!2 - (= K1 F) - (= P1 G) - (= U1 G) - (= V (select (uint_array_tuple_array_tuple_accessor_array E) U)) - (= D1 (select (uint_array_tuple_array_tuple_accessor_array E) B1)) - (= E1 (select (uint_array_tuple_array_tuple_accessor_array Z) B1)) - (= T1 (select (uint_array_tuple_array_tuple_accessor_array O1) Q1)) - (= S1 (uint_array_tuple ((as const (Array Int Int)) 0) 0)) - (= R1 (select (uint_array_tuple_array_tuple_accessor_array F) Q1)) - (= U D2) - (= F1 (select (uint_array_tuple_accessor_array D1) C1)) - (= C1 F2) - (= B1 D2) - (= N 21) - (= O D2) - (= J I) - (= L1 (uint_array_tuple_array_tuple_accessor_length K1)) - (= K J) - (= Q (uint_array_tuple_array_tuple_accessor_length P)) - (= M L) - (= L K) - (= S F2) - (= H1 B2) - (= G1 (select (uint_array_tuple_accessor_array D1) C1)) - (= W (uint_array_tuple_accessor_length V)) - (= I1 H1) - (= J1 F2) - (= Q1 F2) - (= V1 F2) - (>= (uint_array_tuple_accessor_length V) 0) - (>= (uint_array_tuple_accessor_length D1) 0) - (>= (uint_array_tuple_accessor_length R1) 0) - (>= U 0) - (>= F1 0) - (>= C1 0) - (>= B1 0) - (>= O 0) - (>= L1 0) - (>= Q 0) - (>= S 0) - (>= B2 0) - (>= H1 0) - (>= G1 0) - (>= W 0) - (>= I1 0) - (>= J1 0) - (>= Q1 0) - (>= F2 0) - (>= D2 0) - (>= V1 0) - (<= U - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= F1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= C1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= B1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= O - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= L1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Q - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= S - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= B2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= H1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= G1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= W - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= J1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Q1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= F2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= D2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= V1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 V1)) - (>= V1 (uint_array_tuple_array_tuple_accessor_length U1))) - (= R true) - (= X true) - (= M1 true) - (not (= (<= L1 J1) M1)))) - ) - (block_60_function_i__205_335_0 N Y1 C H Z1 W1 A D C2 E2 A2 X1 B G D2 F2 B2) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q uint_array_tuple_array_tuple) (R Int) (S Bool) (T Int) (U uint_array_tuple_array_tuple) (V Int) (W uint_array_tuple) (X Int) (Y Bool) (Z uint_array_tuple_array_tuple) (A1 uint_array_tuple_array_tuple) (B1 uint_array_tuple_array_tuple) (C1 Int) (D1 Int) (E1 uint_array_tuple) (F1 uint_array_tuple) (G1 Int) (H1 Int) (I1 Int) (J1 Int) (K1 Int) (L1 uint_array_tuple_array_tuple) (M1 Int) (N1 Bool) (O1 uint_array_tuple_array_tuple) (P1 uint_array_tuple_array_tuple) (Q1 uint_array_tuple_array_tuple) (R1 Int) (S1 uint_array_tuple) (T1 uint_array_tuple) (U1 uint_array_tuple) (V1 uint_array_tuple_array_tuple) (W1 Int) (X1 uint_array_tuple) (Y1 Int) (Z1 Int) (A2 Bool) (B2 state_type) (C2 state_type) (D2 Int) (E2 tx_type) (F2 Int) (G2 Int) (H2 Int) (I2 Int) (J2 Int) (K2 Int) ) - (=> - (and - (block_54_i_204_335_0 I D2 C H E2 B2 A D H2 J2 F2 C2 B E I2 K2 G2) - (let ((a!1 (store (uint_array_tuple_array_tuple_accessor_array A1) - C1 - (uint_array_tuple (store (uint_array_tuple_accessor_array E1) - D1 - J1) - (uint_array_tuple_accessor_length E1)))) - (a!2 (= G - (uint_array_tuple_array_tuple - (store (uint_array_tuple_array_tuple_accessor_array P1) R1 T1) - (uint_array_tuple_array_tuple_accessor_length P1))))) - (and (not (= (<= X T) Y)) - (not (= (<= M1 K1) N1)) - (= A2 (= Y1 Z1)) - (= U E) - (= L1 F) - (= Q1 G) - (= F - (uint_array_tuple_array_tuple - a!1 - (uint_array_tuple_array_tuple_accessor_length A1))) - a!2 - (= Q E) - (= Z E) - (= A1 E) - (= B1 F) - (= P1 F) - (= O1 F) - (= V1 G) - (= F1 (select (uint_array_tuple_array_tuple_accessor_array A1) C1)) - (= T1 (uint_array_tuple ((as const (Array Int Int)) 0) 0)) - (= U1 (select (uint_array_tuple_array_tuple_accessor_array P1) R1)) - (= W (select (uint_array_tuple_array_tuple_accessor_array E) V)) - (= E1 (select (uint_array_tuple_array_tuple_accessor_array E) C1)) - (= S1 (select (uint_array_tuple_array_tuple_accessor_array F) R1)) - (= X1 (select (uint_array_tuple_array_tuple_accessor_array G) W1)) - (= K1 K2) - (= Y1 (uint_array_tuple_accessor_length X1)) - (= H1 (select (uint_array_tuple_accessor_array E1) D1)) - (= G1 (select (uint_array_tuple_accessor_array E1) D1)) - (= L K) - (= C1 I2) - (= T K2) - (= M L) - (= J I) - (= O 22) - (= N M) - (= K J) - (= D1 K2) - (= P I2) - (= V I2) - (= R (uint_array_tuple_array_tuple_accessor_length Q)) - (= X (uint_array_tuple_accessor_length W)) - (= M1 (uint_array_tuple_array_tuple_accessor_length L1)) - (= R1 K2) - (= J1 I1) - (= I1 G2) - (= W1 K2) - (= Z1 0) - (>= (uint_array_tuple_accessor_length W) 0) - (>= (uint_array_tuple_accessor_length E1) 0) - (>= (uint_array_tuple_accessor_length S1) 0) - (>= (uint_array_tuple_accessor_length X1) 0) - (>= K1 0) - (>= Y1 0) - (>= H1 0) - (>= G1 0) - (>= C1 0) - (>= T 0) - (>= D1 0) - (>= P 0) - (>= V 0) - (>= R 0) - (>= X 0) - (>= G2 0) - (>= M1 0) - (>= R1 0) - (>= J1 0) - (>= I1 0) - (>= W1 0) - (>= K2 0) - (>= I2 0) - (<= K1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Y1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= H1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= G1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= C1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= T - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= D1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= P - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= V - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= R - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= X - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= G2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= M1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= R1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= J1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= W1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= K2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (= S true) - (= Y true) - (= N1 true) - (not A2) - (not (= (<= R P) S)))) - ) - (block_61_function_i__205_335_0 O D2 C H E2 B2 A D H2 J2 F2 C2 B G I2 K2 G2) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q uint_array_tuple_array_tuple) (R Int) (S Bool) (T Int) (U uint_array_tuple_array_tuple) (V Int) (W uint_array_tuple) (X Int) (Y Bool) (Z uint_array_tuple_array_tuple) (A1 uint_array_tuple_array_tuple) (B1 uint_array_tuple_array_tuple) (C1 Int) (D1 Int) (E1 uint_array_tuple) (F1 uint_array_tuple) (G1 Int) (H1 Int) (I1 Int) (J1 Int) (K1 Int) (L1 uint_array_tuple_array_tuple) (M1 Int) (N1 Bool) (O1 uint_array_tuple_array_tuple) (P1 uint_array_tuple_array_tuple) (Q1 uint_array_tuple_array_tuple) (R1 Int) (S1 uint_array_tuple) (T1 uint_array_tuple) (U1 uint_array_tuple) (V1 uint_array_tuple_array_tuple) (W1 Int) (X1 uint_array_tuple) (Y1 Int) (Z1 Int) (A2 Bool) (B2 state_type) (C2 state_type) (D2 Int) (E2 tx_type) (F2 Int) (G2 Int) (H2 Int) (I2 Int) (J2 Int) (K2 Int) ) - (=> - (and - (block_54_i_204_335_0 I D2 C H E2 B2 A D H2 J2 F2 C2 B E I2 K2 G2) - (let ((a!1 (store (uint_array_tuple_array_tuple_accessor_array A1) - C1 - (uint_array_tuple (store (uint_array_tuple_accessor_array E1) - D1 - J1) - (uint_array_tuple_accessor_length E1)))) - (a!2 (= G - (uint_array_tuple_array_tuple - (store (uint_array_tuple_array_tuple_accessor_array P1) R1 T1) - (uint_array_tuple_array_tuple_accessor_length P1))))) - (and (not (= (<= X T) Y)) - (not (= (<= M1 K1) N1)) - (= A2 (= Y1 Z1)) - (= U E) - (= L1 F) - (= Q1 G) - (= F - (uint_array_tuple_array_tuple - a!1 - (uint_array_tuple_array_tuple_accessor_length A1))) - a!2 - (= Q E) - (= Z E) - (= A1 E) - (= B1 F) - (= P1 F) - (= O1 F) - (= V1 G) - (= F1 (select (uint_array_tuple_array_tuple_accessor_array A1) C1)) - (= T1 (uint_array_tuple ((as const (Array Int Int)) 0) 0)) - (= U1 (select (uint_array_tuple_array_tuple_accessor_array P1) R1)) - (= W (select (uint_array_tuple_array_tuple_accessor_array E) V)) - (= E1 (select (uint_array_tuple_array_tuple_accessor_array E) C1)) - (= S1 (select (uint_array_tuple_array_tuple_accessor_array F) R1)) - (= X1 (select (uint_array_tuple_array_tuple_accessor_array G) W1)) - (= K1 K2) - (= Y1 (uint_array_tuple_accessor_length X1)) - (= H1 (select (uint_array_tuple_accessor_array E1) D1)) - (= G1 (select (uint_array_tuple_accessor_array E1) D1)) - (= L K) - (= C1 I2) - (= T K2) - (= M L) - (= J I) - (= O N) - (= N M) - (= K J) - (= D1 K2) - (= P I2) - (= V I2) - (= R (uint_array_tuple_array_tuple_accessor_length Q)) - (= X (uint_array_tuple_accessor_length W)) - (= M1 (uint_array_tuple_array_tuple_accessor_length L1)) - (= R1 K2) - (= J1 I1) - (= I1 G2) - (= W1 K2) - (= Z1 0) - (>= (uint_array_tuple_accessor_length W) 0) - (>= (uint_array_tuple_accessor_length E1) 0) - (>= (uint_array_tuple_accessor_length S1) 0) - (>= (uint_array_tuple_accessor_length X1) 0) - (>= K1 0) - (>= Y1 0) - (>= H1 0) - (>= G1 0) - (>= C1 0) - (>= T 0) - (>= D1 0) - (>= P 0) - (>= V 0) - (>= R 0) - (>= X 0) - (>= G2 0) - (>= M1 0) - (>= R1 0) - (>= J1 0) - (>= I1 0) - (>= W1 0) - (>= K2 0) - (>= I2 0) - (<= K1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Y1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= H1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= G1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= C1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= T - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= D1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= P - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= V - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= R - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= X - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= G2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= M1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= R1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= J1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= W1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= K2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (= S true) - (= Y true) - (= N1 true) - (not (= (<= R P) S)))) - ) - (block_55_return_function_i__205_335_0 - O - D2 - C - H - E2 - B2 - A - D - H2 - J2 - F2 - C2 - B - G - I2 - K2 - G2) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - true - ) - (block_62_function_i__205_335_0 G J C F K H A D N P L I B E O Q M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C uint_array_tuple) (D abi_type) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K Int) (L state_type) (M state_type) (N state_type) (O state_type) (P Int) (Q tx_type) (R Int) (S Int) (T Int) (U Int) (V Int) (W Int) (X Int) (Y Int) (Z Int) ) - (=> - (and - (block_62_function_i__205_335_0 I P D H Q L A E U X R M B F V Y S) - (summary_13_function_i__205_335_0 J P D H Q N B F V Y S O C G W Z T) - (let ((a!1 (store (balances M) P (+ (select (balances M) P) K))) - (a!2 (= (select (bytes_tuple_accessor_array (msg.data Q)) 3) 27)) - (a!3 (= (select (bytes_tuple_accessor_array (msg.data Q)) 2) 241)) - (a!4 (= (select (bytes_tuple_accessor_array (msg.data Q)) 1) 63)) - (a!5 (= (select (bytes_tuple_accessor_array (msg.data Q)) 0) 53)) - (a!6 (>= (+ (select (balances M) P) K) 0)) - (a!7 (<= (+ (select (balances M) P) K) - 115792089237316195423570985008687907853269984665640564039457584007913129639935))) - (and (= B A) - (= N (state_type a!1)) - (= M L) - a!2 - a!3 - a!4 - a!5 - (= (msg.value Q) 0) - (= (msg.sig Q) 893382939) - (= V U) - (= I 0) - (= S R) - (= Y X) - (>= (tx.origin Q) 0) - (>= (tx.gasprice Q) 0) - (>= (msg.value Q) 0) - (>= (msg.sender Q) 0) - (>= (block.timestamp Q) 0) - (>= (block.number Q) 0) - (>= (block.gaslimit Q) 0) - (>= (block.difficulty Q) 0) - (>= (block.coinbase Q) 0) - (>= (block.chainid Q) 0) - (>= (block.basefee Q) 0) - (>= (bytes_tuple_accessor_length (msg.data Q)) 4) - a!6 - (>= K (msg.value Q)) - (<= (tx.origin Q) 1461501637330902918203684832716283019655932542975) - (<= (tx.gasprice Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (msg.value Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (msg.sender Q) 1461501637330902918203684832716283019655932542975) - (<= (block.timestamp Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.number Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.gaslimit Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.difficulty Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.coinbase Q) 1461501637330902918203684832716283019655932542975) - (<= (block.chainid Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.basefee Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - a!7 - (= F E))) - ) - (summary_14_function_i__205_335_0 J P D H Q L A E U X R O C G W Z T) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) ) - (=> - (and - true - ) - (block_63_function_j__279_335_0 G J C F K H A D N P R L I B E O Q S M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) ) - (=> - (and - (block_63_function_j__279_335_0 G J C F K H A D N P R L I B E O Q S M) - (and (= B A) (= I H) (= G 0) (= O N) (= S R) (= Q P) (= M L) (= E D)) - ) - (block_64_j_278_335_0 G J C F K H A D N P R L I B E O Q S M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H Int) (I Int) (J uint_array_tuple_array_tuple) (K Int) (L Bool) (M Int) (N uint_array_tuple_array_tuple) (O Int) (P state_type) (Q state_type) (R Int) (S tx_type) (T Int) (U Int) (V Int) (W Int) (X Int) (Y Int) (Z Int) (A1 Int) ) - (=> - (and - (block_64_j_278_335_0 G R C F S P A D V X Z T Q B E W Y A1 U) - (and (= N E) - (= J E) - (= O W) - (= I W) - (= H 24) - (= M Y) - (= K (uint_array_tuple_array_tuple_accessor_length J)) - (>= O 0) - (>= W 0) - (>= I 0) - (>= M 0) - (>= K 0) - (>= A1 0) - (>= Y 0) - (>= U 0) - (<= O - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= W - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= M - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= K - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= A1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Y - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 O)) (>= O (uint_array_tuple_array_tuple_accessor_length N))) - (= L true) - (not (= (<= K I) L))) - ) - (block_66_function_j__279_335_0 H R C F S P A D V X Z T Q B E W Y A1 U) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) ) - (=> - (and - (block_66_function_j__279_335_0 G J C F K H A D N P R L I B E O Q S M) - true - ) - (summary_15_function_j__279_335_0 G J C F K H A D N P R L I B E O Q S M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) ) - (=> - (and - (block_67_function_j__279_335_0 G J C F K H A D N P R L I B E O Q S M) - true - ) - (summary_15_function_j__279_335_0 G J C F K H A D N P R L I B E O Q S M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) ) - (=> - (and - (block_68_function_j__279_335_0 G J C F K H A D N P R L I B E O Q S M) - true - ) - (summary_15_function_j__279_335_0 G J C F K H A D N P R L I B E O Q S M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) ) - (=> - (and - (block_69_function_j__279_335_0 G J C F K H A D N P R L I B E O Q S M) - true - ) - (summary_15_function_j__279_335_0 G J C F K H A D N P R L I B E O Q S M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) ) - (=> - (and - (block_70_function_j__279_335_0 G J C F K H A D N P R L I B E O Q S M) - true - ) - (summary_15_function_j__279_335_0 G J C F K H A D N P R L I B E O Q S M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) ) - (=> - (and - (block_71_function_j__279_335_0 G J C F K H A D N P R L I B E O Q S M) - true - ) - (summary_15_function_j__279_335_0 G J C F K H A D N P R L I B E O Q S M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) ) - (=> - (and - (block_72_function_j__279_335_0 G J C F K H A D N P R L I B E O Q S M) - true - ) - (summary_15_function_j__279_335_0 G J C F K H A D N P R L I B E O Q S M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) ) - (=> - (and - (block_73_function_j__279_335_0 G J C F K H A D N P R L I B E O Q S M) - true - ) - (summary_15_function_j__279_335_0 G J C F K H A D N P R L I B E O Q S M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) ) - (=> - (and - (block_65_return_function_j__279_335_0 G J C F K H A D N P R L I B E O Q S M) - true - ) - (summary_15_function_j__279_335_0 G J C F K H A D N P R L I B E O Q S M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H Int) (I Int) (J Int) (K uint_array_tuple_array_tuple) (L Int) (M Bool) (N Int) (O uint_array_tuple_array_tuple) (P Int) (Q uint_array_tuple) (R Int) (S Bool) (T uint_array_tuple_array_tuple) (U Int) (V Int) (W state_type) (X state_type) (Y Int) (Z tx_type) (A1 Int) (B1 Int) (C1 Int) (D1 Int) (E1 Int) (F1 Int) (G1 Int) (H1 Int) ) - (=> - (and - (block_64_j_278_335_0 G Y C F Z W A D C1 E1 G1 A1 X B E D1 F1 H1 B1) - (and (not (= (<= R N) S)) - (= O E) - (= K E) - (= T E) - (= Q (select (uint_array_tuple_array_tuple_accessor_array E) P)) - (= H G) - (= V B1) - (= U D1) - (= N F1) - (= J D1) - (= I 25) - (= P D1) - (= L (uint_array_tuple_array_tuple_accessor_length K)) - (= R (uint_array_tuple_accessor_length Q)) - (>= (uint_array_tuple_accessor_length Q) 0) - (>= V 0) - (>= U 0) - (>= N 0) - (>= D1 0) - (>= J 0) - (>= P 0) - (>= L 0) - (>= R 0) - (>= H1 0) - (>= F1 0) - (>= B1 0) - (<= V - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= N - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= D1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= J - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= P - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= L - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= R - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= H1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= F1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= B1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 U)) (>= U (uint_array_tuple_array_tuple_accessor_length T))) - (= S true) - (= M true) - (not (= (<= L J) M))) - ) - (block_67_function_j__279_335_0 I Y C F Z W A D C1 E1 G1 A1 X B E D1 F1 H1 B1) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H Int) (I Int) (J Int) (K Int) (L uint_array_tuple_array_tuple) (M Int) (N Bool) (O Int) (P uint_array_tuple_array_tuple) (Q Int) (R uint_array_tuple) (S Int) (T Bool) (U uint_array_tuple_array_tuple) (V Int) (W Int) (X uint_array_tuple) (Y Int) (Z state_type) (A1 state_type) (B1 Int) (C1 tx_type) (D1 Int) (E1 Int) (F1 Int) (G1 Int) (H1 Int) (I1 Int) (J1 Int) (K1 Int) ) - (=> - (and - (block_64_j_278_335_0 G B1 C F C1 Z A D F1 H1 J1 D1 A1 B E G1 I1 K1 E1) - (and (not (= (<= S O) T)) - (= L E) - (= P E) - (= U E) - (= R (select (uint_array_tuple_array_tuple_accessor_array E) Q)) - (= X (select (uint_array_tuple_array_tuple_accessor_array E) V)) - (= K G1) - (= Y E1) - (= H G) - (= Q G1) - (= M (uint_array_tuple_array_tuple_accessor_length L)) - (= S (uint_array_tuple_accessor_length R)) - (= J 26) - (= I H) - (= W I1) - (= O I1) - (= V G1) - (>= (uint_array_tuple_accessor_length R) 0) - (>= (uint_array_tuple_accessor_length X) 0) - (>= K 0) - (>= Y 0) - (>= Q 0) - (>= G1 0) - (>= M 0) - (>= S 0) - (>= W 0) - (>= O 0) - (>= V 0) - (>= K1 0) - (>= I1 0) - (>= E1 0) - (<= K - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Y - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Q - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= G1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= M - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= S - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= W - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= O - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= V - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= K1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= E1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 W)) (>= W (uint_array_tuple_accessor_length X))) - (= T true) - (= N true) - (not (= (<= M K) N))) - ) - (block_68_function_j__279_335_0 - J - B1 - C - F - C1 - Z - A - D - F1 - H1 - J1 - D1 - A1 - B - E - G1 - I1 - K1 - E1) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G crypto_type) (H Int) (I Int) (J Int) (K Int) (L Int) (M Int) (N uint_array_tuple_array_tuple) (O Int) (P Bool) (Q Int) (R uint_array_tuple_array_tuple) (S Int) (T uint_array_tuple) (U Int) (V Bool) (W uint_array_tuple_array_tuple) (X uint_array_tuple_array_tuple) (Y uint_array_tuple_array_tuple) (Z Int) (A1 Int) (B1 uint_array_tuple) (C1 uint_array_tuple) (D1 Int) (E1 Int) (F1 Int) (G1 Int) (H1 Int) (I1 uint_array_tuple_array_tuple) (J1 Int) (K1 Bool) (L1 uint_array_tuple_array_tuple) (M1 Int) (N1 state_type) (O1 state_type) (P1 Int) (Q1 tx_type) (R1 Int) (S1 Int) (T1 Int) (U1 Int) (V1 Int) (W1 Int) (X1 Int) (Y1 Int) ) - (=> - (and - (block_64_j_278_335_0 H P1 C G Q1 N1 A D T1 V1 X1 R1 O1 B E U1 W1 Y1 S1) - (let ((a!1 (store (uint_array_tuple_array_tuple_accessor_array X) - Z - (uint_array_tuple (store (uint_array_tuple_accessor_array B1) - A1 - G1) - (uint_array_tuple_accessor_length B1))))) - (and (not (= (<= O M) P)) - (not (= (<= J1 H1) K1)) - (= Y F) - (= R E) - (= X E) - (= L1 F) - (= F - (uint_array_tuple_array_tuple - a!1 - (uint_array_tuple_array_tuple_accessor_length X))) - (= N E) - (= W E) - (= I1 F) - (= T (select (uint_array_tuple_array_tuple_accessor_array E) S)) - (= B1 (select (uint_array_tuple_array_tuple_accessor_array E) Z)) - (= C1 (select (uint_array_tuple_array_tuple_accessor_array X) Z)) - (= I H) - (= M U1) - (= M1 Y1) - (= U (uint_array_tuple_accessor_length T)) - (= Q W1) - (= E1 (select (uint_array_tuple_accessor_array B1) A1)) - (= S U1) - (= J I) - (= L 27) - (= K J) - (= A1 W1) - (= Z U1) - (= O (uint_array_tuple_array_tuple_accessor_length N)) - (= G1 F1) - (= F1 S1) - (= H1 Y1) - (= D1 (select (uint_array_tuple_accessor_array B1) A1)) - (= J1 (uint_array_tuple_array_tuple_accessor_length I1)) - (>= (uint_array_tuple_accessor_length T) 0) - (>= (uint_array_tuple_accessor_length B1) 0) - (>= M 0) - (>= M1 0) - (>= U 0) - (>= Q 0) - (>= E1 0) - (>= S 0) - (>= U1 0) - (>= A1 0) - (>= Z 0) - (>= O 0) - (>= G1 0) - (>= F1 0) - (>= H1 0) - (>= D1 0) - (>= J1 0) - (>= Y1 0) - (>= W1 0) - (>= S1 0) - (<= M - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= M1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Q - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= E1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= S - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= A1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Z - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= O - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= G1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= F1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= H1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= D1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= J1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Y1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= W1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= S1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 M1)) - (>= M1 (uint_array_tuple_array_tuple_accessor_length L1))) - (= P true) - (= K1 true) - (= V true) - (not (= (<= U Q) V)))) - ) - (block_69_function_j__279_335_0 - L - P1 - C - G - Q1 - N1 - A - D - T1 - V1 - X1 - R1 - O1 - B - F - U1 - W1 - Y1 - S1) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P uint_array_tuple_array_tuple) (Q Int) (R Bool) (S Int) (T uint_array_tuple_array_tuple) (U Int) (V uint_array_tuple) (W Int) (X Bool) (Y uint_array_tuple_array_tuple) (Z uint_array_tuple_array_tuple) (A1 uint_array_tuple_array_tuple) (B1 Int) (C1 Int) (D1 uint_array_tuple) (E1 uint_array_tuple) (F1 Int) (G1 Int) (H1 Int) (I1 Int) (J1 Int) (K1 uint_array_tuple_array_tuple) (L1 Int) (M1 Bool) (N1 uint_array_tuple_array_tuple) (O1 uint_array_tuple_array_tuple) (P1 uint_array_tuple_array_tuple) (Q1 Int) (R1 uint_array_tuple) (S1 uint_array_tuple) (T1 uint_array_tuple) (U1 Int) (V1 uint_array_tuple_array_tuple) (W1 Int) (X1 Bool) (Y1 Int) (Z1 uint_array_tuple_array_tuple) (A2 Int) (B2 state_type) (C2 state_type) (D2 Int) (E2 tx_type) (F2 Int) (G2 Int) (H2 Int) (I2 Int) (J2 Int) (K2 Int) (L2 Int) (M2 Int) ) - (=> - (and - (block_64_j_278_335_0 I D2 C H E2 B2 A D H2 J2 L2 F2 C2 B E I2 K2 M2 G2) - (let ((a!1 (store (uint_array_tuple_array_tuple_accessor_array Z) - B1 - (uint_array_tuple (store (uint_array_tuple_accessor_array D1) - C1 - I1) - (uint_array_tuple_accessor_length D1)))) - (a!2 (= G - (uint_array_tuple_array_tuple - (store (uint_array_tuple_array_tuple_accessor_array O1) Q1 S1) - (uint_array_tuple_array_tuple_accessor_length O1))))) - (and (not (= (<= Q O) R)) - (not (= (<= L1 J1) M1)) - (not (= (<= W1 U1) X1)) - (= A1 F) - (= Y E) - (= Z E) - (= N1 F) - (= O1 F) - (= Z1 G) - (= V1 G) - (= F - (uint_array_tuple_array_tuple - a!1 - (uint_array_tuple_array_tuple_accessor_length Z))) - a!2 - (= P E) - (= T E) - (= K1 F) - (= P1 G) - (= V (select (uint_array_tuple_array_tuple_accessor_array E) U)) - (= D1 (select (uint_array_tuple_array_tuple_accessor_array E) B1)) - (= R1 (select (uint_array_tuple_array_tuple_accessor_array F) Q1)) - (= E1 (select (uint_array_tuple_array_tuple_accessor_array Z) B1)) - (= T1 (select (uint_array_tuple_array_tuple_accessor_array O1) Q1)) - (= S1 (uint_array_tuple ((as const (Array Int Int)) 0) 0)) - (= W (uint_array_tuple_accessor_length V)) - (= B1 I2) - (= A2 I2) - (= J1 M2) - (= I1 H1) - (= U I2) - (= N 28) - (= O I2) - (= L K) - (= J I) - (= Q (uint_array_tuple_array_tuple_accessor_length P)) - (= M L) - (= G1 (select (uint_array_tuple_accessor_array D1) C1)) - (= F1 (select (uint_array_tuple_accessor_array D1) C1)) - (= K J) - (= S K2) - (= H1 G2) - (= C1 K2) - (= U1 K2) - (= L1 (uint_array_tuple_array_tuple_accessor_length K1)) - (= Y1 I2) - (= Q1 M2) - (= W1 (uint_array_tuple_array_tuple_accessor_length V1)) - (>= (uint_array_tuple_accessor_length V) 0) - (>= (uint_array_tuple_accessor_length D1) 0) - (>= (uint_array_tuple_accessor_length R1) 0) - (>= W 0) - (>= B1 0) - (>= A2 0) - (>= J1 0) - (>= I1 0) - (>= U 0) - (>= O 0) - (>= Q 0) - (>= G1 0) - (>= F1 0) - (>= S 0) - (>= I2 0) - (>= H1 0) - (>= C1 0) - (>= U1 0) - (>= L1 0) - (>= Y1 0) - (>= Q1 0) - (>= W1 0) - (>= M2 0) - (>= K2 0) - (>= G2 0) - (<= W - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= B1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= A2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= J1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= O - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Q - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= G1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= F1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= S - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= H1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= C1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= L1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Y1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Q1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= W1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= M2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= K2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= G2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 A2)) - (>= A2 (uint_array_tuple_array_tuple_accessor_length Z1))) - (= R true) - (= X true) - (= M1 true) - (= X1 true) - (not (= (<= W S) X)))) - ) - (block_70_function_j__279_335_0 - N - D2 - C - H - E2 - B2 - A - D - H2 - J2 - L2 - F2 - C2 - B - G - I2 - K2 - M2 - G2) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q uint_array_tuple_array_tuple) (R Int) (S Bool) (T Int) (U uint_array_tuple_array_tuple) (V Int) (W uint_array_tuple) (X Int) (Y Bool) (Z uint_array_tuple_array_tuple) (A1 uint_array_tuple_array_tuple) (B1 uint_array_tuple_array_tuple) (C1 Int) (D1 Int) (E1 uint_array_tuple) (F1 uint_array_tuple) (G1 Int) (H1 Int) (I1 Int) (J1 Int) (K1 Int) (L1 uint_array_tuple_array_tuple) (M1 Int) (N1 Bool) (O1 uint_array_tuple_array_tuple) (P1 uint_array_tuple_array_tuple) (Q1 uint_array_tuple_array_tuple) (R1 Int) (S1 uint_array_tuple) (T1 uint_array_tuple) (U1 uint_array_tuple) (V1 Int) (W1 uint_array_tuple_array_tuple) (X1 Int) (Y1 Bool) (Z1 Int) (A2 uint_array_tuple_array_tuple) (B2 Int) (C2 uint_array_tuple) (D2 Int) (E2 Bool) (F2 uint_array_tuple_array_tuple) (G2 Int) (H2 state_type) (I2 state_type) (J2 Int) (K2 tx_type) (L2 Int) (M2 Int) (N2 Int) (O2 Int) (P2 Int) (Q2 Int) (R2 Int) (S2 Int) ) - (=> - (and - (block_64_j_278_335_0 I J2 C H K2 H2 A D N2 P2 R2 L2 I2 B E O2 Q2 S2 M2) - (let ((a!1 (= G - (uint_array_tuple_array_tuple - (store (uint_array_tuple_array_tuple_accessor_array P1) R1 T1) - (uint_array_tuple_array_tuple_accessor_length P1)))) - (a!2 (store (uint_array_tuple_array_tuple_accessor_array A1) - C1 - (uint_array_tuple (store (uint_array_tuple_accessor_array E1) - D1 - J1) - (uint_array_tuple_accessor_length E1))))) - (and (not (= (<= M1 K1) N1)) - (not (= (<= X T) Y)) - (not (= (<= X1 V1) Y1)) - (not (= (<= D2 Z1) E2)) - a!1 - (= L1 F) - (= B1 F) - (= F2 G) - (= A2 G) - (= Q E) - (= F - (uint_array_tuple_array_tuple - a!2 - (uint_array_tuple_array_tuple_accessor_length A1))) - (= U E) - (= Z E) - (= A1 E) - (= Q1 G) - (= P1 F) - (= O1 F) - (= W1 G) - (= U1 (select (uint_array_tuple_array_tuple_accessor_array P1) R1)) - (= C2 (select (uint_array_tuple_array_tuple_accessor_array G) B2)) - (= W (select (uint_array_tuple_array_tuple_accessor_array E) V)) - (= E1 (select (uint_array_tuple_array_tuple_accessor_array E) C1)) - (= F1 (select (uint_array_tuple_array_tuple_accessor_array A1) C1)) - (= T1 (uint_array_tuple ((as const (Array Int Int)) 0) 0)) - (= S1 (select (uint_array_tuple_array_tuple_accessor_array F) R1)) - (= C1 O2) - (= G1 (select (uint_array_tuple_accessor_array E1) D1)) - (= H1 (select (uint_array_tuple_accessor_array E1) D1)) - (= G2 Q2) - (= J I) - (= K J) - (= T Q2) - (= K1 S2) - (= R (uint_array_tuple_array_tuple_accessor_length Q)) - (= P O2) - (= O 29) - (= V O2) - (= M1 (uint_array_tuple_array_tuple_accessor_length L1)) - (= X (uint_array_tuple_accessor_length W)) - (= L K) - (= M L) - (= N M) - (= D1 Q2) - (= J1 I1) - (= I1 M2) - (= Z1 O2) - (= V1 Q2) - (= R1 S2) - (= B2 O2) - (= X1 (uint_array_tuple_array_tuple_accessor_length W1)) - (= D2 (uint_array_tuple_accessor_length C2)) - (>= (uint_array_tuple_accessor_length C2) 0) - (>= (uint_array_tuple_accessor_length W) 0) - (>= (uint_array_tuple_accessor_length E1) 0) - (>= (uint_array_tuple_accessor_length S1) 0) - (>= C1 0) - (>= G1 0) - (>= H1 0) - (>= G2 0) - (>= T 0) - (>= K1 0) - (>= R 0) - (>= P 0) - (>= V 0) - (>= M1 0) - (>= X 0) - (>= D1 0) - (>= O2 0) - (>= J1 0) - (>= I1 0) - (>= Z1 0) - (>= V1 0) - (>= R1 0) - (>= B2 0) - (>= X1 0) - (>= D2 0) - (>= S2 0) - (>= Q2 0) - (>= M2 0) - (<= C1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= G1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= H1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= G2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= T - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= K1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= R - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= P - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= V - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= M1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= X - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= D1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= O2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= J1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Z1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= V1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= R1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= B2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= X1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= D2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= S2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Q2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= M2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 G2)) - (>= G2 (uint_array_tuple_array_tuple_accessor_length F2))) - (= S true) - (= Y true) - (= N1 true) - (= Y1 true) - (= E2 true) - (not (= (<= R P) S)))) - ) - (block_71_function_j__279_335_0 - O - J2 - C - H - K2 - H2 - A - D - N2 - P2 - R2 - L2 - I2 - B - G - O2 - Q2 - S2 - M2) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R uint_array_tuple_array_tuple) (S Int) (T Bool) (U Int) (V uint_array_tuple_array_tuple) (W Int) (X uint_array_tuple) (Y Int) (Z Bool) (A1 uint_array_tuple_array_tuple) (B1 uint_array_tuple_array_tuple) (C1 uint_array_tuple_array_tuple) (D1 Int) (E1 Int) (F1 uint_array_tuple) (G1 uint_array_tuple) (H1 Int) (I1 Int) (J1 Int) (K1 Int) (L1 Int) (M1 uint_array_tuple_array_tuple) (N1 Int) (O1 Bool) (P1 uint_array_tuple_array_tuple) (Q1 uint_array_tuple_array_tuple) (R1 uint_array_tuple_array_tuple) (S1 Int) (T1 uint_array_tuple) (U1 uint_array_tuple) (V1 uint_array_tuple) (W1 Int) (X1 uint_array_tuple_array_tuple) (Y1 Int) (Z1 Bool) (A2 Int) (B2 uint_array_tuple_array_tuple) (C2 Int) (D2 uint_array_tuple) (E2 Int) (F2 Bool) (G2 uint_array_tuple_array_tuple) (H2 Int) (I2 uint_array_tuple) (J2 Int) (K2 state_type) (L2 state_type) (M2 Int) (N2 tx_type) (O2 Int) (P2 Int) (Q2 Int) (R2 Int) (S2 Int) (T2 Int) (U2 Int) (V2 Int) ) - (=> - (and - (block_64_j_278_335_0 I M2 C H N2 K2 A D Q2 S2 U2 O2 L2 B E R2 T2 V2 P2) - (let ((a!1 (= G - (uint_array_tuple_array_tuple - (store (uint_array_tuple_array_tuple_accessor_array Q1) S1 U1) - (uint_array_tuple_array_tuple_accessor_length Q1)))) - (a!2 (store (uint_array_tuple_array_tuple_accessor_array B1) - D1 - (uint_array_tuple (store (uint_array_tuple_accessor_array F1) - E1 - K1) - (uint_array_tuple_accessor_length F1))))) - (and (not (= (<= S Q) T)) - (not (= (<= Y U) Z)) - (not (= (<= Y1 W1) Z1)) - (not (= (<= E2 A2) F2)) - (= P1 F) - (= A1 E) - (= X1 G) - (= Q1 F) - (= B2 G) - a!1 - (= V E) - (= R E) - (= F - (uint_array_tuple_array_tuple - a!2 - (uint_array_tuple_array_tuple_accessor_length B1))) - (= B1 E) - (= C1 F) - (= M1 F) - (= R1 G) - (= G2 G) - (= F1 (select (uint_array_tuple_array_tuple_accessor_array E) D1)) - (= T1 (select (uint_array_tuple_array_tuple_accessor_array F) S1)) - (= X (select (uint_array_tuple_array_tuple_accessor_array E) W)) - (= G1 (select (uint_array_tuple_array_tuple_accessor_array B1) D1)) - (= U1 (uint_array_tuple ((as const (Array Int Int)) 0) 0)) - (= V1 (select (uint_array_tuple_array_tuple_accessor_array Q1) S1)) - (= D2 (select (uint_array_tuple_array_tuple_accessor_array G) C2)) - (= I2 (select (uint_array_tuple_array_tuple_accessor_array G) H2)) - (= J1 P2) - (= K1 J1) - (= J2 R2) - (= S1 V2) - (= D1 R2) - (= M L) - (= K J) - (= N M) - (= W R2) - (= N1 (uint_array_tuple_array_tuple_accessor_length M1)) - (= E1 T2) - (= U T2) - (= S (uint_array_tuple_array_tuple_accessor_length R)) - (= L K) - (= J I) - (= Y (uint_array_tuple_accessor_length X)) - (= O N) - (= P 30) - (= Q R2) - (= I1 (select (uint_array_tuple_accessor_array F1) E1)) - (= H1 (select (uint_array_tuple_accessor_array F1) E1)) - (= W1 T2) - (= L1 V2) - (= C2 R2) - (= Y1 (uint_array_tuple_array_tuple_accessor_length X1)) - (= H2 T2) - (= E2 (uint_array_tuple_accessor_length D2)) - (= A2 R2) - (>= (uint_array_tuple_accessor_length F1) 0) - (>= (uint_array_tuple_accessor_length T1) 0) - (>= (uint_array_tuple_accessor_length X) 0) - (>= (uint_array_tuple_accessor_length D2) 0) - (>= (uint_array_tuple_accessor_length I2) 0) - (>= J1 0) - (>= K1 0) - (>= J2 0) - (>= S1 0) - (>= D1 0) - (>= W 0) - (>= N1 0) - (>= E1 0) - (>= U 0) - (>= S 0) - (>= Y 0) - (>= Q 0) - (>= I1 0) - (>= H1 0) - (>= R2 0) - (>= W1 0) - (>= L1 0) - (>= C2 0) - (>= Y1 0) - (>= H2 0) - (>= E2 0) - (>= A2 0) - (>= V2 0) - (>= T2 0) - (>= P2 0) - (<= J1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= K1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= J2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= S1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= D1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= W - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= N1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= E1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= S - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Y - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Q - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= H1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= R2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= W1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= L1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= C2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Y1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= H2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= E2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= A2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= V2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= T2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= P2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 J2)) (>= J2 (uint_array_tuple_accessor_length I2))) - (= Z1 true) - (= F2 true) - (= O1 true) - (= T true) - (= Z true) - (not (= (<= N1 L1) O1)))) - ) - (block_72_function_j__279_335_0 - P - M2 - C - H - N2 - K2 - A - D - Q2 - S2 - U2 - O2 - L2 - B - G - R2 - T2 - V2 - P2) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S uint_array_tuple_array_tuple) (T Int) (U Bool) (V Int) (W uint_array_tuple_array_tuple) (X Int) (Y uint_array_tuple) (Z Int) (A1 Bool) (B1 uint_array_tuple_array_tuple) (C1 uint_array_tuple_array_tuple) (D1 uint_array_tuple_array_tuple) (E1 Int) (F1 Int) (G1 uint_array_tuple) (H1 uint_array_tuple) (I1 Int) (J1 Int) (K1 Int) (L1 Int) (M1 Int) (N1 uint_array_tuple_array_tuple) (O1 Int) (P1 Bool) (Q1 uint_array_tuple_array_tuple) (R1 uint_array_tuple_array_tuple) (S1 uint_array_tuple_array_tuple) (T1 Int) (U1 uint_array_tuple) (V1 uint_array_tuple) (W1 uint_array_tuple) (X1 Int) (Y1 uint_array_tuple_array_tuple) (Z1 Int) (A2 Bool) (B2 Int) (C2 uint_array_tuple_array_tuple) (D2 Int) (E2 uint_array_tuple) (F2 Int) (G2 Bool) (H2 uint_array_tuple_array_tuple) (I2 Int) (J2 uint_array_tuple) (K2 Int) (L2 Int) (M2 Int) (N2 Bool) (O2 state_type) (P2 state_type) (Q2 Int) (R2 tx_type) (S2 Int) (T2 Int) (U2 Int) (V2 Int) (W2 Int) (X2 Int) (Y2 Int) (Z2 Int) ) - (=> - (and - (block_64_j_278_335_0 I Q2 C H R2 O2 A D U2 W2 Y2 S2 P2 B E V2 X2 Z2 T2) - (let ((a!1 (store (uint_array_tuple_array_tuple_accessor_array C1) - E1 - (uint_array_tuple (store (uint_array_tuple_accessor_array G1) - F1 - L1) - (uint_array_tuple_accessor_length G1)))) - (a!2 (= G - (uint_array_tuple_array_tuple - (store (uint_array_tuple_array_tuple_accessor_array R1) T1 V1) - (uint_array_tuple_array_tuple_accessor_length R1))))) - (and (not (= (<= Z1 X1) A2)) - (not (= (<= Z V) A1)) - (not (= (<= F2 B2) G2)) - (not (= (<= T R) U)) - (= N2 (= L2 M2)) - (= S1 G) - (= D1 F) - (= N1 F) - (= R1 F) - (= Y1 G) - (= H2 G) - (= W E) - (= S E) - (= F - (uint_array_tuple_array_tuple - a!1 - (uint_array_tuple_array_tuple_accessor_length C1))) - a!2 - (= B1 E) - (= C1 E) - (= Q1 F) - (= C2 G) - (= G1 (select (uint_array_tuple_array_tuple_accessor_array E) E1)) - (= W1 (select (uint_array_tuple_array_tuple_accessor_array R1) T1)) - (= H1 (select (uint_array_tuple_array_tuple_accessor_array C1) E1)) - (= U1 (select (uint_array_tuple_array_tuple_accessor_array F) T1)) - (= V1 (uint_array_tuple ((as const (Array Int Int)) 0) 0)) - (= E2 (select (uint_array_tuple_array_tuple_accessor_array G) D2)) - (= J2 (select (uint_array_tuple_array_tuple_accessor_array G) I2)) - (= Y (select (uint_array_tuple_array_tuple_accessor_array E) X)) - (= J1 (select (uint_array_tuple_accessor_array G1) F1)) - (= O1 (uint_array_tuple_array_tuple_accessor_length N1)) - (= J I) - (= Z1 (uint_array_tuple_array_tuple_accessor_length Y1)) - (= M2 0) - (= Q 31) - (= O N) - (= M L) - (= R V2) - (= I1 (select (uint_array_tuple_accessor_array G1) F1)) - (= V X2) - (= P O) - (= N M) - (= Z (uint_array_tuple_accessor_length Y)) - (= F2 (uint_array_tuple_accessor_length E2)) - (= T1 Z2) - (= K J) - (= E1 V2) - (= T (uint_array_tuple_array_tuple_accessor_length S)) - (= X V2) - (= L K) - (= K1 T2) - (= F1 X2) - (= M1 Z2) - (= L1 K1) - (= B2 V2) - (= X1 X2) - (= L2 (select (uint_array_tuple_accessor_array J2) K2)) - (= I2 X2) - (= D2 V2) - (= K2 V2) - (>= (uint_array_tuple_accessor_length G1) 0) - (>= (uint_array_tuple_accessor_length U1) 0) - (>= (uint_array_tuple_accessor_length E2) 0) - (>= (uint_array_tuple_accessor_length J2) 0) - (>= (uint_array_tuple_accessor_length Y) 0) - (>= J1 0) - (>= O1 0) - (>= Z1 0) - (>= R 0) - (>= I1 0) - (>= V 0) - (>= Z 0) - (>= F2 0) - (>= T1 0) - (>= E1 0) - (>= T 0) - (>= X 0) - (>= K1 0) - (>= F1 0) - (>= M1 0) - (>= L1 0) - (>= V2 0) - (>= B2 0) - (>= X1 0) - (>= L2 0) - (>= I2 0) - (>= D2 0) - (>= K2 0) - (>= Z2 0) - (>= X2 0) - (>= T2 0) - (<= J1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= O1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Z1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= R - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= V - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Z - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= F2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= T1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= E1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= T - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= X - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= K1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= F1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= M1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= L1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= V2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= B2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= X1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= L2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= D2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= K2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Z2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= X2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= T2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (= A2 true) - (not N2) - (= P1 true) - (= G2 true) - (= U true) - (= A1 true) - (not (= (<= O1 M1) P1)))) - ) - (block_73_function_j__279_335_0 - Q - Q2 - C - H - R2 - O2 - A - D - U2 - W2 - Y2 - S2 - P2 - B - G - V2 - X2 - Z2 - T2) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S uint_array_tuple_array_tuple) (T Int) (U Bool) (V Int) (W uint_array_tuple_array_tuple) (X Int) (Y uint_array_tuple) (Z Int) (A1 Bool) (B1 uint_array_tuple_array_tuple) (C1 uint_array_tuple_array_tuple) (D1 uint_array_tuple_array_tuple) (E1 Int) (F1 Int) (G1 uint_array_tuple) (H1 uint_array_tuple) (I1 Int) (J1 Int) (K1 Int) (L1 Int) (M1 Int) (N1 uint_array_tuple_array_tuple) (O1 Int) (P1 Bool) (Q1 uint_array_tuple_array_tuple) (R1 uint_array_tuple_array_tuple) (S1 uint_array_tuple_array_tuple) (T1 Int) (U1 uint_array_tuple) (V1 uint_array_tuple) (W1 uint_array_tuple) (X1 Int) (Y1 uint_array_tuple_array_tuple) (Z1 Int) (A2 Bool) (B2 Int) (C2 uint_array_tuple_array_tuple) (D2 Int) (E2 uint_array_tuple) (F2 Int) (G2 Bool) (H2 uint_array_tuple_array_tuple) (I2 Int) (J2 uint_array_tuple) (K2 Int) (L2 Int) (M2 Int) (N2 Bool) (O2 state_type) (P2 state_type) (Q2 Int) (R2 tx_type) (S2 Int) (T2 Int) (U2 Int) (V2 Int) (W2 Int) (X2 Int) (Y2 Int) (Z2 Int) ) - (=> - (and - (block_64_j_278_335_0 I Q2 C H R2 O2 A D U2 W2 Y2 S2 P2 B E V2 X2 Z2 T2) - (let ((a!1 (store (uint_array_tuple_array_tuple_accessor_array C1) - E1 - (uint_array_tuple (store (uint_array_tuple_accessor_array G1) - F1 - L1) - (uint_array_tuple_accessor_length G1)))) - (a!2 (= G - (uint_array_tuple_array_tuple - (store (uint_array_tuple_array_tuple_accessor_array R1) T1 V1) - (uint_array_tuple_array_tuple_accessor_length R1))))) - (and (not (= (<= Z1 X1) A2)) - (not (= (<= Z V) A1)) - (not (= (<= F2 B2) G2)) - (not (= (<= T R) U)) - (= N2 (= L2 M2)) - (= S1 G) - (= D1 F) - (= N1 F) - (= R1 F) - (= Y1 G) - (= H2 G) - (= W E) - (= S E) - (= F - (uint_array_tuple_array_tuple - a!1 - (uint_array_tuple_array_tuple_accessor_length C1))) - a!2 - (= B1 E) - (= C1 E) - (= Q1 F) - (= C2 G) - (= G1 (select (uint_array_tuple_array_tuple_accessor_array E) E1)) - (= W1 (select (uint_array_tuple_array_tuple_accessor_array R1) T1)) - (= H1 (select (uint_array_tuple_array_tuple_accessor_array C1) E1)) - (= U1 (select (uint_array_tuple_array_tuple_accessor_array F) T1)) - (= V1 (uint_array_tuple ((as const (Array Int Int)) 0) 0)) - (= E2 (select (uint_array_tuple_array_tuple_accessor_array G) D2)) - (= J2 (select (uint_array_tuple_array_tuple_accessor_array G) I2)) - (= Y (select (uint_array_tuple_array_tuple_accessor_array E) X)) - (= J1 (select (uint_array_tuple_accessor_array G1) F1)) - (= O1 (uint_array_tuple_array_tuple_accessor_length N1)) - (= J I) - (= Z1 (uint_array_tuple_array_tuple_accessor_length Y1)) - (= M2 0) - (= Q P) - (= O N) - (= M L) - (= R V2) - (= I1 (select (uint_array_tuple_accessor_array G1) F1)) - (= V X2) - (= P O) - (= N M) - (= Z (uint_array_tuple_accessor_length Y)) - (= F2 (uint_array_tuple_accessor_length E2)) - (= T1 Z2) - (= K J) - (= E1 V2) - (= T (uint_array_tuple_array_tuple_accessor_length S)) - (= X V2) - (= L K) - (= K1 T2) - (= F1 X2) - (= M1 Z2) - (= L1 K1) - (= B2 V2) - (= X1 X2) - (= L2 (select (uint_array_tuple_accessor_array J2) K2)) - (= I2 X2) - (= D2 V2) - (= K2 V2) - (>= (uint_array_tuple_accessor_length G1) 0) - (>= (uint_array_tuple_accessor_length U1) 0) - (>= (uint_array_tuple_accessor_length E2) 0) - (>= (uint_array_tuple_accessor_length J2) 0) - (>= (uint_array_tuple_accessor_length Y) 0) - (>= J1 0) - (>= O1 0) - (>= Z1 0) - (>= R 0) - (>= I1 0) - (>= V 0) - (>= Z 0) - (>= F2 0) - (>= T1 0) - (>= E1 0) - (>= T 0) - (>= X 0) - (>= K1 0) - (>= F1 0) - (>= M1 0) - (>= L1 0) - (>= V2 0) - (>= B2 0) - (>= X1 0) - (>= L2 0) - (>= I2 0) - (>= D2 0) - (>= K2 0) - (>= Z2 0) - (>= X2 0) - (>= T2 0) - (<= J1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= O1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Z1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= R - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= V - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Z - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= F2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= T1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= E1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= T - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= X - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= K1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= F1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= M1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= L1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= V2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= B2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= X1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= L2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= D2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= K2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Z2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= X2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= T2 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (= A2 true) - (= P1 true) - (= G2 true) - (= U true) - (= A1 true) - (not (= (<= O1 M1) P1)))) - ) - (block_65_return_function_j__279_335_0 - Q - Q2 - C - H - R2 - O2 - A - D - U2 - W2 - Y2 - S2 - P2 - B - G - V2 - X2 - Z2 - T2) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) ) - (=> - (and - true - ) - (block_74_function_j__279_335_0 G J C F K H A D N P R L I B E O Q S M) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C uint_array_tuple) (D abi_type) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K Int) (L state_type) (M state_type) (N state_type) (O state_type) (P Int) (Q tx_type) (R Int) (S Int) (T Int) (U Int) (V Int) (W Int) (X Int) (Y Int) (Z Int) (A1 Int) (B1 Int) (C1 Int) ) - (=> - (and - (block_74_function_j__279_335_0 I P D H Q L A E U X A1 R M B F V Y B1 S) - (summary_15_function_j__279_335_0 J P D H Q N B F V Y B1 S O C G W Z C1 T) - (let ((a!1 (store (balances M) P (+ (select (balances M) P) K))) - (a!2 (= (select (bytes_tuple_accessor_array (msg.data Q)) 3) 26)) - (a!3 (= (select (bytes_tuple_accessor_array (msg.data Q)) 2) 241)) - (a!4 (= (select (bytes_tuple_accessor_array (msg.data Q)) 1) 74)) - (a!5 (= (select (bytes_tuple_accessor_array (msg.data Q)) 0) 158)) - (a!6 (>= (+ (select (balances M) P) K) 0)) - (a!7 (<= (+ (select (balances M) P) K) - 115792089237316195423570985008687907853269984665640564039457584007913129639935))) - (and (= B A) - (= M L) - (= N (state_type a!1)) - a!2 - a!3 - a!4 - a!5 - (= (msg.value Q) 0) - (= (msg.sig Q) 2655711514) - (= I 0) - (= Y X) - (= V U) - (= S R) - (= B1 A1) - (>= (tx.origin Q) 0) - (>= (tx.gasprice Q) 0) - (>= (msg.value Q) 0) - (>= (msg.sender Q) 0) - (>= (block.timestamp Q) 0) - (>= (block.number Q) 0) - (>= (block.gaslimit Q) 0) - (>= (block.difficulty Q) 0) - (>= (block.coinbase Q) 0) - (>= (block.chainid Q) 0) - (>= (block.basefee Q) 0) - (>= (bytes_tuple_accessor_length (msg.data Q)) 4) - a!6 - (>= K (msg.value Q)) - (<= (tx.origin Q) 1461501637330902918203684832716283019655932542975) - (<= (tx.gasprice Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (msg.value Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (msg.sender Q) 1461501637330902918203684832716283019655932542975) - (<= (block.timestamp Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.number Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.gaslimit Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.difficulty Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.coinbase Q) 1461501637330902918203684832716283019655932542975) - (<= (block.chainid Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.basefee Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - a!7 - (= F E))) - ) - (summary_16_function_j__279_335_0 J P D H Q L A E U X A1 R O C G W Z C1 T) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) ) - (=> - (and - true - ) - (block_75_function_setA__300_335_0 G J C F K H A D L N I B E M O) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) ) - (=> - (and - (block_75_function_setA__300_335_0 G J C F K H A D L N I B E M O) - (and (= B A) (= I H) (= G 0) (= O N) (= M L) (= E D)) - ) - (block_76_setA_299_335_0 G J C F K H A D L N I B E M O) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H Int) (I Int) (J uint_array_tuple) (K Int) (L Bool) (M uint_array_tuple) (N Int) (O Int) (P state_type) (Q state_type) (R Int) (S tx_type) (T Int) (U Int) (V Int) (W Int) ) - (=> - (and - (block_76_setA_299_335_0 G R C F S P A D T V Q B E U W) - (and (= M B) - (= J B) - (= K (uint_array_tuple_accessor_length J)) - (= O W) - (= I U) - (= H 33) - (= N U) - (>= K 0) - (>= O 0) - (>= I 0) - (>= W 0) - (>= U 0) - (>= N 0) - (<= K - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= O - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= W - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= N - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 N)) (>= N (uint_array_tuple_accessor_length M))) - (= L true) - (not (= (<= K I) L))) - ) - (block_78_function_setA__300_335_0 H R C F S P A D T V Q B E U W) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) ) - (=> - (and - (block_78_function_setA__300_335_0 G J C F K H A D L N I B E M O) - true - ) - (summary_17_function_setA__300_335_0 G J C F K H A D L N I B E M O) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) ) - (=> - (and - (block_77_return_function_setA__300_335_0 G J C F K H A D L N I B E M O) - true - ) - (summary_17_function_setA__300_335_0 G J C F K H A D L N I B E M O) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C uint_array_tuple) (D abi_type) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G crypto_type) (H Int) (I Int) (J Int) (K uint_array_tuple) (L Int) (M Bool) (N uint_array_tuple) (O uint_array_tuple) (P uint_array_tuple) (Q Int) (R Int) (S Int) (T Int) (U Int) (V state_type) (W state_type) (X Int) (Y tx_type) (Z Int) (A1 Int) (B1 Int) (C1 Int) ) - (=> - (and - (block_76_setA_299_335_0 H X D G Y V A E Z B1 W B F A1 C1) - (let ((a!1 (= C - (uint_array_tuple (store (uint_array_tuple_accessor_array O) Q U) - (uint_array_tuple_accessor_length O))))) - (and a!1 - (= K B) - (= N B) - (= P C) - (= O B) - (= Q A1) - (= I H) - (= J A1) - (= U T) - (= L (uint_array_tuple_accessor_length K)) - (= R (select (uint_array_tuple_accessor_array B) Q)) - (= T C1) - (= S (select (uint_array_tuple_accessor_array O) Q)) - (>= Q 0) - (>= J 0) - (>= U 0) - (>= L 0) - (>= R 0) - (>= C1 0) - (>= A1 0) - (>= T 0) - (>= S 0) - (<= Q - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= J - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= L - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= R - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= C1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= A1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= T - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= S - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (= M true) - (not (= (<= L J) M)))) - ) - (block_77_return_function_setA__300_335_0 I X D G Y V A E Z B1 W C F A1 C1) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) ) - (=> - (and - true - ) - (block_79_function_setA__300_335_0 G J C F K H A D L N I B E M O) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C uint_array_tuple) (D abi_type) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K Int) (L state_type) (M state_type) (N state_type) (O state_type) (P Int) (Q tx_type) (R Int) (S Int) (T Int) (U Int) (V Int) (W Int) ) - (=> - (and - (block_79_function_setA__300_335_0 I P D H Q L A E R U M B F S V) - (summary_17_function_setA__300_335_0 J P D H Q N B F S V O C G T W) - (let ((a!1 (store (balances M) P (+ (select (balances M) P) K))) - (a!2 (= (select (bytes_tuple_accessor_array (msg.data Q)) 3) 213)) - (a!3 (= (select (bytes_tuple_accessor_array (msg.data Q)) 2) 163)) - (a!4 (= (select (bytes_tuple_accessor_array (msg.data Q)) 1) 169)) - (a!5 (= (select (bytes_tuple_accessor_array (msg.data Q)) 0) 122)) - (a!6 (>= (+ (select (balances M) P) K) 0)) - (a!7 (<= (+ (select (balances M) P) K) - 115792089237316195423570985008687907853269984665640564039457584007913129639935))) - (and (= B A) - (= M L) - (= N (state_type a!1)) - a!2 - a!3 - a!4 - a!5 - (= (msg.value Q) 0) - (= (msg.sig Q) 2057937877) - (= S R) - (= I 0) - (= V U) - (>= (tx.origin Q) 0) - (>= (tx.gasprice Q) 0) - (>= (msg.value Q) 0) - (>= (msg.sender Q) 0) - (>= (block.timestamp Q) 0) - (>= (block.number Q) 0) - (>= (block.gaslimit Q) 0) - (>= (block.difficulty Q) 0) - (>= (block.coinbase Q) 0) - (>= (block.chainid Q) 0) - (>= (block.basefee Q) 0) - (>= (bytes_tuple_accessor_length (msg.data Q)) 4) - a!6 - (>= K (msg.value Q)) - (<= (tx.origin Q) 1461501637330902918203684832716283019655932542975) - (<= (tx.gasprice Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (msg.value Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (msg.sender Q) 1461501637330902918203684832716283019655932542975) - (<= (block.timestamp Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.number Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.gaslimit Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.difficulty Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.coinbase Q) 1461501637330902918203684832716283019655932542975) - (<= (block.chainid Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.basefee Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - a!7 - (= F E))) - ) - (summary_18_function_setA__300_335_0 J P D H Q L A E R U O C G T W) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - true - ) - (block_80_function_setB__334_335_0 G J C F K H A D L N P I B E M O Q) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_80_function_setB__334_335_0 G J C F K H A D L N P I B E M O Q) - (and (= B A) (= I H) (= M L) (= Q P) (= O N) (= G 0) (= E D)) - ) - (block_81_setB_333_335_0 G J C F K H A D L N P I B E M O Q) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H Int) (I Int) (J uint_array_tuple_array_tuple) (K Int) (L Bool) (M Int) (N uint_array_tuple_array_tuple) (O Int) (P state_type) (Q state_type) (R Int) (S tx_type) (T Int) (U Int) (V Int) (W Int) (X Int) (Y Int) ) - (=> - (and - (block_81_setB_333_335_0 G R C F S P A D T V X Q B E U W Y) - (and (= J E) - (= N E) - (= M W) - (= K (uint_array_tuple_array_tuple_accessor_length J)) - (= H 35) - (= I U) - (= O U) - (>= M 0) - (>= U 0) - (>= K 0) - (>= I 0) - (>= Y 0) - (>= W 0) - (>= O 0) - (<= M - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= K - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Y - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= W - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= O - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 O)) (>= O (uint_array_tuple_array_tuple_accessor_length N))) - (= L true) - (not (= (<= K I) L))) - ) - (block_83_function_setB__334_335_0 H R C F S P A D T V X Q B E U W Y) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_83_function_setB__334_335_0 G J C F K H A D L N P I B E M O Q) - true - ) - (summary_19_function_setB__334_335_0 G J C F K H A D L N P I B E M O Q) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_84_function_setB__334_335_0 G J C F K H A D L N P I B E M O Q) - true - ) - (summary_19_function_setB__334_335_0 G J C F K H A D L N P I B E M O Q) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_85_function_setB__334_335_0 G J C F K H A D L N P I B E M O Q) - true - ) - (summary_19_function_setB__334_335_0 G J C F K H A D L N P I B E M O Q) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (block_82_return_function_setB__334_335_0 G J C F K H A D L N P I B E M O Q) - true - ) - (summary_19_function_setB__334_335_0 G J C F K H A D L N P I B E M O Q) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H Int) (I Int) (J Int) (K uint_array_tuple_array_tuple) (L Int) (M Bool) (N Int) (O uint_array_tuple_array_tuple) (P Int) (Q uint_array_tuple) (R Int) (S Bool) (T uint_array_tuple_array_tuple) (U Int) (V Int) (W state_type) (X state_type) (Y Int) (Z tx_type) (A1 Int) (B1 Int) (C1 Int) (D1 Int) (E1 Int) (F1 Int) ) - (=> - (and - (block_81_setB_333_335_0 G Y C F Z W A D A1 C1 E1 X B E B1 D1 F1) - (and (not (= (<= R N) S)) - (= T E) - (= O E) - (= K E) - (= Q (select (uint_array_tuple_array_tuple_accessor_array E) P)) - (= L (uint_array_tuple_array_tuple_accessor_length K)) - (= H G) - (= N D1) - (= I 36) - (= R (uint_array_tuple_accessor_length Q)) - (= J B1) - (= U B1) - (= P B1) - (= V F1) - (>= (uint_array_tuple_accessor_length Q) 0) - (>= L 0) - (>= B1 0) - (>= N 0) - (>= R 0) - (>= J 0) - (>= U 0) - (>= P 0) - (>= F1 0) - (>= D1 0) - (>= V 0) - (<= L - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= B1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= N - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= R - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= J - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= U - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= P - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= F1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= D1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= V - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 U)) (>= U (uint_array_tuple_array_tuple_accessor_length T))) - (= M true) - (= S true) - (not (= (<= L J) M))) - ) - (block_84_function_setB__334_335_0 I Y C F Z W A D A1 C1 E1 X B E B1 D1 F1) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H Int) (I Int) (J Int) (K Int) (L uint_array_tuple_array_tuple) (M Int) (N Bool) (O Int) (P uint_array_tuple_array_tuple) (Q Int) (R uint_array_tuple) (S Int) (T Bool) (U uint_array_tuple_array_tuple) (V Int) (W Int) (X uint_array_tuple) (Y Int) (Z state_type) (A1 state_type) (B1 Int) (C1 tx_type) (D1 Int) (E1 Int) (F1 Int) (G1 Int) (H1 Int) (I1 Int) ) - (=> - (and - (block_81_setB_333_335_0 G B1 C F C1 Z A D D1 F1 H1 A1 B E E1 G1 I1) - (and (not (= (<= S O) T)) - (= P E) - (= L E) - (= U E) - (= X (select (uint_array_tuple_array_tuple_accessor_array E) V)) - (= R (select (uint_array_tuple_array_tuple_accessor_array E) Q)) - (= I H) - (= W G1) - (= V E1) - (= O G1) - (= K E1) - (= J 37) - (= Q E1) - (= H G) - (= M (uint_array_tuple_array_tuple_accessor_length L)) - (= S (uint_array_tuple_accessor_length R)) - (= Y I1) - (>= (uint_array_tuple_accessor_length X) 0) - (>= (uint_array_tuple_accessor_length R) 0) - (>= W 0) - (>= V 0) - (>= O 0) - (>= E1 0) - (>= K 0) - (>= Q 0) - (>= M 0) - (>= S 0) - (>= I1 0) - (>= G1 0) - (>= Y 0) - (<= W - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= V - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= O - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= E1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= K - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Q - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= M - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= S - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= I1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= G1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Y - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (or (not (<= 0 W)) (>= W (uint_array_tuple_accessor_length X))) - (= T true) - (= N true) - (not (= (<= M K) N))) - ) - (block_85_function_setB__334_335_0 J B1 C F C1 Z A D D1 F1 H1 A1 B E E1 G1 I1) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G crypto_type) (H Int) (I Int) (J Int) (K Int) (L Int) (M uint_array_tuple_array_tuple) (N Int) (O Bool) (P Int) (Q uint_array_tuple_array_tuple) (R Int) (S uint_array_tuple) (T Int) (U Bool) (V uint_array_tuple_array_tuple) (W uint_array_tuple_array_tuple) (X uint_array_tuple_array_tuple) (Y Int) (Z Int) (A1 uint_array_tuple) (B1 uint_array_tuple) (C1 Int) (D1 Int) (E1 Int) (F1 Int) (G1 state_type) (H1 state_type) (I1 Int) (J1 tx_type) (K1 Int) (L1 Int) (M1 Int) (N1 Int) (O1 Int) (P1 Int) ) - (=> - (and - (block_81_setB_333_335_0 H I1 C G J1 G1 A D K1 M1 O1 H1 B E L1 N1 P1) - (let ((a!1 (store (uint_array_tuple_array_tuple_accessor_array W) - Y - (uint_array_tuple (store (uint_array_tuple_accessor_array A1) - Z - F1) - (uint_array_tuple_accessor_length A1))))) - (and (not (= (<= T P) U)) - (= Q E) - (= V E) - (= W E) - (= X F) - (= F - (uint_array_tuple_array_tuple - a!1 - (uint_array_tuple_array_tuple_accessor_length W))) - (= M E) - (= S (select (uint_array_tuple_array_tuple_accessor_array E) R)) - (= A1 (select (uint_array_tuple_array_tuple_accessor_array E) Y)) - (= B1 (select (uint_array_tuple_array_tuple_accessor_array W) Y)) - (= P N1) - (= D1 (select (uint_array_tuple_accessor_array A1) Z)) - (= C1 (select (uint_array_tuple_accessor_array A1) Z)) - (= L L1) - (= J I) - (= I H) - (= R L1) - (= K J) - (= N (uint_array_tuple_array_tuple_accessor_length M)) - (= Y L1) - (= T (uint_array_tuple_accessor_length S)) - (= E1 P1) - (= Z N1) - (= F1 E1) - (>= (uint_array_tuple_accessor_length S) 0) - (>= (uint_array_tuple_accessor_length A1) 0) - (>= P 0) - (>= D1 0) - (>= C1 0) - (>= L 0) - (>= L1 0) - (>= R 0) - (>= N 0) - (>= Y 0) - (>= T 0) - (>= E1 0) - (>= Z 0) - (>= P1 0) - (>= N1 0) - (>= F1 0) - (<= P - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= D1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= C1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= L - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= L1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= R - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= N - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Y - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= T - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= E1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= Z - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= P1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= N1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= F1 - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (= O true) - (= U true) - (not (= (<= N L) O)))) - ) - (block_82_return_function_setB__334_335_0 - K - I1 - C - G - J1 - G1 - A - D - K1 - M1 - O1 - H1 - B - F - L1 - N1 - P1) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - true - ) - (block_86_function_setB__334_335_0 G J C F K H A D L N P I B E M O Q) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C uint_array_tuple) (D abi_type) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K Int) (L state_type) (M state_type) (N state_type) (O state_type) (P Int) (Q tx_type) (R Int) (S Int) (T Int) (U Int) (V Int) (W Int) (X Int) (Y Int) (Z Int) ) - (=> - (and - (block_86_function_setB__334_335_0 I P D H Q L A E R U X M B F S V Y) - (summary_19_function_setB__334_335_0 J P D H Q N B F S V Y O C G T W Z) - (let ((a!1 (store (balances M) P (+ (select (balances M) P) K))) - (a!2 (= (select (bytes_tuple_accessor_array (msg.data Q)) 3) 225)) - (a!3 (= (select (bytes_tuple_accessor_array (msg.data Q)) 2) 25)) - (a!4 (= (select (bytes_tuple_accessor_array (msg.data Q)) 1) 196)) - (a!5 (= (select (bytes_tuple_accessor_array (msg.data Q)) 0) 90)) - (a!6 (>= (+ (select (balances M) P) K) 0)) - (a!7 (<= (+ (select (balances M) P) K) - 115792089237316195423570985008687907853269984665640564039457584007913129639935))) - (and (= B A) - (= N (state_type a!1)) - (= M L) - a!2 - a!3 - a!4 - a!5 - (= (msg.value Q) 0) - (= (msg.sig Q) 1522801121) - (= V U) - (= I 0) - (= S R) - (= Y X) - (>= (tx.origin Q) 0) - (>= (tx.gasprice Q) 0) - (>= (msg.value Q) 0) - (>= (msg.sender Q) 0) - (>= (block.timestamp Q) 0) - (>= (block.number Q) 0) - (>= (block.gaslimit Q) 0) - (>= (block.difficulty Q) 0) - (>= (block.coinbase Q) 0) - (>= (block.chainid Q) 0) - (>= (block.basefee Q) 0) - (>= (bytes_tuple_accessor_length (msg.data Q)) 4) - a!6 - (>= K (msg.value Q)) - (<= (tx.origin Q) 1461501637330902918203684832716283019655932542975) - (<= (tx.gasprice Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (msg.value Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (msg.sender Q) 1461501637330902918203684832716283019655932542975) - (<= (block.timestamp Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.number Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.gaslimit Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.difficulty Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.coinbase Q) 1461501637330902918203684832716283019655932542975) - (<= (block.chainid Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - (<= (block.basefee Q) - 115792089237316195423570985008687907853269984665640564039457584007913129639935) - a!7 - (= F E))) - ) - (summary_20_function_setB__334_335_0 J P D H Q L A E R U X O C G T W Z) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) ) - (=> - (and - (and (= B A) (= I H) (= G 0) (= E D)) - ) - (contract_initializer_entry_88_C_335_0 G J C F K H I A D B E) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) ) - (=> - (and - (contract_initializer_entry_88_C_335_0 G J C F K H I A D B E) - true - ) - (contract_initializer_after_init_89_C_335_0 G J C F K H I A D B E) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) ) - (=> - (and - (contract_initializer_after_init_89_C_335_0 G J C F K H I A D B E) - true - ) - (contract_initializer_87_C_335_0 G J C F K H I A D B E) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) ) - (=> - (and - (let ((a!1 (uint_array_tuple_array_tuple - ((as const (Array Int uint_array_tuple)) - (uint_array_tuple ((as const (Array Int Int)) 0) 0)) - 0))) - (and (= E D) - (= B (uint_array_tuple ((as const (Array Int Int)) 0) 0)) - (= B A) - (= I H) - (= G 0) - (>= (select (balances I) J) (msg.value K)) - (= E a!1))) - ) - (implicit_constructor_entry_90_C_335_0 G J C F K H I A D B E) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C uint_array_tuple) (D abi_type) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K state_type) (L state_type) (M state_type) (N Int) (O tx_type) ) - (=> - (and - (implicit_constructor_entry_90_C_335_0 I N D H O K L A E B F) - (contract_initializer_87_C_335_0 J N D H O L M B F C G) - (not (<= J 0)) - ) - (summary_constructor_2_C_335_0 J N D H O K M A E C G) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C uint_array_tuple) (D abi_type) (E uint_array_tuple_array_tuple) (F uint_array_tuple_array_tuple) (G uint_array_tuple_array_tuple) (H crypto_type) (I Int) (J Int) (K state_type) (L state_type) (M state_type) (N Int) (O tx_type) ) - (=> - (and - (contract_initializer_87_C_335_0 J N D H O L M B F C G) - (implicit_constructor_entry_90_C_335_0 I N D H O K L A E B F) - (= J 0) - ) - (summary_constructor_2_C_335_0 J N D H O K M A E C G) - ) - ) -) -(assert - (forall ( (A uint_array_tuple) (B uint_array_tuple) (C abi_type) (D uint_array_tuple_array_tuple) (E uint_array_tuple_array_tuple) (F crypto_type) (G Int) (H state_type) (I state_type) (J Int) (K tx_type) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) ) - (=> - (and - (summary_12_function_h__150_335_0 G J C F K H A D N P L I B E O Q M) - (interface_0_C_335_0 J C F H A D) - (= G 10) - ) - error_target_45_0 - ) - ) -) -(assert - (forall ( (CHC_COMP_UNUSED Bool) ) - (=> - (and - error_target_45_0 - true - ) - false - ) - ) -) - -(check-sat) -(exit) diff --git a/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/Utils.kt b/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/Utils.kt index 1d59429472..799d6bfd1b 100644 --- a/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/Utils.kt +++ b/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/Utils.kt @@ -16,7 +16,6 @@ package hu.bme.mit.theta.xcfa -import com.google.common.collect.Sets import hu.bme.mit.theta.common.dsl.Env import hu.bme.mit.theta.common.dsl.Symbol import hu.bme.mit.theta.common.dsl.SymbolTable @@ -29,13 +28,28 @@ import hu.bme.mit.theta.core.type.booltype.BoolType import hu.bme.mit.theta.core.utils.ExprUtils import hu.bme.mit.theta.core.utils.StmtUtils import hu.bme.mit.theta.xcfa.model.* +import java.util.function.Predicate -fun XCFA.collectVars(): Iterable> = vars.map { it.wrappedVar } - .union(procedures.map { it.vars }.flatten()) +/** + * Get flattened label list (without sequence labels). + */ +fun XcfaEdge.getFlatLabels(): List = label.getFlatLabels() + +fun XcfaLabel.getFlatLabels(): List = when (this) { + is SequenceLabel -> { + val ret = mutableListOf() + labels.forEach { ret.addAll(it.getFlatLabels()) } + ret + } -fun XCFA.collectAssumes(): Iterable> = procedures.map { - it.edges.map { it.label.collectAssumes() }.flatten() + else -> listOf(this) +} + +fun XCFA.collectVars(): Iterable> = vars.map { it.wrappedVar } union procedures.map { it.vars }.flatten() + +fun XCFA.collectAssumes(): Iterable> = procedures.map { procedure -> + procedure.edges.map { it.label.collectAssumes() }.flatten() }.flatten() fun XcfaLabel.collectAssumes(): Iterable> = when (this) { @@ -75,14 +89,15 @@ fun XcfaLabel.collectVars(): Iterable> = when (this) { is InvokeLabel -> params.map { ExprUtils.getVars(it) }.flatten() is JoinLabel -> setOf(pidVar) is ReadLabel -> setOf(global, local) - is StartLabel -> Sets.union(params.map { ExprUtils.getVars(it) }.flatten().toSet(), - setOf(pidVar)) - + is StartLabel -> params.map { ExprUtils.getVars(it) }.flatten().toSet() union setOf(pidVar) is WriteLabel -> setOf(global, local) else -> emptySet() } +// Complex var access requests + typealias AccessType = Pair +private typealias VarAccessMap = Map, AccessType> val AccessType?.isRead get() = this?.first == true val AccessType?.isWritten get() = this?.second == true @@ -92,41 +107,60 @@ fun AccessType?.merge(other: AccessType?) = val WRITE: AccessType get() = Pair(false, true) val READ: AccessType get() = Pair(true, false) -private typealias VarAccessMap = Map, AccessType> - private fun List.mergeAndCollect(): VarAccessMap = this.fold(mapOf()) { acc, next -> (acc.keys + next.keys).associateWith { acc[it].merge(next[it]) } } +/** + * The list of mutexes acquired by the label. + */ +inline val FenceLabel.acquiredMutexes: Set + get() = labels.mapNotNull { + when { + it == "ATOMIC_BEGIN" -> "___atomic_block_mutex___" + it.startsWith("mutex_lock") -> it.substringAfter('(').substringBefore(')') + it.startsWith("cond_wait") -> it.substring("cond_wait".length + 1, it.length - 1).split(",")[1] + else -> null + } + }.toSet() + +/** + * The list of mutexes released by the label. + */ +inline val FenceLabel.releasedMutexes: Set + get() = labels.mapNotNull { + when { + it == "ATOMIC_END" -> "___atomic_block_mutex___" + it.startsWith("mutex_unlock") -> it.substringAfter('(').substringBefore(')') + it.startsWith("start_cond_wait") -> it.substring("start_cond_wait".length + 1, it.length - 1).split(",")[1] + else -> null + } + }.toSet() + +/** + * Returns the list of accessed variables by the edge associated with an AccessType object. + */ +fun XcfaEdge.collectVarsWithAccessType(): VarAccessMap = label.collectVarsWithAccessType() + /** * Returns the list of accessed variables by the label. * The variable is associated with an AccessType object based on whether the variable is read/written by the label. */ -internal fun XcfaLabel.collectVarsWithAccessType(): VarAccessMap = when (this) { +fun XcfaLabel.collectVarsWithAccessType(): VarAccessMap = when (this) { is StmtLabel -> { when (stmt) { is HavocStmt<*> -> mapOf(stmt.varDecl to WRITE) - is AssignStmt<*> -> StmtUtils.getVars(stmt).associateWith { READ } + mapOf( - stmt.varDecl to WRITE) - + is AssignStmt<*> -> StmtUtils.getVars(stmt).associateWith { READ } + mapOf(stmt.varDecl to WRITE) else -> StmtUtils.getVars(stmt).associateWith { READ } } } - is NondetLabel -> { - labels.map { it.collectVarsWithAccessType() }.mergeAndCollect() - } - - is SequenceLabel -> { - labels.map { it.collectVarsWithAccessType() }.mergeAndCollect() - } - + is NondetLabel -> labels.map { it.collectVarsWithAccessType() }.mergeAndCollect() + is SequenceLabel -> labels.map { it.collectVarsWithAccessType() }.mergeAndCollect() is InvokeLabel -> params.map { ExprUtils.getVars(it) }.flatten().associateWith { READ } is JoinLabel -> mapOf(pidVar to READ) is ReadLabel -> mapOf(global to READ, local to READ) - is StartLabel -> params.map { ExprUtils.getVars(it) }.flatten().associateWith { READ } + mapOf( - pidVar to READ) - + is StartLabel -> params.map { ExprUtils.getVars(it) }.flatten().associateWith { READ } + mapOf(pidVar to READ) is WriteLabel -> mapOf(global to WRITE, local to WRITE) else -> emptyMap() } @@ -134,56 +168,108 @@ internal fun XcfaLabel.collectVarsWithAccessType(): VarAccessMap = when (this) { /** * Returns the global variables accessed by the label (the variables present in the given argument). */ -private fun XcfaLabel.collectGlobalVars(globalVars: Set>) = +private fun XcfaLabel.collectGlobalVars(globalVars: Set>): VarAccessMap = collectVarsWithAccessType().filter { labelVar -> globalVars.any { it == labelVar.key } } -inline val XcfaLabel.isAtomicBegin - get() = this is FenceLabel && this.labels.contains("ATOMIC_BEGIN") -inline val XcfaLabel.isAtomicEnd get() = this is FenceLabel && this.labels.contains("ATOMIC_END") - /** * Returns the global variables (potentially indirectly) accessed by the edge. - * If the edge starts an atomic block, all variable accesses in the atomic block is returned. + * If the edge starts an atomic block, all variable accesses in the atomic block are returned. * Variables are associated with a pair of boolean values: the first is true if the variable is read and false otherwise. The second is similar for write access. */ -fun XcfaEdge.getGlobalVars(xcfa: XCFA): Map, AccessType> { +fun XcfaEdge.collectIndirectGlobalVarAccesses(xcfa: XCFA): VarAccessMap { val globalVars = xcfa.vars.map(XcfaGlobalVar::wrappedVar).toSet() - var label = this.label - if (label is SequenceLabel && label.labels.size == 1) label = label.labels[0] - if (label.isAtomicBegin || (label is SequenceLabel && label.labels.any { it.isAtomicBegin } && label.labels.none { it.isAtomicEnd })) { - val vars = mutableMapOf, AccessType>() - val processed = mutableSetOf() - val unprocessed = mutableListOf(this) - while (unprocessed.isNotEmpty()) { - val e = unprocessed.removeFirst() - var eLabel = e.label - if (eLabel is SequenceLabel && eLabel.labels.size == 1) eLabel = eLabel.labels[0] - eLabel.collectGlobalVars(globalVars).forEach { (varDecl, accessType) -> - vars[varDecl] = accessType.merge(vars[varDecl]) - } - processed.add(e) - if (!(eLabel.isAtomicEnd || (eLabel is SequenceLabel && eLabel.labels.any { it.isAtomicEnd }))) { - unprocessed.addAll(e.target.outgoingEdges subtract processed) - } - } - return vars + val flatLabels = getFlatLabels() + val mutexes = flatLabels.filterIsInstance().flatMap { it.acquiredMutexes }.toMutableSet() + return if (mutexes.isEmpty()) { + label.collectGlobalVars(globalVars) } else { - return label.collectGlobalVars(globalVars) + collectGlobalVarsWithTraversal(globalVars) { it.mutexOperations(mutexes) } } } /** - * Returns the list of accessed variables by the edge associated with an AccessType object. + * Represents a global variable access: stores the variable declaration, the access type (read/write) and the set of + * mutexes that are needed to perform the variable access. */ -fun XcfaEdge.getVars(): Map, AccessType> = label.collectVarsWithAccessType() +class GlobalVarAccessWithMutexes(val varDecl: VarDecl<*>, val access: AccessType, val mutexes: Set) /** - * Returns true if the edge starts an atomic block. + * Returns the global variable accesses of the edge. + * + * @param xcfa the XCFA that contains the edge + * @param currentMutexes the set of mutexes currently acquired by the process of the edge + * @return the list of global variable accesses (c.f., [GlobalVarAccessWithMutexes]) */ -fun XcfaEdge.startsAtomic(): Boolean { - var label = this.label - if (label is SequenceLabel && label.labels.size == 1) label = label.labels[0] - return label is FenceLabel && label.labels.contains("ATOMIC_BEGIN") +fun XcfaEdge.getGlobalVarsWithNeededMutexes(xcfa: XCFA, currentMutexes: Set): List { + val globalVars = xcfa.vars.map(XcfaGlobalVar::wrappedVar).toSet() + val neededMutexes = currentMutexes.toMutableSet() + val accesses = mutableListOf() + getFlatLabels().forEach { label -> + if (label is FenceLabel) { + neededMutexes.addAll(label.acquiredMutexes) + } else { + val vars = label.collectGlobalVars(globalVars) + accesses.addAll(vars.mapNotNull { (varDecl, accessType) -> + if (accesses.any { it.varDecl == varDecl && (it.access == accessType && it.access == WRITE) }) { + null + } else { + GlobalVarAccessWithMutexes(varDecl, accessType, neededMutexes.toSet()) + } + }) + } + } + return accesses +} + +/** + * Returns global variables encountered in a search starting from the edge. + * + * @param goFurther the predicate that tells whether more edges have to be explored through an edge + * @return the set of encountered shared objects + */ +private fun XcfaEdge.collectGlobalVarsWithTraversal(globalVars: Set>, goFurther: Predicate) + : VarAccessMap { + val vars = mutableMapOf, AccessType>() + val exploredEdges = mutableListOf() + val edgesToExplore = mutableListOf() + edgesToExplore.add(this) + while (edgesToExplore.isNotEmpty()) { + val exploring = edgesToExplore.removeFirst() + exploring.label.collectGlobalVars(globalVars).forEach { (varDecl, access) -> + vars[varDecl] = vars[varDecl].merge(access) + } + if (goFurther.test(exploring)) { + for (newEdge in exploring.target.outgoingEdges) { + if (newEdge !in exploredEdges) { + edgesToExplore.add(newEdge) + } + } + } + exploredEdges.add(exploring) + } + return vars +} + +/** + * Follows the mutex operations of the given edge and updates the given set of mutexes. + * + * @param mutexes the set of mutexes currently acquired + * @return true if the set of mutexes is non-empty after the mutex operations + */ +fun XcfaEdge.mutexOperations(mutexes: MutableSet): Boolean { + val edgeFlatLabels = getFlatLabels() + val acquiredLocks = mutableSetOf() + val releasedLocks = mutableSetOf() + edgeFlatLabels.filterIsInstance().forEach { fence -> + releasedLocks.addAll(fence.releasedMutexes) + acquiredLocks.removeAll(fence.releasedMutexes) + + acquiredLocks.addAll(fence.acquiredMutexes) + releasedLocks.removeAll(fence.acquiredMutexes) + } + mutexes.removeAll(releasedLocks) + mutexes.addAll(acquiredLocks) + return mutexes.isNotEmpty() } fun XCFA.getSymbols(): Pair { @@ -199,25 +285,6 @@ fun XCFA.getSymbols(): Pair { return Pair(scope, env) } -private val atomicBlockInnerLocationsCache: HashMap> = HashMap() - -/** - * Returns XCFA locations that are inner locations of any atomic block (after an edge with an AtomicBegin and before - * an edge with an AtomicEnd). - * - * @param xcfaProcedure the atomic block inner locations of this XCFA procedure will be returned - * @return the list of locations in an atomic block - */ -fun getAtomicBlockInnerLocations(xcfaProcedure: XcfaProcedure): List? { - if (atomicBlockInnerLocationsCache.containsKey(xcfaProcedure)) { - return atomicBlockInnerLocationsCache[xcfaProcedure] - } - val atomicBlockInnerLocations: List = getAtomicBlockInnerLocations( - xcfaProcedure.initLoc) - atomicBlockInnerLocationsCache[xcfaProcedure] = atomicBlockInnerLocations - return atomicBlockInnerLocations -} - /** * Returns XCFA locations that are inner locations of any atomic block (after an edge with an AtomicBegin and before * an edge with an AtomicEnd). @@ -225,55 +292,32 @@ fun getAtomicBlockInnerLocations(xcfaProcedure: XcfaProcedure): List { - return getAtomicBlockInnerLocations(builder.initLoc) -} - -/** - * Get flattened label list (without sequence labels). - */ -fun XcfaEdge.getFlatLabels(): List = label.getFlatLabels() - -fun XcfaLabel.getFlatLabels(): List = when (this) { - is SequenceLabel -> { - val ret = ArrayList() - labels.forEach { ret.addAll(it.getFlatLabels()) } - ret - } - - else -> listOf(this) -} - +fun getAtomicBlockInnerLocations(builder: XcfaProcedureBuilder): List = + getAtomicBlockInnerLocations(builder.initLoc) private fun getAtomicBlockInnerLocations(initialLocation: XcfaLocation): List { - val atomicLocations: MutableList = ArrayList() - val visitedLocations: MutableList = ArrayList() - val locationsToVisit: MutableList = ArrayList() - val isAtomic: HashMap = HashMap() - locationsToVisit.add(initialLocation) - isAtomic[initialLocation] = false - while (!locationsToVisit.isEmpty()) { + val atomicLocations = mutableListOf() + val visitedLocations = mutableListOf() + val locationsToVisit = mutableListOf(initialLocation) + val isAtomic = mutableMapOf(initialLocation to false) + while (locationsToVisit.isNotEmpty()) { val visiting = locationsToVisit.removeAt(0) if (checkNotNull(isAtomic[visiting])) atomicLocations.add(visiting) visitedLocations.add(visiting) for (outEdge in visiting.outgoingEdges) { var isNextAtomic = checkNotNull(isAtomic[visiting]) - if (outEdge.getFlatLabels().stream().anyMatch { label -> - label is FenceLabel && label.labels.contains("ATOMIC_BEGIN") - }) { + if (outEdge.getFlatLabels().any { it is FenceLabel && it.labels.contains("ATOMIC_BEGIN") }) { isNextAtomic = true } - if (outEdge.getFlatLabels().stream().anyMatch { label -> - label is FenceLabel && label.labels.contains("ATOMIC_END") - }) { + if (outEdge.getFlatLabels().any { it is FenceLabel && it.labels.contains("ATOMIC_END") }) { isNextAtomic = false } val target = outEdge.target isAtomic[target] = isNextAtomic - if (atomicLocations.contains(target) && !isNextAtomic) { + if (target in atomicLocations && !isNextAtomic) { atomicLocations.remove(target) } - if (!locationsToVisit.contains(target) && !visitedLocations.contains(target)) { + if (target !in locationsToVisit && target !in visitedLocations) { locationsToVisit.add(outEdge.target) } } diff --git a/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/XcfaToC.kt b/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/XcfaToC.kt new file mode 100644 index 0000000000..a36d92a35b --- /dev/null +++ b/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/XcfaToC.kt @@ -0,0 +1,371 @@ +/* + * Copyright 2023 Budapest University of Technology and Economics + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package hu.bme.mit.theta.xcfa + +import hu.bme.mit.theta.core.decl.VarDecl +import hu.bme.mit.theta.core.stmt.AssignStmt +import hu.bme.mit.theta.core.stmt.AssumeStmt +import hu.bme.mit.theta.core.stmt.HavocStmt +import hu.bme.mit.theta.core.type.* +import hu.bme.mit.theta.core.type.abstracttype.AbstractExprs.Geq +import hu.bme.mit.theta.core.type.abstracttype.AbstractExprs.Leq +import hu.bme.mit.theta.core.type.abstracttype.DivExpr +import hu.bme.mit.theta.core.type.abstracttype.EqExpr +import hu.bme.mit.theta.core.type.abstracttype.ModExpr +import hu.bme.mit.theta.core.type.abstracttype.NeqExpr +import hu.bme.mit.theta.core.type.anytype.IteExpr +import hu.bme.mit.theta.core.type.anytype.RefExpr +import hu.bme.mit.theta.core.type.arraytype.ArrayReadExpr +import hu.bme.mit.theta.core.type.arraytype.ArrayType +import hu.bme.mit.theta.core.type.arraytype.ArrayWriteExpr +import hu.bme.mit.theta.core.type.booltype.* +import hu.bme.mit.theta.core.type.booltype.BoolExprs.Or +import hu.bme.mit.theta.core.type.bvtype.BvLitExpr +import hu.bme.mit.theta.core.type.fptype.FpLitExpr +import hu.bme.mit.theta.core.type.fptype.FpRoundingMode +import hu.bme.mit.theta.core.type.inttype.IntExprs.Int +import hu.bme.mit.theta.core.type.inttype.IntLitExpr +import hu.bme.mit.theta.core.type.rattype.RatLitExpr +import hu.bme.mit.theta.core.utils.BvUtils +import hu.bme.mit.theta.core.utils.FpUtils +import hu.bme.mit.theta.frontend.ParseContext +import hu.bme.mit.theta.frontend.transformation.model.types.complex.CComplexType +import hu.bme.mit.theta.frontend.transformation.model.types.complex.CComplexType.CComplexTypeVisitor +import hu.bme.mit.theta.frontend.transformation.model.types.complex.compound.CArray +import hu.bme.mit.theta.frontend.transformation.model.types.complex.integer.CInteger +import hu.bme.mit.theta.frontend.transformation.model.types.complex.integer.cbool.CBool +import hu.bme.mit.theta.frontend.transformation.model.types.complex.integer.cchar.CChar +import hu.bme.mit.theta.frontend.transformation.model.types.complex.integer.cint.CSignedInt +import hu.bme.mit.theta.frontend.transformation.model.types.complex.integer.cint.CUnsignedInt +import hu.bme.mit.theta.xcfa.model.* + +private const val arraySize = 10; + +fun XCFA.toC(parseContext: ParseContext, arraySupport: Boolean, exactArraySupport: Boolean, + intRangeConstraint: Boolean): String = """ + extern void abort(); + extern int __VERIFIER_nondet_int(); + extern _Bool __VERIFIER_nondet__Bool(); + extern void reach_error(); + + ${ + if (procedures.any { it.vars.any { it.type is ArrayType<*, *> } }) if (arraySupport) if (exactArraySupport) """ + // "exact" array support + typedef long unsigned int size_t; + + void * __attribute__((__cdecl__)) malloc (size_t __size) ; + void __attribute__((__cdecl__)) free (void *) ; + + + typedef struct + { + int *arr; + int size; + int def; + } int_arr; + + int_arr array_write(int_arr arr, int idx, int val) { + int_arr ret; + ret.size = arr.size > idx + 1 ? arr.size : idx + 1; + ret.arr = malloc(ret.size * sizeof(int)); + ret.def = arr.def; + for(int i = 0; i < ret.size; ++i) { + ret.arr[i] = i < arr.size ? arr.arr[i] : ret.def; + } + ret.arr[idx] = val; + return ret; + } + + int array_read(int_arr arr, int idx) { + return idx < arr.size ? arr.arr[idx] : arr.def; + } + + int array_equals(int_arr arr1, int_arr arr2) { + int i = 0; + if(arr1.def != arr2.def) return 0; + for(; i < arr1.size; i++) { + if(arr1.arr[i] != (i < arr2.size ? arr2.arr[i] : arr2.def)) return 0; + } + for(; i < arr2.size; i++) { + if(arr2.arr[i] != arr1.def) return 0; + } + + return 1; + } + """.trimIndent() else """ + // non-exact array support + + typedef struct + { + int arr[$arraySize]; + } int_arr; + + int_arr array_write(int_arr arr, int idx, int val) { + arr.arr[idx] = val; + return arr; + } + + int array_read(int_arr arr, int idx) { + return arr.arr[idx]; + } + + int array_equals(int_arr arr1, int_arr arr2) { + for(int i = 0; i < $arraySize; i++) { + if(arr1.arr[i] != arr2.arr[i]) return 0; + } + return 1; + } + """.trimIndent() else error("Array support not enabled") else "" +} + + ${procedures.joinToString("\n\n") { it.decl(parseContext) + ";" }} + + ${procedures.joinToString("\n\n") { it.def(parseContext, intRangeConstraint) }} + + ${ + if (initProcedures.size != 1) error("Exactly one initial procedure is supported.") else { + val proc = initProcedures[0] + val procName = proc.first.name.toC() + if (procName != "main") + "int main() { $procName(${proc.second.joinToString(", ") { it.toC(parseContext) }}); }" + else "" + } +} + +""".trimIndent() + + +fun XcfaProcedure.decl(parseContext: ParseContext): String = + if (params.isNotEmpty()) { + "${CComplexType.getType(params[0].first.ref, parseContext).toC()} ${name.toC()}(${ + params.subList(1, params.size).joinToString(", ") { it.decl(parseContext) } + })" + } else { + "void ${name.toC()}()" + } + +private fun VarDecl<*>.unsafeBounds(parseContext: ParseContext) = + CComplexType.getType(ref, parseContext).accept(object : CComplexTypeVisitor?>() { + override fun visit(type: CInteger, param: Unit): Expr? { + return Or(Leq(ref, Int(-1_000_000_000)), Geq(ref, Int(1_000_000_000))) + } + + override fun visit(type: CBool?, param: Unit?): Expr? { + return null + } + }, Unit) + +private fun Set>.unsafeBounds(parseContext: ParseContext, intRangeConstraint: Boolean): String { + if (!intRangeConstraint) return "" + + val conditions = this.map { (it.unsafeBounds(parseContext))?.toC(parseContext) }.filterNotNull() + return if (conditions.isNotEmpty()) + "if (" + conditions.joinToString(" || ") + ") abort();" + else + "" +} + +fun XcfaProcedure.def(parseContext: ParseContext, intRangeConstraint: Boolean): String = """ + ${decl(parseContext)} { + // return parameter + ${if (params.isNotEmpty()) params[0].decl(parseContext) + ";" else ""} + + // variables + ${(vars - params.map { it.first }.toSet()).joinToString("\n") { it.decl(parseContext) + ";" }} + + ${vars.unsafeBounds(parseContext, intRangeConstraint)} + + // main logic + goto ${initLoc.name.toC()}; + + ${ + locs.joinToString("\n") { + """ + ${it.name.toC()}: + ${it.toC(parseContext, intRangeConstraint)} + """.trimIndent() + } +} + + // return expression + ${if (params.isNotEmpty()) "return " + params[0].first.name.toC() + ";" else ""} + } +""".trimIndent() + +private fun XcfaLocation.toC(parseContext: ParseContext, intRangeConstraint: Boolean): String = + if (this.error) { + "reach_error();" + } else when (outgoingEdges.size) { + 0 -> "goto ${name.toC()};" + 1 -> outgoingEdges.first().getFlatLabels().joinToString("\n") + { it.toC(parseContext, intRangeConstraint) } + " goto ${outgoingEdges.first().target.name.toC()};" + + 2 -> + """ + switch(__VERIFIER_nondet__Bool()) { + ${ + outgoingEdges.mapIndexed { index, xcfaEdge -> + "case $index: \n" + + xcfaEdge.getFlatLabels() + .joinToString("\n", postfix = "\n") { it.toC(parseContext, intRangeConstraint) } + + "goto ${xcfaEdge.target.name.toC()};\n" + }.joinToString("\n") + } + default: abort(); + } + """.trimIndent() + + else -> + """ + switch(__VERIFIER_nondet_int()) { + ${ + outgoingEdges.mapIndexed { index, xcfaEdge -> + "case $index: \n" + + xcfaEdge.getFlatLabels() + .joinToString("\n", postfix = "\n") { it.toC(parseContext, intRangeConstraint) } + + "goto ${xcfaEdge.target.name.toC()};\n" + }.joinToString("\n") + } + default: abort(); + } + """.trimIndent() + } + +private fun XcfaLabel.toC(parseContext: ParseContext, intRangeConstraint: Boolean): String = + when (this) { + is StmtLabel -> this.toC(parseContext, intRangeConstraint) + is SequenceLabel -> labels.joinToString("\n") { it.toC(parseContext, intRangeConstraint) } + is InvokeLabel -> "${params[0].toC(parseContext)} = ${name.toC()}(${ + params.subList(1, params.size).map { it.toC(parseContext) }.joinToString(", ") + });" + + else -> TODO("Not yet supported: $this") + } + +private fun StmtLabel.toC(parseContext: ParseContext, intRangeConstraint: Boolean): String = + when (stmt) { + is HavocStmt<*> -> "${stmt.varDecl.name.toC()} = __VERIFIER_nondet_${ + CComplexType.getType(stmt.varDecl.ref, parseContext).toC() + }(); ${setOf(stmt.varDecl).unsafeBounds(parseContext, intRangeConstraint)}" + + is AssignStmt<*> -> "${stmt.varDecl.name.toC()} = ${stmt.expr.toC(parseContext)};" + is AssumeStmt -> "if(!${stmt.cond.toC(parseContext)}) abort();" + else -> TODO("Not yet supported: $stmt") + } + +fun Pair, ParamDirection>.decl(parseContext: ParseContext): String = +// if(second == ParamDirection.IN) { + first.decl(parseContext) +// } else error("Only IN params are supported right now") + +fun VarDecl<*>.decl(parseContext: ParseContext): String = + "${CComplexType.getType(ref, parseContext).toC()} ${name.toC()}" + +private fun CComplexType.toC(): String = + when (this) { + is CArray -> "${this.embeddedType.toC()}_arr" + is CSignedInt -> "int" + is CUnsignedInt -> "unsigned int" + is CChar -> "char" + is CBool -> "_Bool" + else -> this.typeName + } + +// below functions implement the serialization of expressions to C-style expressions +fun Expr<*>.toC(parseContext: ParseContext) = + when (this) { + is NullaryExpr<*> -> this.toC(parseContext) + is UnaryExpr<*, *> -> this.toC(parseContext) + is BinaryExpr<*, *> -> this.toC(parseContext) + is MultiaryExpr<*, *> -> this.toC(parseContext) + is ArrayWriteExpr<*, *> -> this.toC(parseContext) + is ArrayReadExpr<*, *> -> this.toC(parseContext) + is IteExpr<*> -> this.toC(parseContext) + else -> TODO("Not yet supported: $this") + } + +fun ArrayWriteExpr<*, *>.toC(parseContext: ParseContext): String = + "array_write(${this.array.toC(parseContext)}, ${this.index.toC(parseContext)}, ${this.elem.toC(parseContext)})" + +fun ArrayReadExpr<*, *>.toC(parseContext: ParseContext): String = + "array_read(${this.array.toC(parseContext)}, ${this.index.toC(parseContext)})" + +fun IteExpr<*>.toC(parseContext: ParseContext): String = + "(${this.cond.toC(parseContext)} ? ${this.then.toC(parseContext)} : ${this.`else`.toC(parseContext)})" + +// nullary: ref + lit +fun NullaryExpr<*>.toC(parseContext: ParseContext): String = + when (this) { + is RefExpr<*> -> this.decl.name.toC() + is LitExpr<*> -> (this as LitExpr<*>).toC(parseContext) + else -> TODO("Not yet supported: $this") + } + +fun LitExpr<*>.toC(parseContext: ParseContext): String = + when (this) { + is FalseExpr -> "0" + is TrueExpr -> "1" + is IntLitExpr -> this.value.toString() + is RatLitExpr -> "(${this.num}.0/${this.denom}.0)" + is FpLitExpr -> FpUtils.fpLitExprToBigFloat(FpRoundingMode.RNE, this).toString() + is BvLitExpr -> BvUtils.neutralBvLitExprToBigInteger(this).toString() + else -> error("Not supported: $this") + } + + +fun UnaryExpr<*, *>.toC(parseContext: ParseContext): String = + "(${this.cOperator()} ${op.toC(parseContext)})" + +fun BinaryExpr<*, *>.toC(parseContext: ParseContext): String = + if (leftOp.type is ArrayType<*, *>) { + "${this.arrayCOperator()}(${leftOp.toC(parseContext)}, ${rightOp.toC(parseContext)})" + } else if (this is ModExpr<*>) { + "( (${leftOp.toC(parseContext)} % ${rightOp.toC(parseContext)} + ${rightOp.toC(parseContext)}) % ${ + rightOp.toC(parseContext) + } )" + } else { + "(${leftOp.toC(parseContext)} ${this.cOperator()} ${rightOp.toC(parseContext)})" + } + +fun MultiaryExpr<*, *>.toC(parseContext: ParseContext): String = + ops.joinToString(separator = " ${this.cOperator()} ", prefix = "(", postfix = ")") { it.toC(parseContext) } + +fun Expr<*>.cOperator() = + when (this) { + is EqExpr<*> -> "==" + is NeqExpr<*> -> "!=" + is OrExpr -> "||" + is AndExpr -> "&&" + is NotExpr -> "!" + // is ModExpr<*> -> "%" // handled above + is DivExpr<*> -> "/" + + is UnaryExpr<*, *> -> operatorLabel + is BinaryExpr<*, *> -> operatorLabel + is MultiaryExpr<*, *> -> operatorLabel + else -> TODO("Not yet implemented operator label for expr: $this") + } + +fun Expr<*>.arrayCOperator() = + when (this) { + is EqExpr<*> -> "array_equals" + is NeqExpr<*> -> "!array_equals" + else -> TODO("Not yet implemented array operator label for expr: $this") + } + +fun String.toC() = + this.replace(Regex("[^A-Za-z_0-9]"), "_") \ No newline at end of file diff --git a/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/model/Builders.kt b/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/model/Builders.kt index 5590f2f048..6de9e40a60 100644 --- a/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/model/Builders.kt +++ b/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/model/Builders.kt @@ -30,7 +30,8 @@ class XcfaBuilder @JvmOverloads constructor( private val vars: MutableSet = LinkedHashSet(), private val procedures: MutableSet = LinkedHashSet(), private val initProcedures: MutableList>>> = ArrayList(), - val metaData: MutableMap = LinkedHashMap()) { + val metaData: MutableMap = LinkedHashMap() +) { fun getVars(): Set = vars fun getProcedures(): Set = procedures @@ -63,7 +64,7 @@ class XcfaBuilder @JvmOverloads constructor( @XcfaDsl class XcfaProcedureBuilder @JvmOverloads constructor( var name: String, - private val manager: ProcedurePassManager, + val manager: ProcedurePassManager, private val params: MutableList, ParamDirection>> = ArrayList(), private val vars: MutableSet> = LinkedHashSet(), private val locs: MutableSet = LinkedHashSet(), @@ -78,8 +79,10 @@ class XcfaProcedureBuilder @JvmOverloads constructor( var errorLoc: Optional = Optional.empty() private set lateinit var parent: XcfaBuilder - private lateinit var optimized: XcfaProcedureBuilder private lateinit var built: XcfaProcedure + private lateinit var optimized: XcfaProcedureBuilder + private lateinit var partlyOptimized: XcfaProcedureBuilder + private var lastOptimized: Int = -1 fun getParams(): List, ParamDirection>> = if (this::optimized.isInitialized) optimized.params else params fun getVars(): Set> = if (this::optimized.isInitialized) optimized.vars else vars fun getLocs(): Set = if (this::optimized.isInitialized) optimized.locs else locs @@ -88,13 +91,29 @@ class XcfaProcedureBuilder @JvmOverloads constructor( fun optimize() { if (!this::optimized.isInitialized) { var that = this - for (pass in manager.passes) { + for (pass in manager.passes.flatten()) { that = pass.run(that) } optimized = that } } + fun optimize(phase: Int): Boolean { // true, if optimization is finished (no more phases to execute) + if (this::optimized.isInitialized || phase >= manager.passes.size) return true + if (phase <= lastOptimized) return lastOptimized >= manager.passes.size - 1 + check(phase == lastOptimized + 1) { "Wrong optimization phase!" } + + var that = if (this::partlyOptimized.isInitialized) partlyOptimized else this + for (pass in manager.passes[phase]) { + that = pass.run(that) + } + + partlyOptimized = that + lastOptimized = phase + if (phase >= manager.passes.size - 1) optimized = that + return phase >= manager.passes.size - 1 + } + fun build(parent: XCFA): XcfaProcedure { if (this::built.isInitialized) return built; if (!this::optimized.isInitialized) optimize() @@ -113,21 +132,18 @@ class XcfaProcedureBuilder @JvmOverloads constructor( } fun addParam(toAdd: VarDecl<*>, dir: ParamDirection) { - check( - !this::optimized.isInitialized) { "Cannot add/remove new elements after optimization passes!" } + check(!this::optimized.isInitialized) { "Cannot add/remove new elements after optimization passes!" } params.add(Pair(toAdd, dir)) vars.add(toAdd) } fun addVar(toAdd: VarDecl<*>) { - check( - !this::optimized.isInitialized) { "Cannot add/remove new elements after optimization passes!" } + check(!this::optimized.isInitialized) { "Cannot add/remove new elements after optimization passes!" } vars.add(toAdd) } fun removeVar(toRemove: VarDecl<*>) { - check( - !this::optimized.isInitialized) { "Cannot add/remove new elements after optimization passes!" } + check(!this::optimized.isInitialized) { "Cannot add/remove new elements after optimization passes!" } vars.remove(toRemove) } @@ -159,8 +175,7 @@ class XcfaProcedureBuilder @JvmOverloads constructor( } fun addEdge(toAdd: XcfaEdge) { - check( - !this::optimized.isInitialized) { "Cannot add/remove new elements after optimization passes!" } + check(!this::optimized.isInitialized) { "Cannot add/remove new elements after optimization passes!" } addLoc(toAdd.source) addLoc(toAdd.target) edges.add(toAdd) @@ -169,8 +184,7 @@ class XcfaProcedureBuilder @JvmOverloads constructor( } fun addLoc(toAdd: XcfaLocation) { - check( - !this::optimized.isInitialized) { "Cannot add/remove new elements after optimization passes!" } + check(!this::optimized.isInitialized) { "Cannot add/remove new elements after optimization passes!" } if (!locs.contains(toAdd)) { check(!toAdd.error) check(!toAdd.initial) @@ -180,22 +194,19 @@ class XcfaProcedureBuilder @JvmOverloads constructor( } fun removeEdge(toRemove: XcfaEdge) { - check( - !this::optimized.isInitialized) { "Cannot add/remove new elements after optimization passes!" } + check(!this::optimized.isInitialized) { "Cannot add/remove new elements after optimization passes!" } toRemove.source.outgoingEdges.remove(toRemove) toRemove.target.incomingEdges.remove(toRemove) edges.remove(toRemove) } fun removeLoc(toRemove: XcfaLocation) { - check( - !this::optimized.isInitialized) { "Cannot add/remove new elements after optimization passes!" } + check(!this::optimized.isInitialized) { "Cannot add/remove new elements after optimization passes!" } locs.remove(toRemove) } fun removeLocs(pred: (XcfaLocation) -> Boolean) { - check( - !this::optimized.isInitialized) { "Cannot add/remove new elements after optimization passes!" } + check(!this::optimized.isInitialized) { "Cannot add/remove new elements after optimization passes!" } while (locs.any(pred)) { locs.removeIf(pred) edges.removeIf { @@ -209,8 +220,7 @@ class XcfaProcedureBuilder @JvmOverloads constructor( } fun changeVars(varLut: Map, VarDecl<*>>) { - check( - !this::optimized.isInitialized) { "Cannot add/remove new elements after optimization passes!" } + check(!this::optimized.isInitialized) { "Cannot add/remove new elements after optimization passes!" } val savedVars = ArrayList(vars) vars.clear() savedVars.forEach { vars.add(checkNotNull(varLut[it])) } diff --git a/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/model/Dsl.kt b/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/model/Dsl.kt index 303380f610..3be0685c52 100644 --- a/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/model/Dsl.kt +++ b/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/model/Dsl.kt @@ -312,5 +312,5 @@ fun XcfaBuilder.procedure(name: String, passManager: ProcedurePassManager, fun XcfaBuilder.procedure(name: String, lambda: XcfaProcedureBuilderContext.() -> Unit): XcfaProcedureBuilderContext { - return procedure(name, ProcedurePassManager(emptyList()), lambda) + return procedure(name, ProcedurePassManager(), lambda) } \ No newline at end of file diff --git a/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/model/XCFA.kt b/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/model/XCFA.kt index 2f3f367246..0916e1e5ca 100644 --- a/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/model/XCFA.kt +++ b/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/model/XCFA.kt @@ -30,19 +30,29 @@ class XCFA( var cachedHash: Int? = null - var procedures: Set = // procedure definitions - procedureBuilders.map { it.build(this) }.toSet() + var procedures: Set // procedure definitions private set - var initProcedures: List>>> = // procedure names and parameter assignments - initProcedureBuilders.map { Pair(it.first.build(this), it.second) } + + var initProcedures: List>>> // procedure names and parameter assignments private set + init { + var phase = 0 + do { + var ready = true + procedureBuilders.forEach { ready = it.optimize(phase) && ready } + initProcedureBuilders.forEach { ready = it.first.optimize(phase) && ready } + phase++ + } while (!ready) + + procedures = procedureBuilders.map { it.build(this) }.toSet() + initProcedures = initProcedureBuilders.map { Pair(it.first.build(this), it.second) } + } + /** * Recreate an existing XCFA by substituting the procedures and initProcedures fields. */ - fun recreate(procedures: Set, - initProcedures: List>>> - ): XCFA { + fun recreate(procedures: Set, initProcedures: List>>>): XCFA { this.procedures = procedures this.initProcedures = initProcedures return this diff --git a/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/PthreadFunctionsPass.kt b/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/CLibraryFunctionsPass.kt similarity index 86% rename from subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/PthreadFunctionsPass.kt rename to subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/CLibraryFunctionsPass.kt index eae9425e8d..4d9a952f18 100644 --- a/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/PthreadFunctionsPass.kt +++ b/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/CLibraryFunctionsPass.kt @@ -25,12 +25,22 @@ import hu.bme.mit.theta.frontend.transformation.grammar.expression.Reference import hu.bme.mit.theta.xcfa.model.* /** - * Transforms the following pthread procedure calls into model elements: - * - pthread_create() - * - pthread_join() + * Transforms the library procedure calls with names in supportedFunctions into model elements. * Requires the ProcedureBuilder be `deterministic`. */ -class PthreadFunctionsPass(val parseContext: ParseContext) : ProcedurePass { +class CLibraryFunctionsPass(val parseContext: ParseContext) : ProcedurePass { + + private val supportedFunctions = setOf( + "printf", + "pthread_join", + "pthread_create", + "pthread_mutex_lock", + "pthread_mutex_unlock", + "pthread_cond_wait", + "pthread_cond_signal", + "pthread_mutex_init", + "pthread_cond_init" + ) override fun run(builder: XcfaProcedureBuilder): XcfaProcedureBuilder { checkNotNull(builder.metaData["deterministic"]) @@ -42,7 +52,8 @@ class PthreadFunctionsPass(val parseContext: ParseContext) : ProcedurePass { if (predicate((it.label as SequenceLabel).labels[0])) { val invokeLabel = it.label.labels[0] as InvokeLabel val metadata = invokeLabel.metadata - val fences: List = when (invokeLabel.name) { + val labels: List = when (invokeLabel.name) { + "printf" -> listOf(NopLabel) "pthread_join" -> { var handle = invokeLabel.params[1] while (handle is Reference<*, *>) handle = handle.op @@ -107,10 +118,10 @@ class PthreadFunctionsPass(val parseContext: ParseContext) : ProcedurePass { "pthread_mutex_init", "pthread_cond_init" -> listOf(NopLabel) - else -> error("Unknown pthread function ${invokeLabel.name}") + else -> error("Unsupported library function ${invokeLabel.name}") } - edge.withLabel(SequenceLabel(fences)).splitIf { fence -> - fence is FenceLabel && fence.labels.any { l -> l.startsWith("start_cond_wait") } + edge.withLabel(SequenceLabel(labels)).splitIf { label -> + label is FenceLabel && label.labels.any { l -> l.startsWith("start_cond_wait") } }.forEach(builder::addEdge) } else { builder.addEdge(edge.withLabel(SequenceLabel(it.label.labels))) @@ -122,6 +133,6 @@ class PthreadFunctionsPass(val parseContext: ParseContext) : ProcedurePass { } private fun predicate(it: XcfaLabel): Boolean { - return it is InvokeLabel && it.name.startsWith("pthread_") + return it is InvokeLabel && it.name in supportedFunctions } } \ No newline at end of file diff --git a/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/InlineProceduresPass.kt b/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/InlineProceduresPass.kt index 3a42d18c37..5cfbfa728c 100644 --- a/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/InlineProceduresPass.kt +++ b/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/InlineProceduresPass.kt @@ -34,19 +34,16 @@ class InlineProceduresPass(val parseContext: ParseContext) : ProcedurePass { override fun run(builder: XcfaProcedureBuilder): XcfaProcedureBuilder { if (!builder.canInline()) return builder checkNotNull(builder.metaData["deterministic"]) - check( - builder.metaData["inlined"] == null) { "Recursive programs are not supported by inlining." } + check(builder.metaData["inlined"] == null) { "Recursive programs are not supported by inlining." } builder.metaData["inlined"] = Unit while (true) { var foundOne = false for (edge in ArrayList(builder.getEdges())) { val pred: (XcfaLabel) -> Boolean = { it -> - it is InvokeLabel && builder.parent.getProcedures() - .any { p -> p.name == it.name } + it is InvokeLabel && builder.parent.getProcedures().any { p -> p.name == it.name } } val edges = edge.splitIf(pred) - if (edges.size > 1 || (edges.size == 1 && pred( - (edges[0].label as SequenceLabel).labels[0]))) { + if (edges.size > 1 || (edges.size == 1 && pred((edges[0].label as SequenceLabel).labels[0]))) { builder.removeEdge(edge) edges.forEach { if (pred((it.label as SequenceLabel).labels[0])) { @@ -54,10 +51,12 @@ class InlineProceduresPass(val parseContext: ParseContext) : ProcedurePass { val source = it.source val target = it.target val invokeLabel: InvokeLabel = it.label.labels[0] as InvokeLabel - val procedure = builder.parent.getProcedures() - .find { p -> p.name == invokeLabel.name } + val procedure = builder.parent.getProcedures().find { p -> p.name == invokeLabel.name } checkNotNull(procedure) - procedure.optimize() + val inlineIndex = builder.manager.passes.indexOfFirst { phase -> + phase.any { pass -> pass is InlineProceduresPass } + } + procedure.optimize(inlineIndex) val newLocs: MutableMap = LinkedHashMap() procedure.getLocs().forEach { newLocs.put(it, it.inlinedCopy()) } @@ -91,8 +90,7 @@ class InlineProceduresPass(val parseContext: ParseContext) : ProcedurePass { val finalLoc = procedure.finalLoc val errorLoc = procedure.errorLoc - builder.addEdge( - XcfaEdge(source, checkNotNull(newLocs[initLoc]), SequenceLabel(inStmts))) + builder.addEdge(XcfaEdge(source, checkNotNull(newLocs[initLoc]), SequenceLabel(inStmts))) if (finalLoc.isPresent) builder.addEdge(XcfaEdge(checkNotNull(newLocs[finalLoc.get()]), target, SequenceLabel(outStmts))) @@ -116,7 +114,6 @@ class InlineProceduresPass(val parseContext: ParseContext) : ProcedurePass { } private fun XcfaLocation.inlinedCopy(): XcfaLocation { - return copy(name + XcfaLocation.uniqueCounter(), initial = false, final = false, - error = false) + return copy(name + XcfaLocation.uniqueCounter(), initial = false, final = false, error = false) } } \ No newline at end of file diff --git a/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/LbePass.kt b/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/LbePass.kt index 4889fc3a18..64e5a66931 100644 --- a/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/LbePass.kt +++ b/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/LbePass.kt @@ -126,9 +126,6 @@ class LbePass(val parseContext: ParseContext) : ProcedurePass { return builder } - val isPostInlining: Boolean - get() = true - /** * Collapses atomic blocks sequentially. */ @@ -278,7 +275,7 @@ class LbePass(val parseContext: ParseContext) : ProcedurePass { if (location.outgoingEdges.size != 1) return false val outEdge = location.outgoingEdges.first() if ( - location.incomingEdges.any { edge -> edge.getFlatLabels().any { it is InvokeLabel || (it is StmtLabel && it.stmt is AssumeStmt) } } + location.incomingEdges.any { edge -> edge.getFlatLabels().any { it is InvokeLabel } } || location.outgoingEdges.any { edge -> edge.getFlatLabels().any { it is InvokeLabel } } || (level == LbeLevel.LBE_LOCAL && !atomicPhase && isNotLocal(outEdge)) ) { @@ -308,7 +305,10 @@ class LbePass(val parseContext: ParseContext) : ProcedurePass { private fun isNotLocal(edge: XcfaEdge): Boolean { return !edge.getFlatLabels().all { label -> !(label is StartLabel || label is JoinLabel) && label.collectVars().all(builder.getVars()::contains) && - !(label is StmtLabel && label.stmt is AssumeStmt && label.stmt.cond is FalseExpr) + !(label is StmtLabel && label.stmt is AssumeStmt && label.stmt.cond is FalseExpr) && + !(label is FenceLabel && label.labels.any { name -> + listOf("ATOMIC_BEGIN", "mutex_lock", "cond_wait").any { name.startsWith(it) } + }) } } } \ No newline at end of file diff --git a/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/ProcedurePassManager.kt b/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/ProcedurePassManager.kt index ab2faf0fe3..c1db6b71b5 100644 --- a/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/ProcedurePassManager.kt +++ b/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/ProcedurePassManager.kt @@ -18,9 +18,50 @@ package hu.bme.mit.theta.xcfa.passes import hu.bme.mit.theta.frontend.ParseContext -open class ProcedurePassManager(val passes: List) +open class ProcedurePassManager(vararg passes: List) { -class CPasses(checkOverflow: Boolean, parseContext: ParseContext) : ProcedurePassManager(listOf( + val passes: List> = passes.toList() +} + +class CPasses(checkOverflow: Boolean, parseContext: ParseContext) : ProcedurePassManager( + listOf( + // formatting + NormalizePass(parseContext), + DeterministicPass(parseContext), + // removing redundant elements + EmptyEdgeRemovalPass(parseContext), + UnusedLocRemovalPass(parseContext), + // handling intrinsics + ErrorLocationPass(checkOverflow, parseContext), + FinalLocationPass(checkOverflow, parseContext), + SvCompIntrinsicsPass(parseContext), + FpFunctionsToExprsPass(parseContext), + CLibraryFunctionsPass(parseContext), + ), + listOf( + // optimizing + SimplifyExprsPass(parseContext), + LoopUnrollPass(), + ), + listOf( + // trying to inline procedures + InlineProceduresPass(parseContext), + RemoveDeadEnds(parseContext), + EliminateSelfLoops(parseContext), + ), + listOf( + // handling remaining function calls + NondetFunctionPass(parseContext), + LbePass(parseContext), + NormalizePass(parseContext), // needed after lbe, TODO + DeterministicPass(parseContext), // needed after lbe, TODO + HavocPromotionAndRange(parseContext), + // Final cleanup + UnusedVarPass(parseContext), + ) +) + +class ChcPasses(parseContext: ParseContext) : ProcedurePassManager(listOf( // formatting NormalizePass(parseContext), DeterministicPass(parseContext), @@ -30,53 +71,24 @@ class CPasses(checkOverflow: Boolean, parseContext: ParseContext) : ProcedurePas // optimizing SimplifyExprsPass(parseContext), // handling intrinsics - ErrorLocationPass(checkOverflow, parseContext), - FinalLocationPass(checkOverflow, parseContext), - SvCompIntrinsicsPass(parseContext), - FpFunctionsToExprsPass(parseContext), - PthreadFunctionsPass(parseContext), - LoopUnrollPass(), +// ErrorLocationPass(false), +// FinalLocationPass(false), +// SvCompIntrinsicsPass(), +// FpFunctionsToExprsPass(), +// PthreadFunctionsPass(), // trying to inline procedures +), listOf( InlineProceduresPass(parseContext), RemoveDeadEnds(parseContext), EliminateSelfLoops(parseContext), // handling remaining function calls - NondetFunctionPass(parseContext), +// NondetFunctionPass(), LbePass(parseContext), NormalizePass(parseContext), // needed after lbe, TODO DeterministicPass(parseContext), // needed after lbe, TODO - HavocPromotionAndRange(parseContext), +// HavocPromotionAndRange(), // Final cleanup UnusedVarPass(parseContext), )) -class ChcPasses : ProcedurePassManager(listOf(/* - // formatting - NormalizePass(), - DeterministicPass(), - // removing redundant elements - EmptyEdgeRemovalPass(), - UnusedLocRemovalPass(), - // optimizing - SimplifyExprsPass(), - // handling intrinsics -// ErrorLocationPass(false), -// FinalLocationPass(false), -// SvCompIntrinsicsPass(), -// FpFunctionsToExprsPass(), -// PthreadFunctionsPass(), - // trying to inline procedures - InlineProceduresPass(), - RemoveDeadEnds(), - EliminateSelfLoops(), - // handling remaining function calls -// NondetFunctionPass(), - LbePass(), - NormalizePass(), // needed after lbe, TODO - DeterministicPass(), // needed after lbe, TODO -// HavocPromotionAndRange(), - // Final cleanup - UnusedVarPass(), -*/)) - -class LitmusPasses : ProcedurePassManager(emptyList()) \ No newline at end of file +class LitmusPasses : ProcedurePassManager() \ No newline at end of file diff --git a/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/SimplifyExprsPass.kt b/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/SimplifyExprsPass.kt index 7a6f23df8a..2f1d5c3540 100644 --- a/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/SimplifyExprsPass.kt +++ b/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/SimplifyExprsPass.kt @@ -33,7 +33,10 @@ import hu.bme.mit.theta.core.utils.StmtUtils import hu.bme.mit.theta.core.utils.TypeUtils.cast import hu.bme.mit.theta.frontend.ParseContext import hu.bme.mit.theta.frontend.transformation.model.types.complex.CComplexType +import hu.bme.mit.theta.xcfa.collectVarsWithAccessType +import hu.bme.mit.theta.xcfa.isRead import hu.bme.mit.theta.xcfa.model.* +import java.lang.UnsupportedOperationException /** * This pass simplifies the expressions inside statements and substitutes the values of constant variables @@ -46,6 +49,7 @@ class SimplifyExprsPass(val parseContext: ParseContext) : ProcedurePass { override fun run(builder: XcfaProcedureBuilder): XcfaProcedureBuilder { checkNotNull(builder.metaData["deterministic"]) + removeUnusedGlobalVarWrites(builder) val valuation = findConstVariables(builder) val edges = LinkedHashSet(builder.getEdges()) for (edge in edges) { @@ -82,6 +86,25 @@ class SimplifyExprsPass(val parseContext: ParseContext) : ProcedurePass { return builder } + private fun removeUnusedGlobalVarWrites(builder: XcfaProcedureBuilder) { + val usedVars = mutableSetOf>() + val xcfaBuilder = builder.parent + xcfaBuilder.getProcedures().flatMap { it.getEdges() }.forEach { + it.label.collectVarsWithAccessType().forEach { (varDecl, access) -> + if (access.isRead) usedVars.add(varDecl) + } + } + val unusedVars = xcfaBuilder.getVars().map { it.wrappedVar } union builder.getVars() subtract + usedVars subtract builder.getParams().map { it.first }.toSet() + xcfaBuilder.getProcedures().forEach { b -> + b.getEdges().toList().forEach { edge -> + val newLabel = edge.label.removeUnusedWrites(unusedVars) + b.removeEdge(edge) + b.addEdge(edge.withLabel(newLabel)) + } + } + } + private fun findConstVariables(builder: XcfaProcedureBuilder): Valuation { val valuation = MutableValuation() builder.parent.getProcedures() @@ -100,7 +123,10 @@ class SimplifyExprsPass(val parseContext: ParseContext) : ProcedurePass { } .filterNotNull() .forEach { assignment -> - valuation.put(assignment.varDecl, assignment.expr.eval(ImmutableValuation.empty())) + try { + valuation.put(assignment.varDecl, assignment.expr.eval(ImmutableValuation.empty())) + } catch (_: UnsupportedOperationException) { + } } return valuation } diff --git a/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/Utils.kt b/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/Utils.kt index bab9af5875..5ae232290c 100644 --- a/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/Utils.kt +++ b/subprojects/xcfa/xcfa/src/main/java/hu/bme/mit/theta/xcfa/passes/Utils.kt @@ -29,12 +29,6 @@ import hu.bme.mit.theta.xcfa.getFlatLabels import hu.bme.mit.theta.xcfa.model.* import java.util.* -fun label2edge(edge: XcfaEdge, label: XcfaLabel) { - val source = edge.source - val target = edge.target - -} - /** * XcfaEdge must be in a `deterministic` ProcedureBuilder */ @@ -154,4 +148,34 @@ private fun XcfaProcedureBuilder.canInline(tally: LinkedList): Boolean { tally.pop() metaData[if (recursive) "recursive" else "canInline"] = Unit return !recursive +} + +internal fun XcfaLabel.removeUnusedWrites(unusedVars: Set>): XcfaLabel { + return when (this) { + is SequenceLabel -> { + val newLabels = mutableListOf() + this.labels.forEach { label -> + val newLabel = label.removeUnusedWrites(unusedVars) + if (newLabel !is NopLabel) newLabels.add(newLabel) + } + SequenceLabel(newLabels) + } + + is NondetLabel -> { + val newLabels = mutableSetOf() + this.labels.forEach { label -> + val newLabel = label.removeUnusedWrites(unusedVars) + if (newLabel !is NopLabel) newLabels.add(newLabel) + } + NondetLabel(newLabels) + } + + is StmtLabel -> when (this.stmt) { + is AssignStmt<*> -> if (unusedVars.contains(this.stmt.varDecl)) NopLabel else this + is HavocStmt<*> -> if (unusedVars.contains(this.stmt.varDecl)) NopLabel else this + else -> this + } + + else -> this + } } \ No newline at end of file diff --git a/subprojects/xcfa/xcfa/src/test/java/hu/bme/mit/theta/xcfa/passes/PassTests.kt b/subprojects/xcfa/xcfa/src/test/java/hu/bme/mit/theta/xcfa/passes/PassTests.kt index 1bc7f624e8..30f58edbd7 100644 --- a/subprojects/xcfa/xcfa/src/test/java/hu/bme/mit/theta/xcfa/passes/PassTests.kt +++ b/subprojects/xcfa/xcfa/src/test/java/hu/bme/mit/theta/xcfa/passes/PassTests.kt @@ -373,7 +373,7 @@ class PassTests { passes = listOf( NormalizePass(parseContext), DeterministicPass(parseContext), - PthreadFunctionsPass(parseContext), + CLibraryFunctionsPass(parseContext), ), input = { (init to "L1") {