diff --git a/.cargo/config.toml b/.cargo/config.toml deleted file mode 100644 index 0c6c27f83..000000000 --- a/.cargo/config.toml +++ /dev/null @@ -1,3 +0,0 @@ -[target.wasm32-unknown-unknown] -# Required to make the rand feature of alloy work for wasm32-unknown-unknown -rustflags = ["--cfg", "getrandom_backend=\"wasm_js\""] diff --git a/.gas-snapshot b/.gas-snapshot deleted file mode 100644 index d15bd61db..000000000 --- a/.gas-snapshot +++ /dev/null @@ -1,1573 +0,0 @@ -BaseRainlangExternConstructionTest:testExternConstructorRevertsEmptyPointers() (gas: 35988) -BaseRainlangExternConstructionTest:testExternConstructorRevertsMoreIntegrity() (gas: 36287) -BaseRainlangExternConstructionTest:testExternConstructorRevertsMoreOpcodes() (gas: 36296) -BaseRainlangExternIERC165Test:testRainlangExternIERC165(bytes4) (runs: 2048, μ: 329642, ~: 329642) -BaseRainlangExternIntegrityOpcodeRangeTest:testExternIntegrityBoundaryHighestValidOpcode(uint16) (runs: 2048, μ: 18158513697557824775, ~: 8935141660703048972) -BaseRainlangExternIntegrityOpcodeRangeTest:testExternIntegrityRevertsOpcodeOutOfRange(uint16,uint16) (runs: 2048, μ: 344857, ~: 344857) -BaseRainlangSubParserIERC165Test:testRainlangSubParserIERC165(uint32) (runs: 2048, μ: 688824, ~: 688824) -BaseRainlangSubParserLiteral2Test:testSubParseLiteral2HappyPath() (gas: 749126) -BaseRainlangSubParserLiteral2Test:testSubParseLiteral2NoMatch() (gas: 681018) -BaseRainlangSubParserLiteral2Test:testSubParseLiteral2RevertsIndexOutOfBounds() (gas: 721496) -BaseRainlangSubParserWord2Test:testSubParseWord2RevertsEmptyWordParsers() (gas: 1057924) -BaseRainlangSubParserWord2Test:testSubParseWord2RevertsIndexOutOfBounds() (gas: 1088061) -LibAllStandardOpsFilesystemOrderingTest:testAuthoringMetaMatchesFilesystemOrdering() (gas: 1290912) -LibAllStandardOpsTest:testAuthoringMetaV2Content() (gas: 94356) -LibAllStandardOpsTest:testFourArrayOrderingConsistency() (gas: 113788) -LibAllStandardOpsTest:testIntegrityFunctionPointersLength() (gas: 8902) -LibAllStandardOpsTest:testLiteralParserFunctionPointersLength() (gas: 1198) -LibAllStandardOpsTest:testOpcodeFunctionPointersLength() (gas: 8901) -LibAllStandardOpsTest:testOperandHandlerFunctionPointersLength() (gas: 8881) -LibCamelToKebabTest:testAcronymBeforeWord() (gas: 13683) -LibCamelToKebabTest:testAcronymWithDigitsBeforeWord() (gas: 14713) -LibCamelToKebabTest:testAllCaps() (gas: 12539) -LibCamelToKebabTest:testCtPop() (gas: 7153) -LibCamelToKebabTest:testLeadingUint() (gas: 17930) -LibCamelToKebabTest:testMaxUint256() (gas: 9694) -LibCamelToKebabTest:testMultiWord() (gas: 16735) -LibCamelToKebabTest:testShortWord() (gas: 5015) -LibCamelToKebabTest:testSimple() (gas: 9794) -LibCamelToKebabTest:testSingleChar() (gas: 4476) -LibCamelToKebabTest:testTrailingDigit() (gas: 6076) -LibEvalFBoundsTest:testEvalFBoundsModConstant(bytes32) (runs: 2048, μ: 58055, ~: 58055) -LibEvalInputsLengthMismatchTest:testEval4InputsMatch() (gas: 21945) -LibEvalInputsLengthMismatchTest:testEval4InputsTooFew() (gas: 22036) -LibEvalInputsLengthMismatchTest:testEval4InputsTooMany() (gas: 22139) -LibEvalInputsLengthMismatchTest:testEval4InputsZeroWhenExpected() (gas: 21756) -LibEvalMaxOutputsTest:testMaxOutputsTruncation(uint8,bytes32,bytes32,bytes32) (runs: 2048, μ: 45154, ~: 45273) -LibEvalMultipleSourceTest:testEvalSourceIndex0VsIndex1() (gas: 68866) -LibEvalMultipleSourceTest:testEvalSourceIndex1() (gas: 61997) -LibEvalOpcodeCountEdgeCasesTest:testEvalExactly16Opcodes() (gas: 160573) -LibEvalOpcodeCountEdgeCasesTest:testEvalExactly8Opcodes() (gas: 94833) -LibEvalOpcodeCountEdgeCasesTest:testEvalZeroOpcodeSource() (gas: 33054) -LibEvalOpcodeCountEdgeCasesTest:testEvalZeroOpcodeSourceWithInputs(uint256,uint256) (runs: 2048, μ: 37214, ~: 37214) -LibEvalRemainderOnlyTest:testEvalLoopRemainderOnlySeven(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32) (runs: 2048, μ: 69524, ~: 69524) -LibExternCodecTest:testDecodeExternCallStandalone(address,uint16,uint16) (runs: 2048, μ: 765, ~: 765) -LibExternCodecTest:testDecodeExternDispatchMasksOpcode(bytes32,uint16) (runs: 2048, μ: 608, ~: 608) -LibExternCodecTest:testDecodeExternDispatchStandalone(uint16,uint16) (runs: 2048, μ: 603, ~: 603) -LibExternCodecTest:testLibExternCodecEncodeExternCall(string,uint256,bytes32) (runs: 2048, μ: 6269, ~: 6611) -LibExternCodecTest:testLibExternCodecEncodeExternDispatch(uint256,bytes32) (runs: 2048, μ: 1943, ~: 2328) -LibExternOpContextCallingContractSubParserTest:testSubParserCallingContract(uint256,uint256,bytes32) (runs: 2048, μ: 1262, ~: 1262) -LibExternOpContextRainlenSubParserTest:testSubParserRainlen(uint256,uint256,bytes32) (runs: 2048, μ: 1306, ~: 1306) -LibExternOpContextSenderSubParserTest:testSubParserSender(uint256,uint256,bytes32) (runs: 2048, μ: 1283, ~: 1283) -LibExternOpStackOperandSubParserTest:testSubParserStackOperand(uint16,uint256,bytes32) (runs: 2048, μ: 1383, ~: 1383) -LibIntegrityCheckBadOpIOTest:testBadOpInputsLength() (gas: 38018) -LibIntegrityCheckBadOpIOTest:testBadOpOutputsLength() (gas: 38072) -LibIntegrityCheckHighwaterTest:testHighwaterAdvancesAfterMultiOutputCall() (gas: 60593) -LibIntegrityCheckIoTest:testIntegrityCheck2IoSingleSource() (gas: 33229) -LibIntegrityCheckIoTest:testIntegrityCheck2IoThreeSources() (gas: 86733) -LibIntegrityCheckIoTest:testIntegrityCheck2IoTwoSources() (gas: 55202) -LibIntegrityCheckMultiSourceTest:testIntegrityThreeSources() (gas: 64751) -LibIntegrityCheckMultiSourceTest:testIntegrityTwoSources() (gas: 37581) -LibIntegrityCheckNewStateTest:testNewState(bytes,uint256,bytes32[]) (runs: 2048, μ: 38587, ~: 38581) -LibIntegrityCheckStackMaxIndexTest:testStackMaxIndexTracksPeak() (gas: 27590) -LibIntegrityCheckTest:testOpcodeInRange() (gas: 18158513697557819442) -LibIntegrityCheckTest:testOpcodeOutOfRange(uint256) (runs: 2048, μ: 12011, ~: 12071) -LibIntegrityCheckTest:testStackAllocationMismatch() (gas: 625640) -LibIntegrityCheckTest:testStackOutputsMismatch() (gas: 625240) -LibIntegrityCheckTest:testStackUnderflow() (gas: 620463) -LibIntegrityCheckTest:testStackUnderflowHighwater() (gas: 625420) -LibIntegrityCheckZeroSourceTest:testZeroSourceCommentOnly() (gas: 9140) -LibIntegrityCheckZeroSourceTest:testZeroSourceEmptyInput() (gas: 7373) -LibInterpreterDeployProdTest:testProdDeployArbitrum() (gas: 17674) -LibInterpreterDeployProdTest:testProdDeployBase() (gas: 17634) -LibInterpreterDeployProdTest:testProdDeployBaseSepolia() (gas: 17696) -LibInterpreterDeployProdTest:testProdDeployFlare() (gas: 17674) -LibInterpreterDeployProdTest:testProdDeployPolygon() (gas: 17651) -LibInterpreterDeployTest:testCreationCodeExpressionDeployer() (gas: 6238) -LibInterpreterDeployTest:testCreationCodeInterpreter() (gas: 23010) -LibInterpreterDeployTest:testCreationCodeParser() (gas: 19034) -LibInterpreterDeployTest:testCreationCodeRainlang() (gas: 978) -LibInterpreterDeployTest:testCreationCodeReferenceExtern() (gas: 10823) -LibInterpreterDeployTest:testCreationCodeStore() (gas: 1294) -LibInterpreterDeployTest:testDeployAddressExpressionDeployer() (gas: 1453694) -LibInterpreterDeployTest:testDeployAddressInterpreter() (gas: 4815495) -LibInterpreterDeployTest:testDeployAddressParser() (gas: 4131259) -LibInterpreterDeployTest:testDeployAddressRainlang() (gas: 140594) -LibInterpreterDeployTest:testDeployAddressStore() (gas: 225735) -LibInterpreterDeployTest:testEtchRainlang() (gas: 45156) -LibInterpreterDeployTest:testEtchRainlangIdempotent() (gas: 45842) -LibInterpreterDeployTest:testExpectedCodeHashExpressionDeployer() (gas: 1440817) -LibInterpreterDeployTest:testExpectedCodeHashInterpreter() (gas: 4798329) -LibInterpreterDeployTest:testExpectedCodeHashParser() (gas: 4112486) -LibInterpreterDeployTest:testExpectedCodeHashRainlang() (gas: 133368) -LibInterpreterDeployTest:testExpectedCodeHashStore() (gas: 218377) -LibInterpreterDeployTest:testGeneratedDeployedAddressExpressionDeployer() (gas: 280) -LibInterpreterDeployTest:testGeneratedDeployedAddressInterpreter() (gas: 323) -LibInterpreterDeployTest:testGeneratedDeployedAddressParser() (gas: 302) -LibInterpreterDeployTest:testGeneratedDeployedAddressRainlang() (gas: 281) -LibInterpreterDeployTest:testGeneratedDeployedAddressStore() (gas: 282) -LibInterpreterDeployTest:testNoCborMetadataExpressionDeployer() (gas: 1442131) -LibInterpreterDeployTest:testNoCborMetadataInterpreter() (gas: 4801199) -LibInterpreterDeployTest:testNoCborMetadataParser() (gas: 4114961) -LibInterpreterDeployTest:testNoCborMetadataRainlang() (gas: 134065) -LibInterpreterDeployTest:testNoCborMetadataStore() (gas: 219047) -LibInterpreterDeployTest:testNotMetamorphicExpressionDeployer() (gas: 2139986) -LibInterpreterDeployTest:testNotMetamorphicInterpreter() (gas: 7003018) -LibInterpreterDeployTest:testNotMetamorphicParser() (gas: 5932763) -LibInterpreterDeployTest:testNotMetamorphicRainlang() (gas: 164264) -LibInterpreterDeployTest:testNotMetamorphicStore() (gas: 306271) -LibInterpreterDeployTest:testRuntimeCodeExpressionDeployer() (gas: 1446051) -LibInterpreterDeployTest:testRuntimeCodeInterpreter() (gas: 4817492) -LibInterpreterDeployTest:testRuntimeCodeParser() (gas: 4128487) -LibInterpreterDeployTest:testRuntimeCodeRainlang() (gas: 134009) -LibInterpreterDeployTest:testRuntimeCodeReferenceExtern() (gas: 2433517) -LibInterpreterDeployTest:testRuntimeCodeStore() (gas: 219316) -LibInterpreterStateDataContractTest:testSerializeDeserializeEmptyConstants() (gas: 11600) -LibInterpreterStateDataContractTest:testSerializeDeserializeRoundTrip() (gas: 13356) -LibInterpreterStateDataContractTest:testSerializeDeserializeRoundTripFuzzed(bytes32[]) (runs: 2048, μ: 79352, ~: 78139) -LibInterpreterStateDataContractTest:testSerializeDeserializeTwoSourceRoundTrip(bytes32[]) (runs: 2048, μ: 79999, ~: 78786) -LibInterpreterStateDataContractTest:testSerializeSize(uint8,uint8) (runs: 2048, μ: 1545, ~: 1317) -LibInterpreterStateDataContractTest:testSerializeSizeEmpty() (gas: 407) -LibInterpreterStateDataContractTest:testUnsafeDeserializeContext(bytes32[][]) (runs: 2048, μ: 22028506, ~: 19595594) -LibInterpreterStateDataContractTest:testUnsafeDeserializeFs(bytes) (runs: 2048, μ: 12277, ~: 12127) -LibInterpreterStateDataContractTest:testUnsafeDeserializeNamespace(uint256) (runs: 2048, μ: 11529, ~: 11529) -LibInterpreterStateDataContractTest:testUnsafeDeserializeSourceIndex(uint256) (runs: 2048, μ: 11531, ~: 11531) -LibInterpreterStateDataContractTest:testUnsafeDeserializeStackAllocation(uint8) (runs: 2048, μ: 15235, ~: 13076) -LibInterpreterStateDataContractTest:testUnsafeDeserializeStateKVZero() (gas: 11494) -LibInterpreterStateDataContractTest:testUnsafeDeserializeStore(address) (runs: 2048, μ: 11606, ~: 11606) -LibInterpreterStateDataContractTest:testUnsafeDeserializeTwoSourceStackAllocation(uint8,uint8) (runs: 2048, μ: 22535, ~: 21093) -LibInterpreterStateFingerprintTest:testFingerprintChangesWithSourceIndex(uint256,uint256) (runs: 2048, μ: 7046, ~: 7046) -LibInterpreterStateFingerprintTest:testFingerprintDeterministic() (gas: 3969) -LibInterpreterStateStackBottomsTest:testStackBottomsEmpty() (gas: 571) -LibInterpreterStateStackBottomsTest:testStackBottomsMultiple(uint8,uint8,uint8) (runs: 2048, μ: 4380, ~: 4179) -LibInterpreterStateStackBottomsTest:testStackBottomsSingle(uint8) (runs: 2048, μ: 1822, ~: 1613) -LibInterpreterStateStackTraceTest:testStackTraceCall(uint256,uint256,uint256[]) (runs: 2048, μ: 28964, ~: 28730) -LibInterpreterStateStackTraceTest:testStackTraceMasksUpperBits(uint256,uint256,uint256[]) (runs: 2048, μ: 28119, ~: 27702) -LibOpAbsTest:testOpAbsEval() (gas: 287814) -LibOpAbsTest:testOpAbsEvalOperandDisallowed() (gas: 17474) -LibOpAbsTest:testOpAbsIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10701, ~: 10629) -LibOpAbsTest:testOpAbsRun(bytes32,uint16) (runs: 2048, μ: 11201, ~: 11133) -LibOpAbsTest:testOpAbsTwoInputs() (gas: 39959) -LibOpAbsTest:testOpAbsTwoOutputs() (gas: 35519) -LibOpAbsTest:testOpAbsZeroInputs() (gas: 29448) -LibOpAbsTest:testOpAbsZeroOutputs() (gas: 34357) -LibOpAddTest:testOpAddEval2InputsHappyExamples() (gas: 397388) -LibOpAddTest:testOpAddEval2InputsHappyZero() (gas: 57126) -LibOpAddTest:testOpAddEval2InputsHappyZeroMax() (gas: 103336) -LibOpAddTest:testOpAddEval2InputsHappyZeroOne() (gas: 196382) -LibOpAddTest:testOpAddEval3InputsHappy() (gas: 348904) -LibOpAddTest:testOpAddEval3InputsUnhappy() (gas: 396893) -LibOpAddTest:testOpAddEvalOneInput() (gas: 36234) -LibOpAddTest:testOpAddEvalOperandDisallowed() (gas: 91461) -LibOpAddTest:testOpAddEvalTwoOutput() (gas: 43999) -LibOpAddTest:testOpAddEvalZeroInputs() (gas: 29526) -LibOpAddTest:testOpAddEvalZeroOutputs() (gas: 42863) -LibOpAddTest:testOpAddIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11587, ~: 11577) -LibOpAddTest:testOpAddIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10664, ~: 10609) -LibOpAddTest:testOpAddIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10661, ~: 10606) -LibOpAddTest:testOpAddRun(bytes32[]) (runs: 2048, μ: 55228, ~: 56523) -LibOpAnyTest:testOpAnyEval1FalseInput() (gas: 51265) -LibOpAnyTest:testOpAnyEval1TrueInput() (gas: 51259) -LibOpAnyTest:testOpAnyEval2FalseInputs() (gas: 56887) -LibOpAnyTest:testOpAnyEval2MixedInputs() (gas: 57282) -LibOpAnyTest:testOpAnyEval2MixedInputs2() (gas: 57369) -LibOpAnyTest:testOpAnyEval2MixedInputsZeroExponent() (gas: 58387) -LibOpAnyTest:testOpAnyEval2TrueInputs() (gas: 57327) -LibOpAnyTest:testOpAnyEvalFail() (gas: 29179) -LibOpAnyTest:testOpAnyEvalOperandDisallowed() (gas: 17442) -LibOpAnyTest:testOpAnyIntegrityGas0() (gas: 3261) -LibOpAnyTest:testOpAnyIntegrityHappy(uint8,uint16) (runs: 2048, μ: 1891, ~: 2160) -LibOpAnyTest:testOpAnyIntegrityUnhappyZeroInputs() (gas: 867) -LibOpAnyTest:testOpAnyRun(bytes32[],uint16) (runs: 2048, μ: 14961, ~: 14962) -LibOpAnyTest:testOpAnyRunGas0() (gas: 3360) -LibOpAnyTest:testOpAnyTwoOutputs() (gas: 35519) -LibOpAnyTest:testOpAnyZeroOutputs() (gas: 34335) -LibOpAvgTest:testOpAvgEvalExamples() (gas: 468614) -LibOpAvgTest:testOpAvgEvalOneInput() (gas: 34784) -LibOpAvgTest:testOpAvgEvalOperandDisallowed() (gas: 17473) -LibOpAvgTest:testOpAvgEvalThreeInputs() (gas: 45177) -LibOpAvgTest:testOpAvgEvalTwoOutputs() (gas: 40662) -LibOpAvgTest:testOpAvgEvalZeroOutputs() (gas: 39460) -LibOpAvgTest:testOpAvgIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10723, ~: 10651) -LibOpAvgTest:testOpAvgRun(int256,int256,int256,int256,uint16) (runs: 2048, μ: 26562, ~: 26629) -LibOpBinaryEqualToTest:testOpBinaryEqualToEval2() (gas: 205260) -LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsBothOne() (gas: 57582) -LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsFirstOneSecondZero() (gas: 58091) -LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsFirstZeroSecondOne() (gas: 58093) -LibOpBinaryEqualToTest:testOpBinaryEqualToEval2ZeroInputs() (gas: 57579) -LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail0Inputs() (gas: 30113) -LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail1Input() (gas: 34687) -LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail3Inputs() (gas: 43601) -LibOpBinaryEqualToTest:testOpBinaryEqualToEvalOperandDisallowed() (gas: 18466) -LibOpBinaryEqualToTest:testOpBinaryEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12047, ~: 11952) -LibOpBinaryEqualToTest:testOpBinaryEqualToRun(bytes32,bytes32) (runs: 2048, μ: 7842, ~: 7842) -LibOpBinaryEqualToTest:testOpBinaryEqualToTwoOutputs() (gas: 41640) -LibOpBinaryEqualToTest:testOpBinaryEqualToZeroOutputs() (gas: 40417) -LibOpBitwiseAndTest:testOpBitwiseAndEvalHappy() (gas: 708751) -LibOpBitwiseAndTest:testOpBitwiseAndIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10640, ~: 10568) -LibOpBitwiseAndTest:testOpBitwiseAndRun(bytes32,bytes32) (runs: 2048, μ: 7847, ~: 7847) -LibOpBitwiseAndTest:testOpBitwiseOREvalBadOperand() (gas: 18120) -LibOpBitwiseAndTest:testOpBitwiseOREvalOneInput() (gas: 35399) -LibOpBitwiseAndTest:testOpBitwiseOREvalThreeInputs() (gas: 45722) -LibOpBitwiseAndTest:testOpBitwiseOREvalTwoOutputs() (gas: 41365) -LibOpBitwiseAndTest:testOpBitwiseOREvalZeroInputs() (gas: 30064) -LibOpBitwiseAndTest:testOpBitwiseOREvalZeroOutputs() (gas: 40118) -LibOpBitwiseCountOnesTest:testOpBitwiseCountOnesEval(bytes32) (runs: 2048, μ: 78852, ~: 83568) -LibOpBitwiseCountOnesTest:testOpBitwiseCountOnesEvalOperandDisallowed() (gas: 18686) -LibOpBitwiseCountOnesTest:testOpBitwiseCountOnesIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10640, ~: 10568) -LibOpBitwiseCountOnesTest:testOpBitwiseCountOnesRun(bytes32) (runs: 2048, μ: 7965, ~: 7965) -LibOpBitwiseCountOnesTest:testOpBitwiseCountOnesTwoInputs() (gas: 41136) -LibOpBitwiseCountOnesTest:testOpBitwiseCountOnesTwoOutputs() (gas: 36720) -LibOpBitwiseCountOnesTest:testOpBitwiseCountOnesZeroInputs() (gas: 30655) -LibOpBitwiseCountOnesTest:testOpBitwiseCountOnesZeroOutputs() (gas: 35515) -LibOpBitwiseDecodeTest:testOpDecodeBitsEvalHappy() (gas: 825754) -LibOpBitwiseDecodeTest:testOpDecodeBitsEvalTwoInputs() (gas: 47181) -LibOpBitwiseDecodeTest:testOpDecodeBitsEvalTwoOutputs() (gas: 42741) -LibOpBitwiseDecodeTest:testOpDecodeBitsEvalZeroInputs() (gas: 36673) -LibOpBitwiseDecodeTest:testOpDecodeBitsEvalZeroOutputs() (gas: 41537) -LibOpBitwiseDecodeTest:testOpDecodeBitsIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8,uint8) (runs: 2048, μ: 13279, ~: 13380) -LibOpBitwiseDecodeTest:testOpDecodeBitsIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2048, μ: 37053, ~: 36828) -LibOpBitwiseDecodeTest:testOpDecodeBitsIntegrityFailZeroLength((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2048, μ: 35683, ~: 35626) -LibOpBitwiseDecodeTest:testOpDecodeBitsRun(bytes32,uint8,uint8) (runs: 2048, μ: 8825, ~: 8720) -LibOpBitwiseEncodeTest:testOpEncodeBitsEvalHappy() (gas: 824068) -LibOpBitwiseEncodeTest:testOpEncodeBitsEvalOneInput() (gas: 41923) -LibOpBitwiseEncodeTest:testOpEncodeBitsEvalThreeInputs() (gas: 52313) -LibOpBitwiseEncodeTest:testOpEncodeBitsEvalTwoOutputs() (gas: 47890) -LibOpBitwiseEncodeTest:testOpEncodeBitsEvalZeroInputs() (gas: 36657) -LibOpBitwiseEncodeTest:testOpEncodeBitsEvalZeroOutputs() (gas: 46646) -LibOpBitwiseEncodeTest:testOpEncodeBitsIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2048, μ: 11590, ~: 11620) -LibOpBitwiseEncodeTest:testOpEncodeBitsIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2048, μ: 37156, ~: 36878) -LibOpBitwiseEncodeTest:testOpEncodeBitsIntegrityFailZeroLength((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2048, μ: 35797, ~: 35740) -LibOpBitwiseEncodeTest:testOpEncodeBitsRun(bytes32,bytes32,uint8,uint8) (runs: 2048, μ: 9233, ~: 9090) -LibOpBitwiseOrTest:testOpBitwiseOREval() (gas: 718847) -LibOpBitwiseOrTest:testOpBitwiseOREvalBadOperand() (gas: 18728) -LibOpBitwiseOrTest:testOpBitwiseOREvalOneInput() (gas: 36006) -LibOpBitwiseOrTest:testOpBitwiseOREvalThreeInputs() (gas: 46374) -LibOpBitwiseOrTest:testOpBitwiseOREvalTwoOutputs() (gas: 41951) -LibOpBitwiseOrTest:testOpBitwiseOREvalZeroInputs() (gas: 30716) -LibOpBitwiseOrTest:testOpBitwiseOREvalZeroOutputs() (gas: 40770) -LibOpBitwiseOrTest:testOpBitwiseORIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10642, ~: 10570) -LibOpBitwiseOrTest:testOpBitwiseORRun(bytes32,bytes32) (runs: 2048, μ: 7849, ~: 7849) -LibOpBitwiseShiftLeftTest:testOpShiftBitsLeftEval() (gas: 865566) -LibOpBitwiseShiftLeftTest:testOpShiftBitsLeftIntegrityFailBadShiftAmount() (gas: 127593) -LibOpBitwiseShiftLeftTest:testOpShiftBitsLeftIntegrityFailTwoInputs() (gas: 44514) -LibOpBitwiseShiftLeftTest:testOpShiftBitsLeftIntegrityFailTwoOutputs() (gas: 40107) -LibOpBitwiseShiftLeftTest:testOpShiftBitsLeftIntegrityFailZeroInputs() (gas: 34050) -LibOpBitwiseShiftLeftTest:testOpShiftBitsLeftIntegrityFailZeroOutputs() (gas: 38946) -LibOpBitwiseShiftLeftTest:testOpShiftBitsLeftIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 2048, μ: 15191, ~: 15071) -LibOpBitwiseShiftLeftTest:testOpShiftBitsLeftIntegrityNoop((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2048, μ: 35737, ~: 35680) -LibOpBitwiseShiftLeftTest:testOpShiftBitsLeftIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 37037, ~: 36870) -LibOpBitwiseShiftLeftTest:testOpShiftBitsLeftRun(bytes32,uint8) (runs: 2048, μ: 10585, ~: 10585) -LibOpBitwiseShiftRightTest:testOpShiftBitsRightEval() (gas: 1037921) -LibOpBitwiseShiftRightTest:testOpShiftBitsRightIntegrityFailBadShiftAmount() (gas: 127967) -LibOpBitwiseShiftRightTest:testOpShiftBitsRightIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 100, μ: 15110, ~: 15126) -LibOpBitwiseShiftRightTest:testOpShiftBitsRightIntegrityNoop((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 100, μ: 35959, ~: 35695) -LibOpBitwiseShiftRightTest:testOpShiftBitsRightIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 100, μ: 37823, ~: 37899) -LibOpBitwiseShiftRightTest:testOpShiftBitsRightRun(bytes32,uint8) (runs: 2048, μ: 10588, ~: 10588) -LibOpBitwiseShiftRightTest:testOpShiftBitsRightTwoInputs() (gas: 44617) -LibOpBitwiseShiftRightTest:testOpShiftBitsRightTwoOutputs() (gas: 40190) -LibOpBitwiseShiftRightTest:testOpShiftBitsRightZeroInputs() (gas: 34155) -LibOpBitwiseShiftRightTest:testOpShiftBitsRightZeroOutputs() (gas: 39003) -LibOpBlockNumberTest:testOpBlockNumberEval(uint256) (runs: 2048, μ: 49535, ~: 49298) -LibOpBlockNumberTest:testOpBlockNumberEvalOneInput() (gas: 34775) -LibOpBlockNumberTest:testOpBlockNumberEvalOperandDisallowed() (gas: 18177) -LibOpBlockNumberTest:testOpBlockNumberEvalTwoOutputs() (gas: 30885) -LibOpBlockNumberTest:testOpBlockNumberEvalZeroOutputs() (gas: 29700) -LibOpBlockNumberTest:testOpBlockNumberIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12059, ~: 11966) -LibOpBlockNumberTest:testOpBlockNumberRun(uint256,uint16) (runs: 2048, μ: 11434, ~: 11109) -LibOpBlockTimestampTest:testOpBlockTimestampEvalFail() (gas: 65576) -LibOpBlockTimestampTest:testOpBlockTimestampEvalOperandDisallowed() (gas: 18422) -LibOpBlockTimestampTest:testOpBlockTimestampTwoOutputs() (gas: 58113) -LibOpBlockTimestampTest:testOpBlockTimestampZeroOutputs() (gas: 55701) -LibOpBlockTimestampTest:testOpNowEvalOperandDisallowed() (gas: 18184) -LibOpBlockTimestampTest:testOpTimestampEval(uint256) (runs: 2048, μ: 77933, ~: 77601) -LibOpBlockTimestampTest:testOpTimestampIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12082, ~: 11988) -LibOpBlockTimestampTest:testOpTimestampRun(uint256) (runs: 2048, μ: 11234, ~: 10998) -LibOpCallTest:testCallTraceInnerOnly() (gas: 62050) -LibOpCallTest:testCallTraceOuterAndInner() (gas: 79711) -LibOpCallTest:testCallTraceOuterAndTwoInner() (gas: 125722) -LibOpCallTest:testCallTraceOuterOnly() (gas: 44526) -LibOpCallTest:testOpCallIntegrityIO((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2048, μ: 43101, ~: 27119) -LibOpCallTest:testOpCallIntegritySourceIndexOutOfBounds((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint256,uint256,bytes32) (runs: 2048, μ: 51944, ~: 47441) -LibOpCallTest:testOpCallIntegrityTooManyOutputs((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2048, μ: 60155, ~: 48393) -LibOpCallTest:testOpCallRunInputsMismatch() (gas: 72612) -LibOpCallTest:testOpCallRunMaxInputsMaxOutputs() (gas: 209891) -LibOpCallTest:testOpCallRunNoIO() (gas: 694270) -LibOpCallTest:testOpCallRunOutputsMismatch() (gas: 66542) -LibOpCallTest:testOpCallRunRecursive() (gas: 301691) -LibOpCallTest:testOpCallRunSourceDoesNotExist() (gas: 343500) -LibOpCeilTest:testOpCeilEval() (gas: 531517) -LibOpCeilTest:testOpCeilEvalOperandDisallowed() (gas: 17532) -LibOpCeilTest:testOpCeilIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10744, ~: 10672) -LibOpCeilTest:testOpCeilRun(bytes32,uint16) (runs: 2048, μ: 8337, ~: 7877) -LibOpCeilTest:testOpCeilTwoInputs() (gas: 40040) -LibOpCeilTest:testOpCeilTwoOutputs() (gas: 35620) -LibOpCeilTest:testOpCeilZeroInputs() (gas: 29507) -LibOpCeilTest:testOpCeilZeroOutputs() (gas: 34437) -LibOpChainIdTest:testOpChainIDEval(uint64) (runs: 2048, μ: 48822, ~: 48822) -LibOpChainIdTest:testOpChainIDIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12084, ~: 12002) -LibOpChainIdTest:testOpChainIdEvalFail() (gas: 34064) -LibOpChainIdTest:testOpChainIdEvalOperandDisallowed() (gas: 17854) -LibOpChainIdTest:testOpChainIdRun(uint64,uint16) (runs: 2048, μ: 10949, ~: 10951) -LibOpChainIdTest:testOpChainIdTwoOutputs() (gas: 30565) -LibOpChainIdTest:testOpChainIdZeroOutputs() (gas: 29404) -LibOpConditionsTest:testOpConditionsEval1FalseInput1TrueInput() (gas: 70355) -LibOpConditionsTest:testOpConditionsEval1FalseInputRevert() (gas: 54286) -LibOpConditionsTest:testOpConditionsEval1TrueInput1FalseInput() (gas: 70241) -LibOpConditionsTest:testOpConditionsEval1TrueInputZeroOutput() (gas: 58176) -LibOpConditionsTest:testOpConditionsEval2MixedInputs() (gas: 58254) -LibOpConditionsTest:testOpConditionsEval2TrueInputs() (gas: 70330) -LibOpConditionsTest:testOpConditionsEvalErrorCode() (gas: 67103) -LibOpConditionsTest:testOpConditionsEvalFail0Inputs() (gas: 29785) -LibOpConditionsTest:testOpConditionsEvalFail1Inputs() (gas: 34328) -LibOpConditionsTest:testOpConditionsEvalUnhappyOperand() (gas: 18001) -LibOpConditionsTest:testOpConditionsIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12297, ~: 12161) -LibOpConditionsTest:testOpConditionsRun(bytes32[],bytes32) (runs: 2048, μ: 12979, ~: 12867) -LibOpConditionsTest:testOpConditionsRunNoConditionsMet(bytes32[],string) (runs: 2048, μ: 25912, ~: 26051) -LibOpConditionsTest:testOpConditionsTwoOutputs() (gas: 39830) -LibOpConditionsTest:testOpConditionsZeroOutputs() (gas: 38626) -LibOpConstantTest:testOpConstantEval() (gas: 51763) -LibOpConstantTest:testOpConstantEvalZeroConstants() (gas: 41439) -LibOpConstantTest:testOpConstantIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 14746, ~: 14663) -LibOpConstantTest:testOpConstantIntegrityMaxIndex() (gas: 44981778) -LibOpConstantTest:testOpConstantIntegrityOOBConstants((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 36942, ~: 36752) -LibOpConstantTest:testOpConstantMultipleOutputErrorSugared() (gas: 31157) -LibOpConstantTest:testOpConstantMultipleOutputErrorUnsugared() (gas: 41553) -LibOpConstantTest:testOpConstantRun(bytes32[],uint16) (runs: 2048, μ: 43944, ~: 43653) -LibOpConstantTest:testOpConstantZeroOutputErrorSugared() (gas: 29596) -LibOpConstantTest:testOpConstantZeroOutputErrorUnsugared() (gas: 40019) -LibOpContextTest:testOpContextEval00(bytes32[][]) (runs: 100, μ: 7252777, ~: 6852378) -LibOpContextTest:testOpContextEval01(bytes32[][]) (runs: 100, μ: 7252892, ~: 6852493) -LibOpContextTest:testOpContextEval10(bytes32[][]) (runs: 100, μ: 7252854, ~: 6852455) -LibOpContextTest:testOpContextEval11(bytes32[][]) (runs: 100, μ: 7253015, ~: 6852616) -LibOpContextTest:testOpContextEvalEmptyInnerArray() (gas: 47277) -LibOpContextTest:testOpContextEvalMaxI() (gas: 323249) -LibOpContextTest:testOpContextEvalMaxJ() (gas: 90373) -LibOpContextTest:testOpContextEvalOOBi(bytes32[]) (runs: 100, μ: 76624, ~: 77782) -LibOpContextTest:testOpContextEvalOOBj(bytes32) (runs: 2048, μ: 47553, ~: 47553) -LibOpContextTest:testOpContextIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10835, ~: 10764) -LibOpContextTest:testOpContextOneInput() (gas: 41379) -LibOpContextTest:testOpContextRun(bytes32[][],uint256,uint256) (runs: 100, μ: 10287932, ~: 8984457) -LibOpContextTest:testOpContextRunOOBi(bytes32[][],uint256,uint256) (runs: 100, μ: 10691237, ~: 9545387) -LibOpContextTest:testOpContextRunOOBj(bytes32[][],uint256,uint256) (runs: 100, μ: 10692178, ~: 9546227) -LibOpContextTest:testOpContextTwoInputs() (gas: 46552) -LibOpContextTest:testOpContextTwoOutputs() (gas: 36905) -LibOpContextTest:testOpContextZeroOutputs() (gas: 35657) -LibOpDivTest:testDebugOpDivRun() (gas: 10541) -LibOpDivTest:testOpDivEvalOneInput() (gas: 125515) -LibOpDivTest:testOpDivEvalOperandsDisallowed() (gas: 91437) -LibOpDivTest:testOpDivEvalThreeInputsHappy() (gas: 406447) -LibOpDivTest:testOpDivEvalThreeInputsUnhappyExamples() (gas: 210453) -LibOpDivTest:testOpDivEvalThreeInputsUnhappyOverflow() (gas: 68159) -LibOpDivTest:testOpDivEvalTwoInputsHappy() (gas: 350579) -LibOpDivTest:testOpDivEvalTwoInputsUnhappyDivZero() (gas: 140710) -LibOpDivTest:testOpDivEvalTwoInputsUnhappyOverflow() (gas: 58740) -LibOpDivTest:testOpDivEvalTwoOutputs() (gas: 41233) -LibOpDivTest:testOpDivEvalZeroInputs() (gas: 29505) -LibOpDivTest:testOpDivEvalZeroOutputs() (gas: 40053) -LibOpDivTest:testOpDivIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11566, ~: 11555) -LibOpDivTest:testOpDivIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10617, ~: 10562) -LibOpDivTest:testOpDivIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10618, ~: 10563) -LibOpDivTest:testOpDivRun(bytes32[]) (runs: 2048, μ: 67486, ~: 65369) -LibOpERC20AllowanceTest:testOpERC20AllowanceDecimalsReadFailure() (gas: 70662) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalFourInputs() (gas: 55900) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalHappy(uint256,uint8) (runs: 2048, μ: 79155, ~: 79079) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalOneInput() (gas: 36630) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalOperandDisallowed() (gas: 18447) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalTwoInputs() (gas: 43270) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalTwoOutputs() (gas: 50582) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalZeroInputs() (gas: 30388) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalZeroOutputs() (gas: 49382) -LibOpERC20AllowanceTest:testOpERC20AllowanceInfiniteApproval(uint8) (runs: 2048, μ: 79803, ~: 79803) -LibOpERC20AllowanceTest:testOpERC20AllowanceIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10662, ~: 10590) -LibOpERC20AllowanceTest:testOpERC20AllowanceNotAnAddressOwner(uint256) (runs: 2048, μ: 6931, ~: 6931) -LibOpERC20AllowanceTest:testOpERC20AllowanceNotAnAddressSpender(uint256) (runs: 2048, μ: 6895, ~: 6895) -LibOpERC20AllowanceTest:testOpERC20AllowanceNotAnAddressToken(uint256) (runs: 2048, μ: 6880, ~: 6880) -LibOpERC20AllowanceTest:testOpERC20AllowanceRun(address,address,address,uint256,uint8) (runs: 2048, μ: 28147, ~: 28054) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfDecimalsReadFailure() (gas: 63782) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalHappy(uint256,uint8) (runs: 2048, μ: 73063, ~: 73065) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOneInput() (gas: 36735) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOperandDisallowed() (gas: 18527) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOverflow(uint256,uint8) (runs: 2048, μ: 66636, ~: 66636) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalThreeInputs() (gas: 49370) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalTwoOutputs() (gas: 44080) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroInputs() (gas: 30492) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroOutputs() (gas: 42903) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10641, ~: 10569) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfNotAnAddressAccount(uint256) (runs: 2048, μ: 6611, ~: 6611) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfNotAnAddressToken(uint256) (runs: 2048, μ: 6627, ~: 6627) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfRun(address,address,uint256,uint16,uint8) (runs: 2048, μ: 28598, ~: 28600) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyDecimalsReadFailure() (gas: 56952) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalHappy(uint256,uint8) (runs: 2048, μ: 66247, ~: 66249) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalOperandDisallowed() (gas: 18713) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalOverflow(uint256,uint8) (runs: 2048, μ: 59765, ~: 59765) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoInputs() (gas: 43470) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoOutputs() (gas: 37678) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroInputs() (gas: 30631) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroOutputs() (gas: 36496) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10663, ~: 10591) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyNotAnAddress(uint256) (runs: 2048, μ: 6343, ~: 6343) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyRun(address,uint256,uint16,uint8) (runs: 2048, μ: 27975, ~: 27977) -LibOpERC5313OwnerTest:testOpERC5313OwnerEvalHappy() (gas: 56640) -LibOpERC5313OwnerTest:testOpERC5313OwnerEvalOperandDisallowed() (gas: 18273) -LibOpERC5313OwnerTest:testOpERC5313OwnerEvalTwoInputs() (gas: 43066) -LibOpERC5313OwnerTest:testOpERC5313OwnerEvalTwoOutputs() (gas: 37244) -LibOpERC5313OwnerTest:testOpERC5313OwnerEvalZeroInputs() (gas: 30247) -LibOpERC5313OwnerTest:testOpERC5313OwnerEvalZeroOutputs() (gas: 36083) -LibOpERC5313OwnerTest:testOpERC5313OwnerNotAnAddress(uint256) (runs: 2048, μ: 6361, ~: 6361) -LibOpERC5313OwnerTest:testOpERC5313OwnerOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10642, ~: 10570) -LibOpERC5313OwnerTest:testOpERC5313OwnerOfRun(address,address,uint16) (runs: 2048, μ: 17143, ~: 17143) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfEvalHappy(address,address,uint256) (runs: 2048, μ: 102165, ~: 102281) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12086, ~: 11996) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail0() (gas: 30275) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail1() (gas: 34775) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail3() (gas: 44682) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFailOperand() (gas: 21422) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfNotAnAddressAccount(uint256) (runs: 2048, μ: 6654, ~: 6654) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfNotAnAddressToken(uint256) (runs: 2048, μ: 6582, ~: 6582) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfOneInput() (gas: 35104) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfRun(address,address,uint256,uint16) (runs: 2048, μ: 19401, ~: 19403) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfThreeInputs() (gas: 44935) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfTwoOutputs() (gas: 40822) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfZeroInputs() (gas: 30571) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfZeroOutputs() (gas: 39569) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfEvalFail0() (gas: 30135) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfEvalFail1() (gas: 34711) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfEvalFail3() (gas: 44541) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfEvalFailOperand() (gas: 18193) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfEvalHappy(address,uint256,address) (runs: 2048, μ: 93853, ~: 91259) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfEvalOneInput() (gas: 35010) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfEvalThreeInputs() (gas: 44827) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfEvalZeroInputs() (gas: 30388) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfEvalZeroOutputs() (gas: 39496) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2048, μ: 10587, ~: 10577) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNotAnAddressToken(uint256) (runs: 2048, μ: 6643, ~: 6643) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfRun(address,bytes32,address,uint16) (runs: 2048, μ: 17580, ~: 17580) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfTwoOutputs() (gas: 40674) -LibOpETest:testOpEEval() (gas: 40376) -LibOpETest:testOpEEvalOneInput() (gas: 33861) -LibOpETest:testOpEEvalOperandDisallowed() (gas: 17286) -LibOpETest:testOpEEvalTwoOutputs() (gas: 30015) -LibOpETest:testOpEEvalZeroOutputs() (gas: 28832) -LibOpETest:testOpEIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12091, ~: 11938) -LibOpETest:testOpERun(uint16) (runs: 2048, μ: 7428, ~: 7428) -LibOpEnsureTest:testOpEnsureEvalBadOutputs() (gas: 35650) -LibOpEnsureTest:testOpEnsureEvalBadOutputs2() (gas: 34954) -LibOpEnsureTest:testOpEnsureEvalHappy() (gas: 164631) -LibOpEnsureTest:testOpEnsureEvalOne() (gas: 34206) -LibOpEnsureTest:testOpEnsureEvalThree() (gas: 45580) -LibOpEnsureTest:testOpEnsureEvalUnhappy() (gas: 162171) -LibOpEnsureTest:testOpEnsureEvalUnhappyOperand() (gas: 16892) -LibOpEnsureTest:testOpEnsureEvalZero() (gas: 28865) -LibOpEnsureTest:testOpEnsureIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12086, ~: 11952) -LibOpEnsureTest:testOpEnsureIntegrityUnhappy((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10523, ~: 10468) -LibOpEnsureTest:testOpEnsureOneOutput() (gas: 39416) -LibOpEnsureTest:testOpEnsureRun(bytes32,string) (runs: 2048, μ: 12316, ~: 12346) -LibOpEqualToTest:testOpEqualToEval2Inputs() (gas: 336712) -LibOpEqualToTest:testOpEqualToEval2InputsBothOne() (gas: 57412) -LibOpEqualToTest:testOpEqualToEval2InputsFirstOneSecondZero() (gas: 57878) -LibOpEqualToTest:testOpEqualToEval2InputsFirstZeroSecondOne() (gas: 57859) -LibOpEqualToTest:testOpEqualToEval2ZeroInputs() (gas: 57320) -LibOpEqualToTest:testOpEqualToEvalFail0Inputs() (gas: 29546) -LibOpEqualToTest:testOpEqualToEvalFail1Input() (gas: 34089) -LibOpEqualToTest:testOpEqualToEvalFail3Inputs() (gas: 42972) -LibOpEqualToTest:testOpEqualToEvalOperandDisallowed() (gas: 17877) -LibOpEqualToTest:testOpEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12089, ~: 11957) -LibOpEqualToTest:testOpEqualToRun(bytes32,bytes32) (runs: 2048, μ: 8735, ~: 8625) -LibOpEqualToTest:testOpEqualToTwoOutputs() (gas: 41095) -LibOpEqualToTest:testOpEqualToZeroOutputs() (gas: 39872) -LibOpEveryTest:testOpEveryEval1FalseInput() (gas: 51420) -LibOpEveryTest:testOpEveryEval1TrueInput() (gas: 51724) -LibOpEveryTest:testOpEveryEval2FalseInputs() (gas: 56887) -LibOpEveryTest:testOpEveryEval2MixedInputs() (gas: 57506) -LibOpEveryTest:testOpEveryEval2MixedInputs2() (gas: 57445) -LibOpEveryTest:testOpEveryEval2TrueInputs() (gas: 57856) -LibOpEveryTest:testOpEveryEvalFail() (gas: 29329) -LibOpEveryTest:testOpEveryEvalOperandDisallowed() (gas: 17656) -LibOpEveryTest:testOpEveryEvalZeroWithExponent() (gas: 58441) -LibOpEveryTest:testOpEveryIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12230, ~: 12032) -LibOpEveryTest:testOpEveryIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10656, ~: 10601) -LibOpEveryTest:testOpEveryRun(bytes32[]) (runs: 2048, μ: 14055, ~: 14106) -LibOpEveryTest:testOpEveryTwoOutputs() (gas: 35736) -LibOpEveryTest:testOpEveryZeroOutputs() (gas: 34553) -LibOpExp2Test:testOpExp2EvalBad() (gas: 64642) -LibOpExp2Test:testOpExp2EvalExample() (gas: 243530) -LibOpExp2Test:testOpExp2EvalNegativeInput() (gas: 56561) -LibOpExp2Test:testOpExp2EvalOperandDisallowed() (gas: 17553) -LibOpExp2Test:testOpExp2Integrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10721, ~: 10649) -LibOpExp2Test:testOpExp2Run(int224,int32,uint16) (runs: 2048, μ: 84146, ~: 67421) -LibOpExp2Test:testOpExp2TwoOutputs() (gas: 35601) -LibOpExp2Test:testOpExp2ZeroOutputs() (gas: 34393) -LibOpExpTest:testOpExpEvalExample() (gas: 288997) -LibOpExpTest:testOpExpEvalNegativeInput() (gas: 56394) -LibOpExpTest:testOpExpEvalOperandDisallowed() (gas: 17494) -LibOpExpTest:testOpExpEvalTwoInputs() (gas: 39959) -LibOpExpTest:testOpExpEvalZeroInputs() (gas: 29426) -LibOpExpTest:testOpExpIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10721, ~: 10649) -LibOpExpTest:testOpExpRun(int224,int32,uint16) (runs: 2048, μ: 114677, ~: 104463) -LibOpExpTest:testOpExpTwoOutputs() (gas: 35519) -LibOpExpTest:testOpExpZeroOutputs() (gas: 34356) -LibOpExponentialGrowthTest:testOpExponentialGrowthEval() (gas: 829724) -LibOpExponentialGrowthTest:testOpExponentialGrowthEvalFourInputs() (gas: 52130) -LibOpExponentialGrowthTest:testOpExponentialGrowthEvalOneInput() (gas: 35968) -LibOpExponentialGrowthTest:testOpExponentialGrowthEvalOperandDisallowed() (gas: 18655) -LibOpExponentialGrowthTest:testOpExponentialGrowthEvalTwoInputs() (gas: 41664) -LibOpExponentialGrowthTest:testOpExponentialGrowthEvalTwoOutputs() (gas: 47592) -LibOpExponentialGrowthTest:testOpExponentialGrowthEvalZeroInputs() (gas: 30208) -LibOpExponentialGrowthTest:testOpExponentialGrowthEvalZeroOutputs() (gas: 46369) -LibOpExponentialGrowthTest:testOpExponentialGrowthIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10699, ~: 10627) -LibOpExponentialGrowthTest:testOpExponentialGrowthRun(int224,int32,int224,int32,int224,int32,uint16) (runs: 2048, μ: 98221, ~: 82328) -LibOpExternTest:testOpExternEvalHappy() (gas: 99328) -LibOpExternTest:testOpExternEvalMultipleInputsOutputsHappy() (gas: 116433) -LibOpExternTest:testOpExternIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2048, μ: 26998, ~: 26931) -LibOpExternTest:testOpExternIntegrityNotAnExternContract((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2048, μ: 46827, ~: 46609) -LibOpExternTest:testOpExternReferenceFnBadOutputsLength(address,bytes32[],uint16,bytes32[],bytes32[]) (runs: 2048, μ: 79369, ~: 79392) -LibOpExternTest:testOpExternReferenceFnBadOutputsLengthTooMany(address,bytes32[],uint16,bytes32[],bytes32[]) (runs: 2048, μ: 79183, ~: 79225) -LibOpExternTest:testOpExternRunBadOutputsLength(address,bytes32[],uint16,bytes32[],bytes32[]) (runs: 2048, μ: 77712, ~: 77632) -LibOpExternTest:testOpExternRunBadOutputsLengthTooMany(address,bytes32[],uint16,bytes32[],bytes32[]) (runs: 2048, μ: 77590, ~: 77516) -LibOpExternTest:testOpExternRunHappy(address,bytes32[],uint16,bytes32[],bytes32[]) (runs: 2048, μ: 93241, ~: 93183) -LibOpExternTest:testOpExternRunZeroInputsZeroOutputs(address,bytes32[],uint16) (runs: 2048, μ: 49315, ~: 49087) -LibOpFloorTest:testOpFloorEval() (gas: 249273) -LibOpFloorTest:testOpFloorEvalNegative() (gas: 255835) -LibOpFloorTest:testOpFloorEvalOperandDisallowed() (gas: 17635) -LibOpFloorTest:testOpFloorIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10722, ~: 10650) -LibOpFloorTest:testOpFloorRun(bytes32,uint16) (runs: 2048, μ: 8346, ~: 7834) -LibOpFloorTest:testOpFloorTwoInputs() (gas: 40165) -LibOpFloorTest:testOpFloorTwoOutputs() (gas: 35702) -LibOpFloorTest:testOpFloorZeroInputs() (gas: 29633) -LibOpFloorTest:testOpFloorZeroOutputs() (gas: 34475) -LibOpFracTest:testOpFracEval() (gas: 331143) -LibOpFracTest:testOpFracEvalOperandDisallowed() (gas: 17531) -LibOpFracTest:testOpFracIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10742, ~: 10670) -LibOpFracTest:testOpFracRun(bytes32,uint16) (runs: 2048, μ: 8339, ~: 8297) -LibOpFracTest:testOpFracTwoInputs() (gas: 40030) -LibOpFracTest:testOpFracTwoOutputs() (gas: 35610) -LibOpFracTest:testOpFracZeroInputs() (gas: 29496) -LibOpFracTest:testOpFracZeroOutputs() (gas: 34404) -LibOpGetTest:testLibOpGetEvalKeyNotSet() (gas: 280583) -LibOpGetTest:testLibOpGetEvalOperandDisallowed() (gas: 57404) -LibOpGetTest:testLibOpGetEvalSetThenGet() (gas: 488143) -LibOpGetTest:testLibOpGetEvalStoreAndSetAndGet() (gas: 239922) -LibOpGetTest:testLibOpGetEvalStoreThenGet() (gas: 441506) -LibOpGetTest:testLibOpGetEvalThreeInputs() (gas: 45023) -LibOpGetTest:testLibOpGetEvalTwoInputs() (gas: 39545) -LibOpGetTest:testLibOpGetEvalTwoOutputs() (gas: 34963) -LibOpGetTest:testLibOpGetEvalZeroInputs() (gas: 29079) -LibOpGetTest:testLibOpGetEvalZeroOutputs() (gas: 33779) -LibOpGetTest:testLibOpGetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12290, ~: 12123) -LibOpGetTest:testLibOpGetRunState(bytes32,bytes32,uint16) (runs: 2048, μ: 7859, ~: 7864) -LibOpGetTest:testLibOpGetRunStateAndStore(bytes32,bytes32,bytes32,uint16) (runs: 2048, μ: 35817, ~: 35822) -LibOpGetTest:testLibOpGetRunStore(bytes32,bytes32,uint16) (runs: 2048, μ: 37701, ~: 37706) -LibOpGetTest:testLibOpGetRunStoreDifferentNamespace(bytes32,bytes32,uint16) (runs: 2048, μ: 39622, ~: 39627) -LibOpGetTest:testLibOpGetRunUnset(bytes32,uint16) (runs: 2048, μ: 13854, ~: 13858) -LibOpGmTest:testOpGmEval() (gas: 508319) -LibOpGmTest:testOpGmEvalBothNegativeEqual() (gas: 68930) -LibOpGmTest:testOpGmEvalBothNegativeUnequal() (gas: 72030) -LibOpGmTest:testOpGmEvalMixedSignsNegativeFirst() (gas: 69531) -LibOpGmTest:testOpGmEvalMixedSignsNegativeSecond() (gas: 69556) -LibOpGmTest:testOpGmEvalMixedSignsNonUnit() (gas: 72186) -LibOpGmTest:testOpGmEvalNegativeWithZero() (gas: 59581) -LibOpGmTest:testOpGmEvalOperandDisallowed() (gas: 17413) -LibOpGmTest:testOpGmEvalZeroBytesIdentical() (gas: 106487) -LibOpGmTest:testOpGmEvalZeroWithNegative() (gas: 59582) -LibOpGmTest:testOpGmIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10705, ~: 10633) -LibOpGmTest:testOpGmOneInput() (gas: 34673) -LibOpGmTest:testOpGmRun(int224,int32,int224,int32,uint16) (runs: 2048, μ: 80451, ~: 86228) -LibOpGmTest:testOpGmThreeInputs() (gas: 45108) -LibOpGmTest:testOpGmTwoOutputs() (gas: 40683) -LibOpGmTest:testOpGmZeroOutputs() (gas: 39484) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEval2InputsBothOne() (gas: 58686) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEval2InputsFirstOneSecondZero() (gas: 59175) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEval2InputsFirstZeroSecondOne() (gas: 59151) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEval2ZeroInputs() (gas: 58593) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalFail0Inputs() (gas: 30819) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalFail1Input() (gas: 35415) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalFail3Inputs() (gas: 44331) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalNegOneGteZero() (gas: 59247) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalNegOnePointOneGteNegOnePointTwo() (gas: 62043) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalOnePointOneGteOnePointTwo() (gas: 61892) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalOnePointZeroGteOne() (gas: 59420) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalOperandDisallowed() (gas: 19176) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2048, μ: 10568, ~: 10558) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToRun(bytes32,bytes32) (runs: 2048, μ: 8587, ~: 8483) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToTwoOutputs() (gas: 42969) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToZeroOutputs() (gas: 41697) -LibOpGreaterThanTest:testOpGreaterThanEval1_0Gt1() (gas: 58396) -LibOpGreaterThanTest:testOpGreaterThanEval1_1Gt1_2() (gas: 60880) -LibOpGreaterThanTest:testOpGreaterThanEval2InputsBothOne() (gas: 57705) -LibOpGreaterThanTest:testOpGreaterThanEval2InputsFirstOneSecondZero() (gas: 58151) -LibOpGreaterThanTest:testOpGreaterThanEval2InputsFirstZeroSecondOne() (gas: 58170) -LibOpGreaterThanTest:testOpGreaterThanEval2ZeroInputs() (gas: 57591) -LibOpGreaterThanTest:testOpGreaterThanEvalFail0Inputs() (gas: 29870) -LibOpGreaterThanTest:testOpGreaterThanEvalFail1Input() (gas: 34467) -LibOpGreaterThanTest:testOpGreaterThanEvalFail3Inputs() (gas: 43288) -LibOpGreaterThanTest:testOpGreaterThanEvalNeg1Gt0() (gas: 58200) -LibOpGreaterThanTest:testOpGreaterThanEvalNeg1_1GtNeg1_2() (gas: 61073) -LibOpGreaterThanTest:testOpGreaterThanEvalOperandDisallowed() (gas: 18178) -LibOpGreaterThanTest:testOpGreaterThanIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12091, ~: 11992) -LibOpGreaterThanTest:testOpGreaterThanRun(bytes32,bytes32) (runs: 2048, μ: 8611, ~: 8507) -LibOpGreaterThanTest:testOpGreaterThanTwoOutputs() (gas: 41925) -LibOpGreaterThanTest:testOpGreaterThanZeroOutputs() (gas: 40723) -LibOpHashTest:testOpHashEval0Inputs() (gas: 45593) -LibOpHashTest:testOpHashEval1Input() (gas: 54171) -LibOpHashTest:testOpHashEval2Inputs() (gas: 62584) -LibOpHashTest:testOpHashEval2InputsDifferent() (gas: 63092) -LibOpHashTest:testOpHashEval2InputsOtherStack() (gas: 73998) -LibOpHashTest:testOpHashEvalOperandDisallowed() (gas: 17553) -LibOpHashTest:testOpHashIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12138, ~: 12039) -LibOpHashTest:testOpHashRun(bytes32[]) (runs: 2048, μ: 12684, ~: 12759) -LibOpHashTest:testOpHashTwoOutputs() (gas: 30251) -LibOpHashTest:testOpHashZeroOutputs() (gas: 28731) -LibOpHeadroomTest:testOpHeadroomEval() (gas: 483703) -LibOpHeadroomTest:testOpHeadroomEvalOperandDisallowed() (gas: 17855) -LibOpHeadroomTest:testOpHeadroomIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10700, ~: 10628) -LibOpHeadroomTest:testOpHeadroomRun(bytes32,uint16) (runs: 2048, μ: 13217, ~: 13606) -LibOpHeadroomTest:testOpHeadroomTwoInputs() (gas: 40387) -LibOpHeadroomTest:testOpHeadroomTwoOutputs() (gas: 35967) -LibOpHeadroomTest:testOpHeadroomZeroInputs() (gas: 29853) -LibOpHeadroomTest:testOpHeadroomZeroOutputs() (gas: 34760) -LibOpIfTest:testOpIfEval3InputsFirstOneSecondTwoThirdThree() (gas: 63376) -LibOpIfTest:testOpIfEval3InputsFirstOneSecondZeroThirdThree() (gas: 63083) -LibOpIfTest:testOpIfEval3InputsFirstTwoSecondThreeThirdFour() (gas: 63332) -LibOpIfTest:testOpIfEval3InputsFirstTwoSecondZeroThirdFour() (gas: 63083) -LibOpIfTest:testOpIfEval3InputsFirstZeroSecondOneThirdTwo() (gas: 63351) -LibOpIfTest:testOpIfEval3InputsFirstZeroSecondOneThirdZero() (gas: 62701) -LibOpIfTest:testOpIfEval3InputsFirstZeroSecondZeroThirdOne() (gas: 62770) -LibOpIfTest:testOpIfEval3InputsFirstZeroSecondZeroThirdThree() (gas: 62773) -LibOpIfTest:testOpIfEvalEmptyStringTruthy() (gas: 162439) -LibOpIfTest:testOpIfEvalFail0Inputs() (gas: 29060) -LibOpIfTest:testOpIfEvalFail1Input() (gas: 33669) -LibOpIfTest:testOpIfEvalFail2Inputs() (gas: 38049) -LibOpIfTest:testOpIfEvalFail4Inputs() (gas: 46919) -LibOpIfTest:testOpIfEvalOperandDisallowed() (gas: 17412) -LibOpIfTest:testOpIfEvalTwoOutputs() (gas: 46314) -LibOpIfTest:testOpIfEvalZeroExponent() (gas: 64650) -LibOpIfTest:testOpIfEvalZeroOutputs() (gas: 45069) -LibOpIfTest:testOpIfIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12086, ~: 11989) -LibOpIfTest:testOpIfRun(bytes32,bytes32,bytes32) (runs: 2048, μ: 8113, ~: 8114) -LibOpInvTest:testOpExpEvalOperandDisallowed() (gas: 17471) -LibOpInvTest:testOpInvEval() (gas: 181027) -LibOpInvTest:testOpInvEvalDivisionByZero() (gas: 47400) -LibOpInvTest:testOpInvEvalNegative() (gas: 96509) -LibOpInvTest:testOpInvIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10700, ~: 10628) -LibOpInvTest:testOpInvRun(int224,int32,uint16) (runs: 2048, μ: 17919, ~: 17812) -LibOpInvTest:testOpInvTwoInputs() (gas: 40003) -LibOpInvTest:testOpInvTwoOutputs() (gas: 35518) -LibOpInvTest:testOpInvZeroInputs() (gas: 29471) -LibOpInvTest:testOpInvZeroOutputs() (gas: 34313) -LibOpIsZeroTest:testOpIsZeroEval0e20Input() (gas: 52731) -LibOpIsZeroTest:testOpIsZeroEval1NonZeroInput() (gas: 51713) -LibOpIsZeroTest:testOpIsZeroEval1ZeroInput() (gas: 51410) -LibOpIsZeroTest:testOpIsZeroEvalFail0Inputs() (gas: 29433) -LibOpIsZeroTest:testOpIsZeroEvalFail2Inputs() (gas: 38497) -LibOpIsZeroTest:testOpIsZeroEvalOperandDisallowed() (gas: 17795) -LibOpIsZeroTest:testOpIsZeroIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12126, ~: 11971) -LibOpIsZeroTest:testOpIsZeroRun(bytes32) (runs: 2048, μ: 7639, ~: 7640) -LibOpIsZeroTest:testOpIsZeroTwoOutputs() (gas: 36150) -LibOpIsZeroTest:testOpIsZeroZeroOutputs() (gas: 34641) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEval2InputsBothOne() (gas: 53490) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEval2InputsFirstOneSecondZero() (gas: 53958) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEval2InputsFirstZeroSecondOne() (gas: 54001) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEval2ZeroInputs() (gas: 53444) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalFail0Inputs() (gas: 30598) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalFail1Input() (gas: 35186) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalFail3Inputs() (gas: 44109) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalNegOneLteZero() (gas: 58937) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalNegOnePointOneLteNegOnePointTwo() (gas: 61782) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalOnePointOneLteOnePointTwo() (gas: 61666) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalOnePointZeroLteOne() (gas: 59200) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalOperandDisallowed() (gas: 18942) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12095, ~: 11996) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToRun(bytes32,bytes32) (runs: 2048, μ: 8630, ~: 8526) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToTwoOutputs() (gas: 42653) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToZeroOutputs() (gas: 41475) -LibOpLessThanTest:testOpLessThan1_0Lt1() (gas: 58156) -LibOpLessThanTest:testOpLessThan1_1Lt1_2() (gas: 60659) -LibOpLessThanTest:testOpLessThanEval2InputsBothOne() (gas: 57420) -LibOpLessThanTest:testOpLessThanEval2InputsFirstOneSecondZero() (gas: 57884) -LibOpLessThanTest:testOpLessThanEval2InputsFirstZeroSecondOne() (gas: 57905) -LibOpLessThanTest:testOpLessThanEval2ZeroInputs() (gas: 57393) -LibOpLessThanTest:testOpLessThanEvalOperandDisallowed() (gas: 17936) -LibOpLessThanTest:testOpLessThanIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12065, ~: 11935) -LibOpLessThanTest:testOpLessThanMinus1Lt0() (gas: 58003) -LibOpLessThanTest:testOpLessThanMinus1_1LtMinus1_2() (gas: 60785) -LibOpLessThanTest:testOpLessThanRun(bytes32,bytes32) (runs: 2048, μ: 8589, ~: 8484) -LibOpLessThanTest:testOpLessThanToEvalFail0Inputs() (gas: 29671) -LibOpLessThanTest:testOpLessThanToEvalFail1Input() (gas: 34246) -LibOpLessThanTest:testOpLessThanToEvalFail3Inputs() (gas: 43085) -LibOpLessThanTest:testOpLessThanTwoOutputs() (gas: 41980) -LibOpLessThanTest:testOpLessThanZeroOutputs() (gas: 39953) -LibOpLinearGrowthTest:testOpLinearGrowthEval() (gas: 795987) -LibOpLinearGrowthTest:testOpLinearGrowthEvalFourInputs() (gas: 51736) -LibOpLinearGrowthTest:testOpLinearGrowthEvalOneInput() (gas: 35617) -LibOpLinearGrowthTest:testOpLinearGrowthEvalOperandDisallowed() (gas: 18259) -LibOpLinearGrowthTest:testOpLinearGrowthEvalTwoInputs() (gas: 41270) -LibOpLinearGrowthTest:testOpLinearGrowthEvalTwoOutputs() (gas: 47157) -LibOpLinearGrowthTest:testOpLinearGrowthEvalZeroInputs() (gas: 29792) -LibOpLinearGrowthTest:testOpLinearGrowthEvalZeroOutputs() (gas: 45954) -LibOpLinearGrowthTest:testOpLinearGrowthIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10699, ~: 10627) -LibOpLinearGrowthTest:testOpLinearGrowthRun(int224,int32,int224,int32,int224,int32,uint16) (runs: 2048, μ: 21545, ~: 21368) -LibOpMaxNegativeValueTest:testOpMaxNegativeValueEval() (gas: 46636) -LibOpMaxNegativeValueTest:testOpMaxNegativeValueEvalFail() (gas: 34918) -LibOpMaxNegativeValueTest:testOpMaxNegativeValueEvalOperandDisallowed() (gas: 18664) -LibOpMaxNegativeValueTest:testOpMaxNegativeValueRun() (gas: 7534) -LibOpMaxNegativeValueTest:testOpMaxNegativeValueTwoOutputs() (gas: 31355) -LibOpMaxNegativeValueTest:testOpMaxNegativeValueZeroOutputs() (gas: 30193) -LibOpMaxNegativeValueTest:testOpMaxValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12081, ~: 11988) -LibOpMaxPositiveValueTest:testOpMaxPositiveValueEval() (gas: 46635) -LibOpMaxPositiveValueTest:testOpMaxPositiveValueEvalFail() (gas: 34916) -LibOpMaxPositiveValueTest:testOpMaxPositiveValueEvalOperandDisallowed() (gas: 18686) -LibOpMaxPositiveValueTest:testOpMaxPositiveValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12082, ~: 11977) -LibOpMaxPositiveValueTest:testOpMaxPositiveValueRun() (gas: 7536) -LibOpMaxPositiveValueTest:testOpMaxPositiveValueTwoOutputs() (gas: 31377) -LibOpMaxPositiveValueTest:testOpMaxPositiveValueZeroOutputs() (gas: 30170) -LibOpMaxTest:testOpMaxEval2InputsHappy() (gas: 874824) -LibOpMaxTest:testOpMaxEval3InputsHappy() (gas: 2026677) -LibOpMaxTest:testOpMaxEvalOneInput() (gas: 128234) -LibOpMaxTest:testOpMaxEvalOperandDisallowed() (gas: 58773) -LibOpMaxTest:testOpMaxEvalTwoOutputs() (gas: 40729) -LibOpMaxTest:testOpMaxEvalZeroInputs() (gas: 29484) -LibOpMaxTest:testOpMaxIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11542, ~: 11533) -LibOpMaxTest:testOpMaxIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10663, ~: 10608) -LibOpMaxTest:testOpMaxIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10640, ~: 10585) -LibOpMaxTest:testOpMaxRun(bytes32[]) (runs: 2048, μ: 20139, ~: 20370) -LibOpMaxTest:testOpMaxZeroOutputs() (gas: 39527) -LibOpMinNegativeValueTest:testOpMinNegativeValueEval() (gas: 46656) -LibOpMinNegativeValueTest:testOpMinNegativeValueEvalFail() (gas: 34917) -LibOpMinNegativeValueTest:testOpMinNegativeValueEvalOperandDisallowed() (gas: 18687) -LibOpMinNegativeValueTest:testOpMinNegativeValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12090, ~: 11998) -LibOpMinNegativeValueTest:testOpMinNegativeValueRun() (gas: 7558) -LibOpMinNegativeValueTest:testOpMinNegativeValueTwoOutputs() (gas: 31376) -LibOpMinNegativeValueTest:testOpMinNegativeValueZeroOutputs() (gas: 30192) -LibOpMinPositiveValueTest:testOpMinPositiveValueEval() (gas: 46636) -LibOpMinPositiveValueTest:testOpMinPositiveValueEvalFail() (gas: 34874) -LibOpMinPositiveValueTest:testOpMinPositiveValueEvalOperandDisallowed() (gas: 18686) -LibOpMinPositiveValueTest:testOpMinPositiveValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12068, ~: 11966) -LibOpMinPositiveValueTest:testOpMinPositiveValueRun() (gas: 7580) -LibOpMinPositiveValueTest:testOpMinPositiveValueTwoOutputs() (gas: 31375) -LibOpMinPositiveValueTest:testOpMinPositiveValueZeroOutputs() (gas: 30191) -LibOpMinTest:testOpMinEval2InputsHappy() (gas: 966713) -LibOpMinTest:testOpMinEval3InputsHappy() (gas: 3479742) -LibOpMinTest:testOpMinEvalOneInput() (gas: 125470) -LibOpMinTest:testOpMinEvalOperandDisallowed() (gas: 58796) -LibOpMinTest:testOpMinEvalZeroInputs() (gas: 29483) -LibOpMinTest:testOpMinIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11595, ~: 11585) -LibOpMinTest:testOpMinIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10619, ~: 10564) -LibOpMinTest:testOpMinIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10663, ~: 10608) -LibOpMinTest:testOpMinRun(bytes32[],uint16) (runs: 2048, μ: 19786, ~: 19654) -LibOpMinTest:testOpMinTwoOutputs() (gas: 40797) -LibOpMinTest:testOpMinZeroOutputs() (gas: 39619) -LibOpMulTest:testOpDecimal18MulIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10620, ~: 10565) -LibOpMulTest:testOpMulEvalOneInput() (gas: 125472) -LibOpMulTest:testOpMulEvalOperandsDisallowed() (gas: 91459) -LibOpMulTest:testOpMulEvalThreeInputsHappy() (gas: 760970) -LibOpMulTest:testOpMulEvalThreeInputsUnhappyOverflow() (gas: 62862) -LibOpMulTest:testOpMulEvalTwoInputsHappy() (gas: 527647) -LibOpMulTest:testOpMulEvalTwoInputsUnhappyOverflow() (gas: 55423) -LibOpMulTest:testOpMulEvalZeroInputs() (gas: 29527) -LibOpMulTest:testOpMulIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11588, ~: 11579) -LibOpMulTest:testOpMulIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10662, ~: 10607) -LibOpMulTest:testOpMulRun(bytes32[]) (runs: 2048, μ: 40603, ~: 37709) -LibOpMulTest:testOpMulTwoOutputs() (gas: 40750) -LibOpMulTest:testOpMulZeroOutputs() (gas: 39550) -LibOpPowerTest:testOpPowEval() (gas: 571235) -LibOpPowerTest:testOpPowEvalOneInput() (gas: 34948) -LibOpPowerTest:testOpPowEvalOperandDisallowed() (gas: 17634) -LibOpPowerTest:testOpPowIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10720, ~: 10648) -LibOpPowerTest:testOpPowNegativeBaseError() (gas: 97596) -LibOpPowerTest:testOpPowRun(int224,int32,int224,int32) (runs: 2048, μ: 75606, ~: 76945) -LibOpPowerTest:testOpPowThreeInputs() (gas: 45340) -LibOpPowerTest:testOpPowTwoOutputs() (gas: 40873) -LibOpPowerTest:testOpPowZeroOutputs() (gas: 39714) -LibOpSetTest:testLibOpSet(bytes32,bytes32) (runs: 2048, μ: 6804, ~: 6809) -LibOpSetTest:testLibOpSetEvalOneInput() (gas: 33678) -LibOpSetTest:testLibOpSetEvalOneOutput() (gas: 39619) -LibOpSetTest:testLibOpSetEvalOperandsDisallowed() (gas: 55599) -LibOpSetTest:testLibOpSetEvalSetTwice() (gas: 71840) -LibOpSetTest:testLibOpSetEvalThreeInputs() (gas: 44583) -LibOpSetTest:testLibOpSetEvalTwoInputs() (gas: 241495) -LibOpSetTest:testLibOpSetEvalTwoOutputs() (gas: 40314) -LibOpSetTest:testLibOpSetEvalZeroInputs() (gas: 28613) -LibOpSetTest:testLibOpSetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12178, ~: 12072) -LibOpSqrtTest:testOpSqrtEvalBad() (gas: 64643) -LibOpSqrtTest:testOpSqrtEvalExamples() (gas: 257011) -LibOpSqrtTest:testOpSqrtEvalNegativeInput() (gas: 47577) -LibOpSqrtTest:testOpSqrtEvalOperandDisallowed() (gas: 17575) -LibOpSqrtTest:testOpSqrtEvalTwoOutputs() (gas: 35622) -LibOpSqrtTest:testOpSqrtEvalZeroOutputs() (gas: 34414) -LibOpSqrtTest:testOpSqrtIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10699, ~: 10627) -LibOpSqrtTest:testOpSqrtRun(bytes32) (runs: 2048, μ: 74820, ~: 81820) -LibOpStackTest:testOpStackEval() (gas: 60533) -LibOpStackTest:testOpStackEvalSeveral() (gas: 80721) -LibOpStackTest:testOpStackIntegrity(bytes,uint256,bytes32[],bytes32) (runs: 2048, μ: 11785, ~: 11861) -LibOpStackTest:testOpStackIntegrityOOBStack(bytes,uint16,bytes32[],uint16,uint256) (runs: 2048, μ: 37288, ~: 37382) -LibOpStackTest:testOpStackMultipleOutputErrorSugared() (gas: 38721) -LibOpStackTest:testOpStackMultipleOutputErrorUnsugared() (gas: 42926) -LibOpStackTest:testOpStackRun(bytes32[][],uint256) (runs: 100, μ: 1953426, ~: 1710137) -LibOpStackTest:testOpStackRunReferenceFnParity(bytes32[][],uint256) (runs: 100, μ: 1906326, ~: 1670632) -LibOpStackTest:testOpStackZeroOutputErrorSugared() (gas: 37185) -LibOpStackTest:testOpStackZeroOutputErrorUnsugared() (gas: 41356) -LibOpSubTest:testOpSubEvalOneInput() (gas: 128211) -LibOpSubTest:testOpSubEvalOperandDisallowed() (gas: 91460) -LibOpSubTest:testOpSubEvalThreeInputs() (gas: 226922) -LibOpSubTest:testOpSubEvalTwoInputs() (gas: 440590) -LibOpSubTest:testOpSubEvalZeroInputs() (gas: 29484) -LibOpSubTest:testOpSubIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11543, ~: 11533) -LibOpSubTest:testOpSubIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10640, ~: 10585) -LibOpSubTest:testOpSubIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10640, ~: 10585) -LibOpSubTest:testOpSubRun(bytes32[]) (runs: 2048, μ: 57542, ~: 58942) -LibOpSubTest:testOpSubTwoOutputs() (gas: 40821) -LibOpSubTest:testOpSubZeroOutputs() (gas: 39597) -LibOpUint256AddTest:testOpUint256AddEvalOneInput() (gas: 126462) -LibOpUint256AddTest:testOpUint256AddEvalOperandsDisallowed() (gas: 95347) -LibOpUint256AddTest:testOpUint256AddEvalThreeInputsHappy() (gas: 207646) -LibOpUint256AddTest:testOpUint256AddEvalThreeInputsUnhappy() (gas: 113233) -LibOpUint256AddTest:testOpUint256AddEvalTwoInputsHappy() (gas: 276070) -LibOpUint256AddTest:testOpUint256AddEvalTwoOutputs() (gas: 41420) -LibOpUint256AddTest:testOpUint256AddEvalZeroInputs() (gas: 30153) -LibOpUint256AddTest:testOpUint256AddEvalZeroOutputs() (gas: 40197) -LibOpUint256AddTest:testOpUint256AddIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11584, ~: 11578) -LibOpUint256AddTest:testOpUint256AddIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10613, ~: 10558) -LibOpUint256AddTest:testOpUint256AddIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10611, ~: 10556) -LibOpUint256AddTest:testOpUint256AddRun(bytes32[]) (runs: 2048, μ: 14566, ~: 14657) -LibOpUint256DivTest:testOpUint256DivEval2InputsHappy() (gas: 759461) -LibOpUint256DivTest:testOpUint256DivEval2InputsUnhappy() (gas: 141257) -LibOpUint256DivTest:testOpUint256DivEval3InputsHappy() (gas: 1391578) -LibOpUint256DivTest:testOpUint256DivEval3InputsUnhappy() (gas: 478066) -LibOpUint256DivTest:testOpUint256DivEvalOneInput() (gas: 132175) -LibOpUint256DivTest:testOpUint256DivEvalOperandDisallowed() (gas: 61344) -LibOpUint256DivTest:testOpUint256DivEvalTwoOutputs() (gas: 41421) -LibOpUint256DivTest:testOpUint256DivEvalZeroInputs() (gas: 30154) -LibOpUint256DivTest:testOpUint256DivEvalZeroOutputs() (gas: 40175) -LibOpUint256DivTest:testOpUint256DivIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11591, ~: 11571) -LibOpUint256DivTest:testOpUint256DivIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10633, ~: 10578) -LibOpUint256DivTest:testOpUint256DivIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10613, ~: 10558) -LibOpUint256DivTest:testOpUint256DivRun(bytes32[]) (runs: 2048, μ: 18033, ~: 18276) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalFourInputs() (gas: 56573) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalHappy(uint256) (runs: 2048, μ: 71516, ~: 71516) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalOneInput() (gas: 37341) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalOperandDisallowed() (gas: 19073) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalTwoInputs() (gas: 43918) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalTwoOutputs() (gas: 51208) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalZeroInputs() (gas: 31037) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalZeroOutputs() (gas: 50008) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10662, ~: 10590) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceRun(address,address,address,uint256) (runs: 2048, μ: 17930, ~: 17930) -LibOpUint256ERC20AllowanceTest:testOpUint256ERC20AllowanceNotAnAddressOwner(uint256) (runs: 2048, μ: 6903, ~: 6903) -LibOpUint256ERC20AllowanceTest:testOpUint256ERC20AllowanceNotAnAddressSpender(uint256) (runs: 2048, μ: 6931, ~: 6931) -LibOpUint256ERC20AllowanceTest:testOpUint256ERC20AllowanceNotAnAddressToken(uint256) (runs: 2048, μ: 6929, ~: 6929) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalHappy(uint256) (runs: 2048, μ: 64568, ~: 64568) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalOneInput() (gas: 37380) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalOperandDisallowed() (gas: 19153) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalThreeInputs() (gas: 50041) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalTwoOutputs() (gas: 44751) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroInputs() (gas: 31118) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroOutputs() (gas: 43529) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10663, ~: 10591) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfRun(address,address,uint256,uint16) (runs: 2048, μ: 17503, ~: 17503) -LibOpUint256ERC20BalanceOfTest:testOpUint256ERC20BalanceOfNotAnAddressAccount(uint256) (runs: 2048, μ: 6699, ~: 6699) -LibOpUint256ERC20BalanceOfTest:testOpUint256ERC20BalanceOfNotAnAddressToken(uint256) (runs: 2048, μ: 6648, ~: 6648) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalHappy(uint256) (runs: 2048, μ: 57685, ~: 57685) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalOperandDisallowed() (gas: 19316) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoInputs() (gas: 44140) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoOutputs() (gas: 38338) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroInputs() (gas: 31280) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroOutputs() (gas: 37133) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10685, ~: 10613) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyRun(address,uint256,uint16) (runs: 2048, μ: 16953, ~: 16953) -LibOpUint256ERC20TotalSupplyTest:testOpUint256ERC20TotalSupplyNotAnAddress(uint256) (runs: 2048, μ: 6360, ~: 6360) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfEvalHappy(address,address,uint256) (runs: 2048, μ: 101468, ~: 101573) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12039, ~: 11945) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail0() (gas: 30879) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail1() (gas: 35453) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail3() (gas: 45286) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFailOperand() (gas: 22038) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfOneInput() (gas: 35759) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfRun(address,address,uint256,uint16) (runs: 2048, μ: 17582, ~: 17582) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfThreeInputs() (gas: 45627) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfTwoOutputs() (gas: 41438) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfZeroInputs() (gas: 31219) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfZeroOutputs() (gas: 40259) -LibOpUint256ERC721BalanceOfTest:testOpUint256ERC721BalanceOfNotAnAddressAccount(uint256) (runs: 2048, μ: 6669, ~: 6669) -LibOpUint256ERC721BalanceOfTest:testOpUint256ERC721BalanceOfNotAnAddressToken(uint256) (runs: 2048, μ: 6630, ~: 6630) -LibOpUint256MaxValueTest:testOpMaxUint256Eval() (gas: 46559) -LibOpUint256MaxValueTest:testOpMaxUint256EvalFail() (gas: 34837) -LibOpUint256MaxValueTest:testOpMaxUint256EvalOperandDisallowed() (gas: 18605) -LibOpUint256MaxValueTest:testOpMaxUint256Integrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12036, ~: 11943) -LibOpUint256MaxValueTest:testOpMaxUint256Run() (gas: 7305) -LibOpUint256MaxValueTest:testOpMaxUint256TwoOutputs() (gas: 31295) -LibOpUint256MaxValueTest:testOpMaxUint256ZeroOutputs() (gas: 30068) -LibOpUint256MulTest:testOpUint256MulEvalOneInput() (gas: 129394) -LibOpUint256MulTest:testOpUint256MulEvalOperandsDisallowed() (gas: 99593) -LibOpUint256MulTest:testOpUint256MulEvalThreeInputsHappy() (gas: 1020150) -LibOpUint256MulTest:testOpUint256MulEvalThreeInputsUnhappy() (gas: 643732) -LibOpUint256MulTest:testOpUint256MulEvalTwoInputsHappy() (gas: 417395) -LibOpUint256MulTest:testOpUint256MulEvalTwoInputsUnhappy() (gas: 143353) -LibOpUint256MulTest:testOpUint256MulEvalTwoOutputs() (gas: 42076) -LibOpUint256MulTest:testOpUint256MulEvalZeroInputs() (gas: 30918) -LibOpUint256MulTest:testOpUint256MulEvalZeroOutputs() (gas: 40921) -LibOpUint256MulTest:testOpUint256MulIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11538, ~: 11533) -LibOpUint256MulTest:testOpUint256MulIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10655, ~: 10600) -LibOpUint256MulTest:testOpUint256MulIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10612, ~: 10557) -LibOpUint256MulTest:testOpUint256MulRun(bytes32[]) (runs: 2048, μ: 14498, ~: 14452) -LibOpUint256PowerTest:testOpUint256ExpIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11551, ~: 11538) -LibOpUint256PowerTest:testOpUint256PowEval2InputsHappy() (gas: 859488) -LibOpUint256PowerTest:testOpUint256PowEval2InputsUnhappy() (gas: 143167) -LibOpUint256PowerTest:testOpUint256PowEval3InputsHappy() (gas: 1959528) -LibOpUint256PowerTest:testOpUint256PowEval3InputsUnhappy() (gas: 624490) -LibOpUint256PowerTest:testOpUint256PowEvalOneInput() (gas: 131497) -LibOpUint256PowerTest:testOpUint256PowEvalOperandDisallowed() (gas: 62036) -LibOpUint256PowerTest:testOpUint256PowEvalTwoOutputs() (gas: 41550) -LibOpUint256PowerTest:testOpUint256PowEvalZeroInputs() (gas: 30346) -LibOpUint256PowerTest:testOpUint256PowEvalZeroOutputs() (gas: 40328) -LibOpUint256PowerTest:testOpUint256PowIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10635, ~: 10580) -LibOpUint256PowerTest:testOpUint256PowIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10612, ~: 10557) -LibOpUint256PowerTest:testOpUint256PowRun(bytes32[]) (runs: 2048, μ: 15968, ~: 16200) -LibOpUint256SubTest:testOpUint256SubEvalOneInput() (gas: 126549) -LibOpUint256SubTest:testOpUint256SubEvalOperandsDisallowed() (gas: 95349) -LibOpUint256SubTest:testOpUint256SubEvalThreeInputsHappy() (gas: 207521) -LibOpUint256SubTest:testOpUint256SubEvalThreeInputsUnhappy() (gas: 113406) -LibOpUint256SubTest:testOpUint256SubEvalTwoInputsHappy() (gas: 276068) -LibOpUint256SubTest:testOpUint256SubEvalTwoOutputs() (gas: 41409) -LibOpUint256SubTest:testOpUint256SubEvalZeroInputs() (gas: 30164) -LibOpUint256SubTest:testOpUint256SubEvalZeroOutputs() (gas: 40187) -LibOpUint256SubTest:testOpUint256SubIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11574, ~: 11563) -LibOpUint256SubTest:testOpUint256SubIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10656, ~: 10601) -LibOpUint256SubTest:testOpUint256SubIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10612, ~: 10557) -LibOpUint256SubTest:testOpUint256SubRun(bytes32[]) (runs: 2048, μ: 14291, ~: 14303) -LibParseCommentsTest:testParseCommentAfterSources() (gas: 66709) -LibParseCommentsTest:testParseCommentBetweenSources() (gas: 66764) -LibParseCommentsTest:testParseCommentInIgnoredLHS() (gas: 46767) -LibParseCommentsTest:testParseCommentInLHSWhitespace() (gas: 46977) -LibParseCommentsTest:testParseCommentInNamedLHS() (gas: 46848) -LibParseCommentsTest:testParseCommentInRHS() (gas: 47145) -LibParseCommentsTest:testParseCommentInRHS2() (gas: 50199) -LibParseCommentsTest:testParseCommentInRHS3() (gas: 50209) -LibParseCommentsTest:testParseCommentLong() (gas: 61452) -LibParseCommentsTest:testParseCommentManyAstericks() (gas: 54619) -LibParseCommentsTest:testParseCommentManyAstericksTrailing() (gas: 54577) -LibParseCommentsTest:testParseCommentMultiple() (gas: 71390) -LibParseCommentsTest:testParseCommentNoTrailingWhitespace() (gas: 47468) -LibParseCommentsTest:testParseCommentNoWords() (gas: 50816) -LibParseCommentsTest:testParseCommentSingleWord() (gas: 55163) -LibParseCommentsTest:testParseCommentSingleWordSameLine() (gas: 55925) -LibParseCommentsTest:testParseCommentUnclosed() (gas: 47118) -LibParseCommentsTest:testParseCommentUnclosed2() (gas: 47316) -LibParseEmptyGasTest:testParseGasEmpty00() (gas: 39076) -LibParseEmptyGasTest:testParseGasEmpty01() (gas: 43955) -LibParseEmptyGasTest:testParseGasEmpty02() (gas: 48229) -LibParseEmptyGasTest:testParseGasEmpty03() (gas: 52480) -LibParseEmptyGasTest:testParseGasEmpty04() (gas: 56731) -LibParseEmptyTest:testParseEmpty00() (gas: 42589) -LibParseEmptyTest:testParseEmpty01() (gas: 49103) -LibParseEmptyTest:testParseEmpty02() (gas: 55284) -LibParseEmptyTest:testParseEmpty03() (gas: 61264) -LibParseEmptyTest:testParseEmpty04() (gas: 67310) -LibParseEmptyTest:testParseEmpty08() (gas: 91326) -LibParseEmptyTest:testParseEmpty15() (gas: 133370) -LibParseEmptyTest:testParseEmptyError16() (gas: 93537) -LibParseErrorTest:testHandleErrorSelectorReverts() (gas: 6078) -LibParseErrorTest:testHandleErrorSelectorZeroNoOp() (gas: 2663) -LibParseErrorTest:testParseErrorOffsetFirstByte() (gas: 1653) -LibParseErrorTest:testParseErrorOffsetFuzz(uint8,uint8) (runs: 2048, μ: 2897, ~: 3069) -LibParseErrorTest:testParseErrorOffsetLastByte() (gas: 1687) -LibParseIgnoredLHSTest:testParseIgnoredLHSAlphaTooLong() (gas: 51335) -LibParseIgnoredLHSTest:testParseIgnoredLHSLoneUnderscore() (gas: 49871) -LibParseIgnoredLHSTest:testParseIgnoredLHSMultipleLines() (gas: 53390) -LibParseIgnoredLHSTest:testParseIgnoredLHSTwoAlphas() (gas: 51052) -LibParseIgnoredLHSTest:testParseIgnoredLHSTwoUnderscores() (gas: 50889) -LibParseIgnoredLHSTest:testParseIgnoredLHSUnderscoreAlpha() (gas: 49945) -LibParseIgnoredLHSTest:testParseIgnoredLHSUnderscoreNotInput() (gas: 55217) -LibParseIgnoredLHSTest:testParseIgnoredWordTooLong() (gas: 52496) -LibParseInputsOnlyGasTest:testParseGasInputsOnly00() (gas: 44732) -LibParseInputsOnlyGasTest:testParseGasInputsOnly01() (gas: 45739) -LibParseInputsOnlyGasTest:testParseGasInputsOnly02() (gas: 46719) -LibParseInputsOnlyGasTest:testParseGasInputsOnly03() (gas: 47725) -LibParseInputsOnlyGasTest:testParseGasInputsOnly04() (gas: 48731) -LibParseInputsOnlyGasTest:testParseGasInputsOnly05() (gas: 49737) -LibParseInputsOnlyGasTest:testParseGasInputsOnly06() (gas: 50741) -LibParseInputsOnlyGasTest:testParseGasInputsOnly07() (gas: 51777) -LibParseInputsOnlyGasTest:testParseGasInputsOnly08() (gas: 52750) -LibParseInputsOnlyGasTest:testParseGasInputsOnly09() (gas: 53756) -LibParseInputsOnlyTest:testParseInputsOnlyMultiple() (gas: 50844) -LibParseInputsOnlyTest:testParseInputsOnlySingle() (gas: 49862) -LibParseInterstitialTest:testMalformedCommentStart(uint8) (runs: 2048, μ: 6693, ~: 6693) -LibParseInterstitialTest:testParseInterstitialAtEnd() (gas: 1829) -LibParseInterstitialTest:testParseInterstitialMixed() (gas: 4080) -LibParseInterstitialTest:testParseInterstitialMultipleComments() (gas: 4888) -LibParseInterstitialTest:testParseInterstitialNonInterstitialFirst() (gas: 1953) -LibParseInterstitialTest:testSkipCommentFuzzBody(bytes) (runs: 2048, μ: 25508, ~: 9679) -LibParseInterstitialTest:testSkipCommentSetsYang() (gas: 2368) -LibParseInterstitialTest:testSkipCommentThreeBytes() (gas: 6057) -LibParseInterstitialTest:testSkipCommentTooShort() (gas: 6102) -LibParseInterstitialTest:testSkipCommentWithContent() (gas: 3278) -LibParseInterstitialTest:testSkipWhitespaceAllTypes() (gas: 2298) -LibParseInterstitialTest:testSkipWhitespaceAtEnd() (gas: 1947) -LibParseInterstitialTest:testSkipWhitespaceClearsYang() (gas: 2199) -LibParseLHSOverflowTest:testLHSItemCount255() (gas: 394685) -LibParseLHSOverflowTest:testLHSItemCountOverflow256() (gas: 312567) -LibParseLiteralBoundLiteralHexTest:testParseLiteralBoundLiteralHexBounds() (gas: 8421) -LibParseLiteralBoundLiteralHexTest:testParseLiteralBoundLiteralHexFuzz(string,bytes1,string) (runs: 2048, μ: 37445, ~: 35468) -LibParseLiteralDecimalParseDecimalFloatTest:testParseDecimalFloatHappyPath() (gas: 520511) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotE() (gas: 10762) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotE0() (gas: 10718) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotRevert() (gas: 10763) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotRevert2() (gas: 10740) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotRevert3() (gas: 11726) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatEDot() (gas: 10742) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatEmpty() (gas: 10694) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatExponentRevert() (gas: 10709) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatExponentRevert2() (gas: 11943) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatExponentRevert3() (gas: 12046) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatExponentRevert4() (gas: 10739) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatExponentRevert5() (gas: 10783) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatExponentRevert6() (gas: 10762) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatNegativeE() (gas: 12569) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatNegativeFrac() (gas: 11719) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatNonDecimal() (gas: 10717) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatPrecisionRevert0() (gas: 34259) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatPrecisionRevert1() (gas: 34009) -LibParseLiteralDispatchTest:testParseLiteralHappyPath() (gas: 6388) -LibParseLiteralDispatchTest:testParseLiteralUnsupportedType() (gas: 8090) -LibParseLiteralDispatchTest:testTryParseLiteralCursorAdvancement() (gas: 7576) -LibParseLiteralDispatchTest:testTryParseLiteralDecimal() (gas: 7337) -LibParseLiteralDispatchTest:testTryParseLiteralDecimalValue() (gas: 7721) -LibParseLiteralDispatchTest:testTryParseLiteralEmptyString() (gas: 6135) -LibParseLiteralDispatchTest:testTryParseLiteralHex() (gas: 6394) -LibParseLiteralDispatchTest:testTryParseLiteralHexCursorAdvancement() (gas: 7204) -LibParseLiteralDispatchTest:testTryParseLiteralHexValue() (gas: 6530) -LibParseLiteralDispatchTest:testTryParseLiteralMaxHex() (gas: 24840) -LibParseLiteralDispatchTest:testTryParseLiteralMinHex() (gas: 6403) -LibParseLiteralDispatchTest:testTryParseLiteralNegativeDecimal() (gas: 7108) -LibParseLiteralDispatchTest:testTryParseLiteralNegativeDecimalValue() (gas: 7492) -LibParseLiteralDispatchTest:testTryParseLiteralNegativeMultiDigit() (gas: 7772) -LibParseLiteralDispatchTest:testTryParseLiteralNegativeZero() (gas: 7434) -LibParseLiteralDispatchTest:testTryParseLiteralOOBSecondBytePoison() (gas: 5559) -LibParseLiteralDispatchTest:testTryParseLiteralString() (gas: 6010) -LibParseLiteralDispatchTest:testTryParseLiteralStringCursorAdvancement() (gas: 6249) -LibParseLiteralDispatchTest:testTryParseLiteralStringValue() (gas: 6319) -LibParseLiteralDispatchTest:testTryParseLiteralSubParseableDispatch() (gas: 12788) -LibParseLiteralDispatchTest:testTryParseLiteralUnrecognized() (gas: 5167) -LibParseLiteralDispatchTest:testTryParseLiteralUnrecognizedMultiple() (gas: 21126) -LibParseLiteralDispatchTest:testTryParseLiteralUppercaseXReverts() (gas: 8099) -LibParseLiteralDispatchTest:testTryParseLiteralZeroDecimal() (gas: 7009) -LibParseLiteralDispatchTest:testTryParseLiteralZeroValue() (gas: 7145) -LibParseLiteralHexParseHexTest:testParseHexAlternatingCase() (gas: 5631) -LibParseLiteralHexParseHexTest:testParseHexLowerCase() (gas: 3883) -LibParseLiteralHexParseHexTest:testParseHexMixedCase() (gas: 3353) -LibParseLiteralHexParseHexTest:testParseHexOddLength(uint8) (runs: 2048, μ: 13723, ~: 12446) -LibParseLiteralHexParseHexTest:testParseHexOverflow() (gas: 11920) -LibParseLiteralHexParseHexTest:testParseHexUpperCase() (gas: 4015) -LibParseLiteralHexParseHexTest:testParseHexZeroLength(uint8) (runs: 2048, μ: 6948, ~: 6831) -LibParseLiteralHexParseHexTest:testParseLiteralHexRoundTrip(bytes32) (runs: 2048, μ: 29497, ~: 34320) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimal00() (gas: 54994) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimal01() (gas: 62223) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimal02() (gas: 68870) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalENotation() (gas: 89209) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalInt128Max() (gas: 65433) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalInt128MaxLeadingZeros() (gas: 66316) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalParensBoth() (gas: 50794) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalParensLeft() (gas: 50814) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalParensRight() (gas: 50704) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalUint256OverflowLeadingDigitBasic() (gas: 70075) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalUint256OverflowLeadingDigitLeadingZeros() (gas: 70248) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalUint256OverflowLeadingZeros() (gas: 70424) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalUint256OverflowSimple() (gas: 70240) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalYang() (gas: 51641) -LibParseLiteralIntegerHexTest:testParseIntegerLiteralHex00() (gas: 54017) -LibParseLiteralIntegerHexTest:testParseIntegerLiteralHex01() (gas: 59706) -LibParseLiteralIntegerHexTest:testParseIntegerLiteralHex02() (gas: 65079) -LibParseLiteralIntegerHexTest:testParseIntegerLiteralHexUint256Max() (gas: 70717) -LibParseLiteralRepeatTest:testParseRepeatInvalidDispatch() (gas: 4153) -LibParseLiteralRepeatTest:testParseRepeatInvalidDispatchFuzz(uint256) (runs: 2048, μ: 4556, ~: 4556) -LibParseLiteralRepeatTest:testParseRepeatOutputValueFuzz(uint256,uint256) (runs: 2048, μ: 27195, ~: 26190) -LibParseLiteralRepeatTest:testParseRepeatTooLong(uint256) (runs: 2048, μ: 5125, ~: 5210) -LibParseLiteralSelectByIndexTest:testSelectIndex0Hex() (gas: 4871) -LibParseLiteralSelectByIndexTest:testSelectIndex1Decimal() (gas: 7487) -LibParseLiteralSelectByIndexTest:testSelectIndex2String() (gas: 4855) -LibParseLiteralStringBoundTest:testBoundStringUnclosedAtEndBoundary() (gas: 7556) -LibParseLiteralStringBoundTest:testBoundStringUnclosedAtEndBoundaryFuzz(string) (runs: 2048, μ: 15079, ~: 14865) -LibParseLiteralStringBoundTest:testParseStringLiteralBounds(string) (runs: 2048, μ: 14017, ~: 13719) -LibParseLiteralStringBoundTest:testParseStringLiteralBoundsInvalidCharBefore(string,uint256) (runs: 2048, μ: 23703, ~: 23124) -LibParseLiteralStringBoundTest:testParseStringLiteralBoundsParserOutOfBounds(string,uint256) (runs: 2048, μ: 14983, ~: 14926) -LibParseLiteralStringBoundTest:testParseStringLiteralBoundsTooLong(string) (runs: 2048, μ: 28904, ~: 28474) -LibParseLiteralStringTest:testParseStringLiteralAny(bytes) (runs: 2048, μ: 12251, ~: 11760) -LibParseLiteralStringTest:testParseStringLiteralCorrupt(bytes,uint256) (runs: 2048, μ: 19924, ~: 19734) -LibParseLiteralStringTest:testParseStringLiteralEmpty() (gas: 2486) -LibParseLiteralStringTest:testParseStringLiteralEmpty() (gas: 50392) -LibParseLiteralStringTest:testParseStringLiteralInvalidCharAfter(string,string) (runs: 100, μ: 68937, ~: 68525) -LibParseLiteralStringTest:testParseStringLiteralInvalidCharWithin(string,uint256) (runs: 100, μ: 62763, ~: 62001) -LibParseLiteralStringTest:testParseStringLiteralLongASCII(string) (runs: 100, μ: 69512, ~: 69860) -LibParseLiteralStringTest:testParseStringLiteralShortASCII(string) (runs: 100, μ: 59997, ~: 59454) -LibParseLiteralStringTest:testParseStringLiteralSimple() (gas: 50501) -LibParseLiteralStringTest:testParseStringLiteralTwo(string,string) (runs: 100, μ: 72793, ~: 72865) -LibParseLiteralStringTest:testParseStringMemoryRestoration(bytes) (runs: 2048, μ: 14146, ~: 13387) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableBody() (gas: 56060) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableEmptyBody() (gas: 15449) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableHappyFuzz(string,string,string) (runs: 2048, μ: 82389, ~: 79406) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableHappyKnown() (gas: 40088) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableMissingDispatchEmpty() (gas: 9496) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableMissingDispatchUnclosed() (gas: 9501) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableMissingDispatchUnclosedWhitespace0() (gas: 9494) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableMissingDispatchUnclosedWhitespace1() (gas: 9451) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableUnclosedBracketPastEnd() (gas: 6903) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableUnclosedDispatch0() (gas: 9916) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableUnclosedDispatchBody() (gas: 10034) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableUnclosedDispatchWhitespace0() (gas: 9944) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableUnclosedDispatchWhitespace1() (gas: 9474) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableUnclosedDoubleOpen() (gas: 9872) -LibParseLiteralSubParseableTest:testSubParseLiteralAllReject(string,string) (runs: 2048, μ: 16045, ~: 16046) -LibParseLiteralSubParseableTest:testSubParseLiteralFirstRejectsSecondAccepts(string,string) (runs: 2048, μ: 15486, ~: 15487) -LibParseMissingFinalSemiTest:testParseMissingFinalSemiRevertsEmptySource() (gas: 49335) -LibParseMissingFinalSemiTest:testParseMissingFinalSemiRevertsLHSItems() (gas: 47258) -LibParseMissingFinalSemiTest:testParseMissingFinalSemiRevertsLoneColon() (gas: 46217) -LibParseMissingFinalSemiTest:testParseMissingFinalSemiRevertsSingleWord() (gas: 49364) -LibParseMissingFinalSemiTest:testParseMissingFinalSemiRevertsTrailingComma() (gas: 47510) -LibParseNOutputTest:testParseBalanceStackOffsetsInputs() (gas: 60670) -LibParseNOutputTest:testParseNOutputExcessRHS0() (gas: 51204) -LibParseNOutputTest:testParseNOutputExcessRHS1() (gas: 53415) -LibParseNOutputTest:testParseNOutputExcessRHS2() (gas: 53909) -LibParseNOutputTest:testParseNOutputExcessRHS3() (gas: 55410) -LibParseNOutputTest:testParseNOutputNestedRHS() (gas: 57871) -LibParseNamedLHSTest:testParseNamedDuplicateDifferentSource() (gas: 54731) -LibParseNamedLHSTest:testParseNamedError32() (gas: 49031) -LibParseNamedLHSTest:testParseNamedError33() (gas: 49019) -LibParseNamedLHSTest:testParseNamedErrorDuplicateSameSource() (gas: 49686) -LibParseNamedLHSTest:testParseNamedLHSEmptySourceExamples() (gas: 147113) -LibParseNamedLHSTest:testParseNamedLHSStackIndex() (gas: 57903) -LibParseNamedLHSTest:testParseNamedLHSStackNameLastPosition() (gas: 37450) -LibParseNamedLHSTest:testParseNamedLHSStackNameOnly() (gas: 23386) -LibParseNamedLHSTest:testParseNamedLHSTwoInputs() (gas: 57861) -LibParseNamedRHSTest:testParseSingleLHSNestingAndSequential00() (gas: 79074) -LibParseNamedRHSTest:testParseSingleLHSNestingAndSequential01() (gas: 94914) -LibParseNamedRHSTest:testParseSingleLHSNestingAndSequential02() (gas: 90400) -LibParseNamedRHSTest:testParseSingleLHSNestingAndSequential03() (gas: 198920) -LibParseNamedRHSTest:testParseSingleWord() (gas: 53042) -LibParseNamedRHSTest:testParseTwoFullLinesSingleRHSEach() (gas: 75196) -LibParseNamedRHSTest:testParseTwoFullSourcesSingleRHSEach() (gas: 63242) -LibParseNamedRHSTest:testParseTwoNested() (gas: 56690) -LibParseNamedRHSTest:testParseTwoNestedAsThirdInput() (gas: 66955) -LibParseNamedRHSTest:testParseTwoSequential() (gas: 58439) -LibParseNamedRHSTest:testParseTwoSequentialWithInputs() (gas: 72057) -LibParseOperand8M1M1Test:testOperand8M1M1Elided() (gas: 94325) -LibParseOperand8M1M1Test:testOperand8M1M1Single() (gas: 275586) -LibParseOperand8M1M1Test:testOperand8M1M1SingleBit() (gas: 567527) -LibParseOperand8M1M1Test:testOperand8M1M1SingleBitsPart1() (gas: 1608379) -LibParseOperand8M1M1Test:testOperand8M1M1Unclosed() (gas: 310425) -LibParseOperand8M1M1Test:testOperand8M1M1Unopened() (gas: 48191) -LibParseOperandDisallowedTest:testOperandDisallowed() (gas: 48410) -LibParseOperandDisallowedTest:testOperandDisallowed1() (gas: 48992) -LibParseOperandDisallowedTest:testOperandDisallowed3() (gas: 50731) -LibParseOperandDisallowedTest:testOperandDisallowed4() (gas: 50753) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultElided() (gas: 47950) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultEmpty() (gas: 48340) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultFirst() (gas: 50870) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultMultipleWhitespace() (gas: 59456) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultPostfixWhitespace() (gas: 58706) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultPrefixWhitespace() (gas: 58660) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecond() (gas: 58321) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecondMax() (gas: 59440) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecondMaxZero() (gas: 58743) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecondOverflow() (gas: 55639) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecondOverflowFirst() (gas: 55640) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecondZero() (gas: 58070) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecondZeroMax() (gas: 58765) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultThird() (gas: 56703) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultUnclosed() (gas: 53501) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultUnopened() (gas: 47940) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1AllValues(uint256,uint256,uint256) (runs: 2048, μ: 4449, ~: 4600) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1AllValuesFirstValueTooLarge(int256,uint256,uint256) (runs: 2048, μ: 9486, ~: 9694) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1AllValuesThirdValueTooLarge(uint256,uint256,uint256) (runs: 2048, μ: 8645, ~: 8549) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstAndSecondValue(uint256,uint256) (runs: 2048, μ: 3463, ~: 3579) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstAndSecondValueSecondValueTooLarge(uint256,uint256) (runs: 2048, μ: 7449, ~: 7349) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstValueOnly(uint256) (runs: 2048, μ: 2477, ~: 2611) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstValueTooLarge(int256) (runs: 2048, μ: 7260, ~: 7437) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1ManyValues(bytes32[]) (runs: 2048, μ: 35466, ~: 35133) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1NoValues() (gas: 4509) -LibParseOperandHandleOperandDisallowedAlwaysOneTest:testHandleOperandDisallowedAlwaysOneAnyValues(bytes32[]) (runs: 2048, μ: 34907, ~: 34537) -LibParseOperandHandleOperandDisallowedAlwaysOneTest:testHandleOperandDisallowedAlwaysOneNoValues() (gas: 353) -LibParseOperandHandleOperandDisallowedTest:testHandleOperandDisallowedAnyValues(bytes32[]) (runs: 2048, μ: 34907, ~: 34537) -LibParseOperandHandleOperandDisallowedTest:testHandleOperandDisallowedNoValues() (gas: 373) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultBothValuesWithinOneByte(uint256,uint256) (runs: 2048, μ: 2993, ~: 3253) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultFirstValueTooLarge(uint256,uint256) (runs: 2048, μ: 7242, ~: 7042) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultManyValues(bytes32[]) (runs: 2048, μ: 35300, ~: 34899) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultNoValues() (gas: 4528) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultOneValue(uint256) (runs: 2048, μ: 5517, ~: 5779) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultSecondValueTooLarge(uint256,uint256) (runs: 2048, μ: 7248, ~: 7053) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1ManyValues(bytes32[]) (runs: 2048, μ: 35239, ~: 34838) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1NoValues() (gas: 1030) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1OneValue(uint256) (runs: 2048, μ: 2099, ~: 2103) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1OneValueTooLarge(uint256) (runs: 2048, μ: 6017, ~: 5775) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1TwoValues(uint256,uint256) (runs: 2048, μ: 3093, ~: 3115) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1TwoValuesFirstValueTooLarge(uint256,uint256) (runs: 2048, μ: 7134, ~: 6941) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1TwoValuesSecondValueTooLarge(uint256,uint256) (runs: 2048, μ: 7167, ~: 6972) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullManyValues(bytes32[]) (runs: 2048, μ: 35014, ~: 34573) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultManyValues(bytes32[]) (runs: 2048, μ: 35034, ~: 34593) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultNoValues() (gas: 4501) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultSingleValue(uint256) (runs: 2048, μ: 1559, ~: 1828) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoValues() (gas: 420) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValue(uint256) (runs: 2048, μ: 1607, ~: 1874) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValueDisallowed(uint256) (runs: 2048, μ: 5975, ~: 6184) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValueNoDefaultDisallowed(uint256) (runs: 2048, μ: 6016, ~: 6222) -LibParseOperandHandleOperandTest:testHandleOperandDispatchDifferentHandlers(uint256) (runs: 2048, μ: 19836, ~: 20111) -LibParseOperandHandleOperandTest:testHandleOperandDispatchDisallowedMultipleIndices() (gas: 31831) -LibParseOperandHandleOperandTest:testHandleOperandDispatchEmptyValues() (gas: 10792) -LibParseOperandHandleOperandTest:testHandleOperandDispatchSameHandler(uint256) (runs: 2048, μ: 12405, ~: 12685) -LibParseOperandM1M1Test:testOperandM1M1Both() (gas: 58433) -LibParseOperandM1M1Test:testOperandM1M1BothZero() (gas: 56856) -LibParseOperandM1M1Test:testOperandM1M1Elided() (gas: 52309) -LibParseOperandM1M1Test:testOperandM1M1Empty() (gas: 52701) -LibParseOperandM1M1Test:testOperandM1M1First() (gas: 55341) -LibParseOperandM1M1Test:testOperandM1M1FirstOverflow() (gas: 51529) -LibParseOperandM1M1Test:testOperandM1M1Second() (gas: 58296) -LibParseOperandM1M1Test:testOperandM1M1SecondOverflow() (gas: 54485) -LibParseOperandM1M1Test:testOperandM1M1SecondZero() (gas: 58117) -LibParseOperandM1M1Test:testOperandM1M1Unclosed() (gas: 255185) -LibParseOperandM1M1Test:testOperandM1M1Unopened() (gas: 50026) -LibParseOperandParseOperandTest:testParseOperandEmptyOperand(string) (runs: 100, μ: 42744, ~: 42744) -LibParseOperandParseOperandTest:testParseOperandFourDecimalLiterals(bool[4],int256[4],string[5],string) (runs: 100, μ: 352616, ~: 356134) -LibParseOperandParseOperandTest:testParseOperandNoOpeningCharacter(string) (runs: 100, μ: 42677, ~: 42674) -LibParseOperandParseOperandTest:testParseOperandSingleDecimalLiteral(bool,int256,string,string,string) (runs: 100, μ: 153219, ~: 156972) -LibParseOperandParseOperandTest:testParseOperandThreeDecimalLiterals(bool,bool,bool,int256,int256,int256,string,string,string,string,string) (runs: 100, μ: 277567, ~: 272119) -LibParseOperandParseOperandTest:testParseOperandTooManyValues() (gas: 55415) -LibParseOperandParseOperandTest:testParseOperandTwoDecimalLiterals(bool,bool,int256,int256,string,string,string,string) (runs: 100, μ: 222845, ~: 217660) -LibParseOperandParseOperandTest:testParseOperandUnclosed() (gas: 54908) -LibParseOperandParseOperandTest:testParseOperandUnexpectedChars() (gas: 52114) -LibParseOperandParseOperandTest:testParseOperandYangStateLiteralCollision() (gas: 49237) -LibParseOperandSingleFullTest:testOperandSingleFullElided() (gas: 51700) -LibParseOperandSingleFullTest:testOperandSingleFullEmpty() (gas: 52025) -LibParseOperandSingleFullTest:testOperandSingleFullHexOne() (gas: 54272) -LibParseOperandSingleFullTest:testOperandSingleFullHexUint16Max() (gas: 54862) -LibParseOperandSingleFullTest:testOperandSingleFullHexUint16MaxOverflow() (gas: 51424) -LibParseOperandSingleFullTest:testOperandSingleFullHexZero() (gas: 54139) -LibParseOperandSingleFullTest:testOperandSingleFullLeadingAndTrailingWhitespace() (gas: 54935) -LibParseOperandSingleFullTest:testOperandSingleFullLeadingWhitespace() (gas: 55331) -LibParseOperandSingleFullTest:testOperandSingleFullMultiple() (gas: 52221) -LibParseOperandSingleFullTest:testOperandSingleFullOne() (gas: 54989) -LibParseOperandSingleFullTest:testOperandSingleFullTrailingWhitespace() (gas: 55375) -LibParseOperandSingleFullTest:testOperandSingleFullUint16Max() (gas: 56087) -LibParseOperandSingleFullTest:testOperandSingleFullUint16MaxOverflow() (gas: 52288) -LibParseOperandSingleFullTest:testOperandSingleFullUnclosed() (gas: 50674) -LibParseOperandSingleFullTest:testOperandSingleFullUnopened() (gas: 49072) -LibParseOperandSingleFullTest:testOperandSingleFullZero() (gas: 54876) -LibParseParenOverflowTest:testParenMaxNesting() (gas: 197564) -LibParseParenOverflowTest:testParenOverflow() (gas: 77575) -LibParseParseWordTest:testLibParseParseWordEnd(uint256) (runs: 2048, μ: 3017, ~: 3064) -LibParseParseWordTest:testLibParseParseWordExamples() (gas: 19621) -LibParseParseWordTest:testLibParseParseWordReferenceImplementation(bytes,uint256) (runs: 2048, μ: 5443, ~: 5228) -LibParseParseWordTest:testLibParseParseWordTooLong(bytes) (runs: 2048, μ: 9094, ~: 9038) -LibParsePragmaKeywordTest:testParsePragmaOOBAfterInterstitial() (gas: 14746) -LibParsePragmaKeywordTest:testPragmaKeywordCommentBetweenAddresses() (gas: 48575) -LibParsePragmaKeywordTest:testPragmaKeywordEndAtKeyword() (gas: 7169) -LibParsePragmaKeywordTest:testPragmaKeywordNoWhitespace(uint256,string) (runs: 100, μ: 8313, ~: 8311) -LibParsePragmaKeywordTest:testPragmaKeywordNoop((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),string) (runs: 100, μ: 16468, ~: 16269) -LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserBasic(string,address,uint256,string) (runs: 100, μ: 170942, ~: 161255) -LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserCoupleOfAddresses(string,string,address,address,uint256,string) (runs: 100, μ: 369497, ~: 371860) -LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserSpecificStrings() (gas: 229983) -LibParsePragmaKeywordTest:testPragmaKeywordTwoSequentialPragmas() (gas: 47435) -LibParsePragmaKeywordTest:testPragmaKeywordWhitespaceNoHex(uint256,string) (runs: 100, μ: 14921, ~: 13291) -LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored00() (gas: 8422) -LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored01() (gas: 8482) -LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored02() (gas: 8566) -LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored03() (gas: 8647) -LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored04() (gas: 8750) -LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored05() (gas: 8789) -LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored06() (gas: 8915) -LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored07() (gas: 8954) -LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored08() (gas: 9033) -LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored09() (gas: 9139) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed00() (gas: 9128) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed01() (gas: 9229) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed02() (gas: 9267) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed03() (gas: 9369) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed04() (gas: 9451) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed05() (gas: 9534) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed06() (gas: 9612) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed07() (gas: 9716) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed08() (gas: 9797) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed09() (gas: 9877) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed10() (gas: 9936) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed11() (gas: 9996) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed12() (gas: 10120) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed13() (gas: 10181) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed14() (gas: 10261) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed15() (gas: 10319) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed16() (gas: 10445) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed17() (gas: 10504) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed18() (gas: 10606) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed19() (gas: 10645) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed20() (gas: 10725) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed21() (gas: 10828) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed22() (gas: 10886) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed23() (gas: 10970) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed24() (gas: 11048) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed25() (gas: 11174) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed26() (gas: 11233) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed27() (gas: 11293) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed28() (gas: 11404) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed29() (gas: 11452) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed30() (gas: 11536) -LibParseSingleRHSNamedGasTest:testParseGasRHS00() (gas: 120813) -LibParseSingleRHSNamedGasTest:testParseGasRHS01() (gas: 120915) -LibParseSingleRHSNamedGasTest:testParseGasRHS02() (gas: 120974) -LibParseSingleRHSNamedGasTest:testParseGasRHS03() (gas: 121054) -LibParseSingleRHSNamedGasTest:testParseGasRHS04() (gas: 121137) -LibParseSingleRHSNamedGasTest:testParseGasRHS05() (gas: 121217) -LibParseSingleRHSNamedGasTest:testParseGasRHS06() (gas: 121277) -LibParseSingleRHSNamedGasTest:testParseGasRHS07() (gas: 121358) -LibParseSingleRHSNamedGasTest:testParseGasRHS08() (gas: 121459) -LibParseSingleRHSNamedGasTest:testParseGasRHS09() (gas: 121520) -LibParseSingleRHSNamedGasTest:testParseGasRHS10() (gas: 121643) -LibParseSingleRHSNamedGasTest:testParseGasRHS11() (gas: 121679) -LibParseSingleRHSNamedGasTest:testParseGasRHS12() (gas: 121793) -LibParseSingleRHSNamedGasTest:testParseGasRHS13() (gas: 121865) -LibParseSingleRHSNamedGasTest:testParseGasRHS14() (gas: 121923) -LibParseSingleRHSNamedGasTest:testParseGasRHS15() (gas: 122027) -LibParseSingleRHSNamedGasTest:testParseGasRHS16() (gas: 122087) -LibParseSingleRHSNamedGasTest:testParseGasRHS17() (gas: 122167) -LibParseSingleRHSNamedGasTest:testParseGasRHS18() (gas: 122292) -LibParseSingleRHSNamedGasTest:testParseGasRHS19() (gas: 122373) -LibParseSingleRHSNamedGasTest:testParseGasRHS20() (gas: 122432) -LibParseSingleRHSNamedGasTest:testParseGasRHS21() (gas: 122534) -LibParseSingleRHSNamedGasTest:testParseGasRHS22() (gas: 122572) -LibParseSingleRHSNamedGasTest:testParseGasRHS23() (gas: 122676) -LibParseSingleRHSNamedGasTest:testParseGasRHS24() (gas: 122755) -LibParseSingleRHSNamedGasTest:testParseGasRHS25() (gas: 122836) -LibParseSingleRHSNamedGasTest:testParseGasRHS26() (gas: 122898) -LibParseSingleRHSNamedGasTest:testParseGasRHS27() (gas: 122989) -LibParseSingleRHSNamedGasTest:testParseGasRHS28() (gas: 123093) -LibParseSingleRHSNamedGasTest:testParseGasRHS29() (gas: 123184) -LibParseSingleRHSNamedGasTest:testParseGasRHS30() (gas: 123246) -LibParseSourceInputsTest:testParseSourceInputsEmptyLinePrefix() (gas: 49899) -LibParseSourceInputsTest:testParseSourceInputsMultipleLines() (gas: 52817) -LibParseSourceInputsTest:testParseSourceInputsSingle() (gas: 49876) -LibParseStackNameTest:testPushAndRetrieveStackNameDouble((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32,bytes32) (runs: 2048, μ: 17778, ~: 17625) -LibParseStackNameTest:testPushAndRetrieveStackNameDoubleIdentical((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32) (runs: 2048, μ: 13969, ~: 13921) -LibParseStackNameTest:testPushAndRetrieveStackNameMany((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),uint256) (runs: 2048, μ: 255174, ~: 189532) -LibParseStackNameTest:testPushAndRetrieveStackNameSingle((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32) (runs: 2048, μ: 13911, ~: 13863) -LibParseStackNameTest:testStackNameBloomFalsePositive() (gas: 7661) -LibParseStackNameTest:testStackNameNegativeLookup((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32,bytes32) (runs: 2048, μ: 16546, ~: 16420) -LibParseStackTrackerTest:testPopNoUnderflow(uint8,uint8) (runs: 2048, μ: 3585, ~: 3585) -LibParseStackTrackerTest:testPopPreservesInputsAndMax(uint8,uint8,uint8,uint8) (runs: 2048, μ: 3823, ~: 3823) -LibParseStackTrackerTest:testPopUnderflow(uint8,uint8) (runs: 2048, μ: 4627, ~: 4627) -LibParseStackTrackerTest:testPopZero(uint8,uint8,uint8) (runs: 2048, μ: 756, ~: 756) -LibParseStackTrackerTest:testPushInputsNoOverflow(uint8,uint8) (runs: 2048, μ: 4013, ~: 4014) -LibParseStackTrackerTest:testPushInputsOverflow(uint8,uint8) (runs: 2048, μ: 5361, ~: 5361) -LibParseStackTrackerTest:testPushInputsPushOverflow(uint8,uint8) (runs: 2048, μ: 4896, ~: 4896) -LibParseStackTrackerTest:testPushNoOverflow(uint8,uint8) (runs: 2048, μ: 3781, ~: 3782) -LibParseStackTrackerTest:testPushOverflow(uint8,uint8) (runs: 2048, μ: 4831, ~: 4831) -LibParseStackTrackerTest:testPushPreservesHighWatermark(uint8) (runs: 2048, μ: 3523, ~: 3523) -LibParseStackTrackerTest:testPushPreservesInputs(uint8,uint8,uint8) (runs: 2048, μ: 3791, ~: 3792) -LibParseStackTrackerTest:testPushUpdatesHighWatermark(uint8) (runs: 2048, μ: 3519, ~: 3519) -LibParseStackTrackerTest:testPushZero(uint8,uint8,uint8) (runs: 2048, μ: 981, ~: 979) -LibParseStateBuildBytecodeTest:testBuildBytecodeFuzz(uint256,uint256) (runs: 2048, μ: 96297, ~: 98203) -LibParseStateBuildBytecodeTest:testBuildBytecodeSingleSource() (gas: 4786) -LibParseStateBuildBytecodeTest:testBuildBytecodeTwoSources() (gas: 9414) -LibParseStateBuildConstantsTest:testBuildConstantsEmpty() (gas: 1826) -LibParseStateBuildConstantsTest:testBuildConstantsFuzz(bytes32[]) (runs: 2048, μ: 49335, ~: 49964) -LibParseStateBuildConstantsTest:testBuildConstantsMultiple() (gas: 3590) -LibParseStateBuildConstantsTest:testBuildConstantsSingle(bytes32) (runs: 2048, μ: 2525, ~: 2525) -LibParseStateCheckParseMemoryOverflowTest:testCheckParseMemoryOverflowAbove(uint256) (runs: 2048, μ: 298022340, ~: 305379338) -LibParseStateCheckParseMemoryOverflowTest:testCheckParseMemoryOverflowBelow(uint256) (runs: 2048, μ: 960, ~: 1218) -LibParseStateCheckParseMemoryOverflowTest:testCheckParseMemoryOverflowExact() (gas: 18370) -LibParseStateConstantValueBloomTest:testConstantValueBloom(bytes32) (runs: 2048, μ: 470, ~: 470) -LibParseStateConstantValueBloomTest:testConstantValueBloomAllBits() (gas: 42521) -LibParseStateConstantValueBloomTest:testConstantValueBloomSingleBit(bytes32) (runs: 2048, μ: 598, ~: 598) -LibParseStateDanglingSourceTest:testDanglingSource() (gas: 6057) -LibParseStateEndLineTest:testNotAcceptingInputs() (gas: 21320) -LibParseStateEndSourceTest:testEndSourceByteLengthFuzz(uint256) (runs: 2048, μ: 97987, ~: 93087) -LibParseStateEndSourceTest:testEndSourceMaxSources() (gas: 36340) -LibParseStateEndSourceTest:testEndSourceResetsState() (gas: 4126) -LibParseStateEndSourceTest:testEndSourceSingleOp() (gas: 3795) -LibParseStateEndSourceTest:testEndSourceTwoSources() (gas: 6503) -LibParseStateEndSourceTotalOpsOverflowTest:testTotalOps254NoOverflow() (gas: 1024432) -LibParseStateEndSourceTotalOpsOverflowTest:testTotalOpsOverflow256() (gas: 1002609) -LibParseStateEndSourceTotalOpsOverflowTest:testTotalOpsOverflow510() (gas: 1943746) -LibParseStateExportSubParsersTest:testExportSubParsers((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address[]) (runs: 2048, μ: 105329, ~: 105995) -LibParseStateHighwaterOverflowTest:testHighwaterJustBelowOverflow() (gas: 2279) -LibParseStateHighwaterOverflowTest:testHighwaterOverflow() (gas: 5319) -LibParseStateHighwaterTest:testParseStackOverflow() (gas: 365556) -LibParseStateNewActiveSourcePointerTest:testAlignedOldPointer(uint256,uint256) (runs: 2048, μ: 2972, ~: 3226) -LibParseStateNewActiveSourcePointerTest:testPostUnalignedNewPointer(uint256) (runs: 2048, μ: 1298, ~: 1298) -LibParseStateNewActiveSourcePointerTest:testPreUnalignedNewPointer() (gas: 1616) -LibParseStateNewActiveSourcePointerTest:testZeroOldPointer(bytes) (runs: 2048, μ: 1018, ~: 1000) -LibParseStateOffsetsTest:testLineTrackerOffset() (gas: 682) -LibParseStateOffsetsTest:testParenTracker0Offset() (gas: 660) -LibParseStateOffsetsTest:testTopLevel0DataOffset() (gas: 295) -LibParseStateOffsetsTest:testTopLevel0Offset() (gas: 704) -LibParseStateOpcodeIOOverflowTest:testOpcodeIOOverflowInputs() (gas: 90840) -LibParseStateOpcodeIOOverflowTest:testOpcodeIOOverflowOutputs() (gas: 40503) -LibParseStateOverflowTest:testLineRHSItems14NoOverflow() (gas: 118427) -LibParseStateOverflowTest:testLineRHSItemsOverflow() (gas: 109203) -LibParseStateOverflowTest:testSourceItemOps255NoOverflow() (gas: 1025469) -LibParseStateOverflowTest:testSourceItemOpsOverflow() (gas: 835826) -LibParseStateParenInputOverflowTest:testParenInputOverflow() (gas: 5899) -LibParseStatePushConstantValueTest:testPushConstantValueEmpty(bytes,bytes,bytes,bytes) (runs: 2048, μ: 3314, ~: 3253) -LibParseStatePushConstantValueTest:testPushConstantValueMany(bytes32[]) (runs: 2048, μ: 141572, ~: 139951) -LibParseStatePushConstantValueTest:testPushConstantValueSingle(bytes32) (runs: 2048, μ: 2446, ~: 2446) -LibParseStatePushLiteralTest:testPushLiteralDuplicate() (gas: 8167) -LibParseStatePushLiteralTest:testPushLiteralSingleDecimal() (gas: 7942) -LibParseStatePushLiteralTest:testPushLiteralSingleHex() (gas: 6212) -LibParseStatePushLiteralTest:testPushLiteralTwoDifferent() (gas: 8662) -LibParseStatePushLiteralTest:testPushLiteralUnsupported() (gas: 7590) -LibParseStatePushOpToSourceTest:testPushOpToSourceEncodesOp(uint8,uint16) (runs: 2048, μ: 2874, ~: 2874) -LibParseStatePushOpToSourceTest:testPushOpToSourceFSM() (gas: 2602) -LibParseStatePushOpToSourceTest:testPushOpToSourceItemOpsOverflow() (gas: 182485) -LibParseStatePushOpToSourceTest:testPushOpToSourceSlotOverflow() (gas: 6833) -LibParseStatePushOpToSourceTest:testPushOpToSourceTwoOps(uint8,uint16,uint8,uint16) (runs: 2048, μ: 3819, ~: 3819) -LibParseStatePushSubParserTest:testPushSubParserList((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address[]) (runs: 2048, μ: 93285, ~: 93893) -LibParseStatePushSubParserTest:testPushSubParserMultiple((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address,address,address) (runs: 2048, μ: 13149, ~: 13017) -LibParseStatePushSubParserTest:testPushSubParserOverflow((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),uint256) (runs: 2048, μ: 40514, ~: 39596) -LibParseStatePushSubParserTest:testPushSubParserZero((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address) (runs: 2048, μ: 12533, ~: 12527) -LibParseUnclosedLeftParenTest:testParseUnclosedLeftParen() (gas: 49499) -LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested() (gas: 70432) -LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested2() (gas: 72068) -LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested3() (gas: 82424) -LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested4() (gas: 82266) -LibParseUnexpectedLHSTest:testParseUnexpectedLHSBadIgnoredTail(uint8) (runs: 2048, μ: 47296, ~: 47297) -LibParseUnexpectedLHSTest:testParseUnexpectedLHSBadNamedTail(uint8,bytes) (runs: 2048, μ: 50858, ~: 50925) -LibParseUnexpectedLHSTest:testParseUnexpectedLHSEOF() (gas: 134322) -LibParseUnexpectedLHSTest:testParseUnexpectedLHSEOL() (gas: 134345) -LibParseUnexpectedLHSTest:testParseUnexpectedLHSSingleChar(uint8) (runs: 2048, μ: 46807, ~: 46807) -LibParseUnexpectedLHSTest:testParseUnexpectedLHSUnderscoreTail() (gas: 136929) -LibParseUnexpectedRHSTest:testParseUnexpectedRHS(uint8) (runs: 2048, μ: 47133, ~: 47133) -LibParseUnexpectedRHSTest:testParseUnexpectedRHSLeftParen() (gas: 46623) -LibParseUnexpectedRHSTest:testParseUnexpectedRHSYangWordWord() (gas: 57929) -LibParseUnexpectedRightParenTest:testParseUnexpectedRightParen() (gas: 50564) -LibParseUnexpectedRightParenTest:testParseUnexpectedRightParenNested() (gas: 57206) -LibSubParseBadSubParserResultTest:testBadSubParserResultEmpty() (gas: 310827) -LibSubParseBadSubParserResultTest:testBadSubParserResultTooLong() (gas: 331000) -LibSubParseBadSubParserResultTest:testBadSubParserResultTooShort() (gas: 331022) -LibSubParseBadSubParserResultTest:testBadSubParserResultWayTooLong() (gas: 331021) -LibSubParseConstantAccumulationTest:testSubParserConstantIndexAfterLiteral() (gas: 379951) -LibSubParseConstantAccumulationTest:testSubParserMultiConstantAccumulation() (gas: 384851) -LibSubParseConstantAccumulationTest:testSubParserSingleConstantAccumulation() (gas: 370097) -LibSubParseConstantAccumulationTest:testSubParserTwoWordsConstantAccumulation() (gas: 380638) -LibSubParseConsumeSubParseLiteralInputDataTest:testConsumeLiteralInputDataBasic() (gas: 1278) -LibSubParseConsumeSubParseLiteralInputDataTest:testConsumeLiteralInputDataBodyContent() (gas: 1495) -LibSubParseConsumeSubParseLiteralInputDataTest:testConsumeLiteralInputDataDispatchContent() (gas: 1491) -LibSubParseConsumeSubParseLiteralInputDataTest:testConsumeLiteralInputDataEmptyBody() (gas: 1064) -LibSubParseConsumeSubParseLiteralInputDataTest:testConsumeLiteralInputDataFuzz(bytes,bytes) (runs: 2048, μ: 5340, ~: 5335) -LibSubParseConsumeSubParseLiteralInputDataTest:testConsumeLiteralInputDataMinimal() (gas: 1062) -LibSubParseConsumeSubParseLiteralInputDataTest:testConsumeLiteralInputDataRoundtrip() (gas: 2560) -LibSubParseConsumeSubParseWordInputDataTest:testConsumeSubParseWordInputDataBasic() (gas: 3781) -LibSubParseConsumeSubParseWordInputDataTest:testConsumeSubParseWordInputDataEmptyWord() (gas: 3228) -LibSubParseConsumeSubParseWordInputDataTest:testConsumeSubParseWordInputDataFuzzConstantsHeight(uint16) (runs: 2048, μ: 3238, ~: 3238) -LibSubParseConsumeSubParseWordInputDataTest:testConsumeSubParseWordInputDataFuzzIOByte(uint8) (runs: 2048, μ: 3238, ~: 3238) -LibSubParseConsumeSubParseWordInputDataTest:testConsumeSubParseWordInputDataLongerWord() (gas: 3361) -LibSubParseConsumeSubParseWordInputDataTest:testConsumeSubParseWordInputDataMaxConstantsHeight() (gas: 3099) -LibSubParseConsumeSubParseWordInputDataTest:testConsumeSubParseWordInputDataWithOperands() (gas: 4060) -LibSubParseSubParseLiteralTest:testSubParseLiteralAllReject() (gas: 16490) -LibSubParseSubParseLiteralTest:testSubParseLiteralDispatchLengthOverflow() (gas: 126987) -LibSubParseSubParseLiteralTest:testSubParseLiteralEmptyBody() (gas: 11939) -LibSubParseSubParseLiteralTest:testSubParseLiteralFirstAcceptsSecondNotCalled() (gas: 15858) -LibSubParseSubParseLiteralTest:testSubParseLiteralFirstRejectsSecondAccepts() (gas: 15886) -LibSubParseSubParseLiteralTest:testSubParseLiteralSingleSubParserRejects() (gas: 12505) -LibSubParseSubParseLiteralTest:testSubParseLiteralSingleSubParserSuccess() (gas: 11953) -LibSubParseSubParseWordsTest:testSubParseWordsEmptyBytecode() (gas: 2127) -LibSubParseSubParseWordsTest:testSubParseWordsMultipleKnownOpcodes() (gas: 3904) -LibSubParseSubParseWordsTest:testSubParseWordsNoSubParsersUnknownReverts() (gas: 10245) -LibSubParseSubParseWordsTest:testSubParseWordsSingleSourceNoUnknown() (gas: 3629) -LibSubParseSubParseWordsTest:testSubParseWordsSingleSourceResolvesUnknown() (gas: 322324) -LibSubParseSubParseWordsTest:testSubParseWordsTwoSourcesBothResolved() (gas: 336930) -LibSubParseSubParseWordsTest:testSubParseWordsUnknownWordReverts() (gas: 327940) -LibSubParseSubParserConstantTest:testLibSubParseSubParserConstant(uint16,bytes32) (runs: 2048, μ: 1267, ~: 1267) -LibSubParseSubParserConstantTest:testLibSubParseSubParserConstantConstantsHeightOverflow(uint256,bytes32) (runs: 2048, μ: 7217, ~: 6976) -LibSubParseSubParserContextTest:testLibSubParseSubParserContext(uint8,uint8) (runs: 2048, μ: 1371, ~: 1371) -LibSubParseSubParserContextTest:testLibSubParseSubParserContextColumnOverflow(uint256,uint8) (runs: 2048, μ: 7201, ~: 7094) -LibSubParseSubParserContextTest:testLibSubParseSubParserContextRowOverflow(uint8,uint256) (runs: 2048, μ: 7250, ~: 7146) -LibSubParseSubParserExternTest:testLibSubParseSubParserExtern(address,uint8,uint8,uint8,uint16,uint8) (runs: 2048, μ: 3435, ~: 3361) -LibSubParseSubParserExternTest:testLibSubParseSubParserExternConstantsHeightOverflow(address,uint256,uint8,uint8,uint16,uint8) (runs: 2048, μ: 7921, ~: 7680) -LibSubParseUnknownWordTest:testUnknownWordMaxLength() (gas: 23087) -LibSubParseUnknownWordTest:testUnknownWordMinLength() (gas: 20648) -LibSubParseUnknownWordTest:testUnknownWordSingleSubParser(string) (runs: 2048, μ: 21266, ~: 21258) -LibSubParseUnknownWordTest:testUnknownWordWithOperandValues() (gas: 30408) -RainlangExpressionDeployerDeployCheckTest:testRainlangExpressionDeployerDeployNoEIP1820() (gas: 1440624) -RainlangExpressionDeployerDescribedByMetaV1Test:testRainlangExpressionDeployerDescribedByMetaV1Happy() (gas: 1446712) -RainlangExpressionDeployerIERC165Test:testRainlangExpressionDeployerIERC165(bytes4) (runs: 2048, μ: 1450202, ~: 1450202) -RainlangExpressionDeployerMetaTest:testRainlangExpressionDeployerExpectedConstructionMetaHash() (gas: 3246) -RainlangExpressionDeployerParse2Test:testParse2EmptyInput() (gas: 12475) -RainlangExpressionDeployerParse2Test:testParse2IntegrityFailure() (gas: 34388) -RainlangExpressionDeployerParse2Test:testParse2MissingFinalSemi() (gas: 19884) -RainlangExpressionDeployerParsePragma1Test:testParsePragma1ErrorPropagation() (gas: 14704) -RainlangExpressionDeployerParsePragma1Test:testParsePragma1NoPragma() (gas: 11403) -RainlangExpressionDeployerParsePragma1Test:testParsePragma1SingleAddress() (gas: 24417) -RainlangExpressionDeployerParsePragma1Test:testParsePragma1TwoAddresses() (gas: 37284) -RainlangExpressionDeployerPointersTest:testIntegrityFunctionPointers() (gas: 1453626) -RainlangIERC165Test:testRainlangIERC165(bytes4) (runs: 2048, μ: 138857, ~: 138857) -RainlangInterpreterEvalNonZeroSourceIndexTest:testEvalNonZeroSourceIndex() (gas: 54408) -RainlangInterpreterEvalNonZeroSourceIndexTest:testEvalNonZeroSourceIndexWithInputs() (gas: 71335) -RainlangInterpreterEvalNonZeroSourceIndexTest:testEvalSourceIndexSelectsCorrectSource() (gas: 63430) -RainlangInterpreterEvalTest:testEvalWithMatchingInputs(int256,int256) (runs: 2048, μ: 63238, ~: 63382) -RainlangInterpreterEvalTest:testInputsLengthMismatchTooFew(uint8,uint8) (runs: 2048, μ: 52440, ~: 51501) -RainlangInterpreterEvalTest:testInputsLengthMismatchTooMany(uint8) (runs: 2048, μ: 46867, ~: 44073) -RainlangInterpreterExtrospectTest:testInterpreterNoDisallowedOpcodes() (gas: 7003049) -RainlangInterpreterIERC165Test:testRainlangInterpreterIERC165(bytes4) (runs: 2048, μ: 4804973, ~: 4804973) -RainlangInterpreterPointersTest:testOpcodeFunctionPointers() (gas: 4811100) -RainlangInterpreterStateOverlayTest:testStateOverlayDuplicateKeyLastWins() (gas: 49386) -RainlangInterpreterStateOverlayTest:testStateOverlayDuplicateKeysInterleaved() (gas: 66672) -RainlangInterpreterStateOverlayTest:testStateOverlayGet() (gas: 47588) -RainlangInterpreterStateOverlayTest:testStateOverlayMultiplePairs() (gas: 63865) -RainlangInterpreterStateOverlayTest:testStateOverlayOddLength(bytes32[]) (runs: 2048, μ: 59762, ~: 59366) -RainlangInterpreterStateOverlayTest:testStateOverlaySet() (gas: 79181) -RainlangInterpreterStateOverlayTest:testStateOverlayThreePairs() (gas: 79631) -RainlangInterpreterTest:testRainlangInterpreterOddFunctionPointersLength() (gas: 499) -RainlangInterpreterZeroFunctionPointersTest:testStandardRainlangInterpreterDeploys() (gas: 4798115) -RainlangInterpreterZeroFunctionPointersTest:testZeroFunctionPointersReverts() (gas: 35514) -RainlangParserIERC165Test:testRainlangParserIERC165(bytes4) (runs: 2048, μ: 4117909, ~: 4117909) -RainlangParserParseMemoryOverflowTest:testCheckParseMemoryOverflowPasses() (gas: 4125421) -RainlangParserParseMemoryOverflowTest:testCheckParseMemoryOverflowReverts() (gas: 4142961) -RainlangParserParsePragmaEmptyInputTest:testParsePragma1EmptyInput() (gas: 4116639) -RainlangParserParsePragmaEmptyInputTest:testParsePragma1SingleNullByte() (gas: 4116710) -RainlangParserParserPragma:testParsePragmaNoPragma() (gas: 20574925) -RainlangParserParserPragma:testParsePragmaNoWhitespaceAfterKeyword() (gas: 4119828) -RainlangParserParserPragma:testParsePragmaSinglePragma() (gas: 12395970) -RainlangParserParserPragma:testParsePragmaWithInterstitial() (gas: 12399199) -RainlangParserPointersTest:testLiteralParserFunctionPointers() (gas: 4117488) -RainlangParserPointersTest:testOperandHandlerFunctionPointers() (gas: 4125322) -RainlangParserPointersTest:testParserParseMeta() (gas: 5466336) -RainlangParserUnsafeParseTest:testUnsafeParseEmpty() (gas: 7629) -RainlangParserUnsafeParseTest:testUnsafeParseHappyPath() (gas: 20833) -RainlangReferenceExternContextRainlenTest:testRainlangReferenceExternContextRainlenHappy() (gas: 2505690) -RainlangReferenceExternContextSenderTest:testRainlangReferenceExternContextContractHappy() (gas: 2505289) -RainlangReferenceExternContextSenderTest:testRainlangReferenceExternContextSenderHappy() (gas: 2504825) -RainlangReferenceExternDescribedByMetaV1:testRainlangReferenceExternDescribedByMetaV1Happy() (gas: 2428431) -RainlangReferenceExternIERC165Test:testRainlangReferenceExternIERC165(bytes4) (runs: 2048, μ: 2438966, ~: 2438966) -RainlangReferenceExternIntIncTest:testRainlangReferenceExternExternDirect() (gas: 2434928) -RainlangReferenceExternIntIncTest:testRainlangReferenceExternExternModWrap(uint16) (runs: 2048, μ: 2433978, ~: 2433978) -RainlangReferenceExternIntIncTest:testRainlangReferenceExternIntIncHappySugared() (gas: 2533571) -RainlangReferenceExternIntIncTest:testRainlangReferenceExternIntIncHappyUnsugared() (gas: 2529070) -RainlangReferenceExternIntIncTest:testRainlangReferenceExternIntIncIntegrity(bytes32,uint256,uint256) (runs: 100, μ: 439, ~: 439) -RainlangReferenceExternIntIncTest:testRainlangReferenceExternIntIncRun(bytes32,bytes32[]) (runs: 100, μ: 850330, ~: 765697) -RainlangReferenceExternIntIncTest:testRainlangReferenceExternIntIncSubParseKnownWord(uint16,bytes1) (runs: 100, μ: 2434204, ~: 2433877) -RainlangReferenceExternIntIncTest:testRainlangReferenceExternIntIncSubParseUnknownWord(uint16,bytes1,bytes) (runs: 100, μ: 2436510, ~: 2436781) -RainlangReferenceExternIntIncTest:testRainlangReferenceExternIntegrityDirect(uint16,uint256,uint256) (runs: 100, μ: 2425909, ~: 2425909) -RainlangReferenceExternPointersTest:testIntegrityFunctionPointers() (gas: 2429293) -RainlangReferenceExternPointersTest:testOpcodeFunctionPointers() (gas: 2429336) -RainlangReferenceExternPointersTest:testSubParserFunctionPointers() (gas: 2429759) -RainlangReferenceExternPointersTest:testSubParserLiteralParsers() (gas: 2429313) -RainlangReferenceExternPointersTest:testSubParserOperandParsers() (gas: 2429786) -RainlangReferenceExternPointersTest:testSubParserParseMeta() (gas: 18899) -RainlangReferenceExternRepeatTest:testRainlangReferenceExternRepeatHappy() (gas: 2559008) -RainlangReferenceExternRepeatTest:testRainlangReferenceExternRepeatNegative() (gas: 2470764) -RainlangReferenceExternRepeatTest:testRainlangReferenceExternRepeatNonInteger() (gas: 2473426) -RainlangReferenceExternRepeatTest:testRainlangReferenceExternRepeatTooLarge() (gas: 2471468) -RainlangReferenceExternRepeatTest:testRainlangReferenceExternRepeatTrailingBytes() (gas: 2470104) -RainlangReferenceExternRepeatTest:testRainlangReferenceExternRepeatZero() (gas: 2558051) -RainlangReferenceExternStackOperandTest:testRainlangReferenceExternStackOperandSingle(uint256) (runs: 2048, μ: 2509427, ~: 2509695) -RainlangReferenceExternSubParserIndexOutOfBoundsTest:testSubParseLiteral2IndexOutOfBounds() (gas: 1786461) -RainlangReferenceExternUnknownWordTest:testRainlangReferenceExternUnknownWord() (gas: 2474672) -RainlangStoreGetUninitializedTest:testGetUninitializedAfterSetDifferentKey() (gas: 246898) -RainlangStoreGetUninitializedTest:testGetUninitializedKey() (gas: 221321) -RainlangStoreGetUninitializedTest:testGetUninitializedKeyFuzz(uint256,bytes32) (runs: 2048, μ: 221376, ~: 221376) -RainlangStoreIERC165Test:testRainlangStoreIERC165(bytes4) (runs: 2048, μ: 223796, ~: 223796) -RainlangStoreNamespaceIsolationTest:testNamespaceIsolation(string,string,uint256,bytes32,bytes32) (runs: 2048, μ: 254812, ~: 254812) -RainlangStoreNamespaceIsolationTest:testNamespaceIsolationBidirectional(string,string,uint256,bytes32,bytes32,bytes32) (runs: 2048, μ: 278610, ~: 278619) -RainlangStoreNamespaceIsolationTest:testNamespaceIsolationSameSender(address,uint256,uint256,bytes32,bytes32,bytes32) (runs: 2048, μ: 275363, ~: 275373) -RainlangStoreOverwriteKeyTest:testOverwriteKeyAmongOtherKeys() (gas: 272526) -RainlangStoreOverwriteKeyTest:testOverwriteKeyLastValueWins() (gas: 247192) -RainlangStoreOverwriteKeyTest:testOverwriteKeyTriple() (gas: 249521) -RainlangStoreSetEmptyArrayTest:testSetEmptyArray() (gas: 219312) -RainlangStoreSetEmptyArrayTest:testSetEmptyArrayFuzz(uint256) (runs: 2048, μ: 219426, ~: 219426) -RainlangStoreSetEmptyArrayTest:testSetEmptyArrayNoEvents() (gas: 222994) -RainlangStoreSetEventTest:testSetEventFQNMatchesQualifyNamespace(uint256,bytes32,bytes32) (runs: 2048, μ: 248454, ~: 248454) -RainlangStoreSetEventTest:testSetEventMultiplePairs() (gas: 274888) -RainlangStoreSetEventTest:testSetEventSinglePair() (gas: 248296) -RainlangStoreTest:testRainlangStoreSetGetDupes((uint256,bytes32[11])[]) (runs: 100, μ: 1582353, ~: 1651971) -RainlangStoreTest:testRainlangStoreSetGetNoDupesMany((uint256,bytes32[])[]) (runs: 100, μ: 3417813, ~: 3274278) -RainlangStoreTest:testRainlangStoreSetGetNoDupesSingle(uint256,bytes32[]) (runs: 100, μ: 1899685, ~: 1855976) -RainlangStoreTest:testRainlangStoreSetOddLength(uint256,bytes32[]) (runs: 100, μ: 244405, ~: 245352) -RainlangTest:testExpressionDeployerAddress() (gas: 134442) -RainlangTest:testInterpreterAddress() (gas: 134508) -RainlangTest:testParserAddress() (gas: 134466) -RainlangTest:testStoreAddress() (gas: 134553) \ No newline at end of file diff --git a/.github/workflows/copy-artifacts.yaml b/.github/workflows/copy-artifacts.yaml deleted file mode 100644 index 750479cb0..000000000 --- a/.github/workflows/copy-artifacts.yaml +++ /dev/null @@ -1,10 +0,0 @@ -name: copy-artifacts -on: [push] -jobs: - copy-artifacts: - # Shared reusable (rainix#201): build from committed sources and assert the - # committed meta/pointer/abi artifacts are still current. Includes the - # Cachix substitution + 8G GC cap; no prelude (committing the artifacts is - # what removes the need for one). secrets: inherit carries CACHIX_AUTH_TOKEN. - uses: rainlanguage/rainix/.github/workflows/rainix-copy-artifacts.yaml@main - secrets: inherit diff --git a/.github/workflows/git-clean.yaml b/.github/workflows/git-clean.yaml new file mode 100644 index 000000000..c6a7ce712 --- /dev/null +++ b/.github/workflows/git-clean.yaml @@ -0,0 +1,13 @@ +name: Git is clean +on: [push] +jobs: + git-clean: + # Shared reusable (rainix#201): rebuild the committed artifacts from + # committed sources — `script/Build.sol`, `forge build`, CopyArtifacts, + # `forge fmt` — then `git diff --exit-code`. This is what makes the + # committed `src/generated/` record current at PR time rather than only at + # tag time. Includes the Cachix substitution + 8G GC cap; no prelude + # (committing the artifacts is what removes the need for one). + # secrets: inherit carries CACHIX_AUTH_TOKEN. + uses: rainlanguage/rainix/.github/workflows/rainix-copy-artifacts.yaml@main + secrets: inherit diff --git a/.github/workflows/manual-sol-artifacts.yaml b/.github/workflows/manual-sol-artifacts.yaml deleted file mode 100644 index c96b3065b..000000000 --- a/.github/workflows/manual-sol-artifacts.yaml +++ /dev/null @@ -1,20 +0,0 @@ -name: Manual sol artifacts -on: - workflow_dispatch: - inputs: - suite: - description: "The suite to deploy" - required: true - type: choice - options: - - parser - - store - - interpreter - - expression-deployer - - rainlang -jobs: - deploy: - uses: rainlanguage/rainix/.github/workflows/rainix-manual-sol-artifacts.yaml@main - with: - suite: ${{ inputs.suite }} - secrets: inherit diff --git a/.github/workflows/package-release.yaml b/.github/workflows/package-release.yaml index fc81a8fc7..8991a5f75 100644 --- a/.github/workflows/package-release.yaml +++ b/.github/workflows/package-release.yaml @@ -1,17 +1,15 @@ name: Package Release +# Library repo: the `rainlang` Soldeer package autopublishes on every merge to +# main under rainix-autopublish's next-version lifecycle. The deployed +# contracts, their deploy records and the manual `sol-v*` tag flow live in +# rainlang.deploy. on: push: branches: - main jobs: release: - # Bumps + publishes the rainlang crates to crates.io as a lockstep set, in - # dependency order (bindings, dispair, parser, eval, then test_fixtures): - # changing any member republishes the others with matching version pins, via - # the PUBLISH_PRIVATE_KEY deploy key. test_fixtures depends on none of the - # others but is released in lockstep so its embedded bytecode stays in sync. uses: rainlanguage/rainix/.github/workflows/rainix-autopublish.yaml@main with: - crates: rainlang_bindings rainlang_dispair rainlang_parser rainlang-eval rainlang_test_fixtures soldeer-package: rainlang secrets: inherit diff --git a/.github/workflows/rainix-rs-static.yaml b/.github/workflows/rainix-rs-static.yaml deleted file mode 100644 index 196173aa7..000000000 --- a/.github/workflows/rainix-rs-static.yaml +++ /dev/null @@ -1,5 +0,0 @@ -name: rs-static -on: [push] -jobs: - rs-static: - uses: rainlanguage/rainix/.github/workflows/rainix-rs-static.yaml@main diff --git a/.github/workflows/rainix-rs-test.yaml b/.github/workflows/rainix-rs-test.yaml deleted file mode 100644 index 77a83eaa5..000000000 --- a/.github/workflows/rainix-rs-test.yaml +++ /dev/null @@ -1,5 +0,0 @@ -name: rs-test -on: [push] -jobs: - rs-test: - uses: rainlanguage/rainix/.github/workflows/rainix-rs-test.yaml@main diff --git a/.prettierignore b/.prettierignore index b4a7e793f..e69de29bb 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1 +0,0 @@ -crates/abi/ diff --git a/.soldeerignore b/.soldeerignore index ad1586c48..0d0a331c5 100644 --- a/.soldeerignore +++ b/.soldeerignore @@ -1,30 +1,26 @@ .DS_Store -.cargo .coderabbit.yaml .devcontainer.json .envrc -.gas-snapshot .git .github .gitignore -.gitmodules .pre-commit-config.yaml .prettierignore .soldeerignore .vscode CLAUDE.md +TESTING.md /audit /cache /dependencies /flake.lock /flake.nix -/foundry.lock /foundry.toml -/lib /out /remappings.txt /slither.config.json /soldeer.lock /REUSE.toml -/deployments /meta +/script diff --git a/CLAUDE.md b/CLAUDE.md index f373ec71f..bf67b5293 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,209 +1,76 @@ # CLAUDE.md -This file provides guidance to Claude Code (claude.ai/code) when working with -code in this repository. - -**This file takes precedence over session summaries.** When a session is -restored from a compressed summary, the summary may contain incorrect -interpretations of processes defined here. Always re-read and follow this file -as written — do not rely on the summary's framing of what a process means or -what the user intended. - -## Build Environment - -This project uses **Nix flakes** for development. All commands must be run -inside `nix develop` or prefixed with `nix develop -c`. The `.envrc` auto-loads -the nix shell via direnv. - -### Prerequisites (run once per session, in order) - -```bash -nix develop -c rainix-sol-prelude -nix develop -c rainix-rs-prelude -nix develop -c rainlang-prelude -``` - -`rainlang-prelude` generates metadata files needed by the Solidity build (runs -`BuildAuthoringMeta.sol`, then `rain meta build` to produce CBOR-encoded -deflated meta). - -### Common Commands - -```bash -# Solidity -nix develop -c rainix-sol-test # forge test (all tests) -nix develop -c rainix-sol-static # slither + forge fmt check -nix develop -c rainix-sol-artifacts # build artifacts - -# Run a single Solidity test -nix develop -c forge test --match-test "testFunctionName" -nix develop -c forge test --match-contract "ContractName" - -# Rust -nix develop -c rainix-rs-test # cargo test -nix develop -c rainix-rs-static # cargo fmt --check + cargo clippy -nix develop -c test-wasm-build # WASM compilation check - -# Docs -nix develop -c forge doc -b # Solidity docs -nix develop -c cargo doc # Rust docs -``` - -### Build Pipeline - -1. `BuildAuthoringMeta.sol` exports raw ABI-encoded authoring meta to `meta/` -2. `rainlang-prelude` runs `rain meta build` to CBOR-encode and deflate the meta -3. `nix develop -c forge script --silent ./script/Build.sol` deploys contracts - in local EVM, extracts function pointer tables, and writes - `src/generated/*.pointers.sol` -4. `nix develop -c forge build` compiles everything using the generated pointers - -After `forge build`, check for warnings. Address all warnings before proceeding -to pointer rebuild, tests, or the next task. - -The `src/generated/` directory contains build-time generated constants (bytecode -hashes, function pointer tables, parse meta). These are regenerated by -`Build.sol`. - -After any source change affecting bytecode: run -`nix develop -c rainlang-prelude` → -`nix develop -c forge script --silent ./script/Build.sol` → -`nix develop -c forge fmt`, then run `LibInterpreterDeployTest` to get new -deploy addresses/codehashes. Update `LibInterpreterDeploy.sol` and repeat until -stable (constants cascade through the deploy chain). - -## Architecture - -### Core Components - -1. **RainlangParser** (`src/concrete/RainlangParser.sol`) — Converts Rainlang - text to bytecode. Uses bloom filter + fingerprint table for word lookup. - -2. **RainlangStore** (`src/concrete/RainlangStore.sol`) — Sandboxed key-value - storage. Namespaced by `msg.sender` + `StateNamespace`. - -3. **RainlangInterpreter** (`src/concrete/RainlangInterpreter.sol`) — - Stack-based evaluation runtime. Entry point: `eval4()`. Dispatches opcodes - via function pointer tables. - -4. **RainlangExpressionDeployer** - (`src/concrete/RainlangExpressionDeployer.sol`) — Coordinates parse → - integrity check → serialize. Implements `IParserV2`. - -5. **Rainlang** (`src/concrete/Rainlang.sol`) — On-chain registry and single - discovery point for the deployer, interpreter, store, and parser. External - tooling discovers all component addresses by querying a single known Rainlang - address. - -All five are deployed to deterministic addresses via Zoltu deployer. Addresses -and code hashes are in `src/lib/deploy/LibInterpreterDeploy.sol`. Deploy -constants cascade: parser → expression deployer → Rainlang. Interpreter changes -also cascade to Rainlang. - -### Opcode System - -Each opcode is a library in `src/lib/op//` with three functions: - -- **`run(Operand, Pointer stackTop) → Pointer`** — Runtime execution -- **`integrity(IntegrityCheckState, Operand) → (inputs, outputs)`** — - Pre-execution validation -- **Operand handler** — Parses operand bytes during parsing - -All opcodes are registered in `src/lib/op/LibAllStandardOps.sol` which maintains -four parallel arrays (authoring meta, operand handlers, integrity pointers, -opcode pointers). The ordering must be consistent across all four arrays. - -### Extern System - -External contracts can extend the interpreter with additional opcodes. -`src/concrete/extern/RainlangReferenceExtern.sol` is the reference -implementation. Externs implement `IInterpreterExternV4` and have their own -function pointer tables. - -### Rust Crates (`crates/`) - -- **cli** — CLI tool (`rainlang-cli`) -- **eval** — Evaluation runtime using REVM/foundry-evm -- **parser** — Rust parser implementation -- **dispair** — Dispatch pair utilities -- **bindings** — Alloy Solidity contract bindings -- **test_fixtures** — Shared test fixtures (deploys all contracts on local - Anvil) - -### Deployment - -`script/Deploy.sol` uses the `DEPLOYMENT_SUITE` env var to select which -component to deploy: `"parser"`, `"store"`, `"interpreter"`, -`"expression-deployer"`, or `"rainlang"`. - -## Solidity Conventions - -- **Solidity version**: exactly `0.8.25`, EVM target `cancun` -- **Optimizer**: enabled, 1000000 runs -- **Fuzz runs**: 2048 -- Source of truth for these settings is `foundry.toml` -- **License**: `LicenseRef-DCL-1.0` with copyright - `Rain Open Source Software Ltd` -- Custom bytecode serialization is used instead of ABI encoding for gas - efficiency -- Function pointer dispatch (no switch/if chains) for opcode routing -- Assembly blocks are used extensively and marked `memory-safe` where applicable -- NatSpec: when a doc block contains any explicit tag (e.g. `@title`), all - entries must be explicitly tagged — untagged lines continue the previous tag, - not implicit `@notice` - -## Test Conventions - -Testing patterns and conventions are in `TESTING.md`. Read that file before -writing tests. - -- Test files are in `test/` mirroring `src/` structure, suffixed `.t.sol` -- Rust test fixtures (`crates/test_fixtures/`) deploy all five contracts on a - local Anvil instance -- Always run test commands with `run_in_background: true` so work continues in - parallel -- While background builds or tests run, continue with other work that doesn't - depend on the build result — e.g. triage presentation, code review, - documentation edits +Guidance for Claude Code in this repo. This file takes precedence over session +summaries — re-read it as written rather than trusting a summary's framing of +what a process means. + +## What this repo is + +The **library half** of Rainlang: the parser, eval loop, standard ops, integrity +checks, the `BaseRainlang*` contracts and the extern / sub-parser bases, +published as the `rainlang` Soldeer package on every merge to main +(`rainix-autopublish`, next-version lifecycle via `next-v*` tags). The deployed +concretes, their generated tables and deploy records, the deploy scripts and the +Rust crates live in `rainlang.deploy`, which consumes this package. + +`src/concrete/extern/RainlangReferenceExtern.sol` is a reference implementation +of the extern and sub-parser bases, not a deployable: it stays here with its +tests. + +## Generated code + +`script/Build.sol` writes `src/generated/RainlangReferenceExternPointers.sol` — +the reference extern's parse meta, function pointer tables and meta hash. +Committed because contract and pointers file depend on each other circularly. +Never hand-edit it. `src/generated/0_1_9/` is the frozen record of the last +release this repo cut while it still carried the deploy half; nothing here reads +it, and it stays because frozen snapshots are append-only org-wide (rainix +`frozen-snapshots-append-only`). After any source change affecting the extern's +bytecode: + +1. `nix develop -c rainlang-prelude` +2. `nix develop -c forge script --silent ./script/Build.sol` +3. `nix develop -c forge fmt` + +Address all `forge build` warnings before pointer rebuild, tests, or the next +task. + +## Test harness + +`test/concrete/Test*.sol` are the `BaseRainlang*` contracts built from current +source with no generated tables; `test/lib/deploy/LibTestInterpreterDeploy.sol` +places them at fixed test addresses and +`test/abstract/RainlangExpressionDeployerDeploymentTest.deployRainlang()` is the +one hook that binds them. `rainlang.deploy` and the word repos override that +hook with the deployed pins, so `test/` ships in the package: `/test` is +deliberately absent from `.soldeerignore`. + +`optimizer_runs = 1000000` looks wrong (the org uses 100000) and is +load-bearing: every live CREATE2 address in `rainlang.deploy` is a pure function +of the bytecode this package's sources compile to. + +## Conventions + +- Compiler, optimizer and fuzz settings: `foundry.toml` is the source of truth. +- NatSpec: if a doc block has any explicit tag, every entry must be tagged — + untagged lines continue the previous tag, not implicit `@notice`. +- Tests: read `TESTING.md` before writing tests. Run test commands with + `run_in_background: true` and continue independent work meanwhile. ## Process (Jidoka) -Jidoka is a priority: process correctness (correct future) over ad hoc progress -(present state). Quality at the source enables throughput; skipping quality -steps creates rework and slows overall flow. Process introspection takes -precedence over following the process. - -Each fix is a complete cycle: understand → write test → run test (confirm fail) -→ write fix → run test (confirm pass) → run full suite → verify. Do not move to -the next item with incomplete work. New code must meet the same audit -requirements defined in the `/audit` skill — a fix that introduces untested -error paths, missing NatSpec, or other audit findings is not complete. - -When fixing bugs, follow TDD: write a test that reproduces the bug, run it to -confirm it fails, then write the fix and run the test again to confirm it -passes. Do not write the fix before running the test and confirming it -reproduces the bug. - -When the user says "jidoka," they are signaling a process defect. The response -is: - -1. Identify the process defect. -2. Propose a durable fix (document edit, rule change). -3. **Stop and wait for agreement.** Do not resume task work, run commands, or do - anything else. The process fix is the deliverable of that moment. - -When the user asks "why" about a defect, they are asking for root cause analysis -of the process failure — not requesting that you go do the thing. Answer the -"why" first, agree on the process fix, then resume. - -Do not claim motivations or internal states. Describe what you actually did, not -a story about why. Say "I skipped the test suite run" not "I was optimizing for -throughput." Say "the rule is in CLAUDE.md" not "I've internalized it." You have -no metrics, no persistence, and no self-observation — narratives about your own -reasoning are fabrications. - -## Audit Review - -Audit instructions are available as skills: `/audit` (full overview), -`/audit-pass0` through `/audit-pass5` (individual passes), and `/audit-triage` -(finding triage). +Process correctness (correct future) over ad hoc progress (present state). Each +fix is a complete cycle: understand → write test → run it (confirm it fails) → +fix → run it (confirm it passes) → full suite → verify. Never write the fix +before the failing test reproduces the bug. Do not move on with incomplete work; +new code meets the `/audit` skill's requirements. + +"jidoka" from the user signals a process defect: identify it, propose a durable +fix (document edit, rule change), then STOP and wait for agreement — the process +fix is the deliverable of that moment. A "why" question asks for root cause +analysis of the process failure, not for the task to be done. + +Do not claim motivations or internal states. Describe what you actually did ("I +skipped the test suite run"), not a story about why — you have no metrics, no +persistence, no self-observation; narratives about your own reasoning are +fabrications. diff --git a/Cargo.lock b/Cargo.lock deleted file mode 100644 index 56984d51c..000000000 --- a/Cargo.lock +++ /dev/null @@ -1,6095 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" - -[[package]] -name = "ahash" -version = "0.8.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", -] - -[[package]] -name = "allocator-api2" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" - -[[package]] -name = "alloy" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50ab0cd8afe573d1f7dc2353698a51b1f93aec362c8211e28cfd3948c6adba39" -dependencies = [ - "alloy-consensus", - "alloy-contract", - "alloy-core", - "alloy-eips", - "alloy-genesis", - "alloy-json-rpc", - "alloy-network", - "alloy-node-bindings", - "alloy-provider", - "alloy-rpc-client", - "alloy-rpc-types", - "alloy-serde", - "alloy-signer", - "alloy-signer-local", - "alloy-transport", - "alloy-transport-http", - "alloy-trie", -] - -[[package]] -name = "alloy-chains" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19a9cc9d81ace3da457883b0bdf76776e55f1b84219a9e9d55c27ad308548d3f" -dependencies = [ - "alloy-primitives", - "num_enum", - "serde", - "strum", -] - -[[package]] -name = "alloy-consensus" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f16daaf7e1f95f62c6c3bf8a3fc3d78b08ae9777810c0bb5e94966c7cd57ef0" -dependencies = [ - "alloy-eips", - "alloy-primitives", - "alloy-rlp", - "alloy-serde", - "alloy-trie", - "alloy-tx-macros", - "auto_impl", - "borsh", - "c-kzg", - "derive_more", - "either", - "k256", - "once_cell", - "rand 0.8.5", - "secp256k1 0.30.0", - "serde", - "serde_json", - "serde_with", - "thiserror 2.0.12", -] - -[[package]] -name = "alloy-consensus-any" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "118998d9015332ab1b4720ae1f1e3009491966a0349938a1f43ff45a8a4c6299" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives", - "alloy-rlp", - "alloy-serde", - "serde", -] - -[[package]] -name = "alloy-contract" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ac9e0c34dc6bce643b182049cdfcca1b8ce7d9c260cbdd561f511873b7e26cd" -dependencies = [ - "alloy-consensus", - "alloy-dyn-abi", - "alloy-json-abi", - "alloy-network", - "alloy-network-primitives", - "alloy-primitives", - "alloy-provider", - "alloy-rpc-types-eth", - "alloy-sol-types", - "alloy-transport", - "futures", - "futures-util", - "serde_json", - "thiserror 2.0.12", - "tracing", -] - -[[package]] -name = "alloy-core" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ddde5968de6044d67af107ad835bc0069a7ca245870b94c5958a7d8712b184" -dependencies = [ - "alloy-dyn-abi", - "alloy-json-abi", - "alloy-primitives", - "alloy-rlp", - "alloy-sol-types", -] - -[[package]] -name = "alloy-dyn-abi" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a475bb02d9cef2dbb99065c1664ab3fe1f9352e21d6d5ed3f02cdbfc06ed1abc" -dependencies = [ - "alloy-json-abi", - "alloy-primitives", - "alloy-sol-type-parser", - "alloy-sol-types", - "itoa", - "serde", - "serde_json", - "winnow 1.0.3", -] - -[[package]] -name = "alloy-eip2124" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "741bdd7499908b3aa0b159bba11e71c8cddd009a2c2eb7a06e825f1ec87900a5" -dependencies = [ - "alloy-primitives", - "alloy-rlp", - "crc", - "serde", - "thiserror 2.0.12", -] - -[[package]] -name = "alloy-eip2930" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9441120fa82df73e8959ae0e4ab8ade03de2aaae61be313fbf5746277847ce25" -dependencies = [ - "alloy-primitives", - "alloy-rlp", - "borsh", - "serde", -] - -[[package]] -name = "alloy-eip7702" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2919c5a56a1007492da313e7a3b6d45ef5edc5d33416fdec63c0d7a2702a0d20" -dependencies = [ - "alloy-primitives", - "alloy-rlp", - "borsh", - "k256", - "serde", - "thiserror 2.0.12", -] - -[[package]] -name = "alloy-eip7928" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b827a6d7784fe3eb3489d40699407a4cdcce74271421a01bdffe60cf573bb16" -dependencies = [ - "alloy-primitives", - "alloy-rlp", - "borsh", - "once_cell", - "serde", - "thiserror 2.0.12", -] - -[[package]] -name = "alloy-eips" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6ef28c9fdad22d4eec52d894f5f2673a0895f1e5ef196734568e68c0f6caca8" -dependencies = [ - "alloy-eip2124", - "alloy-eip2930", - "alloy-eip7702", - "alloy-eip7928", - "alloy-primitives", - "alloy-rlp", - "alloy-serde", - "auto_impl", - "borsh", - "c-kzg", - "derive_more", - "either", - "serde", - "serde_with", - "sha2", -] - -[[package]] -name = "alloy-genesis" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbf9480307b09d22876efb67d30cadd9013134c21f3a17ec9f93fd7536d38024" -dependencies = [ - "alloy-eips", - "alloy-primitives", - "alloy-serde", - "alloy-trie", - "borsh", - "serde", - "serde_with", -] - -[[package]] -name = "alloy-hardforks" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "977d2492ce210e34baf7b36afaacea272c96fbe6774c47e23f97d14033c0e94f" -dependencies = [ - "alloy-chains", - "alloy-eip2124", - "alloy-primitives", - "auto_impl", - "dyn-clone", -] - -[[package]] -name = "alloy-hardforks" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83ba208044232d14d4adbfa77e57d6329f51bc1acc21f5667bb7db72d88a0831" -dependencies = [ - "alloy-chains", - "alloy-eip2124", - "alloy-primitives", - "auto_impl", - "dyn-clone", -] - -[[package]] -name = "alloy-json-abi" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c36c9d7f9021601b04bfef14a4b64849f6d73116a4e91e071d7fbfe10247901" -dependencies = [ - "alloy-primitives", - "alloy-sol-type-parser", - "serde", - "serde_json", -] - -[[package]] -name = "alloy-json-rpc" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "422d110f1c40f1f8d0e5562b0b649c35f345fccb7093d9f02729943dcd1eef71" -dependencies = [ - "alloy-primitives", - "alloy-sol-types", - "http 1.3.1", - "serde", - "serde_json", - "thiserror 2.0.12", - "tracing", -] - -[[package]] -name = "alloy-network" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7197a66d94c4de1591cdc16a9bcea5f8cccd0da81b865b49aef97b1b4016e0fa" -dependencies = [ - "alloy-consensus", - "alloy-consensus-any", - "alloy-eips", - "alloy-json-rpc", - "alloy-network-primitives", - "alloy-primitives", - "alloy-rpc-types-any", - "alloy-rpc-types-eth", - "alloy-serde", - "alloy-signer", - "alloy-sol-types", - "async-trait", - "auto_impl", - "derive_more", - "futures-utils-wasm", - "serde", - "serde_json", - "thiserror 2.0.12", -] - -[[package]] -name = "alloy-network-primitives" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb82711d59a43fdfd79727c99f270b974c784ec4eb5728a0d0d22f26716c87ef" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives", - "alloy-serde", - "serde", -] - -[[package]] -name = "alloy-node-bindings" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9b2fda91b56bb08907cd44c5068130360e027e46a8c17612d386869fa7940be" -dependencies = [ - "alloy-genesis", - "alloy-hardforks 0.2.7", - "alloy-network", - "alloy-primitives", - "alloy-signer", - "alloy-signer-local", - "k256", - "libc", - "rand 0.8.5", - "serde_json", - "tempfile", - "thiserror 2.0.12", - "tracing", - "url", -] - -[[package]] -name = "alloy-primitives" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4885c1409b6936c4898e646ef58baf6ec54edaf6d8179f79df805a7b85b7cf3e" -dependencies = [ - "alloy-rlp", - "arbitrary", - "bytes", - "cfg-if", - "const-hex", - "derive_more", - "foldhash", - "hashbrown 0.17.1", - "indexmap 2.9.0", - "itoa", - "k256", - "keccak-asm", - "paste", - "proptest", - "proptest-derive", - "rand 0.9.1", - "rapidhash", - "ruint", - "rustc-hash", - "secp256k1 0.31.1", - "serde", - "sha3", -] - -[[package]] -name = "alloy-provider" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf6b18b929ef1d078b834c3631e9c925177f3b23ddc6fa08a722d13047205876" -dependencies = [ - "alloy-chains", - "alloy-consensus", - "alloy-eips", - "alloy-json-rpc", - "alloy-network", - "alloy-network-primitives", - "alloy-node-bindings", - "alloy-primitives", - "alloy-rpc-client", - "alloy-rpc-types-anvil", - "alloy-rpc-types-eth", - "alloy-signer", - "alloy-sol-types", - "alloy-transport", - "alloy-transport-http", - "async-stream", - "async-trait", - "auto_impl", - "dashmap", - "either", - "futures", - "futures-utils-wasm", - "lru", - "parking_lot", - "pin-project", - "reqwest 0.13.4", - "serde", - "serde_json", - "thiserror 2.0.12", - "tokio", - "tracing", - "url", - "wasmtimer", -] - -[[package]] -name = "alloy-rlp" -version = "0.3.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f70d83b765fdc080dbcd4f4db70d8d23fe4761f2f02ebfa9146b833900634b4" -dependencies = [ - "alloy-rlp-derive", - "arrayvec", - "bytes", -] - -[[package]] -name = "alloy-rlp-derive" -version = "0.3.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "alloy-rpc-client" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fcc9604042ca80bd37aa5e232ea1cd851f337e31e2babbbb345bc0b1c30de3" -dependencies = [ - "alloy-json-rpc", - "alloy-primitives", - "alloy-transport", - "alloy-transport-http", - "futures", - "pin-project", - "reqwest 0.13.4", - "serde", - "serde_json", - "tokio", - "tokio-stream", - "tower", - "tracing", - "url", - "wasmtimer", -] - -[[package]] -name = "alloy-rpc-types" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4faad925d3a669ffc15f43b3deec7fbdf2adeb28a4d6f9cf4bc661698c0f8f4b" -dependencies = [ - "alloy-primitives", - "alloy-rpc-types-engine", - "alloy-rpc-types-eth", - "alloy-serde", - "serde", -] - -[[package]] -name = "alloy-rpc-types-anvil" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47df51bedb3e6062cb9981187a51e86d0d64a4de66eb0855e9efe6574b044ddf" -dependencies = [ - "alloy-primitives", - "alloy-rpc-types-eth", - "alloy-serde", - "serde", -] - -[[package]] -name = "alloy-rpc-types-any" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3823026d1ed239a40f12364fac50726c8daf1b6ab8077a97212c5123910429ed" -dependencies = [ - "alloy-consensus-any", - "alloy-rpc-types-eth", - "alloy-serde", -] - -[[package]] -name = "alloy-rpc-types-engine" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb9b97b6e7965679ad22df297dda809b11cebc13405c1b537e5cffecc95834fa" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives", - "alloy-rlp", - "alloy-serde", - "derive_more", - "jsonwebtoken", - "rand 0.8.5", - "serde", - "strum", -] - -[[package]] -name = "alloy-rpc-types-eth" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c095f92c4e1ff4981d89e9aa02d5f98c762a1980ab66bec49c44be11349da2" -dependencies = [ - "alloy-consensus", - "alloy-consensus-any", - "alloy-eips", - "alloy-network-primitives", - "alloy-primitives", - "alloy-rlp", - "alloy-serde", - "alloy-sol-types", - "itertools 0.14.0", - "serde", - "serde_json", - "serde_with", - "thiserror 2.0.12", -] - -[[package]] -name = "alloy-rpc-types-trace" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5a4d010f86cd4e01e5205ec273911e538e1738e76d8bafe9ecd245910ea5a3" -dependencies = [ - "alloy-primitives", - "alloy-rpc-types-eth", - "alloy-serde", - "serde", - "serde_json", - "thiserror 2.0.12", -] - -[[package]] -name = "alloy-serde" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ece63b89294b8614ab3f483560c08d016930f842bf36da56bf0b764a15c11e" -dependencies = [ - "alloy-primitives", - "serde", - "serde_json", -] - -[[package]] -name = "alloy-signer" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f447aefab0f1c0649f71edc33f590992d4e122bc35fb9cdbbf67d4421ace85" -dependencies = [ - "alloy-primitives", - "async-trait", - "auto_impl", - "either", - "elliptic-curve", - "k256", - "thiserror 2.0.12", -] - -[[package]] -name = "alloy-signer-local" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f721f4bf2e4812e5505aaf5de16ef3065a8e26b9139ac885862d00b5a55a659a" -dependencies = [ - "alloy-consensus", - "alloy-network", - "alloy-primitives", - "alloy-signer", - "async-trait", - "k256", - "rand 0.8.5", - "thiserror 2.0.12", -] - -[[package]] -name = "alloy-sol-macro" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "840128ed2b2971d6d4668a553fe403a82683d3acc646c73e75887e7157408033" -dependencies = [ - "alloy-sol-macro-expander", - "alloy-sol-macro-input", - "proc-macro-error2", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "alloy-sol-macro-expander" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63ec265e5d65d725175f6ca7711c970824c90ef9c0d1f1973711d4150ee612dd" -dependencies = [ - "alloy-json-abi", - "alloy-sol-macro-input", - "const-hex", - "heck", - "indexmap 2.9.0", - "proc-macro-error2", - "proc-macro2", - "quote", - "sha3", - "syn 2.0.117", - "syn-solidity", -] - -[[package]] -name = "alloy-sol-macro-input" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89bf01077f18650876cfa682eb1f949967b5cde03f1a51c955c469d2c9b4aa67" -dependencies = [ - "alloy-json-abi", - "const-hex", - "dunce", - "heck", - "macro-string", - "proc-macro2", - "quote", - "serde_json", - "syn 2.0.117", - "syn-solidity", -] - -[[package]] -name = "alloy-sol-type-parser" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "857b470ecdd2ed38beaf82ad1a38c516a8ff75266750f38b9eeed001d575241b" -dependencies = [ - "serde", - "winnow 1.0.3", -] - -[[package]] -name = "alloy-sol-types" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384cf252de0db2dec52821eac037a7f57e2aa33fe5b900ce6fe39973402341f1" -dependencies = [ - "alloy-json-abi", - "alloy-primitives", - "alloy-sol-macro", - "serde", -] - -[[package]] -name = "alloy-transport" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8098f965442a9feb620965ba4b4be5e2b320f4ec5a3fff6bfa9e1ff7ef42bed1" -dependencies = [ - "alloy-json-rpc", - "auto_impl", - "base64 0.22.1", - "derive_more", - "futures", - "futures-utils-wasm", - "parking_lot", - "serde", - "serde_json", - "thiserror 2.0.12", - "tokio", - "tower", - "tracing", - "url", - "wasmtimer", -] - -[[package]] -name = "alloy-transport-http" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8597d36d546e1dab822345ad563243ec3920e199322cb554ce56c8ef1a1e2e7" -dependencies = [ - "alloy-json-rpc", - "alloy-transport", - "itertools 0.14.0", - "reqwest 0.13.4", - "serde_json", - "tower", - "tracing", - "url", -] - -[[package]] -name = "alloy-trie" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f14b5d9b2c2173980202c6ff470d96e7c5e202c65a9f67884ad565226df7fbb" -dependencies = [ - "alloy-primitives", - "alloy-rlp", - "derive_more", - "nybbles", - "serde", - "smallvec", - "thiserror 2.0.12", - "tracing", -] - -[[package]] -name = "alloy-tx-macros" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d69722eddcdf1ce096c3ab66cf8116999363f734eb36fe94a148f4f71c85da84" -dependencies = [ - "darling 0.23.0", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anstream" -version = "0.6.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" - -[[package]] -name = "anstyle-parse" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" -dependencies = [ - "anstyle", - "once_cell_polyfill", - "windows-sys 0.59.0", -] - -[[package]] -name = "anyhow" -version = "1.0.98" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" - -[[package]] -name = "arbitrary" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" -dependencies = [ - "derive_arbitrary", -] - -[[package]] -name = "ark-bls12-381" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df4dcc01ff89867cd86b0da835f23c3f02738353aaee7dde7495af71363b8d5" -dependencies = [ - "ark-ec", - "ark-ff 0.5.0", - "ark-serialize 0.5.0", - "ark-std 0.5.0", -] - -[[package]] -name = "ark-bn254" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" -dependencies = [ - "ark-ec", - "ark-ff 0.5.0", - "ark-r1cs-std", - "ark-std 0.5.0", -] - -[[package]] -name = "ark-ec" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" -dependencies = [ - "ahash", - "ark-ff 0.5.0", - "ark-poly", - "ark-serialize 0.5.0", - "ark-std 0.5.0", - "educe", - "fnv", - "hashbrown 0.15.4", - "itertools 0.13.0", - "num-bigint", - "num-integer", - "num-traits", - "zeroize", -] - -[[package]] -name = "ark-ff" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" -dependencies = [ - "ark-ff-asm 0.3.0", - "ark-ff-macros 0.3.0", - "ark-serialize 0.3.0", - "ark-std 0.3.0", - "derivative", - "num-bigint", - "num-traits", - "paste", - "rustc_version 0.3.3", - "zeroize", -] - -[[package]] -name = "ark-ff" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" -dependencies = [ - "ark-ff-asm 0.4.2", - "ark-ff-macros 0.4.2", - "ark-serialize 0.4.2", - "ark-std 0.4.0", - "derivative", - "digest 0.10.7", - "itertools 0.10.5", - "num-bigint", - "num-traits", - "paste", - "rustc_version 0.4.1", - "zeroize", -] - -[[package]] -name = "ark-ff" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" -dependencies = [ - "ark-ff-asm 0.5.0", - "ark-ff-macros 0.5.0", - "ark-serialize 0.5.0", - "ark-std 0.5.0", - "arrayvec", - "digest 0.10.7", - "educe", - "itertools 0.13.0", - "num-bigint", - "num-traits", - "paste", - "zeroize", -] - -[[package]] -name = "ark-ff-asm" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-ff-asm" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-ff-asm" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" -dependencies = [ - "quote", - "syn 2.0.117", -] - -[[package]] -name = "ark-ff-macros" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" -dependencies = [ - "num-bigint", - "num-traits", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-ff-macros" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" -dependencies = [ - "num-bigint", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-ff-macros" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" -dependencies = [ - "num-bigint", - "num-traits", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "ark-poly" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" -dependencies = [ - "ahash", - "ark-ff 0.5.0", - "ark-serialize 0.5.0", - "ark-std 0.5.0", - "educe", - "fnv", - "hashbrown 0.15.4", -] - -[[package]] -name = "ark-r1cs-std" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "941551ef1df4c7a401de7068758db6503598e6f01850bdb2cfdb614a1f9dbea1" -dependencies = [ - "ark-ec", - "ark-ff 0.5.0", - "ark-relations", - "ark-std 0.5.0", - "educe", - "num-bigint", - "num-integer", - "num-traits", - "tracing", -] - -[[package]] -name = "ark-relations" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec46ddc93e7af44bcab5230937635b06fb5744464dd6a7e7b083e80ebd274384" -dependencies = [ - "ark-ff 0.5.0", - "ark-std 0.5.0", - "tracing", - "tracing-subscriber 0.2.25", -] - -[[package]] -name = "ark-serialize" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" -dependencies = [ - "ark-std 0.3.0", - "digest 0.9.0", -] - -[[package]] -name = "ark-serialize" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" -dependencies = [ - "ark-std 0.4.0", - "digest 0.10.7", - "num-bigint", -] - -[[package]] -name = "ark-serialize" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" -dependencies = [ - "ark-serialize-derive", - "ark-std 0.5.0", - "arrayvec", - "digest 0.10.7", - "num-bigint", -] - -[[package]] -name = "ark-serialize-derive" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "ark-std" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" -dependencies = [ - "num-traits", - "rand 0.8.5", -] - -[[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" -dependencies = [ - "num-traits", - "rand 0.8.5", -] - -[[package]] -name = "ark-std" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" -dependencies = [ - "num-traits", - "rand 0.8.5", -] - -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - -[[package]] -name = "arrayvec" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" - -[[package]] -name = "async-stream" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" -dependencies = [ - "async-stream-impl", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "async-trait" -version = "0.1.88" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "aurora-engine-modexp" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "518bc5745a6264b5fd7b09dffb9667e400ee9e2bbe18555fac75e1fe9afa0df9" -dependencies = [ - "hex", - "num", -] - -[[package]] -name = "auto_impl" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "autocfg" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" - -[[package]] -name = "aws-lc-rs" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ec2f1fc3ec205783a5da9a7e6c1509cc69dedf09a1949e412c1e18469326d00" -dependencies = [ - "aws-lc-sys", - "zeroize", -] - -[[package]] -name = "aws-lc-sys" -version = "0.41.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a2f9779ce85b93ab6170dd940ad0169b5766ff848247aff13bb788b832fe3f4" -dependencies = [ - "cc", - "cmake", - "dunce", - "fs_extra", -] - -[[package]] -name = "backtrace" -version = "0.3.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-targets 0.52.6", -] - -[[package]] -name = "base16ct" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" - -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - -[[package]] -name = "base64" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - -[[package]] -name = "base64ct" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" - -[[package]] -name = "bit-set" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" -dependencies = [ - "bit-vec", -] - -[[package]] -name = "bit-vec" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" - -[[package]] -name = "bitcoin-io" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b47c4ab7a93edb0c7198c5535ed9b52b63095f4e9b45279c6736cec4b856baf" - -[[package]] -name = "bitcoin_hashes" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16" -dependencies = [ - "bitcoin-io", - "hex-conservative", -] - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" -dependencies = [ - "serde_core", -] - -[[package]] -name = "bitvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" -dependencies = [ - "funty", - "radium", - "serde", - "tap", - "wyz", -] - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "block-buffer" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" -dependencies = [ - "hybrid-array", -] - -[[package]] -name = "blst" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcdb4c7013139a150f9fc55d123186dbfaba0d912817466282c73ac49e71fb45" -dependencies = [ - "cc", - "glob", - "threadpool", - "zeroize", -] - -[[package]] -name = "borsh" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfd1e3f8955a5d7de9fab72fc8373fade9fb8a703968cb200ae3dc6cf08e185a" -dependencies = [ - "borsh-derive", - "bytes", - "cfg_aliases", -] - -[[package]] -name = "borsh-derive" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfcfdc083699101d5a7965e49925975f2f55060f94f9a05e7187be95d530ca59" -dependencies = [ - "once_cell", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "bumpalo" -version = "3.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee" - -[[package]] -name = "byte-slice-cast" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" -dependencies = [ - "serde", -] - -[[package]] -name = "c-kzg" -version = "2.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6648ed1e4ea8e8a1a4a2c78e1cda29a3fd500bc622899c340d8525ea9a76b24a" -dependencies = [ - "blst", - "cc", - "glob", - "hex", - "libc", - "once_cell", - "serde", -] - -[[package]] -name = "cc" -version = "1.2.62" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" -dependencies = [ - "find-msvc-tools", - "jobserver", - "libc", - "shlex", -] - -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - -[[package]] -name = "cfg-if" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" - -[[package]] -name = "cfg_aliases" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" - -[[package]] -name = "chrono" -version = "0.4.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "num-traits", - "serde", - "windows-link", -] - -[[package]] -name = "clap" -version = "4.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40b6887a1d8685cebccf115538db5c0efe625ccac9696ad45c409d96566e910f" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c66c08ce9f0c698cbce5c0279d0bb6ac936d8674174fe48f736533b964f59e" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_derive" -version = "4.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c7947ae4cc3d851207c1adb5b5e260ff0cca11446b1d6d1423788e442257ce" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "clap_lex" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" - -[[package]] -name = "cmake" -version = "0.1.58" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678" -dependencies = [ - "cc", -] - -[[package]] -name = "colorchoice" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" - -[[package]] -name = "combine" -version = "4.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" -dependencies = [ - "bytes", - "memchr", -] - -[[package]] -name = "const-hex" -version = "1.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83e22e0ed40b96a48d3db274f72fd365bd78f67af39b6bbd47e8a15e1c6207ff" -dependencies = [ - "cfg-if", - "cpufeatures 0.2.17", - "hex", - "proptest", - "serde", -] - -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - -[[package]] -name = "const_format" -version = "0.2.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" -dependencies = [ - "const_format_proc_macros", -] - -[[package]] -name = "const_format_proc_macros" -version = "0.2.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - -[[package]] -name = "cpufeatures" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] - -[[package]] -name = "cpufeatures" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" -dependencies = [ - "libc", -] - -[[package]] -name = "crc" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" - -[[package]] -name = "crossbeam-utils" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" - -[[package]] -name = "crunchy" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" - -[[package]] -name = "crypto-bigint" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" -dependencies = [ - "generic-array", - "rand_core 0.6.4", - "subtle", - "zeroize", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "crypto-common" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" -dependencies = [ - "hybrid-array", -] - -[[package]] -name = "darling" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" -dependencies = [ - "darling_core 0.20.11", - "darling_macro 0.20.11", -] - -[[package]] -name = "darling" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" -dependencies = [ - "darling_core 0.23.0", - "darling_macro 0.23.0", -] - -[[package]] -name = "darling_core" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.117", -] - -[[package]] -name = "darling_core" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" -dependencies = [ - "ident_case", - "proc-macro2", - "quote", - "serde", - "strsim", - "syn 2.0.117", -] - -[[package]] -name = "darling_macro" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" -dependencies = [ - "darling_core 0.20.11", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "darling_macro" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" -dependencies = [ - "darling_core 0.23.0", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "dashmap" -version = "6.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" -dependencies = [ - "cfg-if", - "crossbeam-utils", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", -] - -[[package]] -name = "der" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" -dependencies = [ - "const-oid", - "zeroize", -] - -[[package]] -name = "deranged" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" -dependencies = [ - "powerfmt", - "serde", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive-where" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d08b3a0bcc0d079199cd476b2cae8435016ec11d1c0986c6901c5ac223041534" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "derive_arbitrary" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "derive_more" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" -dependencies = [ - "derive_more-impl", -] - -[[package]] -name = "derive_more-impl" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", - "unicode-xid", -] - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer 0.10.4", - "const-oid", - "crypto-common 0.1.6", - "subtle", -] - -[[package]] -name = "digest" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" -dependencies = [ - "block-buffer 0.12.0", - "crypto-common 0.2.2", -] - -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "dunce" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" - -[[package]] -name = "dyn-clone" -version = "1.0.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" - -[[package]] -name = "ecdsa" -version = "0.16.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" -dependencies = [ - "der", - "digest 0.10.7", - "elliptic-curve", - "rfc6979", - "serdect", - "signature", - "spki", -] - -[[package]] -name = "educe" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" -dependencies = [ - "enum-ordinalize", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "either" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" -dependencies = [ - "serde", -] - -[[package]] -name = "elliptic-curve" -version = "0.13.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" -dependencies = [ - "base16ct", - "crypto-bigint", - "digest 0.10.7", - "ff", - "generic-array", - "group", - "pkcs8", - "rand_core 0.6.4", - "sec1", - "serdect", - "subtle", - "zeroize", -] - -[[package]] -name = "encoding_rs" -version = "0.8.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "enum-ordinalize" -version = "4.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" -dependencies = [ - "enum-ordinalize-derive", -] - -[[package]] -name = "enum-ordinalize-derive" -version = "4.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "errno" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" -dependencies = [ - "libc", - "windows-sys 0.60.2", -] - -[[package]] -name = "eyre" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" -dependencies = [ - "indenter", - "once_cell", -] - -[[package]] -name = "fastrand" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" - -[[package]] -name = "fastrlp" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" -dependencies = [ - "arrayvec", - "auto_impl", - "bytes", -] - -[[package]] -name = "fastrlp" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" -dependencies = [ - "arrayvec", - "auto_impl", - "bytes", -] - -[[package]] -name = "ff" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" -dependencies = [ - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "find-msvc-tools" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" - -[[package]] -name = "fixed-hash" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" -dependencies = [ - "byteorder", - "rand 0.8.5", - "rustc-hex", - "static_assertions", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foldhash" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" - -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "form_urlencoded" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "foundry-fork-db" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "198b205ccbd3e54041e9a145374a6e170c71deb6d4c84dede8cd504a75694ad6" -dependencies = [ - "alloy-chains", - "alloy-consensus", - "alloy-hardforks 0.4.7", - "alloy-primitives", - "alloy-provider", - "alloy-rpc-types", - "eyre", - "futures", - "parking_lot", - "revm", - "serde", - "serde_json", - "thiserror 2.0.12", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "fs_extra" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" - -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - -[[package]] -name = "futures" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" - -[[package]] -name = "futures-executor" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - -[[package]] -name = "futures-macro" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "futures-sink" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" - -[[package]] -name = "futures-task" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" - -[[package]] -name = "futures-util" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "futures-utils-wasm" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", - "zeroize", -] - -[[package]] -name = "getrandom" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi 0.11.1+wasi-snapshot-preview1", - "wasm-bindgen", -] - -[[package]] -name = "getrandom" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "r-efi", - "wasi 0.14.2+wasi-0.2.4", - "wasm-bindgen", -] - -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - -[[package]] -name = "glob" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" - -[[package]] -name = "group" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff", - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "h2" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap 2.9.0", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" - -[[package]] -name = "hashbrown" -version = "0.15.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" -dependencies = [ - "allocator-api2", -] - -[[package]] -name = "hashbrown" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash", -] - -[[package]] -name = "hashbrown" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" -dependencies = [ - "foldhash", - "serde", - "serde_core", -] - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hermit-abi" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -dependencies = [ - "serde", -] - -[[package]] -name = "hex-conservative" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5313b072ce3c597065a808dbf612c4c8e8590bdbf8b579508bf7a762c5eae6cd" -dependencies = [ - "arrayvec", -] - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http 0.2.12", - "pin-project-lite", -] - -[[package]] -name = "http-body" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" -dependencies = [ - "bytes", - "http 1.3.1", -] - -[[package]] -name = "http-body-util" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" -dependencies = [ - "bytes", - "futures-core", - "http 1.3.1", - "http-body 1.0.1", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "hybrid-array" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" -dependencies = [ - "typenum", -] - -[[package]] -name = "hyper" -version = "0.14.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http 0.2.12", - "http-body 0.4.6", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "httparse", - "itoa", - "pin-project-lite", - "smallvec", - "tokio", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.27.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" -dependencies = [ - "http 1.3.1", - "hyper 1.6.0", - "hyper-util", - "rustls", - "rustls-pki-types", - "tokio", - "tokio-rustls", - "tower-service", -] - -[[package]] -name = "hyper-tls" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" -dependencies = [ - "bytes", - "hyper 0.14.32", - "native-tls", - "tokio", - "tokio-native-tls", -] - -[[package]] -name = "hyper-util" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc2fdfdbff08affe55bb779f33b053aa1fe5dd5b54c257343c17edfa55711bdb" -dependencies = [ - "base64 0.22.1", - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "hyper 1.6.0", - "ipnet", - "libc", - "percent-encoding", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.63" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "wasm-bindgen", - "windows-core", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "icu_collections" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" -dependencies = [ - "displaydoc", - "potential_utf", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locale_core" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_normalizer" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" - -[[package]] -name = "icu_properties" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_locale_core", - "icu_properties_data", - "icu_provider", - "potential_utf", - "zerotrie", - "zerovec", -] - -[[package]] -name = "icu_properties_data" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" - -[[package]] -name = "icu_provider" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" -dependencies = [ - "displaydoc", - "icu_locale_core", - "stable_deref_trait", - "tinystr", - "writeable", - "yoke", - "zerofrom", - "zerotrie", - "zerovec", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" -dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", -] - -[[package]] -name = "idna_adapter" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" -dependencies = [ - "icu_normalizer", - "icu_properties", -] - -[[package]] -name = "impl-codec" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" -dependencies = [ - "parity-scale-codec", -] - -[[package]] -name = "impl-trait-for-tuples" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "indenter" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", -] - -[[package]] -name = "indexmap" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" -dependencies = [ - "arbitrary", - "equivalent", - "hashbrown 0.15.4", - "serde", -] - -[[package]] -name = "ipnet" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" - -[[package]] -name = "is_terminal_polyfill" -version = "1.70.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" - -[[package]] -name = "jni" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" -dependencies = [ - "cesu8", - "cfg-if", - "combine", - "jni-sys 0.3.1", - "log", - "thiserror 1.0.69", - "walkdir", - "windows-sys 0.45.0", -] - -[[package]] -name = "jni-sys" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" -dependencies = [ - "jni-sys 0.4.1", -] - -[[package]] -name = "jni-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" -dependencies = [ - "jni-sys-macros", -] - -[[package]] -name = "jni-sys-macros" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" -dependencies = [ - "quote", - "syn 2.0.117", -] - -[[package]] -name = "jobserver" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" -dependencies = [ - "getrandom 0.3.3", - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.99" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" -dependencies = [ - "cfg-if", - "futures-util", - "once_cell", - "wasm-bindgen", -] - -[[package]] -name = "jsonwebtoken" -version = "9.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde" -dependencies = [ - "base64 0.22.1", - "js-sys", - "pem", - "ring", - "serde", - "serde_json", - "simple_asn1", -] - -[[package]] -name = "k256" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" -dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", - "once_cell", - "serdect", - "sha2", -] - -[[package]] -name = "keccak" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e24a010dd405bd7ed803e5253182815b41bf2e6a80cc3bfc066658e03a198aa" -dependencies = [ - "cfg-if", - "cpufeatures 0.3.0", -] - -[[package]] -name = "keccak-asm" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1766b89733097006f3a1388a02849865d6bc98c89273cb622e29fdd209922183" -dependencies = [ - "digest 0.10.7", - "sha3-asm", -] - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - -[[package]] -name = "libc" -version = "0.2.174" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" - -[[package]] -name = "libm" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" - -[[package]] -name = "linux-raw-sys" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" - -[[package]] -name = "litemap" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" - -[[package]] -name = "lock_api" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" - -[[package]] -name = "lru" -version = "0.16.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f66e8d5d03f609abc3a39e6f08e4164ebf1447a732906d39eb9b99b7919ef39" -dependencies = [ - "hashbrown 0.16.1", -] - -[[package]] -name = "lru-slab" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" - -[[package]] -name = "macro-string" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59a9dbbfc75d2688ed057456ce8a3ee3f48d12eec09229f560f3643b9f275653" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata 0.1.10", -] - -[[package]] -name = "memchr" -version = "2.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "miniz_oxide" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" -dependencies = [ - "adler2", -] - -[[package]] -name = "mio" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" -dependencies = [ - "libc", - "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.59.0", -] - -[[package]] -name = "native-tls" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" -dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework 2.11.1", - "security-framework-sys", - "tempfile", -] - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" -dependencies = [ - "num-bigint", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", -] - -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-complex" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" -dependencies = [ - "num-bigint", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "num_cpus" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "nybbles" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d49ff0c0d00d4a502b39df9af3a525e1efeb14b9dabb5bb83335284c1309210" -dependencies = [ - "alloy-rlp", - "cfg-if", - "proptest", - "ruint", - "serde", - "smallvec", -] - -[[package]] -name = "object" -version = "0.36.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" - -[[package]] -name = "once_cell_polyfill" -version = "1.70.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" - -[[package]] -name = "openssl" -version = "0.10.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" -dependencies = [ - "bitflags 2.11.1", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "openssl-probe" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - -[[package]] -name = "openssl-sys" -version = "0.9.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "p256" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2", -] - -[[package]] -name = "parity-scale-codec" -version = "3.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" -dependencies = [ - "arrayvec", - "bitvec", - "byte-slice-cast", - "const_format", - "impl-trait-for-tuples", - "parity-scale-codec-derive", - "rustversion", - "serde", -] - -[[package]] -name = "parity-scale-codec-derive" -version = "3.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "parking_lot" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets 0.52.6", -] - -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - -[[package]] -name = "pem" -version = "3.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3" -dependencies = [ - "base64 0.22.1", - "serde", -] - -[[package]] -name = "percent-encoding" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" - -[[package]] -name = "pest" -version = "2.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" -dependencies = [ - "memchr", - "thiserror 2.0.12", - "ucd-trie", -] - -[[package]] -name = "phf" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" -dependencies = [ - "phf_macros", - "phf_shared", - "serde", -] - -[[package]] -name = "phf_generator" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" -dependencies = [ - "fastrand", - "phf_shared", -] - -[[package]] -name = "phf_macros" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" -dependencies = [ - "phf_generator", - "phf_shared", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "phf_shared" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" -dependencies = [ - "siphasher", -] - -[[package]] -name = "pin-project" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der", - "spki", -] - -[[package]] -name = "pkg-config" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" - -[[package]] -name = "potential_utf" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" -dependencies = [ - "zerovec", -] - -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "ppv-lite86" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "primeorder" -version = "0.13.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" -dependencies = [ - "elliptic-curve", -] - -[[package]] -name = "primitive-types" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" -dependencies = [ - "fixed-hash", - "impl-codec", - "uint", -] - -[[package]] -name = "proc-macro-crate" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" -dependencies = [ - "toml_edit", -] - -[[package]] -name = "proc-macro-error-attr2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "proc-macro-error2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" -dependencies = [ - "proc-macro-error-attr2", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "proc-macro2" -version = "1.0.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "proptest" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fcdab19deb5195a31cf7726a210015ff1496ba1464fd42cb4f537b8b01b471f" -dependencies = [ - "bit-set", - "bit-vec", - "bitflags 2.11.1", - "lazy_static", - "num-traits", - "rand 0.9.1", - "rand_chacha 0.9.0", - "rand_xorshift", - "regex-syntax 0.8.5", - "rusty-fork", - "tempfile", - "unarray", -] - -[[package]] -name = "proptest-derive" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c57924a81864dddafba92e1bf92f9bf82f97096c44489548a60e888e1547549b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - -[[package]] -name = "quinn" -version = "0.11.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" -dependencies = [ - "bytes", - "cfg_aliases", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash", - "rustls", - "socket2", - "thiserror 2.0.12", - "tokio", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-proto" -version = "0.11.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" -dependencies = [ - "aws-lc-rs", - "bytes", - "getrandom 0.3.3", - "lru-slab", - "rand 0.9.1", - "ring", - "rustc-hash", - "rustls", - "rustls-pki-types", - "slab", - "thiserror 2.0.12", - "tinyvec", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-udp" -version = "0.5.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970" -dependencies = [ - "cfg_aliases", - "libc", - "once_cell", - "socket2", - "tracing", - "windows-sys 0.59.0", -] - -[[package]] -name = "quote" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "r-efi" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" - -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rain-error-decoding" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9224baec8539fb08eda0cdf3cb0bf27538b28d366daaab289afb897da92d71dd" -dependencies = [ - "alloy", - "async-trait", - "getrandom 0.2.16", - "once_cell", - "reqwest 0.11.27", - "serde", - "serde_json", - "thiserror 1.0.69", - "url", -] - -[[package]] -name = "rain-forker" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "805c27817e3d51504c5e92e8fd2c864898772b4f8fc0fd94738a93b63795dac2" -dependencies = [ - "alloy", - "eyre", - "foundry-fork-db", - "rain-error-decoding", - "revm", - "revm-inspectors", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "rainlang-cli" -version = "0.0.1" -dependencies = [ - "alloy", - "anyhow", - "clap", - "rainlang-eval", - "rainlang_bindings", - "rainlang_test_fixtures", - "tempfile", - "tokio", - "tracing", - "tracing-subscriber 0.3.19", -] - -[[package]] -name = "rainlang-eval" -version = "0.1.6" -dependencies = [ - "alloy", - "eyre", - "rain-error-decoding", - "rain-forker", - "rainlang_bindings", - "rainlang_test_fixtures", - "serde", - "thiserror 1.0.69", - "tokio", - "tracing", - "wasm-bindgen-utils", -] - -[[package]] -name = "rainlang_bindings" -version = "0.1.20" -dependencies = [ - "alloy", -] - -[[package]] -name = "rainlang_dispair" -version = "0.1.15" -dependencies = [ - "alloy", -] - -[[package]] -name = "rainlang_parser" -version = "0.1.8" -dependencies = [ - "alloy", - "rainlang_bindings", - "rainlang_dispair", - "thiserror 1.0.69", - "tokio", -] - -[[package]] -name = "rainlang_test_fixtures" -version = "0.1.4" -dependencies = [ - "alloy", - "getrandom 0.2.16", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", - "serde", -] - -[[package]] -name = "rand" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" -dependencies = [ - "rand_chacha 0.9.0", - "rand_core 0.9.3", - "serde", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" -dependencies = [ - "ppv-lite86", - "rand_core 0.9.3", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.16", -] - -[[package]] -name = "rand_core" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" -dependencies = [ - "getrandom 0.3.3", - "serde", -] - -[[package]] -name = "rand_xorshift" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" -dependencies = [ - "rand_core 0.9.3", -] - -[[package]] -name = "rapidhash" -version = "4.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e48930979c155e2f33aa36ab3119b5ee81332beb6482199a8ecd6029b80b59" -dependencies = [ - "rustversion", -] - -[[package]] -name = "redox_syscall" -version = "0.5.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" -dependencies = [ - "bitflags 2.11.1", -] - -[[package]] -name = "ref-cast" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" -dependencies = [ - "ref-cast-impl", -] - -[[package]] -name = "ref-cast-impl" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "regex" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-automata" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax 0.8.5", -] - -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" - -[[package]] -name = "reqwest" -version = "0.11.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" -dependencies = [ - "base64 0.21.7", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.32", - "hyper-tls", - "ipnet", - "js-sys", - "log", - "mime", - "native-tls", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls-pemfile", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper 0.1.2", - "system-configuration", - "tokio", - "tokio-native-tls", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winreg", -] - -[[package]] -name = "reqwest" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" -dependencies = [ - "base64 0.22.1", - "bytes", - "futures-core", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "hyper 1.6.0", - "hyper-rustls", - "hyper-util", - "js-sys", - "log", - "percent-encoding", - "pin-project-lite", - "quinn", - "rustls", - "rustls-pki-types", - "rustls-platform-verifier", - "serde", - "serde_json", - "sync_wrapper 1.0.2", - "tokio", - "tokio-rustls", - "tower", - "tower-http", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "revm" -version = "36.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0abc15d09cd211e9e73410ada10134069c794d4bcdb787dfc16a1bf0939849c" -dependencies = [ - "revm-bytecode", - "revm-context", - "revm-context-interface", - "revm-database", - "revm-database-interface", - "revm-handler", - "revm-inspector", - "revm-interpreter", - "revm-precompile", - "revm-primitives", - "revm-state", -] - -[[package]] -name = "revm-bytecode" -version = "9.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86e468df3cf5cf59fa7ef71a3e9ccabb76bb336401ea2c0674f563104cf3c5e" -dependencies = [ - "bitvec", - "phf", - "revm-primitives", - "serde", -] - -[[package]] -name = "revm-context" -version = "15.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eb1f0a76b14d684a444fc52f7bf6b7564bf882599d91ee62e76d602e7a187c7" -dependencies = [ - "bitvec", - "cfg-if", - "derive-where", - "revm-bytecode", - "revm-context-interface", - "revm-database-interface", - "revm-primitives", - "revm-state", - "serde", -] - -[[package]] -name = "revm-context-interface" -version = "16.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc256b27743e2912ca16899568e6652a372eb5d1d573e6edb16c7836b16cf487" -dependencies = [ - "alloy-eip2930", - "alloy-eip7702", - "auto_impl", - "either", - "revm-database-interface", - "revm-primitives", - "revm-state", - "serde", -] - -[[package]] -name = "revm-database" -version = "12.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c0a7d6da41061f2c50f99a2632571026b23684b5449ff319914151f4449b6c8" -dependencies = [ - "alloy-eips", - "revm-bytecode", - "revm-database-interface", - "revm-primitives", - "revm-state", - "serde", -] - -[[package]] -name = "revm-database-interface" -version = "10.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd497a38a79057b94a049552cb1f925ad15078bc1a479c132aeeebd1d2ccc768" -dependencies = [ - "auto_impl", - "either", - "revm-primitives", - "revm-state", - "serde", - "thiserror 2.0.12", -] - -[[package]] -name = "revm-handler" -version = "17.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1eed729ca9b228ae98688f352235871e9b8be3d568d488e4070f64c56e9d3d" -dependencies = [ - "auto_impl", - "derive-where", - "revm-bytecode", - "revm-context", - "revm-context-interface", - "revm-database-interface", - "revm-interpreter", - "revm-precompile", - "revm-primitives", - "revm-state", - "serde", -] - -[[package]] -name = "revm-inspector" -version = "17.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf5102391706513689f91cb3cb3d97b5f13a02e8647e6e9cb7620877ef84847" -dependencies = [ - "auto_impl", - "either", - "revm-context", - "revm-database-interface", - "revm-handler", - "revm-interpreter", - "revm-primitives", - "revm-state", - "serde", - "serde_json", -] - -[[package]] -name = "revm-inspectors" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9487362b728f80dd2033ef5f4d0688453435bbe7caa721fa7e3b8fa25d89242b" -dependencies = [ - "alloy-primitives", - "alloy-rpc-types-eth", - "alloy-rpc-types-trace", - "alloy-sol-types", - "anstyle", - "colorchoice", - "revm", - "serde", - "serde_json", - "thiserror 2.0.12", -] - -[[package]] -name = "revm-interpreter" -version = "34.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf22f80612bb8f58fd1f578750281f2afadb6c93835b14ae6a4d6b75ca26f445" -dependencies = [ - "revm-bytecode", - "revm-context-interface", - "revm-primitives", - "revm-state", - "serde", -] - -[[package]] -name = "revm-precompile" -version = "32.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2ec11f45deec71e4945e1809736bb20d454285f9167ab53c5159dae1deb603f" -dependencies = [ - "ark-bls12-381", - "ark-bn254", - "ark-ec", - "ark-ff 0.5.0", - "ark-serialize 0.5.0", - "arrayref", - "aurora-engine-modexp", - "blst", - "c-kzg", - "cfg-if", - "k256", - "p256", - "revm-primitives", - "ripemd", - "secp256k1 0.31.1", - "sha2", -] - -[[package]] -name = "revm-primitives" -version = "22.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfb5ce6cf18b118932bcdb7da05cd9c250f2cb9f64131396b55f3fe3537c35" -dependencies = [ - "alloy-primitives", - "num_enum", - "once_cell", - "serde", -] - -[[package]] -name = "revm-state" -version = "10.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29404707763da607e5d6e4771cb203998c28159279c2f64cc32de08d2814651" -dependencies = [ - "alloy-eip7928", - "bitflags 2.11.1", - "revm-bytecode", - "revm-primitives", - "serde", -] - -[[package]] -name = "rfc6979" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" -dependencies = [ - "hmac", - "subtle", -] - -[[package]] -name = "ring" -version = "0.17.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" -dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.16", - "libc", - "untrusted", - "windows-sys 0.52.0", -] - -[[package]] -name = "ripemd" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "rlp" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" -dependencies = [ - "bytes", - "rustc-hex", -] - -[[package]] -name = "ruint" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0298da754d1395046b0afdc2f20ee76d29a8ae310cd30ffa84ed42acba9cb12a" -dependencies = [ - "alloy-rlp", - "arbitrary", - "ark-ff 0.3.0", - "ark-ff 0.4.2", - "ark-ff 0.5.0", - "bytes", - "fastrlp 0.3.1", - "fastrlp 0.4.0", - "num-bigint", - "num-integer", - "num-traits", - "parity-scale-codec", - "primitive-types", - "proptest", - "rand 0.8.5", - "rand 0.9.1", - "rlp", - "ruint-macro", - "serde_core", - "valuable", - "zeroize", -] - -[[package]] -name = "ruint-macro" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" - -[[package]] -name = "rustc-demangle" -version = "0.1.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" - -[[package]] -name = "rustc-hash" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" - -[[package]] -name = "rustc-hex" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" - -[[package]] -name = "rustc_version" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" -dependencies = [ - "semver 0.11.0", -] - -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver 1.0.26", -] - -[[package]] -name = "rustix" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" -dependencies = [ - "bitflags 2.11.1", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.59.0", -] - -[[package]] -name = "rustls" -version = "0.23.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" -dependencies = [ - "aws-lc-rs", - "once_cell", - "rustls-pki-types", - "rustls-webpki", - "subtle", - "zeroize", -] - -[[package]] -name = "rustls-native-certs" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" -dependencies = [ - "openssl-probe", - "rustls-pki-types", - "schannel", - "security-framework 3.2.0", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - -[[package]] -name = "rustls-pki-types" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" -dependencies = [ - "web-time", - "zeroize", -] - -[[package]] -name = "rustls-platform-verifier" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be59af91596cac372a6942530653ad0c3a246cdd491aaa9dcaee47f88d67d5a0" -dependencies = [ - "core-foundation 0.10.1", - "core-foundation-sys", - "jni", - "log", - "once_cell", - "rustls", - "rustls-native-certs", - "rustls-platform-verifier-android", - "rustls-webpki", - "security-framework 3.2.0", - "security-framework-sys", - "webpki-root-certs", - "windows-sys 0.59.0", -] - -[[package]] -name = "rustls-platform-verifier-android" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" - -[[package]] -name = "rustls-webpki" -version = "0.103.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" -dependencies = [ - "aws-lc-rs", - "ring", - "rustls-pki-types", - "untrusted", -] - -[[package]] -name = "rustversion" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" - -[[package]] -name = "rusty-fork" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" -dependencies = [ - "fnv", - "quick-error", - "tempfile", - "wait-timeout", -] - -[[package]] -name = "ryu" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "schannel" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "schemars" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" -dependencies = [ - "dyn-clone", - "ref-cast", - "serde", - "serde_json", -] - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "sec1" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" -dependencies = [ - "base16ct", - "der", - "generic-array", - "pkcs8", - "serdect", - "subtle", - "zeroize", -] - -[[package]] -name = "secp256k1" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b50c5943d326858130af85e049f2661ba3c78b26589b8ab98e65e80ae44a1252" -dependencies = [ - "bitcoin_hashes", - "rand 0.8.5", - "secp256k1-sys 0.10.1", - "serde", -] - -[[package]] -name = "secp256k1" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c3c81b43dc2d8877c216a3fccf76677ee1ebccd429566d3e67447290d0c42b2" -dependencies = [ - "bitcoin_hashes", - "rand 0.9.1", - "secp256k1-sys 0.11.0", -] - -[[package]] -name = "secp256k1-sys" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" -dependencies = [ - "cc", -] - -[[package]] -name = "secp256k1-sys" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb913707158fadaf0d8702c2db0e857de66eb003ccfdda5924b5f5ac98efb38" -dependencies = [ - "cc", -] - -[[package]] -name = "security-framework" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags 2.11.1", - "core-foundation 0.9.4", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" -dependencies = [ - "bitflags 2.11.1", - "core-foundation 0.10.1", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "semver" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver" -version = "1.0.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" - -[[package]] -name = "semver-parser" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9900206b54a3527fdc7b8a938bffd94a568bac4f4aa8113b209df75a09c0dec2" -dependencies = [ - "pest", -] - -[[package]] -name = "serde" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" -dependencies = [ - "serde_core", - "serde_derive", -] - -[[package]] -name = "serde-wasm-bindgen" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e" -dependencies = [ - "js-sys", - "serde", - "wasm-bindgen", -] - -[[package]] -name = "serde-wasm-bindgen" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" -dependencies = [ - "js-sys", - "serde", - "wasm-bindgen", -] - -[[package]] -name = "serde_core" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "serde_derive_internals" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e578a843d40b4189a4d66bba51d7684f57da5bd7c304c64e14bd63efbef49509" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "serde_json" -version = "1.0.140" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" -dependencies = [ - "indexmap 2.9.0", - "itoa", - "memchr", - "ryu", - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_with" -version = "3.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf65a400f8f66fb7b0552869ad70157166676db75ed8181f8104ea91cf9d0b42" -dependencies = [ - "base64 0.22.1", - "chrono", - "hex", - "indexmap 1.9.3", - "indexmap 2.9.0", - "schemars", - "serde", - "serde_derive", - "serde_json", - "serde_with_macros", - "time", -] - -[[package]] -name = "serde_with_macros" -version = "3.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81679d9ed988d5e9a5e6531dc3f2c28efbd639cbd1dfb628df08edea6004da77" -dependencies = [ - "darling 0.20.11", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "serdect" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" -dependencies = [ - "base16ct", - "serde", -] - -[[package]] -name = "sha2" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures 0.2.17", - "digest 0.10.7", -] - -[[package]] -name = "sha3" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be176f1a57ce4e3d31c1a166222d9768de5954f811601fb7ca06fc8203905ce1" -dependencies = [ - "digest 0.11.3", - "keccak", -] - -[[package]] -name = "sha3-asm" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f3f15d4e239ebe08413eed880e0f9b5af4b40ee0472543320efa91d488e96a7" -dependencies = [ - "cc", - "cfg-if", -] - -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "signal-hook-registry" -version = "1.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" -dependencies = [ - "libc", -] - -[[package]] -name = "signature" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" -dependencies = [ - "digest 0.10.7", - "rand_core 0.6.4", -] - -[[package]] -name = "simple_asn1" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" -dependencies = [ - "num-bigint", - "num-traits", - "thiserror 2.0.12", - "time", -] - -[[package]] -name = "siphasher" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" - -[[package]] -name = "slab" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" - -[[package]] -name = "smallvec" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" -dependencies = [ - "serde", -] - -[[package]] -name = "socket2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "spki" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - -[[package]] -name = "strum" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f64def088c51c9510a8579e3c5d67c65349dcf755e5479ad3d010aa6454e2c32" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77a8c5abcaf0f9ce05d62342b7d298c346515365c36b673df4ebe3ced01fde8" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.117", -] - -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.117" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn-solidity" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec005042c7d952febc1a3ef5b0f6674e9054aa836877a31c90b20e25b3d31744" -dependencies = [ - "paste", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - -[[package]] -name = "sync_wrapper" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" -dependencies = [ - "futures-core", -] - -[[package]] -name = "synstructure" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "system-configuration" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.3.2", - "core-foundation 0.9.4", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "tempfile" -version = "3.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" -dependencies = [ - "fastrand", - "getrandom 0.3.3", - "once_cell", - "rustix", - "windows-sys 0.59.0", -] - -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl 1.0.69", -] - -[[package]] -name = "thiserror" -version = "2.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" -dependencies = [ - "thiserror-impl 2.0.12", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "thiserror-impl" -version = "2.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "thread_local" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "threadpool" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" -dependencies = [ - "num_cpus", -] - -[[package]] -name = "time" -version = "0.3.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" -dependencies = [ - "deranged", - "itoa", - "num-conv", - "powerfmt", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" - -[[package]] -name = "time-macros" -version = "0.2.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" -dependencies = [ - "num-conv", - "time-core", -] - -[[package]] -name = "tinystr" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" -dependencies = [ - "displaydoc", - "zerovec", -] - -[[package]] -name = "tinyvec" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.45.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2", - "tokio-macros", - "windows-sys 0.52.0", -] - -[[package]] -name = "tokio-macros" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", -] - -[[package]] -name = "tokio-rustls" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" -dependencies = [ - "rustls", - "tokio", -] - -[[package]] -name = "tokio-stream" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", - "tokio-util", -] - -[[package]] -name = "tokio-util" -version = "0.7.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "toml_datetime" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" - -[[package]] -name = "toml_edit" -version = "0.22.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" -dependencies = [ - "indexmap 2.9.0", - "toml_datetime", - "winnow 0.7.11", -] - -[[package]] -name = "tower" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" -dependencies = [ - "futures-core", - "futures-util", - "pin-project-lite", - "sync_wrapper 1.0.2", - "tokio", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-http" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" -dependencies = [ - "bitflags 2.11.1", - "bytes", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "pin-project-lite", - "tower", - "tower-layer", - "tower-service", - "url", -] - -[[package]] -name = "tower-layer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - -[[package]] -name = "tower-service" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" - -[[package]] -name = "tracing" -version = "0.1.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" -dependencies = [ - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "tracing-core" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" -dependencies = [ - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "tsify" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b26cf145f2f3b9ff84e182c448eaf05468e247f148cf3d2a7d67d78ff023a0" -dependencies = [ - "serde", - "serde-wasm-bindgen 0.5.0", - "tsify-macros", - "wasm-bindgen", -] - -[[package]] -name = "tsify-macros" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a94b0f0954b3e59bfc2c246b4c8574390d94a4ad4ad246aaf2fb07d7dfd3b47" -dependencies = [ - "proc-macro2", - "quote", - "serde_derive_internals", - "syn 2.0.117", -] - -[[package]] -name = "typenum" -version = "1.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" - -[[package]] -name = "ucd-trie" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" - -[[package]] -name = "uint" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" -dependencies = [ - "byteorder", - "crunchy", - "hex", - "static_assertions", -] - -[[package]] -name = "unarray" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" - -[[package]] -name = "unicode-ident" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" - -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - -[[package]] -name = "url" -version = "2.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] - -[[package]] -name = "utf8_iter" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" - -[[package]] -name = "utf8parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - -[[package]] -name = "valuable" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "wait-timeout" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" -dependencies = [ - "libc", -] - -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - -[[package]] -name = "wasi" -version = "0.14.2+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" -dependencies = [ - "wit-bindgen-rt", -] - -[[package]] -name = "wasm-bindgen" -version = "0.2.122" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" -dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.72" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9473dbd2991ae90b6291c3c32c30c6187ac49aa32f9905d1cce280ec1e110b0f" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.122" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.122" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" -dependencies = [ - "bumpalo", - "proc-macro2", - "quote", - "syn 2.0.117", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.122" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "wasm-bindgen-utils" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ec45201ec48a021de21357beca43a1c93669e68eeae5deca5e3ba6b4b4fd4d6" -dependencies = [ - "js-sys", - "paste", - "serde", - "serde-wasm-bindgen 0.6.5", - "tsify", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-utils-macros", -] - -[[package]] -name = "wasm-bindgen-utils-macros" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5bf3e098464ba4e518a659f81794d58c043b8d144f8c29c11fbb488d75264f4" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "wasmtimer" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8d49b5d6c64e8558d9b1b065014426f35c18de636895d24893dbbd329743446" -dependencies = [ - "futures", - "js-sys", - "parking_lot", - "pin-utils", - "slab", - "wasm-bindgen", -] - -[[package]] -name = "web-sys" -version = "0.3.99" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621441cfc37b84979402712047321980c178f299193a3589d05b99e8763436" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "web-time" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki-root-certs" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31141ce3fc3e300ae89b78c0dd67f9708061d1d2eda54b8209346fd6be9a92c" -dependencies = [ - "rustls-pki-types", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows-core" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-link", - "windows-result", - "windows-strings", -] - -[[package]] -name = "windows-implement" -version = "0.60.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "windows-interface" -version = "0.59.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "windows-link" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" - -[[package]] -name = "windows-result" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-strings" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets 0.53.2", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.53.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" -dependencies = [ - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_i686_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" - -[[package]] -name = "winnow" -version = "0.7.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" -dependencies = [ - "memchr", -] - -[[package]] -name = "winnow" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" -dependencies = [ - "memchr", -] - -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "wit-bindgen-rt" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags 2.11.1", -] - -[[package]] -name = "writeable" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "yoke" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" -dependencies = [ - "serde", - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", - "synstructure", -] - -[[package]] -name = "zerocopy" -version = "0.8.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "zerofrom" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", - "synstructure", -] - -[[package]] -name = "zeroize" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "zerotrie" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", -] - -[[package]] -name = "zerovec" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] diff --git a/Cargo.toml b/Cargo.toml deleted file mode 100644 index 70f28be00..000000000 --- a/Cargo.toml +++ /dev/null @@ -1,41 +0,0 @@ -[workspace] -members = ["crates/*"] -resolver = "2" - -[workspace.package] -edition = "2024" -license = "CAL-1.0" -homepage = "https://github.com/rainlanguage/rainlang" - -[workspace.dependencies] -alloy = { version = "1.0.9", features = ["sol-types", "json", "json-abi"] } -anyhow = "1.0.70" -clap = { version = "4.2.5", features = ["cargo", "derive"] } -serde = "1.0.160" -serde_bytes = "0.11.9" -serde_json = "1.0.112" -thiserror = "1.0.56" -tracing = "0.1.37" -tracing-subscriber = "0.3.17" -reqwest = { version = "0.11.17", features = ["json"] } -once_cell = "1.17.1" -eyre = "0.6" -rain-error-decoding = "0.1.2" -wasm-bindgen-utils = "0.1.2" - -[workspace.dependencies.rainlang_parser] -path = "crates/parser" - -[workspace.dependencies.rainlang_dispair] -path = "crates/dispair" -version = "0.1.15" - -[workspace.dependencies.rainlang_bindings] -path = "crates/bindings" -version = "0.1.20" - -[workspace.dependencies.rainlang-eval] -path = "crates/eval" - -[workspace.dependencies.rainlang_test_fixtures] -path = "crates/test_fixtures" diff --git a/README.md b/README.md index e2e5ce227..8ff10f459 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,6 @@ Solidity docs can be generated with `nix develop --command forge doc -b`. -Rust docs with `nix develop --command cargo doc`. - ## Overview Standard libraries and interfaces defining and working with `InterpeterState` diff --git a/REUSE.toml b/REUSE.toml index 79274eef6..8d78d510e 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -2,21 +2,16 @@ version = 1 [[annotations]] path = [ - ".cargo/**/", ".coderabbit.yaml", ".devcontainer.json", ".envrc", - ".gas-snapshot", ".github/workflows/**/", ".gitignore", ".prettierignore", ".soldeerignore", ".vscode/**/", "audit/**/", - "Cargo.lock", - "Cargo.toml", "CLAUDE.md", - "crates/**/", "flake.lock", "flake.nix", "foundry.toml", diff --git a/crates/bindings/Cargo.toml b/crates/bindings/Cargo.toml deleted file mode 100644 index 0dcf28b12..000000000 --- a/crates/bindings/Cargo.toml +++ /dev/null @@ -1,12 +0,0 @@ -[package] -name = "rainlang_bindings" -version = "0.1.20" -edition.workspace = true -license.workspace = true -description = "Alloy Solidity contract bindings for the Rainlang interpreter, parser, and expression deployer." -homepage.workspace = true - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -alloy = { workspace = true } diff --git a/crates/bindings/abi/IExpressionDeployerV3.json b/crates/bindings/abi/IExpressionDeployerV3.json deleted file mode 100644 index e52a6f531..000000000 --- a/crates/bindings/abi/IExpressionDeployerV3.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "deployExpression2", - "inputs": [ - { - "name": "bytecode", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "constants", - "type": "uint256[]", - "internalType": "uint256[]" - } - ], - "outputs": [ - { - "name": "interpreter", - "type": "address", - "internalType": "contract IInterpreterV2" - }, - { - "name": "store", - "type": "address", - "internalType": "contract IInterpreterStoreV2" - }, - { - "name": "expression", - "type": "address", - "internalType": "address" - }, - { - "name": "io", - "type": "bytes", - "internalType": "bytes" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "DISPair", - "inputs": [ - { - "name": "sender", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "interpreter", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "store", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "parser", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "meta", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DeployedExpression", - "inputs": [ - { - "name": "sender", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "interpreter", - "type": "address", - "indexed": false, - "internalType": "contract IInterpreterV2" - }, - { - "name": "store", - "type": "address", - "indexed": false, - "internalType": "contract IInterpreterStoreV2" - }, - { - "name": "expression", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "io", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "NewExpression", - "inputs": [ - { - "name": "sender", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "bytecode", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "constants", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - } - ], - "anonymous": false - } - ], - "bytecode": { - "object": "0x" - }, - "deployedBytecode": { - "object": "0x" - } -} diff --git a/crates/bindings/abi/IInterpreterStoreV3.json b/crates/bindings/abi/IInterpreterStoreV3.json deleted file mode 100644 index be28bc503..000000000 --- a/crates/bindings/abi/IInterpreterStoreV3.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "get", - "inputs": [ - { - "name": "namespace", - "type": "uint256", - "internalType": "FullyQualifiedNamespace" - }, - { - "name": "key", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "set", - "inputs": [ - { - "name": "namespace", - "type": "uint256", - "internalType": "StateNamespace" - }, - { - "name": "kvs", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "Set", - "inputs": [ - { - "name": "namespace", - "type": "uint256", - "indexed": false, - "internalType": "FullyQualifiedNamespace" - }, - { - "name": "key", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "value", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - } - ], - "bytecode": { - "object": "0x" - }, - "deployedBytecode": { - "object": "0x" - } -} diff --git a/crates/bindings/abi/IInterpreterV4.json b/crates/bindings/abi/IInterpreterV4.json deleted file mode 100644 index 4ba3b620b..000000000 --- a/crates/bindings/abi/IInterpreterV4.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "eval4", - "inputs": [ - { - "name": "eval", - "type": "tuple", - "internalType": "struct EvalV4", - "components": [ - { - "name": "store", - "type": "address", - "internalType": "contract IInterpreterStoreV3" - }, - { - "name": "namespace", - "type": "uint256", - "internalType": "FullyQualifiedNamespace" - }, - { - "name": "bytecode", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "sourceIndex", - "type": "uint256", - "internalType": "SourceIndexV2" - }, - { - "name": "context", - "type": "bytes32[][]", - "internalType": "bytes32[][]" - }, - { - "name": "inputs", - "type": "bytes32[]", - "internalType": "StackItem[]" - }, - { - "name": "stateOverlay", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ] - } - ], - "outputs": [ - { - "name": "stack", - "type": "bytes32[]", - "internalType": "StackItem[]" - }, - { - "name": "writes", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ], - "stateMutability": "view" - } - ], - "bytecode": { - "object": "0x" - }, - "deployedBytecode": { - "object": "0x" - } -} diff --git a/crates/bindings/abi/IParserPragmaV1.json b/crates/bindings/abi/IParserPragmaV1.json deleted file mode 100644 index 52c630c04..000000000 --- a/crates/bindings/abi/IParserPragmaV1.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "parsePragma1", - "inputs": [ - { - "name": "data", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct PragmaV1", - "components": [ - { - "name": "usingWordsFrom", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ], - "stateMutability": "view" - } - ], - "bytecode": { - "object": "0x" - }, - "deployedBytecode": { - "object": "0x" - } -} diff --git a/crates/bindings/abi/IParserV2.json b/crates/bindings/abi/IParserV2.json deleted file mode 100644 index 7fb031c42..000000000 --- a/crates/bindings/abi/IParserV2.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "parse2", - "inputs": [ - { - "name": "data", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ - { - "name": "bytecode", - "type": "bytes", - "internalType": "bytes" - } - ], - "stateMutability": "view" - } - ], - "bytecode": { - "object": "0x" - }, - "deployedBytecode": { - "object": "0x" - } -} diff --git a/crates/bindings/abi/Rainlang.json b/crates/bindings/abi/Rainlang.json deleted file mode 100644 index f85352e17..000000000 --- a/crates/bindings/abi/Rainlang.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "expressionDeployerAddress", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "interpreterAddress", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parserAddress", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "storeAddress", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { - "name": "interfaceId", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - } - ], - "bytecode": { - "object": "0x6080604052348015600e575f80fd5b506101f78061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063107628021161004d57806310762802146100cb5780634501e517146100e5578063f2c4da93146100ff575f80fd5b806301ffc9a7146100685780630c1916a414610090575b5f80fd5b61007b6100763660046101b1565b610119565b60405190151581526020015b60405180910390f35b739179445a637e6ae72bb38273944fab96834488dd5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610087565b73c9e1d673ed122193b28376016ac506de2fa20bee6100a6565b734c52eee7fb6aed0f1a30130d96d02409d9d886cf6100a6565b731aa775533e28b1d843e1a589034984e3a62005dc6100a6565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fabaa01220000000000000000000000000000000000000000000000000000000014806101ab57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f602082840312156101c1575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101f0575f80fd5b939250505056" - }, - "deployedBytecode": { - "object": "0x608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063107628021161004d57806310762802146100cb5780634501e517146100e5578063f2c4da93146100ff575f80fd5b806301ffc9a7146100685780630c1916a414610090575b5f80fd5b61007b6100763660046101b1565b610119565b60405190151581526020015b60405180910390f35b739179445a637e6ae72bb38273944fab96834488dd5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610087565b73c9e1d673ed122193b28376016ac506de2fa20bee6100a6565b734c52eee7fb6aed0f1a30130d96d02409d9d886cf6100a6565b731aa775533e28b1d843e1a589034984e3a62005dc6100a6565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fabaa01220000000000000000000000000000000000000000000000000000000014806101ab57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f602082840312156101c1575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101f0575f80fd5b939250505056" - } -} diff --git a/crates/bindings/src/lib.rs b/crates/bindings/src/lib.rs deleted file mode 100644 index f5b2d5f98..000000000 --- a/crates/bindings/src/lib.rs +++ /dev/null @@ -1,37 +0,0 @@ -//! Alloy Solidity contract bindings for rainlang. - -use alloy::sol; - -sol!( - #![sol(all_derives = true)] - IInterpreterV4, - "abi/IInterpreterV4.json" -); - -sol!( - #![sol(all_derives = true)] - IInterpreterStoreV3, - "abi/IInterpreterStoreV3.json" -); - -sol!( - #![sol(all_derives = true)] - IParserV2, "abi/IParserV2.json" -); - -sol!( - #![sol(all_derives = true)] - IParserPragmaV1, "abi/IParserPragmaV1.json" -); - -sol!( - #![sol(all_derives = true)] - IExpressionDeployerV3, - "abi/IExpressionDeployerV3.json" -); - -sol!( - #![sol(all_derives = true)] - Rainlang, - "abi/Rainlang.json" -); diff --git a/crates/cli/Cargo.toml b/crates/cli/Cargo.toml deleted file mode 100644 index 8532fc260..000000000 --- a/crates/cli/Cargo.toml +++ /dev/null @@ -1,34 +0,0 @@ -[package] -name = "rainlang-cli" -version = "0.0.1" -edition.workspace = true -license.workspace = true -description = "Rainlang CLI." -homepage.workspace = true - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -rainlang_bindings = { workspace = true } -rainlang-eval = { workspace = true } -anyhow = { workspace = true } -clap = { workspace = true } -tracing = { workspace = true } -tracing-subscriber = { workspace = true, features = ['env-filter'] } -alloy = { workspace = true } - -[target.'cfg(not(target_family = "wasm"))'.dependencies] -tokio = { version = "1.28.0", features = ["full"] } - -[target.'cfg(target_family = "wasm")'.dependencies] -tokio = { version = "1.28.0", features = [ - "sync", - "macros", - "io-util", - "rt", - "time", -] } - -[dev-dependencies] -rainlang_test_fixtures = { workspace = true } -tempfile = "3" diff --git a/crates/cli/src/commands/eval.rs b/crates/cli/src/commands/eval.rs deleted file mode 100644 index 91f52d22b..000000000 --- a/crates/cli/src/commands/eval.rs +++ /dev/null @@ -1,229 +0,0 @@ -use crate::execute::Execute; -use crate::fork::NewForkedEvmCliArgs; -use crate::output::SupportedOutputEncoding; -use alloy::primitives::{Address, U256}; -use anyhow::Context; -use anyhow::Result; -use anyhow::anyhow; -use clap::Args; -use rainlang_bindings::IInterpreterStoreV3::FullyQualifiedNamespace; -use rainlang_eval::trace::RainEvalResult; -use rainlang_eval::{ - eval::{ForkEvalArgs, ForkEvalExt}, - fork::Forker, -}; -use std::path::PathBuf; - -/// CLI arguments for evaluating a Rainlang expression. -#[derive(Args, Clone, Debug)] -pub struct ForkEvalCliArgs { - #[arg(short, long, help = "The Rainlang string to parse")] - pub rainlang_string: String, - - #[arg(short, long, help = "The source index")] - pub source_index: u16, - - #[arg(long, help = "The address of the Rainlang contract")] - pub rainlang: Address, - - #[arg(short, long, help = "The namespace")] - pub namespace: String, - - // Accept context as a vector of string key-value pairs - #[arg( - short, - long, - help = "The context in key=value format, key is the context column name and value is the context rows as a comma separated list" - )] - pub context: Vec, - - #[arg(short, long, help = "Decode errors using the openchain.xyz database")] - pub decode_errors: bool, - - // Accept inputs vector as array of uint256 - #[arg( - short, - long, - help = "The inputs vector which are prepopulated stack items" - )] - pub inputs: Option>, - - // Accept state overlay vector as array of uint256 - #[arg( - short, - long, - help = "The state overlay vector which applies to the state before evaluation to facilitate 'what if' analysis" - )] - pub state_overlay: Option>, -} - -impl TryFrom for ForkEvalArgs { - type Error = anyhow::Error; - - fn try_from(args: ForkEvalCliArgs) -> Result { - let namespace = parse_int_or_hex(&args.namespace).context("Invalid namespace format")?; - - let context = args - .context - .into_iter() - .map(|ctx_str| { - ctx_str - .split(',') - .map(|v| parse_int_or_hex(v).context("Invalid context value")) - .collect::>>() - }) - .collect::>>>()?; - - Ok(ForkEvalArgs { - rainlang_string: args.rainlang_string, - source_index: args.source_index, - rainlang: args.rainlang, - namespace: FullyQualifiedNamespace::from(namespace), - context, - decode_errors: args.decode_errors, - inputs: args.inputs.unwrap_or_default(), - state_overlay: args.state_overlay.unwrap_or_default(), - }) - } -} - -// Helper function to parse a string as either integer or hex-encoded value -fn parse_int_or_hex(value: &str) -> Result { - if value.starts_with("0x") || value.starts_with("0X") { - U256::from_str_radix(&value[2..], 16).map_err(|e| e.into()) - } else { - value.parse::().map_err(|e| e.into()) - } -} - -/// CLI subcommand that evaluates a Rainlang expression against a forked EVM. -#[derive(Args, Clone)] -pub struct Eval { - /// Output path. If not specified, the output is written to stdout. - #[arg(short, long)] - output_path: Option, - - #[command(flatten)] - forked_evm: NewForkedEvmCliArgs, - - #[command(flatten)] - fork_eval_args: ForkEvalCliArgs, -} - -impl Execute for Eval { - async fn execute(&self) -> Result<()> { - let forker = Forker::new_with_fork(self.forked_evm.clone().into(), None, None).await?; - let result = forker - .fork_eval(self.fork_eval_args.clone().try_into()?) - .await; - - match result { - Ok(res) => { - let rain_eval_result: RainEvalResult = res.try_into().map_err( - |e: rainlang_eval::trace::RainEvalResultFromRawCallResultError| anyhow!(e), - )?; - crate::output::output( - &self.output_path, - SupportedOutputEncoding::Binary, - format!("{:#?}", rain_eval_result).as_bytes(), - ) - } - Err(e) => Err(anyhow!(e)), - } - } -} - -#[cfg(test)] -mod tests { - use super::*; - use rainlang_test_fixtures::LocalEvm; - - #[test] - fn test_parse_int_or_hex() { - assert_eq!(parse_int_or_hex("123").unwrap(), U256::from(123)); - assert_eq!(parse_int_or_hex("0xabc").unwrap(), U256::from(2748)); - assert_eq!(parse_int_or_hex("0XFF").unwrap(), U256::from(255)); - assert!(parse_int_or_hex("invalid").is_err()); - } - - fn simple_cli_args() -> ForkEvalCliArgs { - ForkEvalCliArgs { - rainlang_string: "_: 1;".into(), - source_index: 0, - rainlang: Address::ZERO, - namespace: "0x0".into(), - context: vec![], - decode_errors: false, - inputs: None, - state_overlay: None, - } - } - - #[test] - fn test_try_from_invalid_namespace() { - let mut args = simple_cli_args(); - args.namespace = "not_a_number".into(); - let result = ForkEvalArgs::try_from(args); - assert!(result.is_err()); - let err = result.unwrap_err().to_string(); - assert!( - err.contains("Invalid namespace format"), - "expected 'Invalid namespace format', got: {err}" - ); - } - - #[test] - fn test_try_from_invalid_context_value() { - let mut args = simple_cli_args(); - args.context = vec!["123,bad_value,456".into()]; - let result = ForkEvalArgs::try_from(args); - assert!(result.is_err()); - let err = result.unwrap_err().to_string(); - assert!( - err.contains("Invalid context value"), - "expected 'Invalid context value', got: {err}" - ); - } - - #[test] - fn test_try_from_valid() { - let mut args = simple_cli_args(); - args.namespace = "0xff".into(); - args.context = vec!["1,2,3".into(), "0xa,0xb".into()]; - let result = ForkEvalArgs::try_from(args); - assert!(result.is_ok()); - let eval_args = result.unwrap(); - assert_eq!(eval_args.context.len(), 2); - assert_eq!( - eval_args.context[0], - vec![U256::from(1), U256::from(2), U256::from(3)] - ); - assert_eq!(eval_args.context[1], vec![U256::from(0xa), U256::from(0xb)]); - } - - #[tokio::test(flavor = "multi_thread", worker_threads = 1)] - async fn test_execute() { - let local_evm = LocalEvm::new().await; - - let eval = Eval { - output_path: None, - forked_evm: NewForkedEvmCliArgs { - fork_url: local_evm.url(), - fork_block_number: None, - }, - fork_eval_args: ForkEvalCliArgs { - rainlang_string: r"_: 12, _: context<0 0>(), _:context<0 1>();".into(), - source_index: 0, - rainlang: local_evm.rainlang, - namespace: "0x123".into(), - context: vec!["0x06,99".into()], - decode_errors: true, - inputs: None, - state_overlay: None, - }, - }; - - let result = eval.execute().await; - assert!(result.is_ok()); - } -} diff --git a/crates/cli/src/commands/mod.rs b/crates/cli/src/commands/mod.rs deleted file mode 100644 index c09ff2a76..000000000 --- a/crates/cli/src/commands/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -mod eval; -mod parse; - -pub use self::eval::Eval; -pub use self::parse::Parse; diff --git a/crates/cli/src/commands/parse.rs b/crates/cli/src/commands/parse.rs deleted file mode 100644 index 46d343c7f..000000000 --- a/crates/cli/src/commands/parse.rs +++ /dev/null @@ -1,95 +0,0 @@ -use crate::execute::Execute; -use crate::fork::NewForkedEvmCliArgs; -use crate::output::SupportedOutputEncoding; -use alloy::primitives::Address; -use anyhow::Result; -use anyhow::anyhow; -use clap::Args; -use rainlang_eval::eval::{ForkEvalExt, ForkParseArgs}; -use rainlang_eval::fork::Forker; -use std::path::PathBuf; - -/// CLI arguments for parsing a Rainlang expression. -#[derive(Args, Clone, Debug)] -pub struct ForkParseArgsCli { - #[arg(long, help = "The address of the Rainlang contract")] - rainlang: Address, - - #[arg(short, long, help = "The Rainlang string to parse")] - rainlang_string: String, - - #[arg(short, long, help = "Decode errors using the openchain.xyz database")] - decode_errors: bool, -} - -/// CLI subcommand that parses a Rainlang expression into bytecode. -#[derive(Args, Clone)] -pub struct Parse { - /// Output path. If not specified, the output is written to stdout. - #[arg(short, long)] - output_path: Option, - /// Output encoding. If not specified, the output is written in binary format. - #[arg(short = 'E', long, default_value = "binary")] - output_encoding: SupportedOutputEncoding, - - #[command(flatten)] - forked_evm: NewForkedEvmCliArgs, - - #[command(flatten)] - fork_parse_args: ForkParseArgsCli, -} - -impl From for ForkParseArgs { - fn from(args: ForkParseArgsCli) -> Self { - ForkParseArgs { - rainlang: args.rainlang, - rainlang_string: args.rainlang_string, - decode_errors: args.decode_errors, - } - } -} - -impl Execute for Parse { - async fn execute(&self) -> Result<()> { - let forker = Forker::new_with_fork(self.forked_evm.clone().into(), None, None).await?; - let result = forker.fork_parse(self.fork_parse_args.clone().into()).await; - - match result { - Ok(res) => crate::output::output( - &self.output_path, - self.output_encoding.clone(), - res.raw.result.to_owned().to_vec().as_slice(), - ), - Err(e) => Err(anyhow!(e)), - } - } -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::fork::NewForkedEvmCliArgs; - use rainlang_test_fixtures::LocalEvm; - - #[tokio::test(flavor = "multi_thread", worker_threads = 1)] - async fn test_execute() { - let local_evm = LocalEvm::new().await; - - let parse = Parse { - output_path: None, - output_encoding: SupportedOutputEncoding::Binary, - forked_evm: NewForkedEvmCliArgs { - fork_url: local_evm.url(), - fork_block_number: None, - }, - fork_parse_args: ForkParseArgsCli { - rainlang: local_evm.rainlang, - rainlang_string: "_: 1;".into(), - decode_errors: false, - }, - }; - - let result = parse.execute().await; - assert!(result.is_ok()); - } -} diff --git a/crates/cli/src/execute.rs b/crates/cli/src/execute.rs deleted file mode 100644 index 8a67a4913..000000000 --- a/crates/cli/src/execute.rs +++ /dev/null @@ -1,7 +0,0 @@ -use anyhow::Result; - -/// Trait for CLI subcommands that can be executed asynchronously. -pub trait Execute { - /// Runs the subcommand, returning an error on failure. - async fn execute(&self) -> Result<()>; -} diff --git a/crates/cli/src/fork.rs b/crates/cli/src/fork.rs deleted file mode 100644 index b5a0b34d1..000000000 --- a/crates/cli/src/fork.rs +++ /dev/null @@ -1,21 +0,0 @@ -use alloy::primitives::BlockNumber; -use clap::Args; -use rainlang_eval::fork::NewForkedEvm; - -/// CLI arguments for connecting to a forked EVM via RPC. -#[derive(Args, Clone, Debug)] -pub struct NewForkedEvmCliArgs { - #[arg(short = 'i', long, help = "RPC url for the fork")] - pub fork_url: String, - #[arg(short = 'b', long, help = "Optional block number to fork from")] - pub fork_block_number: Option, -} - -impl From for NewForkedEvm { - fn from(args: NewForkedEvmCliArgs) -> Self { - NewForkedEvm { - fork_url: args.fork_url, - fork_block_number: args.fork_block_number, - } - } -} diff --git a/crates/cli/src/lib.rs b/crates/cli/src/lib.rs deleted file mode 100644 index 38870cb34..000000000 --- a/crates/cli/src/lib.rs +++ /dev/null @@ -1,31 +0,0 @@ -//! CLI tool for parsing and evaluating Rainlang expressions. - -use crate::commands::Parse; -use crate::execute::Execute; -use anyhow::Result; -use clap::Parser; -use commands::Eval; - -mod commands; -mod execute; -mod fork; -mod output; - -/// Top-level CLI command enum dispatching to `Parse` or `Eval` subcommands. -#[derive(Parser)] -pub enum Interpreter { - /// Parse a Rainlang expression into bytecode. - Parse(Parse), - /// Evaluate a Rainlang expression against a forked EVM. - Eval(Eval), -} - -impl Interpreter { - /// Dispatches to the selected subcommand's `execute` implementation. - pub async fn execute(self) -> Result<()> { - match self { - Interpreter::Parse(parse) => parse.execute().await, - Interpreter::Eval(eval) => eval.execute().await, - } - } -} diff --git a/crates/cli/src/main.rs b/crates/cli/src/main.rs deleted file mode 100644 index 6704f12c1..000000000 --- a/crates/cli/src/main.rs +++ /dev/null @@ -1,33 +0,0 @@ -use anyhow::Result; -use clap::Parser; -use rainlang_cli::Interpreter; -use tracing_subscriber::filter::{EnvFilter, LevelFilter}; - -#[derive(Parser)] -#[command(author, version, about, long_about = None)] -struct Cli { - #[command(subcommand)] - i9r: Interpreter, -} - -#[tokio::main] -async fn main() -> Result<()> { - // Config tracing subscriber output - let filter = EnvFilter::builder() - .with_default_directive(LevelFilter::INFO.into()) - .from_env()? - .add_directive("ethers_signer=off".parse()?) - .add_directive("coins_ledger=off".parse()?); - - tracing_subscriber::fmt() - .with_env_filter(filter) - .with_thread_names(false) - .with_thread_ids(false) - .with_target(false) - .without_time() - .compact() - .init(); - - let cli = Cli::parse(); - cli.i9r.execute().await -} diff --git a/crates/cli/src/output.rs b/crates/cli/src/output.rs deleted file mode 100644 index 4ae8c52e7..000000000 --- a/crates/cli/src/output.rs +++ /dev/null @@ -1,78 +0,0 @@ -use std::io::Write; -use std::path::PathBuf; - -/// Output encoding formats supported by the CLI. -#[derive(clap::ValueEnum, Clone)] -pub enum SupportedOutputEncoding { - /// Raw binary bytes. - Binary, - /// 0x-prefixed hex string. - Hex, -} - -/// Writes `bytes` to `output_path` (or stdout) using the given encoding. -pub fn output( - output_path: &Option, - output_encoding: SupportedOutputEncoding, - bytes: &[u8], -) -> anyhow::Result<()> { - let hex_encoded: String; - let encoded_bytes: &[u8] = match output_encoding { - SupportedOutputEncoding::Binary => bytes, - SupportedOutputEncoding::Hex => { - hex_encoded = alloy::primitives::hex::encode_prefixed(bytes); - hex_encoded.as_bytes() - } - }; - if let Some(output_path) = output_path { - std::fs::write(output_path, encoded_bytes)? - } else { - std::io::stdout().write_all(encoded_bytes)? - } - Ok(()) -} - -#[cfg(test)] -mod tests { - use super::*; - use tempfile::NamedTempFile; - - #[test] - fn test_output_binary_to_file() { - let file = NamedTempFile::new().unwrap(); - let path = file.path().to_path_buf(); - let data = b"\x00\x01\x02\xff"; - output(&Some(path.clone()), SupportedOutputEncoding::Binary, data).unwrap(); - let written = std::fs::read(&path).unwrap(); - assert_eq!(written, data); - } - - #[test] - fn test_output_hex_to_file() { - let file = NamedTempFile::new().unwrap(); - let path = file.path().to_path_buf(); - let data = b"\xde\xad\xbe\xef"; - output(&Some(path.clone()), SupportedOutputEncoding::Hex, data).unwrap(); - let written = std::fs::read_to_string(&path).unwrap(); - assert_eq!(written, "0xdeadbeef"); - } - - #[test] - fn test_output_hex_empty_to_file() { - let file = NamedTempFile::new().unwrap(); - let path = file.path().to_path_buf(); - output(&Some(path.clone()), SupportedOutputEncoding::Hex, b"").unwrap(); - let written = std::fs::read_to_string(&path).unwrap(); - assert_eq!(written, "0x"); - } - - #[test] - fn test_output_binary_to_stdout() { - output(&None, SupportedOutputEncoding::Binary, b"hello").unwrap(); - } - - #[test] - fn test_output_hex_to_stdout() { - output(&None, SupportedOutputEncoding::Hex, b"\xca\xfe").unwrap(); - } -} diff --git a/crates/dispair/Cargo.toml b/crates/dispair/Cargo.toml deleted file mode 100644 index ac3a6ba7a..000000000 --- a/crates/dispair/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "rainlang_dispair" -version = "0.1.15" -edition.workspace = true -license.workspace = true -description = "Rainlang DISPaiR Rust Crate." -homepage.workspace = true - -[dependencies] -alloy = { workspace = true } - -[package.metadata.docs.rs] -all-features = true diff --git a/crates/dispair/src/lib.rs b/crates/dispair/src/lib.rs deleted file mode 100644 index cc3485290..000000000 --- a/crates/dispair/src/lib.rs +++ /dev/null @@ -1,47 +0,0 @@ -//! DISPaiR (Deployer/Interpreter/Store/Parser) address tuple. - -use alloy::primitives::Address; - -/// Deployer/Interpreter/Store/Parser address tuple. -/// -/// Groups the four contract addresses that together form a complete -/// Rain interpreter deployment. -#[derive(Debug, Clone, Default)] -pub struct DISPaiR { - pub deployer: Address, - pub interpreter: Address, - pub store: Address, - pub parser: Address, -} - -impl DISPaiR { - /// Creates a new `DISPaiR` from the four component addresses. - pub fn new(deployer: Address, interpreter: Address, store: Address, parser: Address) -> Self { - DISPaiR { - deployer, - interpreter, - store, - parser, - } - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_new() { - let deployer = Address::repeat_byte(0x1); - let interpreter = Address::repeat_byte(0x2); - let store = Address::repeat_byte(0x3); - let parser = Address::repeat_byte(0x4); - - let dispair = DISPaiR::new(deployer, interpreter, store, parser); - - assert_eq!(dispair.deployer, deployer); - assert_eq!(dispair.interpreter, interpreter); - assert_eq!(dispair.store, store); - assert_eq!(dispair.parser, parser); - } -} diff --git a/crates/eval/Cargo.toml b/crates/eval/Cargo.toml deleted file mode 100644 index 75a728b9e..000000000 --- a/crates/eval/Cargo.toml +++ /dev/null @@ -1,41 +0,0 @@ -[package] -name = "rainlang-eval" -version = "0.1.6" -description = "Fork-based evaluation and parsing of Rainlang expressions against a live EVM, with Rain stack-trace decoding." -edition.workspace = true -license.workspace = true -homepage.workspace = true -repository = "https://github.com/rainlanguage/rainlang" - -[dependencies] -alloy = { workspace = true } -thiserror = { workspace = true } -rainlang_bindings = { workspace = true } -serde = { workspace = true } -eyre = { workspace = true } -rain-error-decoding = { workspace = true } - -# The forking executor (multi-fork, calls, tracing, replay) now lives in the -# published rain-forker crate instead of the unpublishable foundry-evm git dep. -# Native-only: forking against a live RPC has no meaning on wasm. -[target.'cfg(not(target_family = "wasm"))'.dependencies] -rain-forker = "0.1" - -[target.'cfg(target_family = "wasm")'.dependencies] -wasm-bindgen-utils.workspace = true - -[dev-dependencies] -tracing = { workspace = true } -rainlang_test_fixtures = { workspace = true } - -[target.'cfg(not(target_family = "wasm"))'.dev-dependencies] -tokio = { version = "1.28.0", features = ["full"] } - -[target.'cfg(target_family = "wasm")'.dev-dependencies] -tokio = { version = "1.28.0", features = [ - "sync", - "macros", - "io-util", - "rt", - "time", -] } diff --git a/crates/eval/src/error.rs b/crates/eval/src/error.rs deleted file mode 100644 index 3097f9fd0..000000000 --- a/crates/eval/src/error.rs +++ /dev/null @@ -1,5 +0,0 @@ -//! Re-export of the forking error types, which now live in `rain-forker`. -//! -//! Kept as `rain_interpreter_eval::error` for backwards compatibility with -//! downstream consumers. -pub use rain_forker::error::{ForkCallError, ReplayTransactionError}; diff --git a/crates/eval/src/eval.rs b/crates/eval/src/eval.rs deleted file mode 100644 index 617c15811..000000000 --- a/crates/eval/src/eval.rs +++ /dev/null @@ -1,298 +0,0 @@ -use crate::error::ForkCallError; -use crate::fork::{ForkTypedReturn, Forker}; -use alloy::primitives::{Address, U256}; -use rainlang_bindings::IInterpreterStoreV3::FullyQualifiedNamespace; -use rainlang_bindings::IInterpreterV4::{EvalV4, eval4Call}; -use rainlang_bindings::IParserV2::parse2Call; -use rainlang_bindings::Rainlang::{ - expressionDeployerAddressCall, interpreterAddressCall, storeAddressCall, -}; - -/// Arguments for evaluating a Rainlang string in a forked EVM context -#[derive(Debug, Clone)] -pub struct ForkEvalArgs { - /// The Rainlang string to evaluate - pub rainlang_string: String, - /// The source index of the rainlang to evaluate - pub source_index: u16, - /// The address of the Rainlang contract. All component addresses - /// (deployer, interpreter, store, parser) are discovered from this - /// address. - pub rainlang: Address, - /// The fully qualified namespace - pub namespace: FullyQualifiedNamespace, - /// The context matrix, that will be available in "context" word and its aliases - pub context: Vec>, - /// Whether to decode errors - pub decode_errors: bool, - /// Inputs vector which are prepopulated stack items - pub inputs: Vec, - /// Applies to the state before evaluation to facilitate "what if" analysis - pub state_overlay: Vec, -} - -/// Arguments for parsing a Rainlang string in a forked EVM context -#[derive(Debug, Clone)] -pub struct ForkParseArgs { - /// The Rainlang string to parse - pub rainlang_string: String, - /// The address of the Rainlang contract. - pub rainlang: Address, - /// Whether to decode errors - pub decode_errors: bool, -} - -impl From for ForkParseArgs { - fn from(args: ForkEvalArgs) -> Self { - ForkParseArgs { - rainlang_string: args.rainlang_string, - rainlang: args.rainlang, - decode_errors: args.decode_errors, - } - } -} - -/// Rain-specific parse/eval helpers on top of the generic [`Forker`]. -/// -/// Defined as an extension trait because `Forker` now lives in the external -/// `rain-forker` crate, so inherent methods can't be added to it here. -pub trait ForkEvalExt { - /// Parses a Rainlang string against the deployer discovered from `rainlang`. - fn fork_parse( - &self, - args: ForkParseArgs, - ) -> impl std::future::Future, ForkCallError>>; - - /// Evaluates a Rainlang string against the interpreter discovered from `rainlang`. - fn fork_eval( - &self, - args: ForkEvalArgs, - ) -> impl std::future::Future, ForkCallError>>; -} - -impl ForkEvalExt for Forker { - async fn fork_parse( - &self, - args: ForkParseArgs, - ) -> Result, ForkCallError> { - let ForkParseArgs { - rainlang_string, - rainlang, - decode_errors, - } = args; - - let deployer = self - .alloy_call( - Address::default(), - rainlang, - expressionDeployerAddressCall {}, - decode_errors, - ) - .await? - .typed_return; - - let parse_call = parse2Call { - data: rainlang_string.as_bytes().to_vec().into(), - }; - - let parse_result = self - .alloy_call(Address::default(), deployer, parse_call, decode_errors) - .await?; - - Ok(parse_result) - } - - /// Evaluates the Rain language string and returns the evaluation result. - /// - /// Discovers all component addresses from Rainlang, parses the - /// Rainlang string via the deployer, then evaluates via the interpreter. - async fn fork_eval( - &self, - args: ForkEvalArgs, - ) -> Result, ForkCallError> { - let ForkEvalArgs { - rainlang_string, - source_index, - rainlang, - namespace, - context, - decode_errors, - inputs, - state_overlay, - } = args; - - let deployer = self - .alloy_call( - Address::default(), - rainlang, - expressionDeployerAddressCall {}, - decode_errors, - ) - .await? - .typed_return; - let interpreter = self - .alloy_call( - Address::default(), - rainlang, - interpreterAddressCall {}, - decode_errors, - ) - .await? - .typed_return; - let store = self - .alloy_call( - Address::default(), - rainlang, - storeAddressCall {}, - decode_errors, - ) - .await? - .typed_return; - - let parse_call = parse2Call { - data: rainlang_string.as_bytes().to_vec().into(), - }; - let parse_result = self - .alloy_call(Address::default(), deployer, parse_call, decode_errors) - .await?; - - let eval_args = eval4Call { - eval: EvalV4 { - bytecode: parse_result.typed_return, - sourceIndex: U256::from(source_index), - store, - namespace: namespace.into(), - context: context - .into_iter() - .map(|v| v.into_iter().map(Into::into).collect()) - .collect(), - inputs: inputs.into_iter().map(Into::into).collect(), - stateOverlay: state_overlay.into_iter().map(Into::into).collect(), - }, - }; - - let res = self - .alloy_call(Address::default(), interpreter, eval_args, decode_errors) - .await?; - - Ok(res) - } -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::fork::NewForkedEvm; - use alloy::primitives::FixedBytes; - use rainlang_test_fixtures::LocalEvm; - use std::sync::Arc; - - #[tokio::test(flavor = "multi_thread", worker_threads = 1)] - async fn test_fork_parse() { - let local_evm = LocalEvm::new().await; - let args = NewForkedEvm { - fork_url: local_evm.url(), - fork_block_number: None, - }; - let fork = Forker::new_with_fork(args, None, None).await.unwrap(); - - let res = fork - .fork_parse(ForkParseArgs { - rainlang_string: r"_: 1;".to_owned(), - rainlang: local_evm.rainlang, - decode_errors: true, - }) - .await - .unwrap(); - - let expected_bytes: Vec = alloy::hex::decode("0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000b0100000101000101100000").unwrap(); - assert_eq!(res.typed_return.0, expected_bytes); - } - - #[tokio::test(flavor = "multi_thread", worker_threads = 1)] - async fn test_fork_eval() { - let local_evm = LocalEvm::new().await; - let args = NewForkedEvm { - fork_url: local_evm.url(), - fork_block_number: None, - }; - let fork = Forker::new_with_fork(args, None, None).await.unwrap(); - let res = fork - .fork_eval(ForkEvalArgs { - rainlang_string: r"_: 3;".into(), - source_index: 0, - rainlang: local_evm.rainlang, - namespace: FullyQualifiedNamespace::default(), - context: vec![], - decode_errors: true, - state_overlay: vec![], - inputs: vec![], - }) - .await - .unwrap(); - - // stack - let expected_stack = vec![>::left_padding_from(&[3u8])]; - assert_eq!(res.typed_return.stack, expected_stack); - - // storage writes - let expected_writes: Vec> = vec![]; - assert_eq!(res.typed_return.writes, expected_writes); - - // stack in the trace for source index 0 - let mut expected_stack_trace = vec![0u8, 0u8, 0u8, 0u8]; - expected_stack_trace.append(&mut >::left_padding_from(&[3u8]).to_vec()); - - let trace_arena = res.raw.traces.unwrap(); - let source_index_zero_trace = trace_arena.into_nodes()[1].to_owned().trace; - assert_eq!(source_index_zero_trace.data.to_vec(), expected_stack_trace); - - // asserting the known trace address - let expected_trace_address = "0xF06Cd48c98d7321649dB7D8b2C396A81A2046555" - .parse::
() - .unwrap(); - let trace_address = Address::from(source_index_zero_trace.address.into_array()); - assert_eq!(trace_address, expected_trace_address); - } - - #[tokio::test(flavor = "multi_thread", worker_threads = 10)] - async fn test_fork_eval_parallel() { - let local_evm = LocalEvm::new().await; - let rainlang = local_evm.rainlang; - let args = NewForkedEvm { - fork_url: local_evm.url(), - fork_block_number: None, - }; - let fork = Forker::new_with_fork(args, None, None).await.unwrap(); - let fork = Arc::new(fork); // Wrap in Arc for shared ownership - - let mut handles = vec![]; - for _ in 0..1000 { - let fork_clone = Arc::clone(&fork); // Clone the Arc for each thread - let handle = tokio::spawn(async move { - fork_clone - .fork_eval(ForkEvalArgs { - rainlang_string: r"_: 3;".into(), - source_index: 0, - rainlang, - namespace: FullyQualifiedNamespace::default(), - context: vec![], - decode_errors: true, - state_overlay: vec![], - inputs: vec![], - }) - .await - .unwrap() - }); - handles.push(handle); - } - - for handle in handles { - let res = handle.await.unwrap(); - assert_eq!( - res.typed_return.stack, - vec![FixedBytes::left_padding_from(&[3u8])] - ); - } - } -} diff --git a/crates/eval/src/fork.rs b/crates/eval/src/fork.rs deleted file mode 100644 index 5921796bd..000000000 --- a/crates/eval/src/fork.rs +++ /dev/null @@ -1,7 +0,0 @@ -//! Re-export of the generic forking executor, which now lives in `rain-forker`. -//! -//! Kept as `rain_interpreter_eval::fork` for backwards compatibility with -//! downstream consumers. The Rain-specific `fork_eval` / `fork_parse` helpers -//! live in [`crate::eval`]. -pub use rain_forker::fork::{Env, ForkId, Forker, NewForkedEvm}; -pub use rain_forker::result::{ForkTypedReturn, RawCallResult}; diff --git a/crates/eval/src/lib.rs b/crates/eval/src/lib.rs deleted file mode 100644 index 384608e02..000000000 --- a/crates/eval/src/lib.rs +++ /dev/null @@ -1,15 +0,0 @@ -//! Evaluation runtime for Rainlang expressions using forked EVM contexts. -//! -//! The generic forking executor (`Forker`, `RawCallResult`, `ForkCallError`, …) -//! comes from the [`rain_forker`] crate and is re-exported here for backwards -//! compatibility; this crate adds the Rain-specific evaluation, parsing, and -//! trace decoding on top. Forking is native-only, so those modules are gated. - -#[cfg(not(target_family = "wasm"))] -pub mod error; -#[cfg(not(target_family = "wasm"))] -pub mod eval; -#[cfg(not(target_family = "wasm"))] -pub mod fork; -pub mod namespace; -pub mod trace; diff --git a/crates/eval/src/namespace.rs b/crates/eval/src/namespace.rs deleted file mode 100644 index 2ce60367f..000000000 --- a/crates/eval/src/namespace.rs +++ /dev/null @@ -1,40 +0,0 @@ -use alloy::primitives::{Address, B256, U256, keccak256}; -use rainlang_bindings::IInterpreterV4::FullyQualifiedNamespace; - -/// Qualifies a state namespace by hashing it with the sender address, -/// matching the on-chain `qualifyNamespace` logic in RainlangStore. -pub fn qualify_namespace(state_namespace: B256, sender: Address) -> FullyQualifiedNamespace { - // Combine state namespace and sender into a single 64-byte array - let mut combined = [0u8; 64]; - combined[..32].copy_from_slice(state_namespace.as_slice()); - combined[44..].copy_from_slice(sender.as_slice()); - - // Hash the combined array with Keccak256 - let qualified_namespace = keccak256(combined); - - FullyQualifiedNamespace::from(U256::from_be_bytes(qualified_namespace.0)) -} - -#[cfg(test)] -mod tests { - use super::*; - use std::str::FromStr; - - #[test] - fn test_new() { - let state_namespace = B256::repeat_byte(0x1); - let sender = Address::repeat_byte(0x2); - let namespace = qualify_namespace(state_namespace, sender); - - // Got the below from chisel - let expected = - B256::from_str("0x92f6b29736bf07627a27ffec88dbcb964f312685ab557770ad73f67336b9aee8") - .unwrap() - .as_slice() - .to_owned(); - - let mut namespace_bytes = namespace.into_underlying().as_le_slice().to_owned(); - namespace_bytes.reverse(); - assert_eq!(namespace_bytes, expected); - } -} diff --git a/crates/eval/src/trace.rs b/crates/eval/src/trace.rs deleted file mode 100644 index 15fff8621..000000000 --- a/crates/eval/src/trace.rs +++ /dev/null @@ -1,670 +0,0 @@ -#[cfg(not(target_family = "wasm"))] -use crate::fork::ForkTypedReturn; -use alloy::primitives::address; -use alloy::primitives::{Address, U256}; -#[cfg(not(target_family = "wasm"))] -use rain_forker::RawCallResult; -#[cfg(not(target_family = "wasm"))] -use rainlang_bindings::IInterpreterV4::{eval4Call, eval4Return}; -use serde::{Deserialize, Serialize}; -use thiserror::Error; -#[cfg(target_family = "wasm")] -use wasm_bindgen_utils::{impl_wasm_traits, prelude::*}; - -/// Address of the tracer contract that the interpreter calls during evaluation -/// to emit trace data. No code is deployed here; calls are intercepted by the -/// tracing inspector. -pub const RAIN_TRACER_ADDRESS: Address = address!("F06Cd48c98d7321649dB7D8b2C396A81A2046555"); - -/// A struct representing a single trace from a Rain source. Intended to be decoded -/// from the calldata sent as part of a noop call by the Interpreter to the -/// non-existent tracer contract. -#[derive(Debug, Clone, PartialEq, Eq)] -pub struct RainSourceTrace { - pub parent_source_index: u16, - pub source_index: u16, - pub stack: Vec, -} - -#[cfg(not(target_family = "wasm"))] -impl RainSourceTrace { - fn from_data(data: &[u8]) -> Option { - if data.len() < 4 { - return None; - } - - // Parse parent and source indices from the next 4 bytes - let parent_source_index = u16::from_be_bytes([data[0], data[1]]); - let source_index = u16::from_be_bytes([data[2], data[3]]); - - // Initialize the stack vector - let mut stack = Vec::new(); - - // Start reading stack values after the indices, which is 4 bytes in from the current data slice - let mut i = 4; - while i + 32 <= data.len() { - // Parse each 32-byte segment as a U256 value - let value = U256::from_be_slice(&data[i..i + 32]); - stack.push(value); - i += 32; // Move to the next 32-byte segment - } - - Some(RainSourceTrace { - parent_source_index, - source_index, - stack, - }) - } -} - -/// A struct representing the result of a Rain eval call. Contains the stack, -/// writes, and traces. Can be constructed from a `ForkTypedReturn`. -#[derive(Debug, Clone)] -pub struct RainEvalResult { - pub reverted: bool, - pub stack: Vec, - pub writes: Vec, - pub traces: Vec, -} - -#[cfg(not(target_family = "wasm"))] -impl TryFrom> for RainEvalResult { - type Error = RainEvalResultFromRawCallResultError; - - fn try_from(typed_return: ForkTypedReturn) -> Result { - let eval4Return { stack, writes } = typed_return.typed_return; - - let call_trace_arena = typed_return - .raw - .traces - .ok_or(RainEvalResultFromRawCallResultError::MissingTraces)?; - let traces: Vec = call_trace_arena - .nodes() - .iter() - .filter_map(|trace_node| { - if Address::from(trace_node.trace.address.into_array()) == RAIN_TRACER_ADDRESS { - RainSourceTrace::from_data(&trace_node.trace.data) - } else { - None - } - }) - .rev() - .collect(); - - Ok(RainEvalResult { - reverted: typed_return.raw.reverted, - stack: stack.into_iter().map(Into::into).collect(), - writes: writes.into_iter().map(Into::into).collect(), - traces, - }) - } -} - -/// Errors that can occur when converting a raw EVM call result into a -/// `RainEvalResult`. -#[derive(Error, Debug)] -pub enum RainEvalResultFromRawCallResultError { - #[error("Traces are missing")] - MissingTraces, -} - -/// Note: `RawCallResult` does not contain ABI-decoded stack/writes, so these -/// fields are left empty. Only traces are populated from the call trace arena. -#[cfg(not(target_family = "wasm"))] -impl TryFrom for RainEvalResult { - type Error = RainEvalResultFromRawCallResultError; - - fn try_from(raw_call_result: RawCallResult) -> Result { - let trace_arena = raw_call_result - .traces - .ok_or(RainEvalResultFromRawCallResultError::MissingTraces)?; - - let traces: Vec = trace_arena - .nodes() - .iter() - .filter_map(|trace_node| { - if Address::from(trace_node.trace.address.into_array()) == RAIN_TRACER_ADDRESS { - RainSourceTrace::from_data(&trace_node.trace.data) - } else { - None - } - }) - .rev() - .collect(); - - Ok(RainEvalResult { - reverted: raw_call_result.reverted, - stack: vec![], - writes: vec![], - traces, - }) - } -} - -/// Errors that can occur when searching for a trace by dot-separated path. -#[derive(Error, Debug)] -pub enum TraceSearchError { - #[error("Unparseable trace path: {0}")] - BadTracePath(String), - #[error("Trace not found: {0}")] - TraceNotFound(String), -} - -impl RainEvalResult { - /// Searches for a stack value by a dot-separated path through the trace - /// tree. The path format is `....`. - pub fn search_trace_by_path(&self, path: &str) -> Result { - let mut parts = path.split('.').collect::>(); - - if parts.len() < 2 { - return Err(TraceSearchError::BadTracePath(path.to_string())); - } - - let stack_index = parts - .pop() - .unwrap() - .parse::() - .map_err(|_| TraceSearchError::BadTracePath(path.to_string()))?; - - let root_source_index = parts[0] - .parse::() - .map_err(|_| TraceSearchError::BadTracePath(path.to_string()))?; - // Root traces have parent_source_index == source_index by convention. - let mut current_parent_index = root_source_index; - let mut current_source_index = root_source_index; - - for part in parts.iter().skip(1) { - let next_source_index = part - .parse::() - .map_err(|_| TraceSearchError::BadTracePath(path.to_string()))?; - - if self.traces.iter().any(|t| { - t.parent_source_index == current_source_index && t.source_index == next_source_index - }) { - current_parent_index = current_source_index; - current_source_index = next_source_index; - } else { - return Err(TraceSearchError::TraceNotFound(format!( - "Trace with parent {}.{} not found", - current_source_index, next_source_index - ))); - } - } - self.traces - .iter() - .find(|t| { - t.parent_source_index == current_parent_index - && t.source_index == current_source_index - }) - .ok_or_else(|| { - TraceSearchError::TraceNotFound(format!( - "Trace with parent {}.{} not found", - current_parent_index, current_source_index - )) - }) - .and_then(|trace| { - // Reverse the stack order to account for the last item being at index 0 - let reversed_stack_index = trace.stack.len().checked_sub(stack_index + 1).ok_or( - TraceSearchError::TraceNotFound(format!( - "Stack index {} out of bounds in trace {}.{}", - stack_index, current_parent_index, current_source_index - )), - )?; - - trace.stack.get(reversed_stack_index).cloned().ok_or( - TraceSearchError::TraceNotFound(format!( - "Reversed stack index {} not found in trace {}.{}", - reversed_stack_index, current_parent_index, current_source_index - )), - ) - }) - } -} - -/// Tabular representation of evaluation results, with named columns derived -/// from trace paths and one row per evaluation result. -#[derive(Debug, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -#[cfg_attr(target_family = "wasm", derive(Tsify))] -pub struct RainEvalResultsTable { - pub column_names: Vec, - #[cfg_attr(target_family = "wasm", tsify(type = "string[][]"))] - pub rows: Vec>, -} -#[cfg(target_family = "wasm")] -impl_wasm_traits!(RainEvalResultsTable); - -/// Collection of evaluation results that can be flattened into a table. -#[derive(Debug, Clone)] -pub struct RainEvalResults { - pub results: Vec, -} - -impl From> for RainEvalResults { - fn from(results: Vec) -> Self { - RainEvalResults { results } - } -} - -impl RainEvalResults { - /// Flattens all results into a table where columns are trace paths and - /// rows are per-result stack values. - pub fn into_flattened_table(&self) -> RainEvalResultsTable { - if self.results.is_empty() { - return RainEvalResultsTable { - column_names: Vec::new(), - rows: Vec::new(), - }; - } - - let column_names = flattened_trace_path_names(&self.results[0].traces); - - let rows = self - .results - .iter() - .map(|result| { - result - .traces - .iter() - .flat_map(|trace| trace.stack.iter().rev().copied()) - .collect() - }) - .collect(); - - RainEvalResultsTable { - column_names: column_names.to_vec(), - rows, - } - } -} - -/// Generates flattened trace path names based on parent-child relationships. -/// Format: "parent.child.stack_index" where parent/child are source indices. -/// Falls back to "parent?.child" when parent path cannot be resolved. -pub fn flattened_trace_path_names(traces: &[RainSourceTrace]) -> Vec { - let mut path_names: Vec = vec![]; - let mut source_paths: Vec = vec![]; - - for trace in traces.iter() { - let current_path = if trace.parent_source_index == trace.source_index { - format!("{}", trace.source_index) - } else { - source_paths - .iter() - .rev() - .find_map(|recent_path| { - recent_path.split('.').next_back().and_then(|last_part| { - if last_part == trace.parent_source_index.to_string() { - Some(format!("{}.{}", recent_path, trace.source_index)) - } else { - None - } - }) - }) - .unwrap_or(format!( - "{}?.{}", - trace.parent_source_index, trace.source_index - )) - }; - - for (index, _) in trace.stack.iter().enumerate() { - path_names.push(format!("{}.{}", current_path, index)); - } - - source_paths.push(current_path); - } - - path_names -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::eval::{ForkEvalArgs, ForkEvalExt}; - use crate::fork::{Forker, NewForkedEvm}; - use rainlang_bindings::IInterpreterStoreV3::FullyQualifiedNamespace; - use rainlang_test_fixtures::LocalEvm; - - #[tokio::test(flavor = "multi_thread", worker_threads = 1)] - async fn test_fork_trace() { - let local_evm = LocalEvm::new().await; - - let args = NewForkedEvm { - fork_url: local_evm.url(), - fork_block_number: None, - }; - - let fork = Forker::new_with_fork(args, None, None).await.unwrap(); - - let res = fork - .fork_eval(ForkEvalArgs { - rainlang_string: r" - a: 3, - b: 2, - c: 4, - _: call<1>(1 2), - :set(1 2), - :set(3 4); - a b:, - c: call<2>(a b), - d: 3; - a b:, - c: 2; - " - .into(), - source_index: 0, - rainlang: local_evm.rainlang, - namespace: FullyQualifiedNamespace::default(), - context: vec![], - decode_errors: true, - state_overlay: vec![], - inputs: vec![], - }) - .await - .unwrap(); - - let rain_eval_result = RainEvalResult::try_from(res).unwrap(); - - // reverted - assert!(!rain_eval_result.reverted); - // stack - let expected_stack = vec![U256::from(3), U256::from(4), U256::from(2), U256::from(3)]; - assert_eq!(rain_eval_result.stack, expected_stack); - - // storage writes - let expected_writes = vec![U256::from(3), U256::from(4), U256::from(1), U256::from(2)]; - assert_eq!(rain_eval_result.writes, expected_writes); - - // stack traces - // 0 0 - let trace_0 = RainSourceTrace { - parent_source_index: 0, - source_index: 0, - stack: vec![U256::from(3), U256::from(4), U256::from(2), U256::from(3)], - }; - assert_eq!(rain_eval_result.traces[0], trace_0); - // 0 1 - let trace_1 = RainSourceTrace { - parent_source_index: 0, - source_index: 1, - stack: vec![U256::from(3), U256::from(2), U256::from(2), U256::from(1)], - }; - assert_eq!(rain_eval_result.traces[1], trace_1); - // 1 2 - let trace_2 = RainSourceTrace { - parent_source_index: 1, - source_index: 2, - stack: vec![U256::from(2), U256::from(2), U256::from(1)], - }; - assert_eq!(rain_eval_result.traces[2], trace_2); - } - - #[tokio::test(flavor = "multi_thread", worker_threads = 1)] - async fn test_search_trace_by_path() { - let local_evm = LocalEvm::new().await; - - let args = NewForkedEvm { - fork_url: local_evm.url(), - fork_block_number: None, - }; - let fork = Forker::new_with_fork(args, None, None).await.unwrap(); - - let res = fork - .fork_eval(ForkEvalArgs { - rainlang_string: r" - a: 3, - b: 2, - c: 4, - _: call<1>(1 2); - a b:, - c: call<2>(a b), - d: 3; - a b:, - c: 2; - " - .into(), - source_index: 0, - rainlang: local_evm.rainlang, - namespace: FullyQualifiedNamespace::default(), - context: vec![], - decode_errors: true, - state_overlay: vec![], - inputs: vec![], - }) - .await - .unwrap(); - - let rain_eval_result = RainEvalResult::try_from(res).unwrap(); - - // search_trace_by_path - let trace_0 = rain_eval_result.search_trace_by_path("0.1").unwrap(); - assert_eq!(trace_0, U256::from(2)); - let trace_1 = rain_eval_result.search_trace_by_path("0.1.3").unwrap(); - assert_eq!(trace_1, U256::from(3)); - let trace_2 = rain_eval_result.search_trace_by_path("0.1.2").unwrap(); - assert_eq!(trace_2, U256::from(2)); - - // 3-level path: source 0 → source 1 → source 2 - // trace 2 has parent=1, source=2, stack=[2, 2, 1] - // stack is reversed when indexing: index 0 → stack[2]=1, index 1 → stack[1]=2, index 2 → stack[0]=2 - let trace_3 = rain_eval_result.search_trace_by_path("0.1.2.0").unwrap(); - assert_eq!(trace_3, U256::from(1)); - let trace_4 = rain_eval_result.search_trace_by_path("0.1.2.1").unwrap(); - assert_eq!(trace_4, U256::from(2)); - let trace_5 = rain_eval_result.search_trace_by_path("0.1.2.2").unwrap(); - assert_eq!(trace_5, U256::from(2)); - - // test the various errors - // bad trace path - let result = rain_eval_result.search_trace_by_path("0"); - assert!(matches!(result, Err(TraceSearchError::BadTracePath(_)))); - let result = rain_eval_result.search_trace_by_path("0.1."); - assert!(matches!(result, Err(TraceSearchError::BadTracePath(_)))); - - let result = rain_eval_result.search_trace_by_path("0.1.12"); - assert!(matches!(result, Err(TraceSearchError::TraceNotFound(_)))); - } - - async fn get_raw_call_result() -> RawCallResult { - let local_evm = LocalEvm::new().await; - - let args = NewForkedEvm { - fork_url: local_evm.url(), - fork_block_number: None, - }; - let fork = Forker::new_with_fork(args, None, None).await.unwrap(); - - let res = fork - .fork_eval(ForkEvalArgs { - rainlang_string: r" - a: 3, - b: 2, - c: 4, - _: call<1>(1 2), - :set(1 2), - :set(3 4); - a b:, - c: call<2>(a b), - d: 3; - a b:, - c: 2; - " - .into(), - source_index: 0, - rainlang: local_evm.rainlang, - namespace: FullyQualifiedNamespace::default(), - context: vec![], - decode_errors: true, - state_overlay: vec![], - inputs: vec![], - }) - .await - .unwrap(); - - res.raw - } - - #[tokio::test(flavor = "multi_thread", worker_threads = 1)] - async fn test_try_from_raw_call_result() { - let raw = get_raw_call_result().await; - let rain_eval_result = RainEvalResult::try_from(raw).unwrap(); - - assert!(!rain_eval_result.reverted); - assert!(rain_eval_result.stack.is_empty()); - assert!(rain_eval_result.writes.is_empty()); - - let trace_0 = RainSourceTrace { - parent_source_index: 0, - source_index: 0, - stack: vec![U256::from(3), U256::from(4), U256::from(2), U256::from(3)], - }; - assert_eq!(rain_eval_result.traces[0], trace_0); - - let trace_1 = RainSourceTrace { - parent_source_index: 0, - source_index: 1, - stack: vec![U256::from(3), U256::from(2), U256::from(2), U256::from(1)], - }; - assert_eq!(rain_eval_result.traces[1], trace_1); - - let trace_2 = RainSourceTrace { - parent_source_index: 1, - source_index: 2, - stack: vec![U256::from(2), U256::from(2), U256::from(1)], - }; - assert_eq!(rain_eval_result.traces[2], trace_2); - } - - #[tokio::test(flavor = "multi_thread", worker_threads = 1)] - async fn test_try_from_raw_call_result_missing_traces() { - let mut raw = get_raw_call_result().await; - raw.traces = None; - let result = RainEvalResult::try_from(raw); - assert!(matches!( - result, - Err(RainEvalResultFromRawCallResultError::MissingTraces) - )); - } - - #[test] - fn test_from_data_empty() { - assert!(RainSourceTrace::from_data(&[]).is_none()); - } - - #[test] - fn test_from_data_one_byte() { - assert!(RainSourceTrace::from_data(&[0x01]).is_none()); - } - - #[test] - fn test_from_data_three_bytes() { - assert!(RainSourceTrace::from_data(&[0x00, 0x01, 0x02]).is_none()); - } - - #[test] - fn test_from_data_exactly_four_bytes() { - let data = [0x00, 0x01, 0x00, 0x02]; - let trace = RainSourceTrace::from_data(&data).unwrap(); - assert_eq!(trace.parent_source_index, 1); - assert_eq!(trace.source_index, 2); - assert!(trace.stack.is_empty()); - } - - #[test] - fn test_from_data_trailing_partial_word() { - // 4 header bytes + 31 payload bytes = 35 total. - // 31 bytes is less than 32, so no stack item is produced. - let mut data = vec![0x00, 0x03, 0x00, 0x04]; - data.extend_from_slice(&[0xFF; 31]); - let trace = RainSourceTrace::from_data(&data).unwrap(); - assert_eq!(trace.parent_source_index, 3); - assert_eq!(trace.source_index, 4); - assert!(trace.stack.is_empty()); - } - - #[test] - fn test_from_data_one_full_word() { - // 4 header bytes + 32 payload bytes = 36 total. - let mut data = vec![0x00, 0x00, 0x00, 0x01]; - let mut word = [0u8; 32]; - word[31] = 0x42; - data.extend_from_slice(&word); - let trace = RainSourceTrace::from_data(&data).unwrap(); - assert_eq!(trace.parent_source_index, 0); - assert_eq!(trace.source_index, 1); - assert_eq!(trace.stack.len(), 1); - assert_eq!(trace.stack[0], U256::from(0x42)); - } - - #[test] - fn test_from_data_one_full_word_plus_partial() { - // 4 header + 32 full word + 15 trailing = 51 total. - // Only 1 stack item should be produced; the 15 trailing bytes are dropped. - let mut data = vec![0x00, 0x05, 0x00, 0x06]; - let mut word = [0u8; 32]; - word[31] = 0x07; - data.extend_from_slice(&word); - data.extend_from_slice(&[0xFF; 15]); - let trace = RainSourceTrace::from_data(&data).unwrap(); - assert_eq!(trace.parent_source_index, 5); - assert_eq!(trace.source_index, 6); - assert_eq!(trace.stack.len(), 1); - assert_eq!(trace.stack[0], U256::from(0x07)); - } - - #[test] - fn test_from_data_two_full_words() { - let mut data = vec![0x00, 0x00, 0x00, 0x00]; - let mut word1 = [0u8; 32]; - word1[31] = 0x0A; - let mut word2 = [0u8; 32]; - word2[31] = 0x0B; - data.extend_from_slice(&word1); - data.extend_from_slice(&word2); - let trace = RainSourceTrace::from_data(&data).unwrap(); - assert_eq!(trace.stack.len(), 2); - assert_eq!(trace.stack[0], U256::from(0x0A)); - assert_eq!(trace.stack[1], U256::from(0x0B)); - } - - #[test] - fn test_rain_eval_results_into_flattened_table_empty() { - let rain_eval_results = RainEvalResults { results: vec![] }; - let table = rain_eval_results.into_flattened_table(); - assert!(table.column_names.is_empty()); - assert!(table.rows.is_empty()); - } - - #[test] - fn test_rain_eval_result_into_flattened_table() { - let trace1 = RainSourceTrace { - parent_source_index: 1, - source_index: 1, // Adjusted to match the test case - stack: vec![U256::from(1), U256::from(2)], - }; - let trace2 = RainSourceTrace { - parent_source_index: 1, // Adjusted to match the parent_source_index - source_index: 2, - stack: vec![U256::from(3)], - }; - - let rain_eval_result = RainEvalResult { - reverted: false, - stack: vec![], - writes: vec![], - traces: vec![trace1, trace2], - }; - - let rain_eval_results = RainEvalResults { - results: vec![rain_eval_result], - }; - - let table = rain_eval_results.into_flattened_table(); - assert_eq!(table.column_names, vec!["1.0", "1.1", "1.2.0"]); - assert_eq!(table.rows.len(), 1); - assert_eq!( - table.rows[0], - vec![U256::from(2), U256::from(1), U256::from(3)] - ); - } -} diff --git a/crates/parser/Cargo.toml b/crates/parser/Cargo.toml deleted file mode 100644 index 3aeeac676..000000000 --- a/crates/parser/Cargo.toml +++ /dev/null @@ -1,29 +0,0 @@ -[package] -name = "rainlang_parser" -version = "0.1.8" -edition.workspace = true -license.workspace = true -description = "Rainlang Parser Rust Crate." -homepage.workspace = true - -[dependencies] -rainlang_dispair = { workspace = true } -rainlang_bindings = { workspace = true } -alloy = { workspace = true, features = [ - "providers", - "network", - "rpc-types-eth", -] } -thiserror = { workspace = true } - -[target.'cfg(not(target_family = "wasm"))'.dependencies] -tokio = { version = "1.28.0", features = ["full"] } - -[target.'cfg(target_family = "wasm")'.dependencies] -tokio = { version = "1.28.0", features = [ - "sync", - "macros", - "io-util", - "rt", - "time", -] } diff --git a/crates/parser/src/error.rs b/crates/parser/src/error.rs deleted file mode 100644 index ac2c43b01..000000000 --- a/crates/parser/src/error.rs +++ /dev/null @@ -1,12 +0,0 @@ -use alloy::sol_types; -use alloy::transports::TransportError; -use thiserror::Error; - -/// Errors that can occur during Rust-side parsing operations. -#[derive(Error, Debug)] -pub enum ParserError { - #[error(transparent)] - Transport(#[from] TransportError), - #[error(transparent)] - AbiDecode(#[from] sol_types::Error), -} diff --git a/crates/parser/src/lib.rs b/crates/parser/src/lib.rs deleted file mode 100644 index 486047fd6..000000000 --- a/crates/parser/src/lib.rs +++ /dev/null @@ -1,7 +0,0 @@ -//! Rust client for the on-chain Rainlang parser contract. - -pub mod error; -pub mod v2; - -pub use crate::error::*; -pub use crate::v2::*; diff --git a/crates/parser/src/v2.rs b/crates/parser/src/v2.rs deleted file mode 100644 index f0b3530ba..000000000 --- a/crates/parser/src/v2.rs +++ /dev/null @@ -1,310 +0,0 @@ -use crate::error::ParserError; -use alloy::network::{Network, TransactionBuilder}; -use alloy::primitives::Address; -use alloy::providers::Provider; -use alloy::sol_types::SolCall; -use rainlang_bindings::IParserPragmaV1::*; -use rainlang_bindings::IParserV2::*; -use rainlang_dispair::DISPaiR; - -async fn eth_call>( - provider: &P, - to: Address, - call: C, -) -> Result { - let tx = N::TransactionRequest::default() - .with_to(to) - .with_input(call.abi_encode()); - let bytes = provider.call(tx).await?; - Ok(C::abi_decode_returns(&bytes)?) -} - -/// Trait for interacting with the on-chain Rainlang parser contract. -#[cfg(not(target_family = "wasm"))] -pub trait Parser2 { - /// Call Parser contract to parse the provided rainlang text. - fn parse_text + Sync>( - &self, - text: &str, - provider: &P, - ) -> impl std::future::Future> + Send - where - Self: Sync, - { - self.parse(text.as_bytes().to_vec(), provider) - } - - /// Call Parser contract to parse the provided data. - /// The provided data must contain valid UTF-8 encoding of valid rainlang text. - fn parse + Sync>( - &self, - data: Vec, - provider: &P, - ) -> impl std::future::Future> + Send; - - /// Call Parser contract to parse the provided rainlang text and provide the pragma. - fn parse_pragma + Sync>( - &self, - data: Vec, - provider: &P, - ) -> impl std::future::Future> + Send; - - /// Call Parser contract to parse the provided rainlang text and return the pragma addresses. - fn parse_pragma_text + Sync>( - &self, - text: &str, - provider: &P, - ) -> impl std::future::Future, ParserError>> + Send - where - Self: Sync, - { - async move { - let res = self - .parse_pragma(text.as_bytes().to_vec(), provider) - .await?; - Ok(res._0.usingWordsFrom) - } - } -} - -/// Trait for interacting with the on-chain Rainlang parser contract. -#[cfg(target_family = "wasm")] -pub trait Parser2 { - fn parse_text>( - &self, - text: &str, - provider: &P, - ) -> impl std::future::Future> - where - Self: Sync, - { - self.parse(text.as_bytes().to_vec(), provider) - } - - fn parse>( - &self, - data: Vec, - provider: &P, - ) -> impl std::future::Future>; - - fn parse_pragma>( - &self, - data: Vec, - provider: &P, - ) -> impl std::future::Future>; - - fn parse_pragma_text>( - &self, - text: &str, - provider: &P, - ) -> impl std::future::Future, ParserError>> - where - Self: Sync, - { - async move { - let res = self - .parse_pragma(text.as_bytes().to_vec(), provider) - .await?; - Ok(res._0.usingWordsFrom) - } - } -} - -/// Client-side wrapper around a deployer address that implements [`Parser2`] -/// by making read calls to the on-chain deployer contract (which implements -/// `IParserV2`). -/// -/// The deployer address is typically discovered from Rainlang. -#[derive(Clone, Default)] -pub struct ParserV2 { - /// The address of the expression deployer (implements `IParserV2`). - pub deployer_address: Address, -} - -impl From for ParserV2 { - fn from(val: DISPaiR) -> Self { - Self { - deployer_address: val.deployer, - } - } -} - -impl From
for ParserV2 { - fn from(val: Address) -> Self { - Self { - deployer_address: val, - } - } -} - -impl ParserV2 { - /// Creates a new `ParserV2` for the given deployer address. - pub fn new(deployer_address: Address) -> Self { - Self { deployer_address } - } -} - -#[cfg(not(target_family = "wasm"))] -impl Parser2 for ParserV2 { - async fn parse + Sync>( - &self, - data: Vec, - provider: &P, - ) -> Result { - let bytecode = eth_call( - provider, - self.deployer_address, - parse2Call { data: data.into() }, - ) - .await?; - Ok(parse2Return { bytecode }) - } - - async fn parse_pragma + Sync>( - &self, - data: Vec, - provider: &P, - ) -> Result { - let pragma = eth_call( - provider, - self.deployer_address, - parsePragma1Call { data: data.into() }, - ) - .await?; - Ok(parsePragma1Return { _0: pragma }) - } -} - -#[cfg(target_family = "wasm")] -impl Parser2 for ParserV2 { - async fn parse>( - &self, - data: Vec, - provider: &P, - ) -> Result { - let bytecode = eth_call( - provider, - self.deployer_address, - parse2Call { data: data.into() }, - ) - .await?; - Ok(parse2Return { bytecode }) - } - - async fn parse_pragma>( - &self, - data: Vec, - provider: &P, - ) -> Result { - let pragma = eth_call( - provider, - self.deployer_address, - parsePragma1Call { data: data.into() }, - ) - .await?; - Ok(parsePragma1Return { _0: pragma }) - } -} - -#[cfg(test)] -mod tests { - use super::*; - use alloy::{ - hex, - primitives::Address, - providers::{ProviderBuilder, mock::Asserter}, - }; - - #[tokio::test] - async fn test_from_dispair() { - let deployer_address = Address::repeat_byte(0x4); - - let dispair = DISPaiR { - deployer: deployer_address, - interpreter: Address::repeat_byte(0x2), - store: Address::repeat_byte(0x3), - parser: Address::repeat_byte(0x1), - }; - - let parser: ParserV2 = dispair.clone().into(); - - assert_eq!(parser.deployer_address, dispair.deployer); - assert_eq!(parser.deployer_address, deployer_address); - } - - #[tokio::test] - async fn test_parse() { - let asserter = Asserter::new(); - asserter.push_success( - &[ - "0x0000000000000000000000000000000000000000000000000000000000000020", // offset to start of bytecode - "0000000000000000000000000000000000000000000000000000000000000002", // length of bytecode - "1234000000000000000000000000000000000000000000000000000000000000", // bytecode - ] - .concat(), - ); - - let provider = ProviderBuilder::new().connect_mocked_client(asserter); - let parser = ParserV2 { - deployer_address: Address::repeat_byte(0x1), - }; - - let result = parser.parse_text("my rainlang", &provider).await.unwrap(); - - assert_eq!(**result.bytecode, hex!("1234")); - } - - #[tokio::test] - async fn test_parse_text() { - let rainlang = "my rainlang"; - - let asserter = Asserter::new(); - asserter.push_success( - &[ - "0x0000000000000000000000000000000000000000000000000000000000000020", // length of bytecode - "000000000000000000000000000000000000000000000000000000000000000b", // offset to start of bytecode - "6d79207261696e6c616e67000000000000000000000000000000000000000000", // bytecode - ] - .concat(), - ); - - let provider = ProviderBuilder::new().connect_mocked_client(asserter); - let parser = ParserV2 { - deployer_address: Address::repeat_byte(0x1), - }; - - let result = parser.parse_text(rainlang, &provider).await.unwrap(); - - assert_eq!(**result.bytecode, hex!("6d79207261696e6c616e67")); - } - - #[tokio::test] - async fn test_parse_pragma_text() { - let rainlang = "my rainlang"; - - let pragma1 = Address::repeat_byte(0x11); - let pragma2 = Address::repeat_byte(0x22); - - let asserter = Asserter::new(); - asserter.push_success( - &[ - "0000000000000000000000000000000000000000000000000000000000000020", // offset - "0000000000000000000000000000000000000000000000000000000000000020", // offset - "0000000000000000000000000000000000000000000000000000000000000002", // array length - "0000000000000000000000001111111111111111111111111111111111111111", - "0000000000000000000000002222222222222222222222222222222222222222", // array of addresses - ] - .concat(), - ); - - let provider = ProviderBuilder::new().connect_mocked_client(asserter); - let parser = ParserV2 { - deployer_address: Address::repeat_byte(0x1), - }; - - let result = parser.parse_pragma_text(rainlang, &provider).await.unwrap(); - - assert_eq!(result[0], pragma1); - assert_eq!(result[1], pragma2); - } -} diff --git a/crates/test_fixtures/Cargo.toml b/crates/test_fixtures/Cargo.toml deleted file mode 100644 index 35a4847a7..000000000 --- a/crates/test_fixtures/Cargo.toml +++ /dev/null @@ -1,23 +0,0 @@ -[package] -name = "rainlang_test_fixtures" -version = "0.1.4" -edition.workspace = true -license.workspace = true -description = "Local EVM test fixtures (deployer, interpreter, parser, store, and ERC20 helpers) for testing against the Rainlang interpreter." -homepage.workspace = true - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -alloy = { workspace = true, features = [ - "node-bindings", - "sol-types", - "rpc-types", - "provider-http", - "network", - "contract", - "signer-local", -] } - -[target.'cfg(target_family = "wasm")'.dependencies] -getrandom = { version = "0.2", features = ["js", "js-sys"] } diff --git a/crates/test_fixtures/abi/Rainlang.json b/crates/test_fixtures/abi/Rainlang.json deleted file mode 100644 index f85352e17..000000000 --- a/crates/test_fixtures/abi/Rainlang.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "expressionDeployerAddress", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "interpreterAddress", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parserAddress", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "storeAddress", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { - "name": "interfaceId", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - } - ], - "bytecode": { - "object": "0x6080604052348015600e575f80fd5b506101f78061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063107628021161004d57806310762802146100cb5780634501e517146100e5578063f2c4da93146100ff575f80fd5b806301ffc9a7146100685780630c1916a414610090575b5f80fd5b61007b6100763660046101b1565b610119565b60405190151581526020015b60405180910390f35b739179445a637e6ae72bb38273944fab96834488dd5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610087565b73c9e1d673ed122193b28376016ac506de2fa20bee6100a6565b734c52eee7fb6aed0f1a30130d96d02409d9d886cf6100a6565b731aa775533e28b1d843e1a589034984e3a62005dc6100a6565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fabaa01220000000000000000000000000000000000000000000000000000000014806101ab57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f602082840312156101c1575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101f0575f80fd5b939250505056" - }, - "deployedBytecode": { - "object": "0x608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063107628021161004d57806310762802146100cb5780634501e517146100e5578063f2c4da93146100ff575f80fd5b806301ffc9a7146100685780630c1916a414610090575b5f80fd5b61007b6100763660046101b1565b610119565b60405190151581526020015b60405180910390f35b739179445a637e6ae72bb38273944fab96834488dd5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610087565b73c9e1d673ed122193b28376016ac506de2fa20bee6100a6565b734c52eee7fb6aed0f1a30130d96d02409d9d886cf6100a6565b731aa775533e28b1d843e1a589034984e3a62005dc6100a6565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fabaa01220000000000000000000000000000000000000000000000000000000014806101ab57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f602082840312156101c1575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101f0575f80fd5b939250505056" - } -} diff --git a/crates/test_fixtures/abi/RainlangExpressionDeployer.json b/crates/test_fixtures/abi/RainlangExpressionDeployer.json deleted file mode 100644 index a9b90ad65..000000000 --- a/crates/test_fixtures/abi/RainlangExpressionDeployer.json +++ /dev/null @@ -1,489 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "buildIntegrityFunctionPointers", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes", - "internalType": "bytes" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "describedByMetaV1", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parse2", - "inputs": [ - { - "name": "data", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes", - "internalType": "bytes" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "parsePragma1", - "inputs": [ - { - "name": "data", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct PragmaV1", - "components": [ - { - "name": "usingWordsFrom", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { - "name": "interfaceId", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "error", - "name": "BadDynamicLength", - "inputs": [ - { - "name": "dynamicLength", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "standardOpsLength", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "BadOpInputsLength", - "inputs": [ - { - "name": "opIndex", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "calculatedInputs", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "bytecodeInputs", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "BadOpOutputsLength", - "inputs": [ - { - "name": "opIndex", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "calculatedOutputs", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "bytecodeOutputs", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "CallInputsMismatchSource", - "inputs": [ - { - "name": "operandInputs", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "sourceInputs", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "CallOutputsExceedSource", - "inputs": [ - { - "name": "sourceOutputs", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "outputs", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ExternIntegrityInputsMismatch", - "inputs": [ - { - "name": "expected", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "actual", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ExternIntegrityOutputsMismatch", - "inputs": [ - { - "name": "expected", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "actual", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "NotAnExternContract", - "inputs": [ - { - "name": "extern", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "OpcodeOutOfRange", - "inputs": [ - { - "name": "opIndex", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "opcodeIndex", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "fsCount", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "OutOfBoundsConstantRead", - "inputs": [ - { - "name": "opIndex", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "constantsLength", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "constantRead", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "OutOfBoundsStackRead", - "inputs": [ - { - "name": "opIndex", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "stackTopIndex", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "stackRead", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "SourceIndexOutOfBounds", - "inputs": [ - { - "name": "sourceIndex", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "bytecode", - "type": "bytes", - "internalType": "bytes" - } - ] - }, - { - "type": "error", - "name": "StackAllocationMismatch", - "inputs": [ - { - "name": "stackMaxIndex", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "bytecodeAllocation", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "StackOutputsMismatch", - "inputs": [ - { - "name": "stackIndex", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "bytecodeOutputs", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "StackSizingsNotMonotonic", - "inputs": [ - { - "name": "bytecode", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "relativeOffset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "StackUnderflow", - "inputs": [ - { - "name": "opIndex", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "stackIndex", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "calculatedInputs", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "StackUnderflowHighwater", - "inputs": [ - { - "name": "opIndex", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "stackIndex", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "stackHighwater", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "TruncatedBitwiseEncoding", - "inputs": [ - { - "name": "startBit", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "length", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "TruncatedHeader", - "inputs": [ - { - "name": "bytecode", - "type": "bytes", - "internalType": "bytes" - } - ] - }, - { - "type": "error", - "name": "TruncatedHeaderOffsets", - "inputs": [ - { - "name": "bytecode", - "type": "bytes", - "internalType": "bytes" - } - ] - }, - { - "type": "error", - "name": "TruncatedSource", - "inputs": [ - { - "name": "bytecode", - "type": "bytes", - "internalType": "bytes" - } - ] - }, - { - "type": "error", - "name": "UnexpectedSources", - "inputs": [ - { - "name": "bytecode", - "type": "bytes", - "internalType": "bytes" - } - ] - }, - { - "type": "error", - "name": "UnexpectedTrailingOffsetBytes", - "inputs": [ - { - "name": "bytecode", - "type": "bytes", - "internalType": "bytes" - } - ] - }, - { - "type": "error", - "name": "UnsupportedBitwiseShiftAmount", - "inputs": [ - { - "name": "shiftAmount", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ZeroLengthBitwiseEncoding", - "inputs": [] - } - ], - "bytecode": { - "object": "0x6080604052348015600e575f80fd5b50611ca88061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c80636f5aa28d1161004d5780636f5aa28d146100b0578063a3869e14146100de578063b92d7553146100fe575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b610076366004611619565b610106565b60405190151581526020015b60405180910390f35b6100a361009e366004611658565b610282565b60405161008791906116c4565b6040517f0ae1ecb6c0f6314beaf4d4cd803ba14c900b0eecb1ecd39a52739cff9ae2c34a8152602001610087565b6100f16100ec366004611813565b610347565b60405161008791906118d9565b6100f1610468565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f6f5aa28d00000000000000000000000000000000000000000000000000000000148061019857507fffffffff0000000000000000000000000000000000000000000000000000000082167fa3869e1400000000000000000000000000000000000000000000000000000000145b806101e457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5514ca2000000000000000000000000000000000000000000000000000000000145b8061023057507fffffffff0000000000000000000000000000000000000000000000000000000082167fb92d755300000000000000000000000000000000000000000000000000000000145b8061027c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080516020810182526060815290517f5514ca20000000000000000000000000000000000000000000000000000000008152739179445a637e6ae72bb38273944fab96834488dd90635514ca20906102e190869086906004016118eb565b5f60405180830381865afa1580156102fb573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610340919081019061195a565b9392505050565b6040517f7764fd9c0000000000000000000000000000000000000000000000000000000081526060905f908190739179445a637e6ae72bb38273944fab96834488dd90637764fd9c9061039e9087906004016118d9565b5f60405180830381865afa1580156103b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103fd9190810190611a39565b915091505f610416838351905160406020909202010190565b60408051602083820181019092528281529192508101610437818686610477565b5f61045b6040518060c0016040528060908152602001611c186090913987876104ba565b5091979650505050505050565b6060610472610879565b905090565b80600182510160200281015b8082101561049e578151855260209485019490910190610483565b50506104b56104aa8390565b848451602001610b4c565b505050565b60605f6104c684610b55565b85519091506020860190600290046104dd86610b6f565b8260020267ffffffffffffffff8111156104f9576104f9611729565b6040519080825280601f01601f191660200182016040528015610523576020820181803683370190505b509350602084015f5b8481101561086d575f806105408a84610d8c565b915091508184538060018501536002840193505f61055f8b848c610daf565b90505f601861056e8d87610e16565b0390505f61057c8d87610e45565b600402820190505b808210156107b757815162ffffff811690601d81901a600f81169160049190911c90601c1a61160f8c82106106015760808801516040517fc8344ab1000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018e90526064015b60405180910390fd5b50600281028d015160f01c5f806106168a8885565b9150915085821461066a5760808a01516040517fddf56071000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018790526064016105f8565b8481146106ba5760808a01516040517ffc8b5603000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604481018690526064016105f8565b895182111561070c5760808a01518a516040517f2cab6bff00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018390526064016105f8565b8951829003808b5260408b0151111561076e5760808a01518a516040808d015190517f1bc5ab0f0000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915260448201526064016105f8565b89518101808b5260208b0151101561078857895160208b01525b600181111561079957895160408b01525b50505060808701805160010190525050506004929092019150610584565b6107c18d87610e5c565b8360200151146108155782602001516107da8e88610e5c565b6040517f4d9c18dc000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016105f8565b8251841461085c5782516040517f4689f0b30000000000000000000000000000000000000000000000000000000081526004810191909152602481018590526044016105f8565b50506001909301925061052c915050565b50505050509392505050565b606061160f5f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff168152602001610e748152602001610ef08152602001610f5381526020016111ae81526020016111b781526020016111c181526020016111ca81526020016111e481526020016111b78152602001611289815260200161128981526020016112e481526020016113ad81526020016113ba81526020016111b781526020016111c181526020016113ba81526020016111b781526020016111c181526020016111c181526020016111b781526020016111b781526020016111b781526020016111ae81526020016111ae81526020016111ae81526020016111ae81526020016113c481526020016111b781526020016113e8815260200161140181526020016111b781526020016113c481526020016111b781526020016111b781526020016113ba81526020016111c181526020016111b781526020016111b781526020016111c1815260200161140a81526020016111b781526020016111c1815260200161140a81526020016111ae81526020016111c181526020016111c181526020016111c181526020016111c181526020016111b781526020016111c181526020016111c1815260200161140a81526020016111ae81526020016111ae815260200161140a81526020016111ae81526020016111ae815260200161140a81526020016111b781526020016111c1815260200161140a81526020016113ba81526020016113ba815260200161140a815260200161140a81526020016111ae815260200161140a815260200161140a815260200161140a81526020016111c18152602001611401815250905060608190506048815114610b3a5780516040517fc8b569010000000000000000000000000000000000000000000000000000000081526004810191909152602481018490526044016105f8565b610b4381611423565b94505050505090565b8083835e505050565b5f81515f03610b6557505f919050565b50602001515f1a90565b5f610b7982610b55565b90508015610d4a5781516001600283020190811115610bc657826040517f17f4bc5e0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b82516020828501810191850101602160027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860102860181019086015b808210610d0657815160f01c8481016004810185811115610c5157896040517e39ba560000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b81515f81901a90600181901a90600281901a9060031a80821180610c7457508281115b15610caf578d876040517feaf45f4f0000000000000000000000000000000000000000000000000000000081526004016105f8929190611b2a565b505050600481028201878114610cf3578b6040517ffbb8027a0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b8397506002870396505050505050610c03565b838314610d4157866040517fde67b29a0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b50505050505050565b600182511115610d8857816040517fd013da5d0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b5050565b5f805f610d998585610e16565b51600281901a9660039190911a95509350505050565b610de46040518060c001604052805f81526020015f81526020015f8152602001606081526020015f8152602001606081525090565b506040805160c081018252838152602081018490529081019290925260608201525f608082015260a081019190915290565b5f80610e2184610b55565b60020260010190505f610e3485856114b3565b949091019093016020019392505050565b5f80610e518484610e16565b515f1a949350505050565b5f80610e688484610e16565b5160011a949350505050565b81515f90819061ffff8416908110610ecf57608085015185516040517feaa16f3300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b8460400151811115610ee357604085018190525b505f946001945092505050565b6060820151515f90819061ffff8416908110610ee35760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b6060820151515f90819061ffff8416908110610fb65760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b5f85606001518281518110610fcd57610fcd611b4b565b602002602001015190505f80610fe6839060a082901c90565b91509150611014827f18003f8e00000000000000000000000000000000000000000000000000000000611509565b611062576040517f23016c8900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016105f8565b6040517f40c04edc00000000000000000000000000000000000000000000000000000000815260048101829052600f601089901c81166024830181905260148a901c9091166044830181905290915f90819073ffffffffffffffffffffffffffffffffffffffff8716906340c04edc906064016040805180830381865afa1580156110ef573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111139190611b78565b9150915083821461115a576040517f528cc0fb00000000000000000000000000000000000000000000000000000000815260048101859052602481018390526044016105f8565b82811461119d576040517fc5ff08dc00000000000000000000000000000000000000000000000000000000815260048101849052602481018290526044016105f8565b909b909a5098505050505050505050565b505f9160019150565b5060029160019150565b50600191829150565b5f806111d684846111e4565b506001958695509350505050565b5f8060ff83811690600885901c1680830361122b576040517f46f0ca6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101006112388284611b9a565b111561127a576040517f8abcdd3f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016105f8565b50600295600195509350505050565b5f8061ffff831660ff81118061129d575080155b156112d7576040517fc1be16a1000000000000000000000000000000000000000000000000000000008152600481018290526024016105f8565b5060019485945092505050565b60a08201515f90819061ffff841690600f601486901c811691601087901c90911690849081906113149086610d8c565b9150915081831461135b576040517f9199e58e00000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016105f8565b8381101561139f576040517fff13710800000000000000000000000000000000000000000000000000000000815260048101829052602481018590526044016105f8565b509791965090945050505050565b60101c600f169160019150565b5060039160019150565b5f80600f601084901c16806113da5760016113dc565b805b95600195509350505050565b5f80600f601084901c16600281116113da5760026113dc565b506002915f9150565b5f80600f601084901c16600181116113da5760026113dc565b60605f825160020267ffffffffffffffff81111561144357611443611729565b6040519080825280601f01601f19166020018201604052801561146d576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156114a757805183518616908516178152602090920191600201611485565b50939695505050505050565b5f6114bd83610b55565b82106114f95781836040517ffcfaeff10000000000000000000000000000000000000000000000000000000081526004016105f8929190611bd2565b50600202016003015161ffff1690565b5f61151383611524565b80156103405750610340838361159e565b5f61154f827f01ffc9a70000000000000000000000000000000000000000000000000000000061159e565b15611597575f80611580847fffffffff000000000000000000000000000000000000000000000000000000006115c2565b9150915081801561158f575080155b949350505050565b505f919050565b5f805f6115ab85856115c2565b915091508180156115b95750805b95945050505050565b7f01ffc9a7000000000000000000000000000000000000000000000000000000005f818152600483905290819060208260248188617530fa92505f511515601f3d11169150509250929050565b611617611bea565b565b5f60208284031215611629575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610340575f80fd5b5f8060208385031215611669575f80fd5b823567ffffffffffffffff80821115611680575f80fd5b818501915085601f830112611693575f80fd5b8135818111156116a1575f80fd5b8660208285010111156116b2575f80fd5b60209290920196919550909350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b8083101561171e57835173ffffffffffffffffffffffffffffffffffffffff1682529284019260019290920191908401906116e8565b509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516020810167ffffffffffffffff8111828210171561177957611779611729565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117c6576117c6611729565b604052919050565b5f67ffffffffffffffff8211156117e7576117e7611729565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f60208284031215611823575f80fd5b813567ffffffffffffffff811115611839575f80fd5b8201601f81018413611849575f80fd5b803561185c611857826117ce565b61177f565b818152856020838501011115611870575f80fd5b816020840160208301375f91810160200191909152949350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f610340602083018461188d565b60208152816020820152818360408301375f818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b5f67ffffffffffffffff82111561195057611950611729565b5060051b60200190565b5f602080838503121561196b575f80fd5b825167ffffffffffffffff80821115611982575f80fd5b8185019150828287031215611995575f80fd5b61199d611756565b8251828111156119ab575f80fd5b80840193505086601f8401126119bf575f80fd5b825191506119cf61185783611937565b82815260059290921b830184019184810190888411156119ed575f80fd5b938501935b83851015611a2c57845173ffffffffffffffffffffffffffffffffffffffff81168114611a1d575f80fd5b825293850193908501906119f2565b8252509695505050505050565b5f8060408385031215611a4a575f80fd5b825167ffffffffffffffff80821115611a61575f80fd5b818501915085601f830112611a74575f80fd5b81516020611a84611857836117ce565b8281528882848701011115611a97575f80fd5b828286018383015e5f81840183015287820151909650935082841115611abb575f80fd5b838701935087601f850112611ace575f80fd5b83519250611ade61185784611937565b83815260059390931b8401810192818101925088841115611afd575f80fd5b938101935b83851015611b1b57845183529381019391810191611b02565b80955050505050509250929050565b604081525f611b3c604083018561188d565b90508260208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215611b89575f80fd5b505080516020909101519092909150565b8082018082111561027c577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b828152604060208201525f61158f604083018461188d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0e740ef00f5311ae11b711c111ca11e411b71289128912e413ad13ba11b711c113ba11b711c111c111b711b711b711ae11ae11ae11ae13c411b713e8140111b713c411b711b713ba11c111b711b711c1140a11b711c1140a11ae11c111c111c111c111b711c111c1140a11ae11ae140a11ae11ae140a11b711c1140a13ba13ba140a140a11ae140a140a140a11c11401" - }, - "deployedBytecode": { - "object": "0x608060405234801561000f575f80fd5b5060043610610064575f3560e01c80636f5aa28d1161004d5780636f5aa28d146100b0578063a3869e14146100de578063b92d7553146100fe575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b610076366004611619565b610106565b60405190151581526020015b60405180910390f35b6100a361009e366004611658565b610282565b60405161008791906116c4565b6040517f0ae1ecb6c0f6314beaf4d4cd803ba14c900b0eecb1ecd39a52739cff9ae2c34a8152602001610087565b6100f16100ec366004611813565b610347565b60405161008791906118d9565b6100f1610468565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f6f5aa28d00000000000000000000000000000000000000000000000000000000148061019857507fffffffff0000000000000000000000000000000000000000000000000000000082167fa3869e1400000000000000000000000000000000000000000000000000000000145b806101e457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5514ca2000000000000000000000000000000000000000000000000000000000145b8061023057507fffffffff0000000000000000000000000000000000000000000000000000000082167fb92d755300000000000000000000000000000000000000000000000000000000145b8061027c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080516020810182526060815290517f5514ca20000000000000000000000000000000000000000000000000000000008152739179445a637e6ae72bb38273944fab96834488dd90635514ca20906102e190869086906004016118eb565b5f60405180830381865afa1580156102fb573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610340919081019061195a565b9392505050565b6040517f7764fd9c0000000000000000000000000000000000000000000000000000000081526060905f908190739179445a637e6ae72bb38273944fab96834488dd90637764fd9c9061039e9087906004016118d9565b5f60405180830381865afa1580156103b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103fd9190810190611a39565b915091505f610416838351905160406020909202010190565b60408051602083820181019092528281529192508101610437818686610477565b5f61045b6040518060c0016040528060908152602001611c186090913987876104ba565b5091979650505050505050565b6060610472610879565b905090565b80600182510160200281015b8082101561049e578151855260209485019490910190610483565b50506104b56104aa8390565b848451602001610b4c565b505050565b60605f6104c684610b55565b85519091506020860190600290046104dd86610b6f565b8260020267ffffffffffffffff8111156104f9576104f9611729565b6040519080825280601f01601f191660200182016040528015610523576020820181803683370190505b509350602084015f5b8481101561086d575f806105408a84610d8c565b915091508184538060018501536002840193505f61055f8b848c610daf565b90505f601861056e8d87610e16565b0390505f61057c8d87610e45565b600402820190505b808210156107b757815162ffffff811690601d81901a600f81169160049190911c90601c1a61160f8c82106106015760808801516040517fc8344ab1000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018e90526064015b60405180910390fd5b50600281028d015160f01c5f806106168a8885565b9150915085821461066a5760808a01516040517fddf56071000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018790526064016105f8565b8481146106ba5760808a01516040517ffc8b5603000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604481018690526064016105f8565b895182111561070c5760808a01518a516040517f2cab6bff00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018390526064016105f8565b8951829003808b5260408b0151111561076e5760808a01518a516040808d015190517f1bc5ab0f0000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915260448201526064016105f8565b89518101808b5260208b0151101561078857895160208b01525b600181111561079957895160408b01525b50505060808701805160010190525050506004929092019150610584565b6107c18d87610e5c565b8360200151146108155782602001516107da8e88610e5c565b6040517f4d9c18dc000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016105f8565b8251841461085c5782516040517f4689f0b30000000000000000000000000000000000000000000000000000000081526004810191909152602481018590526044016105f8565b50506001909301925061052c915050565b50505050509392505050565b606061160f5f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff168152602001610e748152602001610ef08152602001610f5381526020016111ae81526020016111b781526020016111c181526020016111ca81526020016111e481526020016111b78152602001611289815260200161128981526020016112e481526020016113ad81526020016113ba81526020016111b781526020016111c181526020016113ba81526020016111b781526020016111c181526020016111c181526020016111b781526020016111b781526020016111b781526020016111ae81526020016111ae81526020016111ae81526020016111ae81526020016113c481526020016111b781526020016113e8815260200161140181526020016111b781526020016113c481526020016111b781526020016111b781526020016113ba81526020016111c181526020016111b781526020016111b781526020016111c1815260200161140a81526020016111b781526020016111c1815260200161140a81526020016111ae81526020016111c181526020016111c181526020016111c181526020016111c181526020016111b781526020016111c181526020016111c1815260200161140a81526020016111ae81526020016111ae815260200161140a81526020016111ae81526020016111ae815260200161140a81526020016111b781526020016111c1815260200161140a81526020016113ba81526020016113ba815260200161140a815260200161140a81526020016111ae815260200161140a815260200161140a815260200161140a81526020016111c18152602001611401815250905060608190506048815114610b3a5780516040517fc8b569010000000000000000000000000000000000000000000000000000000081526004810191909152602481018490526044016105f8565b610b4381611423565b94505050505090565b8083835e505050565b5f81515f03610b6557505f919050565b50602001515f1a90565b5f610b7982610b55565b90508015610d4a5781516001600283020190811115610bc657826040517f17f4bc5e0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b82516020828501810191850101602160027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860102860181019086015b808210610d0657815160f01c8481016004810185811115610c5157896040517e39ba560000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b81515f81901a90600181901a90600281901a9060031a80821180610c7457508281115b15610caf578d876040517feaf45f4f0000000000000000000000000000000000000000000000000000000081526004016105f8929190611b2a565b505050600481028201878114610cf3578b6040517ffbb8027a0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b8397506002870396505050505050610c03565b838314610d4157866040517fde67b29a0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b50505050505050565b600182511115610d8857816040517fd013da5d0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b5050565b5f805f610d998585610e16565b51600281901a9660039190911a95509350505050565b610de46040518060c001604052805f81526020015f81526020015f8152602001606081526020015f8152602001606081525090565b506040805160c081018252838152602081018490529081019290925260608201525f608082015260a081019190915290565b5f80610e2184610b55565b60020260010190505f610e3485856114b3565b949091019093016020019392505050565b5f80610e518484610e16565b515f1a949350505050565b5f80610e688484610e16565b5160011a949350505050565b81515f90819061ffff8416908110610ecf57608085015185516040517feaa16f3300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b8460400151811115610ee357604085018190525b505f946001945092505050565b6060820151515f90819061ffff8416908110610ee35760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b6060820151515f90819061ffff8416908110610fb65760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b5f85606001518281518110610fcd57610fcd611b4b565b602002602001015190505f80610fe6839060a082901c90565b91509150611014827f18003f8e00000000000000000000000000000000000000000000000000000000611509565b611062576040517f23016c8900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016105f8565b6040517f40c04edc00000000000000000000000000000000000000000000000000000000815260048101829052600f601089901c81166024830181905260148a901c9091166044830181905290915f90819073ffffffffffffffffffffffffffffffffffffffff8716906340c04edc906064016040805180830381865afa1580156110ef573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111139190611b78565b9150915083821461115a576040517f528cc0fb00000000000000000000000000000000000000000000000000000000815260048101859052602481018390526044016105f8565b82811461119d576040517fc5ff08dc00000000000000000000000000000000000000000000000000000000815260048101849052602481018290526044016105f8565b909b909a5098505050505050505050565b505f9160019150565b5060029160019150565b50600191829150565b5f806111d684846111e4565b506001958695509350505050565b5f8060ff83811690600885901c1680830361122b576040517f46f0ca6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101006112388284611b9a565b111561127a576040517f8abcdd3f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016105f8565b50600295600195509350505050565b5f8061ffff831660ff81118061129d575080155b156112d7576040517fc1be16a1000000000000000000000000000000000000000000000000000000008152600481018290526024016105f8565b5060019485945092505050565b60a08201515f90819061ffff841690600f601486901c811691601087901c90911690849081906113149086610d8c565b9150915081831461135b576040517f9199e58e00000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016105f8565b8381101561139f576040517fff13710800000000000000000000000000000000000000000000000000000000815260048101829052602481018590526044016105f8565b509791965090945050505050565b60101c600f169160019150565b5060039160019150565b5f80600f601084901c16806113da5760016113dc565b805b95600195509350505050565b5f80600f601084901c16600281116113da5760026113dc565b506002915f9150565b5f80600f601084901c16600181116113da5760026113dc565b60605f825160020267ffffffffffffffff81111561144357611443611729565b6040519080825280601f01601f19166020018201604052801561146d576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156114a757805183518616908516178152602090920191600201611485565b50939695505050505050565b5f6114bd83610b55565b82106114f95781836040517ffcfaeff10000000000000000000000000000000000000000000000000000000081526004016105f8929190611bd2565b50600202016003015161ffff1690565b5f61151383611524565b80156103405750610340838361159e565b5f61154f827f01ffc9a70000000000000000000000000000000000000000000000000000000061159e565b15611597575f80611580847fffffffff000000000000000000000000000000000000000000000000000000006115c2565b9150915081801561158f575080155b949350505050565b505f919050565b5f805f6115ab85856115c2565b915091508180156115b95750805b95945050505050565b7f01ffc9a7000000000000000000000000000000000000000000000000000000005f818152600483905290819060208260248188617530fa92505f511515601f3d11169150509250929050565b611617611bea565b565b5f60208284031215611629575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610340575f80fd5b5f8060208385031215611669575f80fd5b823567ffffffffffffffff80821115611680575f80fd5b818501915085601f830112611693575f80fd5b8135818111156116a1575f80fd5b8660208285010111156116b2575f80fd5b60209290920196919550909350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b8083101561171e57835173ffffffffffffffffffffffffffffffffffffffff1682529284019260019290920191908401906116e8565b509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516020810167ffffffffffffffff8111828210171561177957611779611729565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117c6576117c6611729565b604052919050565b5f67ffffffffffffffff8211156117e7576117e7611729565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f60208284031215611823575f80fd5b813567ffffffffffffffff811115611839575f80fd5b8201601f81018413611849575f80fd5b803561185c611857826117ce565b61177f565b818152856020838501011115611870575f80fd5b816020840160208301375f91810160200191909152949350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f610340602083018461188d565b60208152816020820152818360408301375f818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b5f67ffffffffffffffff82111561195057611950611729565b5060051b60200190565b5f602080838503121561196b575f80fd5b825167ffffffffffffffff80821115611982575f80fd5b8185019150828287031215611995575f80fd5b61199d611756565b8251828111156119ab575f80fd5b80840193505086601f8401126119bf575f80fd5b825191506119cf61185783611937565b82815260059290921b830184019184810190888411156119ed575f80fd5b938501935b83851015611a2c57845173ffffffffffffffffffffffffffffffffffffffff81168114611a1d575f80fd5b825293850193908501906119f2565b8252509695505050505050565b5f8060408385031215611a4a575f80fd5b825167ffffffffffffffff80821115611a61575f80fd5b818501915085601f830112611a74575f80fd5b81516020611a84611857836117ce565b8281528882848701011115611a97575f80fd5b828286018383015e5f81840183015287820151909650935082841115611abb575f80fd5b838701935087601f850112611ace575f80fd5b83519250611ade61185784611937565b83815260059390931b8401810192818101925088841115611afd575f80fd5b938101935b83851015611b1b57845183529381019391810191611b02565b80955050505050509250929050565b604081525f611b3c604083018561188d565b90508260208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215611b89575f80fd5b505080516020909101519092909150565b8082018082111561027c577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b828152604060208201525f61158f604083018461188d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0e740ef00f5311ae11b711c111ca11e411b71289128912e413ad13ba11b711c113ba11b711c111c111b711b711b711ae11ae11ae11ae13c411b713e8140111b713c411b711b713ba11c111b711b711c1140a11b711c1140a11ae11c111c111c111c111b711c111c1140a11ae11ae140a11ae11ae140a11b711c1140a13ba13ba140a140a11ae140a140a140a11c11401" - } -} diff --git a/crates/test_fixtures/abi/RainlangInterpreter.json b/crates/test_fixtures/abi/RainlangInterpreter.json deleted file mode 100644 index 896d4e243..000000000 --- a/crates/test_fixtures/abi/RainlangInterpreter.json +++ /dev/null @@ -1,407 +0,0 @@ -{ - "abi": [ - { - "type": "constructor", - "inputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "buildOpcodeFunctionPointers", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes", - "internalType": "bytes" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "eval4", - "inputs": [ - { - "name": "eval", - "type": "tuple", - "internalType": "struct EvalV4", - "components": [ - { - "name": "store", - "type": "address", - "internalType": "contract IInterpreterStoreV3" - }, - { - "name": "namespace", - "type": "uint256", - "internalType": "FullyQualifiedNamespace" - }, - { - "name": "bytecode", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "sourceIndex", - "type": "uint256", - "internalType": "SourceIndexV2" - }, - { - "name": "context", - "type": "bytes32[][]", - "internalType": "bytes32[][]" - }, - { - "name": "inputs", - "type": "bytes32[]", - "internalType": "StackItem[]" - }, - { - "name": "stateOverlay", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ] - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32[]", - "internalType": "StackItem[]" - }, - { - "name": "", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { - "name": "interfaceId", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "error", - "name": "BadDynamicLength", - "inputs": [ - { - "name": "dynamicLength", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "standardOpsLength", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "BadOutputsLength", - "inputs": [ - { - "name": "expectedLength", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "actualLength", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "CoefficientOverflow", - "inputs": [ - { - "name": "signedCoefficient", - "type": "int256", - "internalType": "int256" - }, - { - "name": "exponent", - "type": "int256", - "internalType": "int256" - } - ] - }, - { - "type": "error", - "name": "DivisionByZero", - "inputs": [ - { - "name": "signedCoefficient", - "type": "int256", - "internalType": "int256" - }, - { - "name": "exponent", - "type": "int256", - "internalType": "int256" - } - ] - }, - { - "type": "error", - "name": "ExponentOverflow", - "inputs": [ - { - "name": "signedCoefficient", - "type": "int256", - "internalType": "int256" - }, - { - "name": "exponent", - "type": "int256", - "internalType": "int256" - } - ] - }, - { - "type": "error", - "name": "ExponentUnderflow", - "inputs": [ - { - "name": "signedCoefficient", - "type": "int256", - "internalType": "int256" - }, - { - "name": "exponent", - "type": "int256", - "internalType": "int256" - } - ] - }, - { - "type": "error", - "name": "InputsLengthMismatch", - "inputs": [ - { - "name": "expected", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "actual", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "Log10Negative", - "inputs": [ - { - "name": "signedCoefficient", - "type": "int256", - "internalType": "int256" - }, - { - "name": "exponent", - "type": "int256", - "internalType": "int256" - } - ] - }, - { - "type": "error", - "name": "Log10Zero", - "inputs": [] - }, - { - "type": "error", - "name": "LossyConversionToFloat", - "inputs": [ - { - "name": "signedCoefficient", - "type": "int256", - "internalType": "int256" - }, - { - "name": "exponent", - "type": "int256", - "internalType": "int256" - } - ] - }, - { - "type": "error", - "name": "MaximizeOverflow", - "inputs": [ - { - "name": "signedCoefficient", - "type": "int256", - "internalType": "int256" - }, - { - "name": "exponent", - "type": "int256", - "internalType": "int256" - } - ] - }, - { - "type": "error", - "name": "MemoryKVOverflow", - "inputs": [ - { - "name": "pointer", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "MulDivOverflow", - "inputs": [ - { - "name": "x", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "y", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "denominator", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "NotAnAddress", - "inputs": [ - { - "name": "value", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "error", - "name": "OddSetLength", - "inputs": [ - { - "name": "length", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "PowNegativeBase", - "inputs": [ - { - "name": "signedCoefficient", - "type": "int256", - "internalType": "int256" - }, - { - "name": "exponent", - "type": "int256", - "internalType": "int256" - } - ] - }, - { - "type": "error", - "name": "SourceIndexOutOfBounds", - "inputs": [ - { - "name": "sourceIndex", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "bytecode", - "type": "bytes", - "internalType": "bytes" - } - ] - }, - { - "type": "error", - "name": "TOFUTokenDecimalsNotDeployed", - "inputs": [ - { - "name": "expectedAddress", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "WithTargetExponentOverflow", - "inputs": [ - { - "name": "signedCoefficient", - "type": "int256", - "internalType": "int256" - }, - { - "name": "exponent", - "type": "int256", - "internalType": "int256" - }, - { - "name": "targetExponent", - "type": "int256", - "internalType": "int256" - } - ] - }, - { - "type": "error", - "name": "ZeroFunctionPointers", - "inputs": [] - }, - { - "type": "error", - "name": "ZeroNegativePower", - "inputs": [ - { - "name": "b", - "type": "bytes32", - "internalType": "Float" - } - ] - } - ], - "bytecode": { - "object": "0x608060405234801561000f575f80fd5b5061001861003d565b515f0361003857604051632413c92160e01b815260040160405180910390fd5b61005d565b60606040518060c0016040528060908152602001615d7d60909139905090565b615d138061006a5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c806301ffc9a714610043578063514b5d4f1461006b578063d04dfe2314610080575b5f80fd5b6100566100513660046154a6565b6100a1565b60405190151581526020015b60405180910390f35b610073610185565b6040516100629190615531565b61009361008e366004615543565b610194565b6040516100629291906155b4565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fd04dfe2300000000000000000000000000000000000000000000000000000000148061013357507fffffffff0000000000000000000000000000000000000000000000000000000082167f514b5d4f00000000000000000000000000000000000000000000000000000000145b8061017f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606061018f610390565b905090565b6060805f61021b84830135602086018035906101b0908861562d565b6101bd6080890189615648565b6101c69161574b565b6101ce61063c565b6101db60408b018b61580e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092979695949392505061065c9050565b9050600261022c60c0860186615648565b61023792915061589c565b156102895761024960c0850185615648565b6040517f01c71f3d000000000000000000000000000000000000000000000000000000008152610280925060040190815260200190565b60405180910390fd5b5f5b61029860c0860186615648565b905081101561031b576060820151610304906102b760c0880188615648565b848181106102c7576102c76158af565b90506020020135878060c001906102de9190615648565b6102e9866001615909565b8181106102f8576102f86158af565b905060200201356107a7565b6060830152610314600282615909565b905061028b565b5061038661032c60a0860186615648565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250859392507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91505061087d565b9250925050915091565b6040805161092081018252604880825261097c60208301526109cb92820192909252610a0d606082810191909152610bce6080830152610c4e60a0830152610c6060c0830152610c7860e0830152610cba610100830152610d0f610120830152610d21610140830152610d33610160830152610d45610180830152610dea6101a0830152610e276101c0830152610ff36101e083015261115d61020083015261124a6102208301526113ec610240830181905261153b61026084015261160d6102808401526116d36102a08401526118226102c08401526102e083015261191061030083015261193f610320830181905261034083015261196e61036083015261199d610380830152611a256103a0830152611a396103c0830152611b266103e0830152611b8a610400830152611ba2610420830152611c1d610440830152611c35610460830152611c4d610480830152611c866104a0830152611cb06104c0830152611cc86104e0830152611ce0610500830152611ced610520830152611de8610540830152611e0a610560830152611e17610580830152611ecf6105a0830152611f1e6105c0830152611f616105e0830152611f85610600830152611f92610620830152611f9f61064083015261203861066083015261208161068083015261208e6106a083015261210d6106c083015261215c6106e08301526121ab6107008301526121f861072083015261224761074083015261229661076083015261234e61078083015261237a6107a083015261239c6107c08301526124546107e08301526124956108008301526124bc6108208301526125096108408301526125566108608301526125a56108808301526125f26108a083015261263f6108c083015261268c6108e083015261277d6109008301529190819080610633816127af565b94505050505090565b60606040518060c0016040528060908152602001615c8360909139905090565b6106bd60405180610120016040528060608152602001606081526020015f81526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020016060815260200160608152602001606081525090565b602087810180516040600191820184028b018181015182515f91821a808252948501870281019093526041808301968381019593600285020190910191908401905b8381101561073d57875160f01c83015160408051600192831a80825283016020908102909101918290529084526002909901989290920191016106ff565b505050506040518061012001604052808281526020018481526020018b81526020015f81526020018a81526020018973ffffffffffffffffffffffffffffffffffffffff168152602001888152602001838152602001878152509450505050509695505050505050565b5f82815260208120600f900660100284811c61ffff1690815b82156107da57825186146107da57604083015192506107c0565b821580156108285760405193506060840160405286845285602085015281604085015260028860f01c0161ffff60f01b1989168160f01b1798505061ffff831b19881684841b17975061082f565b8560208501525b50505061ffff811115610871576040517fcadaf56d00000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b849150505b9392505050565b6060805f806108948760e001518860400151612833565b915091505f80885f01518960400151815181106108b3576108b36158af565b60200260200101519150819050838851146109075787516040517fd628439f000000000000000000000000000000000000000000000000000000008152610280918691600401918252602082015260400190565b87511561092c575f60208951028203915060208901905061092a81838b51612856565b505b61093c898a604001518385612862565b90505f83881061094c578361094e565b875b90506060602083039050818152806109698c60600151612af3565b975097505050505050505b935093915050565b604083015183516020600192830181029091015161ffff8516909201029003517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152809392505050565b60208084015161ffff841660010190910201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152809392505050565b602083015180515f9161ffff851691600f601087901c811692601488901c9091169185919085908110610a4257610a426158af565b602002602001015190505f80610a5b839060a082901c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08a0180518882526040517f58c07152000000000000000000000000000000000000000000000000000000008152939550919350915f9073ffffffffffffffffffffffffffffffffffffffff8616906358c0715290610ae0908790879060040161591c565b5f60405180830381865afa158015610afa573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b3f919081019061593c565b905080518714610b885780516040517fc3385cb0000000000000000000000000000000000000000000000000000000008152610280918991600401918252602082015260400190565b818352602088028b019a50602081016020880281015b80821015610bbb5760208d039c5081518d52602082019150610b9e565b509a9d9c50505050505050505050505050565b60c083015180515f9160ff85811692600887901c90911691849184908110610bf857610bf86158af565b60200260200101518281518110610c1157610c116158af565b60209081029190910101517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909501948552509295945050505050565b60208101805182511681529392505050565b80515f90610c6d81612d66565b835250909392505050565b80516001600884901c60ff9081169190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0193161c919091168152919050565b805160209091018051600160ff600886901c81169190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01941684811b199091169390921690911b919091178152919050565b60208101805182511781529392505050565b805161ffff83161b8152809392505050565b805161ffff83161c8152809392505050565b8251600161ffff841690810160209081028301515f93600f601088901c811693601489901c90911692908190850288015b80891015610d935760208203915088518252602089019850610d76565b5060408a01805190879052610daa8b828486612862565b60408c0182905260208602998a9003999092508201895b81841015610dd9578351815260209384019301610dc1565b50989b9a5050505050505050505050565b60109190911c600f166020028082207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190920101908152919050565b805160208201516040909201805190925f929173ffffffffffffffffffffffffffffffffffffffff83168314610e8c576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101849052602401610280565b73ffffffffffffffffffffffffffffffffffffffff82168214610ede576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b73ffffffffffffffffffffffffffffffffffffffff81168114610f30576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301525f919085169063dd62ed3e90604401602060405180830381865afa158015610fa5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc991906159bd565b90505f610fd585612e3e565b90505f610fe28383612ee7565b508852509598975050505050505050565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff82168214611052576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b73ffffffffffffffffffffffffffffffffffffffff811681146110a4576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa158015611111573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061113591906159bd565b90505f61114184612e3e565b90505f61114e8383612f28565b87525094979650505050505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff811681146111b3576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f815f1c73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ff573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061122391906159bd565b90505f61122f83612e3e565b90505f61123c8383612f28565b865250939695505050505050565b805160208201516040909201805190925f929173ffffffffffffffffffffffffffffffffffffffff831683146112af576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101849052602401610280565b73ffffffffffffffffffffffffffffffffffffffff82168214611301576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b73ffffffffffffffffffffffffffffffffffffffff81168114611353576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301525f919085169063dd62ed3e90604401602060405180830381865afa1580156113c8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061123c91906159bd565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff8216821461144b576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b73ffffffffffffffffffffffffffffffffffffffff8116811461149d576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa15801561150a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152e91906159bd565b8552509295945050505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff81168114611591576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f815f1c73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115dd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160191906159bd565b84525091949350505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff81168114611663576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f815f1c73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116af573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160191906159d4565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff82168214611732576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b73ffffffffffffffffffffffffffffffffffffffff81168114611784576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa1580156117f1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061181591906159bd565b90505f61123c825f612f28565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff82168214611881576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b6040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018290525f9073ffffffffffffffffffffffffffffffffffffffff841690636352211e90602401602060405180830381865afa1580156118ec573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152e91906159d4565b437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b467fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020600f601085901c1602828101918201925f928391905b80821015611a1957815192507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff831615611a0e57828652611a19565b8160200191506119d6565b50939695505050505050565b805160209091018051909114815292915050565b5f805f80805f80600f8960101c169350600284069250879150602083850302820190506020831502810397508215611a7057805194505b5f5b81831015611abb5750815195507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff86161580611ab05760208301518952611abb565b826040019250611a72565b8015611b1757604080518082019091525f6020820152600887901c601f88168083019190915281525b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102809190615531565b50969998505050505050505050565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216611b8057604080518082019091525f6020820152600882901c601f8316808301919091528152611ae4565b5091949350505050565b80516020909101805190915f918261152e8383612f4c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020600f601085901c1602828101918201925f928391905b80821015611a1957815192507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316611c12575f8652611a19565b816020019150611bdb565b80516020909101805190915f918261152e8383612f9a565b80516020909101805190915f918261152e8383612fe9565b805160407bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911615156020028203810151910190815292915050565b80515f90817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615611601565b80516020909101805190915f918261152e8383613039565b80516020909101805190915f918261152e8383613088565b80515f90610c6d816130d8565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d611d3f84848484613123565b9094509250600f60108a901c1660025b81811015611da55789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d9250611d9886868686613123565b9096509450600101611d4f565b5050611db18484613259565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe098909801978852509598975050505050505050565b80516020909101805190915f916116016002611e04848461335f565b906133c1565b80515f90610c6d81613406565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d611e69848484846134c2565b9094509250600f60108a901c1660025b81811015611da55789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d9250611ec2868686866134c2565b9096509450600101611e79565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b80515f90610c6d7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc8273c51a14251b0dcf0ae24a96b7153991378938f5f5613add565b80515f90610c6d60028273c51a14251b0dcf0ae24a96b7153991378938f5f5613add565b80515f90610c6d81613d37565b80515f90610c6d81613ddd565b80516020909101805190915f9182611fb78382613039565b90505f611fc48382613039565b90505f6120227fffffffff0000000000000000000000000000000000000000000000000000000573c51a14251b0dcf0ae24a96b7153991378938f5f561201b61200c886130d8565b6120158a6130d8565b90613e28565b9190613add565b90508115158315151461123c5761114e81613e6d565b80515f9061204f8161204981613406565b90613e9f565b90507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116612078575060015b82525092915050565b80515f90610c6d81613ee4565b805160208201516040909201915f91906120a88282613f16565b9150600f601086901c1660025b818110156120db57855160209096019592506120d18484613f16565b93506001016120b5565b5050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0929092019182525092915050565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91906121c58282613f32565b9150600f601086901c1660025b818110156120db57855160209096019592506121ee8484613f32565b93506001016121d2565b7f7fffffff800000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7f80000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d6122e884848484613f3d565b9094509250600f60108a901c1660025b81811015611da55789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d925061234186868686613f3d565b90965094506001016122f8565b80516020909101805190915f91611601828273c51a14251b0dcf0ae24a96b7153991378938f5f5613add565b80515f90610c6d8173c51a14251b0dcf0ae24a96b7153991378938f5f561405c565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d6123ee84848484614088565b9094509250600f60108a901c1660025b81811015611da55789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d925061244786868686614088565b90965094506001016123fe565b805160208201516040909201805190925f929161152e61248e8273c51a14251b0dcf0ae24a96b7153991378938f5f561201b86600161335f565b8490613e28565b805160208201516040909201805190925f929161152e6124b58383613e28565b849061335f565b805160208201516040909201915f91906124d68183615909565b9150600f601086901c1660025b818110156120db57855160209096019592506124ff8385615909565b93506001016124e3565b805160208201516040909201915f919061252381836159ef565b9150600f601086901c1660025b818110156120db578551602090960195925061254c83856159ef565b9350600101612530565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91906125bf8183615a02565b9150600f601086901c1660025b818110156120db57855160209096019592506125e88385615a02565b93506001016125cc565b805160208201516040909201915f919061260c8183615b37565b9150600f601086901c1660025b818110156120db57855160209096019592506126358385615b37565b9350600101612619565b805160208201516040909201915f91906126598183615b42565b9150600f601086901c1660025b818110156120db57855160209096019592506126828385615b42565b9350600101612666565b805160608401515f9190829081906126a490846140b2565b91509150815f0361276e5760a087015160808801516040517f295f36d70000000000000000000000000000000000000000000000000000000081526004810191909152602481018590525f9173ffffffffffffffffffffffffffffffffffffffff169063295f36d790604401602060405180830381865afa15801561272b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061274f91906159bd565b60608901519091506127629085836107a7565b60608901528552612772565b8085525b509295945050505050565b8051602082015160608501516040909301925f92919061279e9083836107a7565b606087015250829150509392505050565b60605f825160020267ffffffffffffffff8111156127cf576127cf6156ac565b6040519080825280601f01601f1916602001820160405280156127f9576020820181803683370190505b50905061ffff80196020850160208651028101600285015b81831015611a1957805183518616908516178152602090920191600201612811565b5f805f61284085856140f9565b51600281901a9660039190911a95509350505050565b6020810283835e505050565b5f80856040015190505f805f805f60028b61010001515161288391906159ef565b60e08c01516101008d0151602080830151600261ffff9b909b168b8102850160219081015160f01c5f93841a9d909d029095019b909b019384015160258086019b50600791831a91821691829003600402909501909401985092965001935090915061549e90805b86881015612a6d5787519050600284825f1a060285015160f01c925062ffffff8160e01c1691506129218e838e8663ffffffff16565b9b506002848260041a060285015160f01c925062ffffff8160c01c16915061294e8e838e8663ffffffff16565b9b506002848260081a060285015160f01c925062ffffff8160a01c16915061297b8e838e8663ffffffff16565b9b5060028482600c1a060285015160f01c925062ffffff8160801c1691506129a88e838e8663ffffffff16565b9b506002848260101a060285015160f01c925062ffffff8160601c1691506129d58e838e8663ffffffff16565b9b506002848260141a060285015160f01c925062ffffff8160401c169150612a028e838e8663ffffffff16565b9b506002848260181a060285015160f01c925062ffffff8160201c169150612a2f8e838e8663ffffffff16565b9b5060028482601c1a060285015160f01c925062ffffff81169150612a598e838e8663ffffffff16565b9b50612a66602089615909565b97506128eb565b612a78601c89615b42565b9750612a85866004615a02565b612a8f9089615909565b96505b86881015612ad55750508551601c81901a83900660020284015160f01c915062ffffff811690612ac18e838e86565b9b50612ace600489615909565b9750612a92565b612ae18d8a8e8e614128565b50999c9b505050505050505050505050565b6040805160f083901c602081810283010190925290815261ffff63ffffffff67ffffffffffffffff6fffffffffffffffffffffffffffffffff612b5f565b5f5b8215612b5957825182526020830151602083015260408301519250604082019150612b33565b50919050565b602085018660101b60901c8015612c4f578060401c8015612bcd578060201c8015612b9157612b8e8185612b31565b93505b508086168015612bcb578060101c8015612bb257612baf8186612b31565b94505b508088168015612bc957612bc68186612b31565b94505b505b505b508084168015612c4d578060201c8015612c11578060101c8015612bf857612bf58186612b31565b94505b508088168015612c0f57612c0c8186612b31565b94505b505b508086168015612c4b578060101c8015612c3257612c2f8186612b31565b94505b508088168015612c4957612c468186612b31565b94505b505b505b505b508682168015612d5b578060401c8015612cd9578060201c8015612c9d578060101c8015612c8457612c818186612b31565b94505b508088168015612c9b57612c988186612b31565b94505b505b508086168015612cd7578060101c8015612cbe57612cbb8186612b31565b94505b508088168015612cd557612cd28186612b31565b94505b505b505b508084168015612d59578060201c8015612d1d578060101c8015612d0457612d018186612b31565b94505b508088168015612d1b57612d188186612b31565b94505b505b508086168015612d57578060101c8015612d3e57612d3b8186612b31565b94505b508088168015612d5557612d528186612b31565b94505b505b505b505b505050505050919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d975750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f612e476141bb565b6040517ff5c36eaf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063f5c36eaf90602401602060405180830381865afa158015612ec3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061017f9190615b55565b5f805f805f612ef68787614261565b9250925092505f80612f088585613259565b9150915081838015612f175750815b9650965050505050505b9250929050565b5f805f612f3585856142bd565b91509150612f43828261431f565b95945050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d612f8f84848484614379565b979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d612fdd84848484614390565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61302c84848484614390565b1315979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61307c84848484614390565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6130cb84848484614390565b1215979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82821215613118576131128282614464565b90925090505b5f612f438383614507565b5f808515841517801561314f57865f036131435784849250925050613250565b86869250925050613250565b6131598787614565565b90975095506131688585614565565b90955093508584131561317c579395929492935b838603604c811115613195578787935093505050613250565b80600a0a86816131a7576131a761586f565b0595505086850180881860ff90811c151589881890911c1516801561324257877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03613229576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a905260248101899052604401610280565b600a968790059690980586019760019790970196613246565b8198505b5050868692509250505b94509492505050565b5f601b83900b83148383826132bd577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561329d57620186a0860595506005850194505b8586601b0b146132b857600a8605955084600101945061329d565b6132d3565b855f036132d357505f925060019150612f219050565b848560030b1461332f575f8512156132f357505f9250829150612f219050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d84806133a486868686613123565b915091505f6133b38383614507565b9a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d84806133a4868686866134c2565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82811261343d57509192915050565b5f8061344984846145bb565b91509150805f0361345e575093949350505050565b5f8113156134b7576134b282847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4613123565b935091505b5f612f8f8385614507565b5f80835f03613507576040517f7a97930f0000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610280565b855f0361351857505f905080613250565b5f805f806135268a8a614623565b919b50995091506135378888614623565b919950975090505f6135488b6148c4565b90505f6135548a6148c4565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c818310156139715784156135b257507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b613930565b6f4b3b4ca85a86c47a098a2240000000008310156136de57678ac7230489e80000831015613642576402540be40083101561361057620186a08310156136005750620186a0905060056138b9565b506402540be4009050600a6138b9565b655af3107a400083101561362f5750655af3107a40009050600e6138b9565b50678ac7230489e80000905060136138b9565b6b204fce5e3e250261100000008310156136945769152d02c7e14af680000083101561367d575069152d02c7e14af6800000905060176138b9565b506b204fce5e3e250261100000009050601c6138b9565b6d314dc6448d9338c15b0a000000008310156136c357506d314dc6448d9338c15b0a00000000905060216138b9565b506f4b3b4ca85a86c47a098a224000000000905060266138b9565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156137d65773af298d050e4395d69670b12b7f41000000000000831015613771577172cb5bd86321e38cb6ce6682e8000000000083101561375257507172cb5bd86321e38cb6ce6682e800000000009050602b6138b9565b5073af298d050e4395d69670b12b7f41000000000000905060306138b9565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156137b2575076010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000905060356138b9565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a6138b9565b7c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000083101561386c577a026e4d30eccc3215dd8f3157d27e23acbdcfe6800000000000000083101561384457507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f6138b9565b507c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000905060446138b9565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000008310156138b957507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b8183116138ed57600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016138b9565b815f03613930576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c9052604401610280565b85613971576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e9052604401610280565b807f8000000000000000000000000000000000000000000000000000000000000000018d126139a457808d039c50613a17565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f811315613a1757807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b13613a0457998a0199613a17565b5f80995099505050505050505050613250565b5f808e128015613a2657505f8c135b15613a63577f80000000000000000000000000000000000000000000000000000000000000008e01808d13613a5b575f613a5f565b808d035b9150505b8b818f01039750613a808f8e613a7a888789614925565b8b614a0a565b90995097505f811315613aca57604c811315613aaa575f809a509a50505050505050505050613250565b80600a0a8981613abc57613abc61586f565b059850885f03613aca575f97505b5096985094965061325095505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516613b1a5750600191506108769050565b5f8213613bb357815f03613b7757613b32855f613039565b15613b6c576040517f8be8297200000000000000000000000000000000000000000000000000000000815260048101869052602401610280565b505f91506108769050565b6040517fcceba0f10000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b613bbe856001612f4c565b8015613bcf5750613bcf865f612f9a565b15613bde578592505050610876565b613be8855f613039565b15613c1157613c08613bf987613ee4565b613c0287613e6d565b86613add565b92505050610876565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80613c4484846145bb565b915091505f613c5483855f614b11565b905060015f8080613c8b8f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510613cd25784600116600103613cb557613caf84848484613f3d565b90945092505b600185901c9450613cc882828484613f3d565b9092509050613c90565b5f80613cdf8f8e8e614c28565b91509150613cef82828a8d613f3d565b9092509050613cff8f8383614f5d565b9092509050613d1082828888613f3d565b90925090505f613d208383614507565b9e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112613d6e57509192915050565b5f80613d7a84846145bb565b915091505f84128015613d8c57508015155b156134b7576134b282847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4614088565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82613e1083836145bb565b9150505f613e1e8284614507565b9695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d84806133a486868686613f3d565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d6131128282614464565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d84806133a486868686614088565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61311282826150ce565b5f613f218383612f9a565b613f2b5781610876565b5090919050565b5f613f218383613039565b5f8085158415178015613f55575f92505f9150614052565b613f5f8487615b75565b91505f613f6b886148c4565b90505f613f77876148c4565b90505f613f848383615127565b5090505f6f0785ee10d5da46d900f436a000000000821115613fb9576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115613fda57670de0b6b3a7640000820491506012015b633b9aca00821115613ff357633b9aca00820491506009015b61271082111561400857612710820491506004015b811561401c57600a82049150600101614008565b6140268187615b75565b95506140488b8a614042878761403d87600a615b37565b614925565b89614a0a565b9097509550505050505b5094509492505050565b5f610876837fffffffff0000000000000000000000000000000000000000000000000000000584613add565b5f806140948484614464565b90945092506140a586868686613123565b9150915094509492505050565b5f80825f526010600f60205f20060261ffff85821c165b80156140f057805185036140e75760019350602081015192506140f0565b604001516140c9565b50509250929050565b5f8061410484615162565b60020260010190505f614117858561517c565b949091019093016020019392505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08201805163ffff0000601087901b1661ffff86161782527f312f5ae588c6ff62cd3f006af06cd48c98d7321649db7d8b2c396a81a204655591905f808686036004017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8801865afa5090525050505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580614212575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b1561425f576040517f73e6d7b300000000000000000000000000000000000000000000000000000000815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610280565b565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8611156142ac57600a860460018201600a88065f14935093509350506142b6565b8593509150600190505b9250925092565b5f805f805f6142cc8787614261565b92509250925080614313576040517fc47179660000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604401610280565b50909590945092505050565b5f805f61432c8585613259565b9150915080614371576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610280565b509392505050565b5f61438685858585614390565b1495945050505050565b5f80851584151781871282861218178584141780156143b55786859250925050613250565b505f858413156143c9575092949193919260015b8386035f8112604c82131780156143fc5782156143ee575f8994509450505050613250565b885f94509450505050613250565b600a82900a8981028a8282816144145761441461586f565b0514614440578415614430575f8b965096505050505050613250565b8a5f965096505050505050613250565b84156144555788965094506132509350505050565b95508794506132509350505050565b5f807f800000000000000000000000000000000000000000000000000000000000000084036144fd577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83036144f0576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810185905260248101849052604401610280565b600a840593508260010192505b50505f9190910391565b5f805f6145148585613259565b9150915080158015614524575081155b15614371576040517f8eba4d070000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610280565b5f805f805f6145748787614623565b92509250925080614313576040517f05e51ecb0000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610280565b5f805f83126145ce57508290505f612f21565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb483121561460057505f905082612f21565b5f839003600a0a8085816146165761461661586f565b0794859003959350505050565b5f805f845f0361463b57505f915081905060016142b6565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f0361484f576f4b3b4ca85a86c47a098a22400000000085051580156146a457507f80000000000000000000000000000000000000000000000000000000000000268412155b156146c5576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561470d57507f80000000000000000000000000000000000000000000000000000000000000138412155b1561472657678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561477257507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614788576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e400000000000000000085051580156147d757507f80000000000000000000000000000000000000000000000000000000000000028412155b156147ed57606485029450600284039350614788565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee8000000000000000000850515801561483d57507f80000000000000000000000000000000000000000000000000000000000000018412155b1561484f57600a850294506001840393505b600a8086029081058614801561488557507f80000000000000000000000000000000000000000000000000000000000000018512155b15614894578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b5f80821215614921577f8000000000000000000000000000000000000000000000000000000000000000820361491b57507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b5f805f6149328686615127565b91509150815f036149565783818161494c5761494c61586f565b0492505050610876565b8382106149a0576040517f6c59da12000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610280565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614ad4577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614ac157614a697f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001615909565b8403614a9957507f8000000000000000000000000000000000000000000000000000000000000000905081613250565b614aa4600a856159ef565b614aad90615b9c565b614ab8846001615b75565b91509150613250565b614aca84615b9c565b8391509150613250565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614b0757614aad600a856159ef565b5082905081613250565b5f818303614b20575082610876565b82821315614b6357828203604c811380614b3a57505f8113155b15614b48575f915050610876565b80600a0a8581614b5a57614b5a61586f565b05915050610876565b818303604c811380614b7557505f8113155b15614bbd576040517f1d5d6d10000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260448101849052606401610280565b600a81900a85810286828281614bd557614bd561586f565b0514614c1e576040517f1d5d6d10000000000000000000000000000000000000000000000000000000008152600481018890526024810187905260448101869052606401610280565b9250610876915050565b5f808383614c368282614565565b90965094505f8613614cb757855f03614c7b576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b5050837f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000003614cf557614ceb83604c615b75565b5f91509150610974565b7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000084121580614d44577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb5614d66565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412614f21575f805f805f85614d7f57604b614d82565b604c5b614d8c908a615b75565b90505f8087614db9577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000614dda565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81614e0c57614e0c61586f565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050614e458c826151d2565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414614ed1576123278114614eac57614e878c826001016151d2565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002614ece565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50614f01838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4615259565b909a509850614f128a8a835f613123565b97509750505050505050610974565b614f2b85856150ce565b9095509350614f3b868686614c28565b9095509350614f4a8585614464565b9250925050610974565b50935093915050565b5f805f841215614f9957614f718484614464565b9094509250614f81858585614f5d565b9094509250614f9084846150ce565b91509150610974565b5f80614fa586866145bb565b9092509050845f8080614fb885856152f6565b9194509250905061270d612710614fd0600182615bcc565b8514614fe757614fe18d86866153e5565b90925090505b8315615072575f614ff9866001615b75565b90505b80848583028161500e5761500e61586f565b051461502557600a84059350600a88059750614ffc565b6150666150328588615bf2565b8961503d8785615bf2565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc615259565b909d509b506150999050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b5050505050866150aa84835f614b11565b6150b5886001615b75565b6150bf9190615b75565b94509450505050935093915050565b5f8061511c7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb486866134c2565b915091509250929050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f81515f0361517257505f919050565b50602001515f1a90565b5f61518683615162565b82106151c25781836040517ffcfaeff1000000000000000000000000000000000000000000000000000000008152600401610280929190615c3d565b50600202016003015161ffff1690565b5f806151e1600a6123286159ef565b6151ec906002615a02565b6151f7906001615909565b90505f615207600a6123286159ef565b90506002600a8504026001015f8052600281601e883c505f51617fff8116935061800081161561523657918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f8088880361526c5750839050816152ea565b5f805f8061527c8c8b8f8d614088565b915091505f8061528e8a8a8d8c614088565b9150915061529e84848484613f3d565b8096508197505050505050505f806152b88b8b8f8d614088565b915091505f806152ca868686866134c2565b915091505f806152dc84848f8e613123565b909a50985050505050505050505b97509795505050505050565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0361532e57508391505f905060016142b6565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8412156153bc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb084121561538d57505f91505082151560016142b6565b5f846004015f03600a0a90505f8187816153a9576153a961586f565b05945050808402861415925090506142b6565b5f84126153d157505f915081905060016142b6565b50505060048101600a0a82025f60016142b6565b5f808060646153f7600a6123286159ef565b615404600a6123286159ef565b61540f906002615a02565b61541a906001615909565b6154249190615909565b61542e9190615909565b9050615472565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b61547d858288615435565b92508315614f5457615493600186018288615435565b915050935093915050565b61425f615c55565b5f602082840312156154b6575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610876575f80fd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61087660208301846154e5565b5f60208284031215615553575f80fd5b813567ffffffffffffffff811115615569575f80fd5b820160e08185031215610876575f80fd5b5f815180845260208085019450602084015f5b838110156155a95781518752958201959082019060010161558d565b509495945050505050565b604081525f6155c6604083018561557a565b8281036020848101919091528451808352858201928201905f5b818110156155fc578451835293830193918301916001016155e0565b5090979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461562a575f80fd5b50565b5f6020828403121561563d575f80fd5b813561087681615609565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261567b575f80fd5b83018035915067ffffffffffffffff821115615695575f80fd5b6020019150600581901b3603821315612f21575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715615720576157206156ac565b604052919050565b5f67ffffffffffffffff821115615741576157416156ac565b5060051b60200190565b5f61575d61575884615728565b6156d9565b83815260208082019190600586811b86013681111561577a575f80fd5b865b8181101561580157803567ffffffffffffffff81111561579a575f80fd5b880136601f8201126157aa575f80fd5b80356157b861575882615728565b81815290851b820186019086810190368311156157d3575f80fd5b928701925b828410156157f1578335825292870192908701906157d8565b895250505094830194830161577c565b5092979650505050505050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615841575f80fd5b83018035915067ffffffffffffffff82111561585b575f80fd5b602001915036819003821315612f21575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826158aa576158aa61586f565b500690565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561017f5761017f6158dc565b828152604060208201525f615934604083018461557a565b949350505050565b5f602080838503121561594d575f80fd5b825167ffffffffffffffff811115615963575f80fd5b8301601f81018513615973575f80fd5b805161598161575882615728565b81815260059190911b8201830190838101908783111561599f575f80fd5b928401925b82841015612f8f578351825292840192908401906159a4565b5f602082840312156159cd575f80fd5b5051919050565b5f602082840312156159e4575f80fd5b815161087681615609565b5f826159fd576159fd61586f565b500490565b808202811582820484141761017f5761017f6158dc565b600181815b80851115615a7257817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615a5857615a586158dc565b80851615615a6557918102915b93841c9390800290615a1e565b509250929050565b5f82615a885750600161017f565b81615a9457505f61017f565b8160018114615aaa5760028114615ab457615ad0565b600191505061017f565b60ff841115615ac557615ac56158dc565b50506001821b61017f565b5060208310610133831016604e8410600b8410161715615af3575081810a61017f565b615afd8383615a19565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615b2f57615b2f6158dc565b029392505050565b5f6108768383615a7a565b8181038181111561017f5761017f6158dc565b5f60208284031215615b65575f80fd5b815160ff81168114610876575f80fd5b8082018281125f831280158216821582161715615b9457615b946158dc565b505092915050565b5f7f8000000000000000000000000000000000000000000000000000000000000000820361491b5761491b6158dc565b8181035f831280158383131683831282161715615beb57615beb6158dc565b5092915050565b8082025f82127f800000000000000000000000000000000000000000000000000000000000000084141615615c2957615c296158dc565b818105831482151761017f5761017f6158dc565b828152604060208201525f61593460408301846154e5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe097c09cb0a0d0bce0c4e0c600c780cba0d0f0d210d330d450dea0e270ff3115d124a13ec153b160d16d3182213ec1910193f193f196e199d1a251a391b261b8a1ba21c1d1c351c4d1c861cb01cc81ce01ced1de81e0a1e171ecf1f1e1f611f851f921f9f20382081208e210d215c21ab21f822472296234e237a239c2454249524bc2509255625a525f2263f268c277d097c09cb0a0d0bce0c4e0c600c780cba0d0f0d210d330d450dea0e270ff3115d124a13ec153b160d16d3182213ec1910193f193f196e199d1a251a391b261b8a1ba21c1d1c351c4d1c861cb01cc81ce01ced1de81e0a1e171ecf1f1e1f611f851f921f9f20382081208e210d215c21ab21f822472296234e237a239c2454249524bc2509255625a525f2263f268c277d" - }, - "deployedBytecode": { - "object": "0x608060405234801561000f575f80fd5b506004361061003f575f3560e01c806301ffc9a714610043578063514b5d4f1461006b578063d04dfe2314610080575b5f80fd5b6100566100513660046154a6565b6100a1565b60405190151581526020015b60405180910390f35b610073610185565b6040516100629190615531565b61009361008e366004615543565b610194565b6040516100629291906155b4565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fd04dfe2300000000000000000000000000000000000000000000000000000000148061013357507fffffffff0000000000000000000000000000000000000000000000000000000082167f514b5d4f00000000000000000000000000000000000000000000000000000000145b8061017f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606061018f610390565b905090565b6060805f61021b84830135602086018035906101b0908861562d565b6101bd6080890189615648565b6101c69161574b565b6101ce61063c565b6101db60408b018b61580e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092979695949392505061065c9050565b9050600261022c60c0860186615648565b61023792915061589c565b156102895761024960c0850185615648565b6040517f01c71f3d000000000000000000000000000000000000000000000000000000008152610280925060040190815260200190565b60405180910390fd5b5f5b61029860c0860186615648565b905081101561031b576060820151610304906102b760c0880188615648565b848181106102c7576102c76158af565b90506020020135878060c001906102de9190615648565b6102e9866001615909565b8181106102f8576102f86158af565b905060200201356107a7565b6060830152610314600282615909565b905061028b565b5061038661032c60a0860186615648565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250859392507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91505061087d565b9250925050915091565b6040805161092081018252604880825261097c60208301526109cb92820192909252610a0d606082810191909152610bce6080830152610c4e60a0830152610c6060c0830152610c7860e0830152610cba610100830152610d0f610120830152610d21610140830152610d33610160830152610d45610180830152610dea6101a0830152610e276101c0830152610ff36101e083015261115d61020083015261124a6102208301526113ec610240830181905261153b61026084015261160d6102808401526116d36102a08401526118226102c08401526102e083015261191061030083015261193f610320830181905261034083015261196e61036083015261199d610380830152611a256103a0830152611a396103c0830152611b266103e0830152611b8a610400830152611ba2610420830152611c1d610440830152611c35610460830152611c4d610480830152611c866104a0830152611cb06104c0830152611cc86104e0830152611ce0610500830152611ced610520830152611de8610540830152611e0a610560830152611e17610580830152611ecf6105a0830152611f1e6105c0830152611f616105e0830152611f85610600830152611f92610620830152611f9f61064083015261203861066083015261208161068083015261208e6106a083015261210d6106c083015261215c6106e08301526121ab6107008301526121f861072083015261224761074083015261229661076083015261234e61078083015261237a6107a083015261239c6107c08301526124546107e08301526124956108008301526124bc6108208301526125096108408301526125566108608301526125a56108808301526125f26108a083015261263f6108c083015261268c6108e083015261277d6109008301529190819080610633816127af565b94505050505090565b60606040518060c0016040528060908152602001615c8360909139905090565b6106bd60405180610120016040528060608152602001606081526020015f81526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020016060815260200160608152602001606081525090565b602087810180516040600191820184028b018181015182515f91821a808252948501870281019093526041808301968381019593600285020190910191908401905b8381101561073d57875160f01c83015160408051600192831a80825283016020908102909101918290529084526002909901989290920191016106ff565b505050506040518061012001604052808281526020018481526020018b81526020015f81526020018a81526020018973ffffffffffffffffffffffffffffffffffffffff168152602001888152602001838152602001878152509450505050509695505050505050565b5f82815260208120600f900660100284811c61ffff1690815b82156107da57825186146107da57604083015192506107c0565b821580156108285760405193506060840160405286845285602085015281604085015260028860f01c0161ffff60f01b1989168160f01b1798505061ffff831b19881684841b17975061082f565b8560208501525b50505061ffff811115610871576040517fcadaf56d00000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b849150505b9392505050565b6060805f806108948760e001518860400151612833565b915091505f80885f01518960400151815181106108b3576108b36158af565b60200260200101519150819050838851146109075787516040517fd628439f000000000000000000000000000000000000000000000000000000008152610280918691600401918252602082015260400190565b87511561092c575f60208951028203915060208901905061092a81838b51612856565b505b61093c898a604001518385612862565b90505f83881061094c578361094e565b875b90506060602083039050818152806109698c60600151612af3565b975097505050505050505b935093915050565b604083015183516020600192830181029091015161ffff8516909201029003517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152809392505050565b60208084015161ffff841660010190910201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152809392505050565b602083015180515f9161ffff851691600f601087901c811692601488901c9091169185919085908110610a4257610a426158af565b602002602001015190505f80610a5b839060a082901c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08a0180518882526040517f58c07152000000000000000000000000000000000000000000000000000000008152939550919350915f9073ffffffffffffffffffffffffffffffffffffffff8616906358c0715290610ae0908790879060040161591c565b5f60405180830381865afa158015610afa573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b3f919081019061593c565b905080518714610b885780516040517fc3385cb0000000000000000000000000000000000000000000000000000000008152610280918991600401918252602082015260400190565b818352602088028b019a50602081016020880281015b80821015610bbb5760208d039c5081518d52602082019150610b9e565b509a9d9c50505050505050505050505050565b60c083015180515f9160ff85811692600887901c90911691849184908110610bf857610bf86158af565b60200260200101518281518110610c1157610c116158af565b60209081029190910101517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909501948552509295945050505050565b60208101805182511681529392505050565b80515f90610c6d81612d66565b835250909392505050565b80516001600884901c60ff9081169190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0193161c919091168152919050565b805160209091018051600160ff600886901c81169190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01941684811b199091169390921690911b919091178152919050565b60208101805182511781529392505050565b805161ffff83161b8152809392505050565b805161ffff83161c8152809392505050565b8251600161ffff841690810160209081028301515f93600f601088901c811693601489901c90911692908190850288015b80891015610d935760208203915088518252602089019850610d76565b5060408a01805190879052610daa8b828486612862565b60408c0182905260208602998a9003999092508201895b81841015610dd9578351815260209384019301610dc1565b50989b9a5050505050505050505050565b60109190911c600f166020028082207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190920101908152919050565b805160208201516040909201805190925f929173ffffffffffffffffffffffffffffffffffffffff83168314610e8c576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101849052602401610280565b73ffffffffffffffffffffffffffffffffffffffff82168214610ede576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b73ffffffffffffffffffffffffffffffffffffffff81168114610f30576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301525f919085169063dd62ed3e90604401602060405180830381865afa158015610fa5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc991906159bd565b90505f610fd585612e3e565b90505f610fe28383612ee7565b508852509598975050505050505050565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff82168214611052576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b73ffffffffffffffffffffffffffffffffffffffff811681146110a4576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa158015611111573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061113591906159bd565b90505f61114184612e3e565b90505f61114e8383612f28565b87525094979650505050505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff811681146111b3576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f815f1c73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ff573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061122391906159bd565b90505f61122f83612e3e565b90505f61123c8383612f28565b865250939695505050505050565b805160208201516040909201805190925f929173ffffffffffffffffffffffffffffffffffffffff831683146112af576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101849052602401610280565b73ffffffffffffffffffffffffffffffffffffffff82168214611301576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b73ffffffffffffffffffffffffffffffffffffffff81168114611353576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301525f919085169063dd62ed3e90604401602060405180830381865afa1580156113c8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061123c91906159bd565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff8216821461144b576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b73ffffffffffffffffffffffffffffffffffffffff8116811461149d576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa15801561150a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152e91906159bd565b8552509295945050505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff81168114611591576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f815f1c73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115dd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160191906159bd565b84525091949350505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff81168114611663576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f815f1c73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116af573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160191906159d4565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff82168214611732576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b73ffffffffffffffffffffffffffffffffffffffff81168114611784576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa1580156117f1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061181591906159bd565b90505f61123c825f612f28565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff82168214611881576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b6040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018290525f9073ffffffffffffffffffffffffffffffffffffffff841690636352211e90602401602060405180830381865afa1580156118ec573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152e91906159d4565b437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b467fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020600f601085901c1602828101918201925f928391905b80821015611a1957815192507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff831615611a0e57828652611a19565b8160200191506119d6565b50939695505050505050565b805160209091018051909114815292915050565b5f805f80805f80600f8960101c169350600284069250879150602083850302820190506020831502810397508215611a7057805194505b5f5b81831015611abb5750815195507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff86161580611ab05760208301518952611abb565b826040019250611a72565b8015611b1757604080518082019091525f6020820152600887901c601f88168083019190915281525b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102809190615531565b50969998505050505050505050565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216611b8057604080518082019091525f6020820152600882901c601f8316808301919091528152611ae4565b5091949350505050565b80516020909101805190915f918261152e8383612f4c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020600f601085901c1602828101918201925f928391905b80821015611a1957815192507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316611c12575f8652611a19565b816020019150611bdb565b80516020909101805190915f918261152e8383612f9a565b80516020909101805190915f918261152e8383612fe9565b805160407bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911615156020028203810151910190815292915050565b80515f90817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615611601565b80516020909101805190915f918261152e8383613039565b80516020909101805190915f918261152e8383613088565b80515f90610c6d816130d8565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d611d3f84848484613123565b9094509250600f60108a901c1660025b81811015611da55789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d9250611d9886868686613123565b9096509450600101611d4f565b5050611db18484613259565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe098909801978852509598975050505050505050565b80516020909101805190915f916116016002611e04848461335f565b906133c1565b80515f90610c6d81613406565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d611e69848484846134c2565b9094509250600f60108a901c1660025b81811015611da55789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d9250611ec2868686866134c2565b9096509450600101611e79565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b80515f90610c6d7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc8273c51a14251b0dcf0ae24a96b7153991378938f5f5613add565b80515f90610c6d60028273c51a14251b0dcf0ae24a96b7153991378938f5f5613add565b80515f90610c6d81613d37565b80515f90610c6d81613ddd565b80516020909101805190915f9182611fb78382613039565b90505f611fc48382613039565b90505f6120227fffffffff0000000000000000000000000000000000000000000000000000000573c51a14251b0dcf0ae24a96b7153991378938f5f561201b61200c886130d8565b6120158a6130d8565b90613e28565b9190613add565b90508115158315151461123c5761114e81613e6d565b80515f9061204f8161204981613406565b90613e9f565b90507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116612078575060015b82525092915050565b80515f90610c6d81613ee4565b805160208201516040909201915f91906120a88282613f16565b9150600f601086901c1660025b818110156120db57855160209096019592506120d18484613f16565b93506001016120b5565b5050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0929092019182525092915050565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91906121c58282613f32565b9150600f601086901c1660025b818110156120db57855160209096019592506121ee8484613f32565b93506001016121d2565b7f7fffffff800000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7f80000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d6122e884848484613f3d565b9094509250600f60108a901c1660025b81811015611da55789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d925061234186868686613f3d565b90965094506001016122f8565b80516020909101805190915f91611601828273c51a14251b0dcf0ae24a96b7153991378938f5f5613add565b80515f90610c6d8173c51a14251b0dcf0ae24a96b7153991378938f5f561405c565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d6123ee84848484614088565b9094509250600f60108a901c1660025b81811015611da55789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d925061244786868686614088565b90965094506001016123fe565b805160208201516040909201805190925f929161152e61248e8273c51a14251b0dcf0ae24a96b7153991378938f5f561201b86600161335f565b8490613e28565b805160208201516040909201805190925f929161152e6124b58383613e28565b849061335f565b805160208201516040909201915f91906124d68183615909565b9150600f601086901c1660025b818110156120db57855160209096019592506124ff8385615909565b93506001016124e3565b805160208201516040909201915f919061252381836159ef565b9150600f601086901c1660025b818110156120db578551602090960195925061254c83856159ef565b9350600101612530565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91906125bf8183615a02565b9150600f601086901c1660025b818110156120db57855160209096019592506125e88385615a02565b93506001016125cc565b805160208201516040909201915f919061260c8183615b37565b9150600f601086901c1660025b818110156120db57855160209096019592506126358385615b37565b9350600101612619565b805160208201516040909201915f91906126598183615b42565b9150600f601086901c1660025b818110156120db57855160209096019592506126828385615b42565b9350600101612666565b805160608401515f9190829081906126a490846140b2565b91509150815f0361276e5760a087015160808801516040517f295f36d70000000000000000000000000000000000000000000000000000000081526004810191909152602481018590525f9173ffffffffffffffffffffffffffffffffffffffff169063295f36d790604401602060405180830381865afa15801561272b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061274f91906159bd565b60608901519091506127629085836107a7565b60608901528552612772565b8085525b509295945050505050565b8051602082015160608501516040909301925f92919061279e9083836107a7565b606087015250829150509392505050565b60605f825160020267ffffffffffffffff8111156127cf576127cf6156ac565b6040519080825280601f01601f1916602001820160405280156127f9576020820181803683370190505b50905061ffff80196020850160208651028101600285015b81831015611a1957805183518616908516178152602090920191600201612811565b5f805f61284085856140f9565b51600281901a9660039190911a95509350505050565b6020810283835e505050565b5f80856040015190505f805f805f60028b61010001515161288391906159ef565b60e08c01516101008d0151602080830151600261ffff9b909b168b8102850160219081015160f01c5f93841a9d909d029095019b909b019384015160258086019b50600791831a91821691829003600402909501909401985092965001935090915061549e90805b86881015612a6d5787519050600284825f1a060285015160f01c925062ffffff8160e01c1691506129218e838e8663ffffffff16565b9b506002848260041a060285015160f01c925062ffffff8160c01c16915061294e8e838e8663ffffffff16565b9b506002848260081a060285015160f01c925062ffffff8160a01c16915061297b8e838e8663ffffffff16565b9b5060028482600c1a060285015160f01c925062ffffff8160801c1691506129a88e838e8663ffffffff16565b9b506002848260101a060285015160f01c925062ffffff8160601c1691506129d58e838e8663ffffffff16565b9b506002848260141a060285015160f01c925062ffffff8160401c169150612a028e838e8663ffffffff16565b9b506002848260181a060285015160f01c925062ffffff8160201c169150612a2f8e838e8663ffffffff16565b9b5060028482601c1a060285015160f01c925062ffffff81169150612a598e838e8663ffffffff16565b9b50612a66602089615909565b97506128eb565b612a78601c89615b42565b9750612a85866004615a02565b612a8f9089615909565b96505b86881015612ad55750508551601c81901a83900660020284015160f01c915062ffffff811690612ac18e838e86565b9b50612ace600489615909565b9750612a92565b612ae18d8a8e8e614128565b50999c9b505050505050505050505050565b6040805160f083901c602081810283010190925290815261ffff63ffffffff67ffffffffffffffff6fffffffffffffffffffffffffffffffff612b5f565b5f5b8215612b5957825182526020830151602083015260408301519250604082019150612b33565b50919050565b602085018660101b60901c8015612c4f578060401c8015612bcd578060201c8015612b9157612b8e8185612b31565b93505b508086168015612bcb578060101c8015612bb257612baf8186612b31565b94505b508088168015612bc957612bc68186612b31565b94505b505b505b508084168015612c4d578060201c8015612c11578060101c8015612bf857612bf58186612b31565b94505b508088168015612c0f57612c0c8186612b31565b94505b505b508086168015612c4b578060101c8015612c3257612c2f8186612b31565b94505b508088168015612c4957612c468186612b31565b94505b505b505b505b508682168015612d5b578060401c8015612cd9578060201c8015612c9d578060101c8015612c8457612c818186612b31565b94505b508088168015612c9b57612c988186612b31565b94505b505b508086168015612cd7578060101c8015612cbe57612cbb8186612b31565b94505b508088168015612cd557612cd28186612b31565b94505b505b505b508084168015612d59578060201c8015612d1d578060101c8015612d0457612d018186612b31565b94505b508088168015612d1b57612d188186612b31565b94505b505b508086168015612d57578060101c8015612d3e57612d3b8186612b31565b94505b508088168015612d5557612d528186612b31565b94505b505b505b505b505050505050919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d975750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f612e476141bb565b6040517ff5c36eaf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063f5c36eaf90602401602060405180830381865afa158015612ec3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061017f9190615b55565b5f805f805f612ef68787614261565b9250925092505f80612f088585613259565b9150915081838015612f175750815b9650965050505050505b9250929050565b5f805f612f3585856142bd565b91509150612f43828261431f565b95945050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d612f8f84848484614379565b979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d612fdd84848484614390565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61302c84848484614390565b1315979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61307c84848484614390565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6130cb84848484614390565b1215979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82821215613118576131128282614464565b90925090505b5f612f438383614507565b5f808515841517801561314f57865f036131435784849250925050613250565b86869250925050613250565b6131598787614565565b90975095506131688585614565565b90955093508584131561317c579395929492935b838603604c811115613195578787935093505050613250565b80600a0a86816131a7576131a761586f565b0595505086850180881860ff90811c151589881890911c1516801561324257877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03613229576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a905260248101899052604401610280565b600a968790059690980586019760019790970196613246565b8198505b5050868692509250505b94509492505050565b5f601b83900b83148383826132bd577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561329d57620186a0860595506005850194505b8586601b0b146132b857600a8605955084600101945061329d565b6132d3565b855f036132d357505f925060019150612f219050565b848560030b1461332f575f8512156132f357505f9250829150612f219050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d84806133a486868686613123565b915091505f6133b38383614507565b9a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d84806133a4868686866134c2565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82811261343d57509192915050565b5f8061344984846145bb565b91509150805f0361345e575093949350505050565b5f8113156134b7576134b282847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4613123565b935091505b5f612f8f8385614507565b5f80835f03613507576040517f7a97930f0000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610280565b855f0361351857505f905080613250565b5f805f806135268a8a614623565b919b50995091506135378888614623565b919950975090505f6135488b6148c4565b90505f6135548a6148c4565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c818310156139715784156135b257507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b613930565b6f4b3b4ca85a86c47a098a2240000000008310156136de57678ac7230489e80000831015613642576402540be40083101561361057620186a08310156136005750620186a0905060056138b9565b506402540be4009050600a6138b9565b655af3107a400083101561362f5750655af3107a40009050600e6138b9565b50678ac7230489e80000905060136138b9565b6b204fce5e3e250261100000008310156136945769152d02c7e14af680000083101561367d575069152d02c7e14af6800000905060176138b9565b506b204fce5e3e250261100000009050601c6138b9565b6d314dc6448d9338c15b0a000000008310156136c357506d314dc6448d9338c15b0a00000000905060216138b9565b506f4b3b4ca85a86c47a098a224000000000905060266138b9565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156137d65773af298d050e4395d69670b12b7f41000000000000831015613771577172cb5bd86321e38cb6ce6682e8000000000083101561375257507172cb5bd86321e38cb6ce6682e800000000009050602b6138b9565b5073af298d050e4395d69670b12b7f41000000000000905060306138b9565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156137b2575076010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000905060356138b9565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a6138b9565b7c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000083101561386c577a026e4d30eccc3215dd8f3157d27e23acbdcfe6800000000000000083101561384457507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f6138b9565b507c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000905060446138b9565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000008310156138b957507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b8183116138ed57600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016138b9565b815f03613930576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c9052604401610280565b85613971576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e9052604401610280565b807f8000000000000000000000000000000000000000000000000000000000000000018d126139a457808d039c50613a17565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f811315613a1757807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b13613a0457998a0199613a17565b5f80995099505050505050505050613250565b5f808e128015613a2657505f8c135b15613a63577f80000000000000000000000000000000000000000000000000000000000000008e01808d13613a5b575f613a5f565b808d035b9150505b8b818f01039750613a808f8e613a7a888789614925565b8b614a0a565b90995097505f811315613aca57604c811315613aaa575f809a509a50505050505050505050613250565b80600a0a8981613abc57613abc61586f565b059850885f03613aca575f97505b5096985094965061325095505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516613b1a5750600191506108769050565b5f8213613bb357815f03613b7757613b32855f613039565b15613b6c576040517f8be8297200000000000000000000000000000000000000000000000000000000815260048101869052602401610280565b505f91506108769050565b6040517fcceba0f10000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b613bbe856001612f4c565b8015613bcf5750613bcf865f612f9a565b15613bde578592505050610876565b613be8855f613039565b15613c1157613c08613bf987613ee4565b613c0287613e6d565b86613add565b92505050610876565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80613c4484846145bb565b915091505f613c5483855f614b11565b905060015f8080613c8b8f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510613cd25784600116600103613cb557613caf84848484613f3d565b90945092505b600185901c9450613cc882828484613f3d565b9092509050613c90565b5f80613cdf8f8e8e614c28565b91509150613cef82828a8d613f3d565b9092509050613cff8f8383614f5d565b9092509050613d1082828888613f3d565b90925090505f613d208383614507565b9e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112613d6e57509192915050565b5f80613d7a84846145bb565b915091505f84128015613d8c57508015155b156134b7576134b282847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4614088565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82613e1083836145bb565b9150505f613e1e8284614507565b9695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d84806133a486868686613f3d565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d6131128282614464565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d84806133a486868686614088565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61311282826150ce565b5f613f218383612f9a565b613f2b5781610876565b5090919050565b5f613f218383613039565b5f8085158415178015613f55575f92505f9150614052565b613f5f8487615b75565b91505f613f6b886148c4565b90505f613f77876148c4565b90505f613f848383615127565b5090505f6f0785ee10d5da46d900f436a000000000821115613fb9576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115613fda57670de0b6b3a7640000820491506012015b633b9aca00821115613ff357633b9aca00820491506009015b61271082111561400857612710820491506004015b811561401c57600a82049150600101614008565b6140268187615b75565b95506140488b8a614042878761403d87600a615b37565b614925565b89614a0a565b9097509550505050505b5094509492505050565b5f610876837fffffffff0000000000000000000000000000000000000000000000000000000584613add565b5f806140948484614464565b90945092506140a586868686613123565b9150915094509492505050565b5f80825f526010600f60205f20060261ffff85821c165b80156140f057805185036140e75760019350602081015192506140f0565b604001516140c9565b50509250929050565b5f8061410484615162565b60020260010190505f614117858561517c565b949091019093016020019392505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08201805163ffff0000601087901b1661ffff86161782527f312f5ae588c6ff62cd3f006af06cd48c98d7321649db7d8b2c396a81a204655591905f808686036004017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8801865afa5090525050505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580614212575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b1561425f576040517f73e6d7b300000000000000000000000000000000000000000000000000000000815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610280565b565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8611156142ac57600a860460018201600a88065f14935093509350506142b6565b8593509150600190505b9250925092565b5f805f805f6142cc8787614261565b92509250925080614313576040517fc47179660000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604401610280565b50909590945092505050565b5f805f61432c8585613259565b9150915080614371576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610280565b509392505050565b5f61438685858585614390565b1495945050505050565b5f80851584151781871282861218178584141780156143b55786859250925050613250565b505f858413156143c9575092949193919260015b8386035f8112604c82131780156143fc5782156143ee575f8994509450505050613250565b885f94509450505050613250565b600a82900a8981028a8282816144145761441461586f565b0514614440578415614430575f8b965096505050505050613250565b8a5f965096505050505050613250565b84156144555788965094506132509350505050565b95508794506132509350505050565b5f807f800000000000000000000000000000000000000000000000000000000000000084036144fd577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83036144f0576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810185905260248101849052604401610280565b600a840593508260010192505b50505f9190910391565b5f805f6145148585613259565b9150915080158015614524575081155b15614371576040517f8eba4d070000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610280565b5f805f805f6145748787614623565b92509250925080614313576040517f05e51ecb0000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610280565b5f805f83126145ce57508290505f612f21565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb483121561460057505f905082612f21565b5f839003600a0a8085816146165761461661586f565b0794859003959350505050565b5f805f845f0361463b57505f915081905060016142b6565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f0361484f576f4b3b4ca85a86c47a098a22400000000085051580156146a457507f80000000000000000000000000000000000000000000000000000000000000268412155b156146c5576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561470d57507f80000000000000000000000000000000000000000000000000000000000000138412155b1561472657678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561477257507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614788576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e400000000000000000085051580156147d757507f80000000000000000000000000000000000000000000000000000000000000028412155b156147ed57606485029450600284039350614788565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee8000000000000000000850515801561483d57507f80000000000000000000000000000000000000000000000000000000000000018412155b1561484f57600a850294506001840393505b600a8086029081058614801561488557507f80000000000000000000000000000000000000000000000000000000000000018512155b15614894578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b5f80821215614921577f8000000000000000000000000000000000000000000000000000000000000000820361491b57507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b5f805f6149328686615127565b91509150815f036149565783818161494c5761494c61586f565b0492505050610876565b8382106149a0576040517f6c59da12000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610280565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614ad4577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614ac157614a697f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001615909565b8403614a9957507f8000000000000000000000000000000000000000000000000000000000000000905081613250565b614aa4600a856159ef565b614aad90615b9c565b614ab8846001615b75565b91509150613250565b614aca84615b9c565b8391509150613250565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614b0757614aad600a856159ef565b5082905081613250565b5f818303614b20575082610876565b82821315614b6357828203604c811380614b3a57505f8113155b15614b48575f915050610876565b80600a0a8581614b5a57614b5a61586f565b05915050610876565b818303604c811380614b7557505f8113155b15614bbd576040517f1d5d6d10000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260448101849052606401610280565b600a81900a85810286828281614bd557614bd561586f565b0514614c1e576040517f1d5d6d10000000000000000000000000000000000000000000000000000000008152600481018890526024810187905260448101869052606401610280565b9250610876915050565b5f808383614c368282614565565b90965094505f8613614cb757855f03614c7b576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b5050837f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000003614cf557614ceb83604c615b75565b5f91509150610974565b7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000084121580614d44577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb5614d66565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412614f21575f805f805f85614d7f57604b614d82565b604c5b614d8c908a615b75565b90505f8087614db9577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000614dda565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81614e0c57614e0c61586f565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050614e458c826151d2565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414614ed1576123278114614eac57614e878c826001016151d2565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002614ece565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50614f01838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4615259565b909a509850614f128a8a835f613123565b97509750505050505050610974565b614f2b85856150ce565b9095509350614f3b868686614c28565b9095509350614f4a8585614464565b9250925050610974565b50935093915050565b5f805f841215614f9957614f718484614464565b9094509250614f81858585614f5d565b9094509250614f9084846150ce565b91509150610974565b5f80614fa586866145bb565b9092509050845f8080614fb885856152f6565b9194509250905061270d612710614fd0600182615bcc565b8514614fe757614fe18d86866153e5565b90925090505b8315615072575f614ff9866001615b75565b90505b80848583028161500e5761500e61586f565b051461502557600a84059350600a88059750614ffc565b6150666150328588615bf2565b8961503d8785615bf2565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc615259565b909d509b506150999050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b5050505050866150aa84835f614b11565b6150b5886001615b75565b6150bf9190615b75565b94509450505050935093915050565b5f8061511c7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb486866134c2565b915091509250929050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f81515f0361517257505f919050565b50602001515f1a90565b5f61518683615162565b82106151c25781836040517ffcfaeff1000000000000000000000000000000000000000000000000000000008152600401610280929190615c3d565b50600202016003015161ffff1690565b5f806151e1600a6123286159ef565b6151ec906002615a02565b6151f7906001615909565b90505f615207600a6123286159ef565b90506002600a8504026001015f8052600281601e883c505f51617fff8116935061800081161561523657918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f8088880361526c5750839050816152ea565b5f805f8061527c8c8b8f8d614088565b915091505f8061528e8a8a8d8c614088565b9150915061529e84848484613f3d565b8096508197505050505050505f806152b88b8b8f8d614088565b915091505f806152ca868686866134c2565b915091505f806152dc84848f8e613123565b909a50985050505050505050505b97509795505050505050565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0361532e57508391505f905060016142b6565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8412156153bc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb084121561538d57505f91505082151560016142b6565b5f846004015f03600a0a90505f8187816153a9576153a961586f565b05945050808402861415925090506142b6565b5f84126153d157505f915081905060016142b6565b50505060048101600a0a82025f60016142b6565b5f808060646153f7600a6123286159ef565b615404600a6123286159ef565b61540f906002615a02565b61541a906001615909565b6154249190615909565b61542e9190615909565b9050615472565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b61547d858288615435565b92508315614f5457615493600186018288615435565b915050935093915050565b61425f615c55565b5f602082840312156154b6575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610876575f80fd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61087660208301846154e5565b5f60208284031215615553575f80fd5b813567ffffffffffffffff811115615569575f80fd5b820160e08185031215610876575f80fd5b5f815180845260208085019450602084015f5b838110156155a95781518752958201959082019060010161558d565b509495945050505050565b604081525f6155c6604083018561557a565b8281036020848101919091528451808352858201928201905f5b818110156155fc578451835293830193918301916001016155e0565b5090979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461562a575f80fd5b50565b5f6020828403121561563d575f80fd5b813561087681615609565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261567b575f80fd5b83018035915067ffffffffffffffff821115615695575f80fd5b6020019150600581901b3603821315612f21575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715615720576157206156ac565b604052919050565b5f67ffffffffffffffff821115615741576157416156ac565b5060051b60200190565b5f61575d61575884615728565b6156d9565b83815260208082019190600586811b86013681111561577a575f80fd5b865b8181101561580157803567ffffffffffffffff81111561579a575f80fd5b880136601f8201126157aa575f80fd5b80356157b861575882615728565b81815290851b820186019086810190368311156157d3575f80fd5b928701925b828410156157f1578335825292870192908701906157d8565b895250505094830194830161577c565b5092979650505050505050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615841575f80fd5b83018035915067ffffffffffffffff82111561585b575f80fd5b602001915036819003821315612f21575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826158aa576158aa61586f565b500690565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561017f5761017f6158dc565b828152604060208201525f615934604083018461557a565b949350505050565b5f602080838503121561594d575f80fd5b825167ffffffffffffffff811115615963575f80fd5b8301601f81018513615973575f80fd5b805161598161575882615728565b81815260059190911b8201830190838101908783111561599f575f80fd5b928401925b82841015612f8f578351825292840192908401906159a4565b5f602082840312156159cd575f80fd5b5051919050565b5f602082840312156159e4575f80fd5b815161087681615609565b5f826159fd576159fd61586f565b500490565b808202811582820484141761017f5761017f6158dc565b600181815b80851115615a7257817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615a5857615a586158dc565b80851615615a6557918102915b93841c9390800290615a1e565b509250929050565b5f82615a885750600161017f565b81615a9457505f61017f565b8160018114615aaa5760028114615ab457615ad0565b600191505061017f565b60ff841115615ac557615ac56158dc565b50506001821b61017f565b5060208310610133831016604e8410600b8410161715615af3575081810a61017f565b615afd8383615a19565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615b2f57615b2f6158dc565b029392505050565b5f6108768383615a7a565b8181038181111561017f5761017f6158dc565b5f60208284031215615b65575f80fd5b815160ff81168114610876575f80fd5b8082018281125f831280158216821582161715615b9457615b946158dc565b505092915050565b5f7f8000000000000000000000000000000000000000000000000000000000000000820361491b5761491b6158dc565b8181035f831280158383131683831282161715615beb57615beb6158dc565b5092915050565b8082025f82127f800000000000000000000000000000000000000000000000000000000000000084141615615c2957615c296158dc565b818105831482151761017f5761017f6158dc565b828152604060208201525f61593460408301846154e5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe097c09cb0a0d0bce0c4e0c600c780cba0d0f0d210d330d450dea0e270ff3115d124a13ec153b160d16d3182213ec1910193f193f196e199d1a251a391b261b8a1ba21c1d1c351c4d1c861cb01cc81ce01ced1de81e0a1e171ecf1f1e1f611f851f921f9f20382081208e210d215c21ab21f822472296234e237a239c2454249524bc2509255625a525f2263f268c277d" - } -} diff --git a/crates/test_fixtures/abi/RainlangParser.json b/crates/test_fixtures/abi/RainlangParser.json deleted file mode 100644 index 164cea372..000000000 --- a/crates/test_fixtures/abi/RainlangParser.json +++ /dev/null @@ -1,671 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "buildLiteralParserFunctionPointers", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes", - "internalType": "bytes" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "buildOperandHandlerFunctionPointers", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes", - "internalType": "bytes" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parsePragma1", - "inputs": [ - { - "name": "data", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct PragmaV1", - "components": [ - { - "name": "usingWordsFrom", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { - "name": "interfaceId", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "unsafeParse", - "inputs": [ - { - "name": "data", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ], - "stateMutability": "view" - }, - { - "type": "error", - "name": "BadDynamicLength", - "inputs": [ - { - "name": "dynamicLength", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "standardOpsLength", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "BadSubParserResult", - "inputs": [ - { - "name": "bytecode", - "type": "bytes", - "internalType": "bytes" - } - ] - }, - { - "type": "error", - "name": "CoefficientOverflow", - "inputs": [ - { - "name": "signedCoefficient", - "type": "int256", - "internalType": "int256" - }, - { - "name": "exponent", - "type": "int256", - "internalType": "int256" - } - ] - }, - { - "type": "error", - "name": "DanglingSource", - "inputs": [] - }, - { - "type": "error", - "name": "DuplicateLHSItem", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ExcessLHSItems", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ExcessRHSItems", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ExpectedLeftParen", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ExpectedOperand", - "inputs": [] - }, - { - "type": "error", - "name": "ExponentOverflow", - "inputs": [ - { - "name": "signedCoefficient", - "type": "int256", - "internalType": "int256" - }, - { - "name": "exponent", - "type": "int256", - "internalType": "int256" - } - ] - }, - { - "type": "error", - "name": "FixedDecimalOverflow", - "inputs": [ - { - "name": "signedCoefficient", - "type": "int256", - "internalType": "int256" - }, - { - "name": "exponent", - "type": "int256", - "internalType": "int256" - }, - { - "name": "decimals", - "type": "uint8", - "internalType": "uint8" - } - ] - }, - { - "type": "error", - "name": "HexLiteralOverflow", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "InvalidSubParser", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "LHSItemCountOverflow", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "LineRHSItemsOverflow", - "inputs": [] - }, - { - "type": "error", - "name": "LossyConversionFromFloat", - "inputs": [ - { - "name": "signedCoefficient", - "type": "int256", - "internalType": "int256" - }, - { - "name": "exponent", - "type": "int256", - "internalType": "int256" - } - ] - }, - { - "type": "error", - "name": "MalformedCommentStart", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "MalformedHexLiteral", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "MaxSources", - "inputs": [] - }, - { - "type": "error", - "name": "MissingFinalSemi", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "NegativeFixedDecimalConversion", - "inputs": [ - { - "name": "signedCoefficient", - "type": "int256", - "internalType": "int256" - }, - { - "name": "exponent", - "type": "int256", - "internalType": "int256" - } - ] - }, - { - "type": "error", - "name": "NoWhitespaceAfterUsingWordsFrom", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "NotAcceptingInputs", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "OddLengthHexLiteral", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "OpcodeIOOverflow", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "OperandOverflow", - "inputs": [] - }, - { - "type": "error", - "name": "OperandValuesOverflow", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ParenInputOverflow", - "inputs": [] - }, - { - "type": "error", - "name": "ParenOverflow", - "inputs": [] - }, - { - "type": "error", - "name": "ParseMemoryOverflow", - "inputs": [ - { - "name": "freeMemoryPointer", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ParseStackOverflow", - "inputs": [] - }, - { - "type": "error", - "name": "ParseStackUnderflow", - "inputs": [] - }, - { - "type": "error", - "name": "ParserOutOfBounds", - "inputs": [] - }, - { - "type": "error", - "name": "SourceIndexOutOfBounds", - "inputs": [ - { - "name": "sourceIndex", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "bytecode", - "type": "bytes", - "internalType": "bytes" - } - ] - }, - { - "type": "error", - "name": "SourceItemOpsOverflow", - "inputs": [] - }, - { - "type": "error", - "name": "SourceTotalOpsOverflow", - "inputs": [] - }, - { - "type": "error", - "name": "StringTooLong", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "SubParseLiteralDispatchLengthOverflow", - "inputs": [ - { - "name": "dispatchLength", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "SubParseableMissingDispatch", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "UnclosedComment", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "UnclosedLeftParen", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "UnclosedOperand", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "UnclosedStringLiteral", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "UnclosedSubParseableLiteral", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "UnexpectedComment", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "UnexpectedLHSChar", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "UnexpectedOperand", - "inputs": [] - }, - { - "type": "error", - "name": "UnexpectedOperandValue", - "inputs": [] - }, - { - "type": "error", - "name": "UnexpectedRHSChar", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "UnexpectedRightParen", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "UnknownWord", - "inputs": [ - { - "name": "word", - "type": "string", - "internalType": "string" - } - ] - }, - { - "type": "error", - "name": "UnsupportedLiteralType", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "UppercaseHexPrefix", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "WordSize", - "inputs": [ - { - "name": "word", - "type": "string", - "internalType": "string" - } - ] - }, - { - "type": "error", - "name": "ZeroLengthHexLiteral", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ZeroStringStartPointer", - "inputs": [] - } - ], - "bytecode": { - "object": "0x6080604052348015600e575f80fd5b5061549d8061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c80637764fd9c1161004d5780637764fd9c146100b0578063ccf44775146100d1578063d6d8c9a8146100e6575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b610076366004614d0e565b6100ee565b60405190151581526020015b60405180910390f35b6100a361009e366004614e0e565b610186565b6040516100879190614e88565b6100c36100be366004614e0e565b61023e565b604051610087929190614f39565b6100d961025e565b6040516100879190614f8e565b6100d961026d565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f1a2c8edd00000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040805160208101909152606081525f6101e3836101a2610277565b6101aa61029a565b60408051808201909152600881527f1c991fe52025208200000000000000000000000000000000000000000000000060208201526102ba565b90505f6020840190505f6101fa8580510160200190565b90506102078383836104ac565b915061021483838361050e565b9150604051806020016040528061022a856106db565b90529350505050610239610739565b919050565b606080610255610250846101a2610277565b61077e565b91509150915091565b60606102686108fb565b905090565b6060610268610948565b6060604051806101a0016040528061016381526020016152aa6101639139905090565b60606040518060c001604052806090815260200161540d60909139905090565b6103476040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b8152602001848152602001858152602001600467ffffffffffffffff8111156103cd576103cd614d4d565b6040519080825280602002602001820160405280156103f6578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016828152808301825283517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001681178452855290840182905283018190529082018190526080820181905260a082018190526101208201819052610140820181905261020082015290505b95945050505050565b5f5b8183101561050457825160015f9190911a1b6401000026008116156104df576104d8858585610c09565b93506104fe565b658000000000008116156104f8576104d8858585610c4d565b50610504565b506104ae565b50815b9392505050565b815160408051808201909152601081527f7573696e672d776f7264732d66726f6d0000000000000000000000000000000060208201525f919061055090614fa0565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008216146105815783915050610507565b5060108301925081831061061a5761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fe3e4992d00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60405180910390fd5b825160015f91821a1b90640100002600821690036106835761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176105dc565b836001019350505b818310156105045761069e8484846104ac565b925081831015610504575f806106b5868686610e7b565b9096509092509050816106c9575050610504565b6106d486868361102d565b505061068b565b60c08101516040516060919073ffffffffffffffffffffffffffffffffffffffff602082015f5b841561072357848316825260a09490941c5193602090910190600101610702565b8352604052610731826110ec565b509392505050565b60405162010000811061077b576040517f766c065f00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b50565b6060805f8361022001515111156108d0575f61079f84610220015160200190565b90505f6107b485610220015180510160200190565b90506107c18583836104ac565b91506107ce85838361050e565b91505b80821015610805576107e48583836104ac565b91506107f185838361113a565b91506107fe85838361153d565b91506107d1565b80821461083e576040517f7d565df600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610100850151600816156108cd5761022085015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517ff06f54cf00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b50505b5f806108e56108de86611afc565b8690611c31565b915091506108f1610739565b9094909350915050565b6040805160a0810182526004808252611c996020830152611fe592820192909252612025606082810191909152612082608083015291908190805b61093f8161226b565b94505050505090565b6060614d045f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff1681526020016122fb81526020016122fb81526020016122fb81526020016123c781526020016124db81526020016124db81526020016123c781526020016123c781526020016124db81526020016122fb81526020016122fb81526020016122fb81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db8152509050606081905060488151146109365780516040517fc8b56901000000000000000000000000000000000000000000000000000000008152600481019190915260248101849052604401610611565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690525f610c45838364010000260061251d565b949350505050565b6101008301805160011790525f60048301821015610ce75761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f25a7646800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b825160f01c612f2a8114610d765761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f3e47169c00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6003840193505f5b83851015610e1b5784515f1a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd18101610e0f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86015160f01c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d18101610e0d57505050600193840193610e1b565b505b85600101955050610d7e565b80610e715761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017610cb2565b5092949350505050565b81515f90819081908190600181831a1b6703ff200000000000811615610fa25786610ea7896001615012565b1015610f9957600182811a1b7ffffffffffffffffffffffffffffffffffeffffffffffffffffff00000000000082821701610ee4575f9350610f93565b7ffffffffffffffffffffffffffffffffffffffffffeffffffffff00000000000082821701610f8e576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f75c28ff900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b600193505b50610fe7565b60019250610fe7565b640400000000811615610fb85760029250610fe7565b6b080000000000000000000000811615610fd55760039250610fe7565b505f9450869350849250611024915050565b505f905061101588888861100d83876101a09190910151600291820201015161ffff1690565b63ffffffff16565b90975060019550879450925050505b93509350939050565b73ffffffffffffffffffffffffffffffffffffffff8111156110ca5761022083015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f9d7e517e00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60c09092018051604080516020810190915290815260a01b9290921790915250565b60208101602082510282015b808210156111355781518151835281526020909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016110f8565b505050565b5f5b818310156105045782515f90600190821a1b6f07fffffe8000000000000000000000008116156113b757610100860151600116156111f65761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f5520a51700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6f07fffffe0000000000000000000000008116156112c95761122985856f07fffffe0000000003ff200000000000612546565b90955091505f6112398784612615565b50905080156112c35761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f53e6feba00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b506112ea565b6112e760018601856f07fffffe0000000003ff20000000000061251d565b94505b856040015160ff1660ff148061130757508560a0015160ff1660ff145b1561138d5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f3820634100000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b604086018051600190810190915260a0870180519091019052610100860180516009179052611536565b640100002600811615611409576113d7600186018564010000260061251d565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611536565b670400000000000000811615611455575050610100840180516008177ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe16905260019290920191610504565b658000000000008116156114e55761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fedad0c5800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176111c1565b505061113c565b5f5b818310156105045782515f90600190821a1b6f07fffffe00000000000000000000000081161561175d57610100860151600116156115f95761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f4e803df600000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b8461161581866f07fffffe0000000003ff200000000000612546565b80945081975050505f8061162e89610240015186612690565b91509150811561166f57611643898989612764565b97505f6116508a836129ef565b905061165d8a8383612a15565b50610100890180516002179052611749565b6116798986612bfa565b9092509050811561169d5761168f895f83612a15565b61169889612c74565b611749565b5f6060848a03600581016116b28d8d8d612764565b9b508c6101e0015151602002602001810190505f60059050604051935060208201840160405282818501528184528394506116fa8860056116f38760200190565b0185612cda565b5050506101e08b015180516001019061172d906117278361171e8680510160200190565b90602002900390565b83612ce3565b5061173a8b60ff84612a15565b50506101008901805160021790525b505050610100860180516001179052611af5565b6101008601516002161561187f576501000000000081165f036117fb5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f23b5c6ea00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b606086810180515f1a6003019190829053603b821115611847576040517f6232f2d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050610100860180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc169052600190940193611af5565b6502000000000081161561195b576060868101515f90811a91908290036119215761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f7f9db54200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b808801600383039250828153826004820101515f1a8360028301015160f01c600101535061194e88612c74565b5050600190940193611af5565b6401000026008116156119ad5761197b600186018564010000260061251d565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611af5565b6b0800000003ff2004000000008116156119e8576119cc868686612cef565b94506119d786612c74565b610100860180516001179052611af5565b65100000000000811615611a0d57611a008686612e19565b5050600190920191610504565b670800000000000000811615611a4557611a278686612e19565b611a3086613271565b50506004610100850152600190920191610504565b65800000000000811615611aa45761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176114b0565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176115c4565b505061153f565b60e08101518151516060919060f082901c9060208114611b48576040517f858f2dcf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051935060208401601083045f8183535060016008850483018101928391015f80805b88811015611ba55789811c61ffff81165163ffff0000601092831b16811760e01b8786015284019360f08390031b929092179101611b6c565b50825117909152878203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08181018952908801601f01166040525f5b82811015611c25576002810288016003015161ffff90811683018051602060f082901c019260e09190911c1690611c1a838284612cda565b505050600101611be2565b50505050505050919050565b6060805f611c3e8461359f565b90505f5b81811015611c81575f611c5586836135b9565b60040190505f611c6587846135e8565b60040282019050611c778883836135ff565b5050600101611c42565b5083611c8c866138bf565b92509250505b9250929050565b5f80808080611ca9888888613934565b985090925090508181036040811115611d3d5761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fff2f594900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b805f03611dc55761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fc75cd50900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60028106600103611e515761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fd76d9b5700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6001820397505f5b838910611fd45788515f90811a906001821b906703ff000000000000821615611ea557507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd08201611f9e565b6c7e000000000000000000000000821615611ee357507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa98201611f9e565b687e0000000000000000821615611f1d57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc98201611f9e565b6102208d01518c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f69f1e3e600000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909b019a831b96909617955050600401611e59565b50509350909150505b935093915050565b5f805f805f80611ff58888613984565b9296509094509250905061200a898486613e23565b826120158383613ea7565b9550955050505050935093915050565b5f808080612034878787613ef9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301805184840382529199509294509092505f91612072816140b3565b9190529698969750505050505050565b6001909101905f80836120a681856fffffffffdffffffffffffffeffffd9ff61251d565b9450848181036121315761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517ff73a1aa800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b61213c878787610c09565b95508561215a81876fffffffffdfffffffffffffffffffffff61251d565b9650868681106121e65761022089015188037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fc4b1913500000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b875160015f91821a1b906b20000000000000000000000082169003612256576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176121b1565b50600190970196876120158a868686866140df565b60605f825160020267ffffffffffffffff81111561228b5761228b614d4d565b6040519080825280601f01601f1916602001820160405280156122b5576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156122ef578051835186169085161781526020909201916002016122cd565b50939695505050505050565b5f8151600103612386575060208101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b60e082901d5f61233e8383836142a3565b905061ffff81111561237c576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250610239915050565b81515f0361239557505f919050565b6040517f1ac6690800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f815160020361249f57602082015160408301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d5f61240e8383836142a3565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b935060e085901d925090505f6124478484836142a3565b905060ff821180612458575060ff81115b1561248f576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60081b1794506102399350505050565b600282511015612395576040517ff16066b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81515f14612516576040517f9f16b02000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505f919050565b5f5b5f82600186515f1a1b1611838510161561253e5760018401935061251f565b509192915050565b5f80806001818787036020811161255d5780612560565b60205b915050875192505b8519600184841a1b1615818310161561258657600182019150612568565b9681019660208290036008810293841c90931b9261260857604080516020810185905201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fe47fe8b700000000000000000000000000000000000000000000000000000000825261061191600401614f8e565b5095969095509350505050565b5f806126218484612bfa565b909250905081611c925750610120830180515f93845260209384902060408051928352948201855293909401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909316601084901b62ff00001617909317909252909160ff90911660010190565b600182810180515f928392600560ff93909316602102870192830192909101835b818310156127555760018301516021909301805190935f90819060ff1681806126da838e6142ff565b915091508186165f036126fc575f809b509b5050505050505050505050611c92565b5f8761270c60018503891661432a565b016004028b015195505062ffffff90811693508416830391506127409050575060019750601c1a9550611c92945050505050565b6127498361432a565b840193505050506126b1565b505f9788975095505050505050565b81516101e08401515f80825291600190831a1b907ffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000008201610e71576127a885615052565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe169052805190955060015f91821a1b9250805b8587101561298d57865160015f9190911a1b93506401000026008416156128165761280f888888610c09565b96506127e3565b67400000000000000084161561283a5761282f87615052565b96506001905061298d565b6001886101000151165f0361290b57600482036128d25761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f8c9fdbb300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5f6128de898989614402565b60208581028701018190526101008b0180516001179052909850905061290383615052565b9250506127e3565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f722cd24a00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b806129e35761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612958565b50905250919392505050565b6101c08201516002828102820101516101e08401515f9261ffff90921691906104a39083565b612a1e8361442a565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb1660081790526020808401515f90811a8501602101805190911a60ff811492919060018101825350508115612aa7576040517f8092d1ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050825180516060808601515f90811a87016061018051939461ffff8616949093921a60ff81149291600886048503601c0191600181018253505f60038201537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe30180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690911790528115612b6a576040517f3abd0c5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050602090920183821b176018820185901b178083529160e0829003612bf25760408051601083901b6020908117601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016918252810190915281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000168117825286525b505050505050565b6101208201516101408301515f8381526020808220919384939290911c91600160ff84161b80821615612c5f5761ffff83165b8015612c5d578360201c8503612c50576001965061ffff8460101c169550612c5d565b51925061ffff8316612c2d565b505b17610140909601959095525090939092509050565b6060818101515f90811a919082900361113557602083810180515f1a600101919082815350603e8210612cd3576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b8083835e505050565b6020810283835e505050565b5f8080612cfd868686610e7b565b9096509250905080612d8b5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fb0e4e5b300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5f80612d96846144b6565b6101808901511615612dd75761016088015160101c5b8015801590612db9575082155b15612dd557602081015190519085149250600190910190612dac565b505b61016088015161ffff16612dfd600184612df15782612df5565b8383035b8b9190612a15565b5081612e0d57612e0d88856144cd565b50949695505050505050565b6060828101515f1a908115612ea95761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f6fb11cdc00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5050612eb48261442a565b61010082018051600416600890811790915260a0830151602084015160ff8083169360f89290921c9290911c1681035f819003612fde576004856101000151165f03612f7b5761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fab1d3ea700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b90820190603e8210612fb9576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60f882901b6020860152610200850151612fd3908461451f565b6102008601526130f9565b60018111156130f957808310156130705761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f78ef278200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b808311156130f95761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f43168e6800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b8082036001016020601083028101905b8181101561325d5760a08801516020848a0181015191831c61ffff16915f1a9060015b82811161324b5760208406601c0361314557925160f01c925b83516102008d015160019190911a9061315e90826145a3565b6102008e01525f82851480156131745750896001145b61317f576001613181565b8b5b6102008f015190915061319490826145e9565b6102008f0152600f8111806131a95750600f82115b1561322f576102208e01518d037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f7ea1869f00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b818160041b17600187015350506004939093019260010161312c565b50506001909401935050601001613109565b5050505060081b60a0909301929092525050565b60e081015160208083015160f083811c925f9290921a60010191908390036132c5576040517fa806284100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610200850151855180515f928392909160219060101c61ffff165b80156132f757805190925060101c61ffff166132e0565b506040518a82018051919650601c8401939160049160248901915f90811a805b8d8310156133dc5760048202860195506004878a03045b8082111561334c57965161ffff16601c81019950969003600761332e565b506004810298899003805186529894909401938103865b60078211156133a8575160101c61ffff1680518652601c909501947ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff990910190613363565b81156133c3575160101c61ffff168051865260048202909501945b50505060019182018051909291909101905f1a80613317565b50505082895250600488810180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9290940491909101601881901b8817939093179052601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660405260ff1094505083156134a8576040517fe972437e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134b56001808a1b615089565b891685891b60f06134c78b6010615012565b901b171760e08b01526101008a0180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7169052604080516020601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681815280820183525f80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001682178152908d52908c01819052908b0181905260608b0181905260808b0181905260a08b018190526101208b018190526101408b018190526102008b015250505050505050505050565b5f81515f036135af57505f919050565b50602001515f1a90565b5f806135c48461359f565b60020260010190505f6135d7858561465c565b949091019093016020019392505050565b5f806135f484846135b9565b515f1a949350505050565b808210156111355781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016138395760c08401515b80156138375760a081901c5161016086015161ffff60e085901c1660208101805160089390931b62ffff0016600187901a1760e81b7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909316929092179091526040517f570c7a630000000000000000000000000000000000000000000000000000000081529192915f908190819073ffffffffffffffffffffffffffffffffffffffff86169063570c7a63906136f2908790600401614f8e565b5f60405180830381865afa15801561370c573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526137519190810190615128565b925092509250821561382d57815160041461379a57816040517fbe2d187d0000000000000000000000000000000000000000000000000000000081526004016106119190614f8e565b60208201517fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff88161789525f5b81518110156138225761381a828281518110613803576138036151d5565b60200260200101518c6144cd90919063ffffffff16565b6001016137e5565b505050505050613837565b505050505061363a565b505b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016138b357606061ffff8260e01c1690505f6003820152600581019050806040517faedfba2f0000000000000000000000000000000000000000000000000000000081526004016106119190614f8e565b506004820191506135ff565b6101608101516040805161ffff8316808252602080820283019081019093529092909160109190911c90835b8082111561392b5760208301518252915161ffff16917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101906138eb565b50505050919050565b5f808080613943866002615012565b9050806c7e0000007e03ff0000000000005b86821081600184515f1a1b161515161561397457600182019150613955565b5090979096508695509350505050565b5f82818061399983866520000000000061251d565b925085831415836139b381886703ff00000000000061251d565b94508085036139ed57507f34bd20690000000000000000000000000000000000000000000000000000000094505f9250829150613e1a9050565b5f806139f98a886146b2565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613a37575095505f9350839250613e1a915050565b86519095506540000000000060015f9290921a9190911b161515888710169150508015613cc657506001909301925f84613a7a81896703ff00000000000061251d565b9550808603613ab557507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f9350839250613e1a915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b660100000000000016151516600103613b24577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613ab7565b818114613b7b575f80613b3784846146b2565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613b77575097505f9550859450613e1a9350505050565b9350505b5f831215613bb657507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f9450849350613e1a92505050565b8315613bc257825f0392505b80820394505f851315613c0257507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f9450849350613e1a92505050565b855f03613c1157829550613cc3565b5f8590036043811115613c5257507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f9550859450613e1a9350505050565b600a0a8681025f88838381613c6957613c69615025565b0514159050601b82900b8214158180613c7f5750805b15613cbb57507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f9850889750613e1a9650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b161515878610168015613e0b5760019095019485613d06818a6520000000000061251d565b965086613d1c818b6703ff00000000000061251d565b9750808803613d5957507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f9550859450613e1a9350505050565b505f80613d66838a6146b2565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613da6575097505f9550859450613e1a9350505050565b9250508482015f83138015613dba57508581125b80613dce57505f83128015613dce57508581135b15613e0757507fd556b1110000000000000000000000000000000000000000000000000000000097505f9550859450613e1a9350505050565b9450505b845f03613e16575f93505b5050505b92959194509250565b7fffffffff00000000000000000000000000000000000000000000000000000000811615611135576102208301515f9083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000179050815f528060045260245ffd5b5f805f613eb485856147dc565b9150915080610731576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610611565b5f80806001850181806f7ffffffffffffffffffffffb0000000081807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b8b0301602080821015613f475750805b875193505b84600185851a1b1615158184101615613f6a57600183019250613f4c565b505080602003613ff5576102208c01518b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f30515bda00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b85810180519095505f1a6001811b6404000000001615806140155750858b145b1561409b576102208d015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f04022fbf00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b50949b939a505060018a019850919650505050505050565b5f80601f90505f60e09050818451168082175f528060208601600183016020035e50505f519392505050565b5f60608186860361ffff811115614125576040517fb6da789c00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b604080516041888803848101838101929092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169093526002828101859052018152935060228401925061417b898484612cda565b6141888783850183612cda565b50505060c08701515b80156142525760a081901c516040517fc6c0cbb60000000000000000000000000000000000000000000000000000000081529091905f90819073ffffffffffffffffffffffffffffffffffffffff84169063c6c0cbb6906141f6908890600401614f8e565b6040805180830381865afa158015614210573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142349190615202565b91509150811561424a5794506104a39350505050565b505050614191565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612d56565b5f805f6142b18686866148e2565b91509150806142f6576040517f05e476780000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610611565b50949350505050565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116611c92575060019250929050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361435b5750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f805f614412888888610e7b565b9250925092508215614252579093509150611fdd9050565b8051602080830180515f90811a8086016021015160a0939190831a61447c5785518488018051600861ffff909316929092046020038801601e83901a840360010160100290811b909217905260f01092505b50508015612cd3576040517f5b1a42d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6144c36101008361522c565b6001901b92915050565b6101608201805160408051808201909152601091821c808252602082018590528351600161ffff909116019282901b9290921790925261450c836144b6565b6101809094018051909417909352505050565b5f61452a83836145e9565b925060ff600884901c8116830190811115614571576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff841660089190911b17905092915050565b5f60ff8316828110156145e2576040517f23b49a2a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050900390565b5f60ff808416830190600885901c811690601086901c90831115614639576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808311156146445750815b601081901b600883901b841717935050505092915050565b5f6146668361359f565b82106146a25781836040517ffcfaeff1000000000000000000000000000000000000000000000000000000008152600401610611929190615264565b50600202016003015161ffff1690565b81515f90819065200000000000600191831a9190911b161515838510168085019082806146df8488614ae9565b90925090507fffffffff0000000000000000000000000000000000000000000000000000000082161561471a575093505f9250611c92915050565b825f0361477d577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161474e575f614770565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95509350611c9292505050565b7f800000000000000000000000000000000000000000000000000000000000000081116147aa575f6147cc565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f601b83900b8314838382614840577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561482057620186a0860595506005850194505b8586601b0b1461483b57600a86059550846001019450614820565b614856565b855f0361485657505f925060019150611c929050565b848560030b146148b2575f85121561487657505f9250829150611c929050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610611565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f851215614928576040517f4a7d166b0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610611565b845f0361493a57505f90506001611fdd565b8460ff8416850185811215614985576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610611565b5f805f8312156149ef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb38312156149c6575f809550955050505050611fdd565b825f03600a0a91508184816149dd576149dd615025565b0495505084029091149150611fdd9050565b5f831315614ad957604d831315614a45576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610611565b82600a0a9150817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81614a7a57614a7a615025565b04841115614ac7576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610611565b5091909102925060019150611fdd9050565b8360019550955050505050611fdd565b5f80828410614b1c57507f34bd20690000000000000000000000000000000000000000000000000000000090505f611c92565b835f03614b55576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b878210158015614b8d5750604d83105b15614bd057815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a8590030201614b7d565b878210614cf65781515f1a8490036001811115614c1857507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611c929350505050565b600a84900a8102828101831115614c5b57507f0fdc26350000000000000000000000000000000000000000000000000000000096505f9550611c92945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b878210614cf65781515f1a60308114614ccb57507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611c929350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190614c87565b5f9890975095505050505050565b614d0c61527c565b565b5f60208284031215614d1e575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610507575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614dc157614dc1614d4d565b604052919050565b5f67ffffffffffffffff821115614de257614de2614d4d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f60208284031215614e1e575f80fd5b813567ffffffffffffffff811115614e34575f80fd5b8201601f81018413614e44575f80fd5b8035614e57614e5282614dc9565b614d7a565b818152856020838501011115614e6b575f80fd5b816020840160208301375f91810160200191909152949350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b80831015614ee257835173ffffffffffffffffffffffffffffffffffffffff168252928401926001929092019190840190614eac565b509695505050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b604081525f614f4b6040830185614eed565b8281036020848101919091528451808352858201928201905f5b81811015614f8157845183529383019391830191600101614f65565b5090979650505050505050565b602081525f6105076020830184614eed565b80516020808301519190811015614fdf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561018057610180614fe5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361508257615082614fe5565b5060010190565b8181038181111561018057610180614fe5565b80518015158114610239575f80fd5b5f82601f8301126150ba575f80fd5b8151602067ffffffffffffffff8211156150d6576150d6614d4d565b8160051b6150e5828201614d7a565b92835284810182019282810190878511156150fe575f80fd5b83870192505b8483101561511d57825182529183019190830190615104565b979650505050505050565b5f805f6060848603121561513a575f80fd5b6151438461509c565b9250602084015167ffffffffffffffff8082111561515f575f80fd5b818601915086601f830112615172575f80fd5b8151615180614e5282614dc9565b818152886020838601011115615194575f80fd5b8160208501602083015e5f60208383010152809550505060408601519150808211156151be575f80fd5b506151cb868287016150ab565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215615213575f80fd5b61521c8361509c565b9150602083015190509250929050565b5f8261525f577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b828152604060208201525f610c456040830184614eed565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0288400100420b0280046b0641220186adb8a044003012020f2a880521281ac8811a000000000000000000080000000000100000000000000002000000000000000000290ea98a3a10f9c53927bda61c6395ad0e9fb4a8075dbeaf2d313e9e09b06d681dfe49062ce21ac13e83a6cc2ad2d2123422c3e0052f369e1f27267220a0a68d2f357696465d217b131120880f24f4a8242f1af53f41f7290afa3e8638acf3d13397e9fd00443a453b406bb547b9059d25a3cd1e11d0c3260b15eb4d16fc94274427bc412baf2cc2321b8f630dca9efe403ce35f1400684845c291e3425d68b13d5f9a151eb98c15239cd9c10c1f698235c8d3843c08d579273459d41a2c9ff617a5b2cd15c0031810f621af127ba34c26bb6c4137b2ad3d1b73563d0210215f36aa563921098e690457fb180376e752066a470128f11de101fcc60522de7ddd183d3d6d4196c37031cba2872e7b3af5304eee7219a8093543082b5f0801f5a522fb22fb22fb23c724db24db23c723c724db22fb22fb22fb24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db" - }, - "deployedBytecode": { - "object": "0x608060405234801561000f575f80fd5b5060043610610064575f3560e01c80637764fd9c1161004d5780637764fd9c146100b0578063ccf44775146100d1578063d6d8c9a8146100e6575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b610076366004614d0e565b6100ee565b60405190151581526020015b60405180910390f35b6100a361009e366004614e0e565b610186565b6040516100879190614e88565b6100c36100be366004614e0e565b61023e565b604051610087929190614f39565b6100d961025e565b6040516100879190614f8e565b6100d961026d565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f1a2c8edd00000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040805160208101909152606081525f6101e3836101a2610277565b6101aa61029a565b60408051808201909152600881527f1c991fe52025208200000000000000000000000000000000000000000000000060208201526102ba565b90505f6020840190505f6101fa8580510160200190565b90506102078383836104ac565b915061021483838361050e565b9150604051806020016040528061022a856106db565b90529350505050610239610739565b919050565b606080610255610250846101a2610277565b61077e565b91509150915091565b60606102686108fb565b905090565b6060610268610948565b6060604051806101a0016040528061016381526020016152aa6101639139905090565b60606040518060c001604052806090815260200161540d60909139905090565b6103476040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b8152602001848152602001858152602001600467ffffffffffffffff8111156103cd576103cd614d4d565b6040519080825280602002602001820160405280156103f6578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016828152808301825283517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001681178452855290840182905283018190529082018190526080820181905260a082018190526101208201819052610140820181905261020082015290505b95945050505050565b5f5b8183101561050457825160015f9190911a1b6401000026008116156104df576104d8858585610c09565b93506104fe565b658000000000008116156104f8576104d8858585610c4d565b50610504565b506104ae565b50815b9392505050565b815160408051808201909152601081527f7573696e672d776f7264732d66726f6d0000000000000000000000000000000060208201525f919061055090614fa0565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008216146105815783915050610507565b5060108301925081831061061a5761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fe3e4992d00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60405180910390fd5b825160015f91821a1b90640100002600821690036106835761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176105dc565b836001019350505b818310156105045761069e8484846104ac565b925081831015610504575f806106b5868686610e7b565b9096509092509050816106c9575050610504565b6106d486868361102d565b505061068b565b60c08101516040516060919073ffffffffffffffffffffffffffffffffffffffff602082015f5b841561072357848316825260a09490941c5193602090910190600101610702565b8352604052610731826110ec565b509392505050565b60405162010000811061077b576040517f766c065f00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b50565b6060805f8361022001515111156108d0575f61079f84610220015160200190565b90505f6107b485610220015180510160200190565b90506107c18583836104ac565b91506107ce85838361050e565b91505b80821015610805576107e48583836104ac565b91506107f185838361113a565b91506107fe85838361153d565b91506107d1565b80821461083e576040517f7d565df600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610100850151600816156108cd5761022085015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517ff06f54cf00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b50505b5f806108e56108de86611afc565b8690611c31565b915091506108f1610739565b9094909350915050565b6040805160a0810182526004808252611c996020830152611fe592820192909252612025606082810191909152612082608083015291908190805b61093f8161226b565b94505050505090565b6060614d045f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff1681526020016122fb81526020016122fb81526020016122fb81526020016123c781526020016124db81526020016124db81526020016123c781526020016123c781526020016124db81526020016122fb81526020016122fb81526020016122fb81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db8152509050606081905060488151146109365780516040517fc8b56901000000000000000000000000000000000000000000000000000000008152600481019190915260248101849052604401610611565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690525f610c45838364010000260061251d565b949350505050565b6101008301805160011790525f60048301821015610ce75761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f25a7646800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b825160f01c612f2a8114610d765761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f3e47169c00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6003840193505f5b83851015610e1b5784515f1a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd18101610e0f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86015160f01c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d18101610e0d57505050600193840193610e1b565b505b85600101955050610d7e565b80610e715761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017610cb2565b5092949350505050565b81515f90819081908190600181831a1b6703ff200000000000811615610fa25786610ea7896001615012565b1015610f9957600182811a1b7ffffffffffffffffffffffffffffffffffeffffffffffffffffff00000000000082821701610ee4575f9350610f93565b7ffffffffffffffffffffffffffffffffffffffffffeffffffffff00000000000082821701610f8e576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f75c28ff900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b600193505b50610fe7565b60019250610fe7565b640400000000811615610fb85760029250610fe7565b6b080000000000000000000000811615610fd55760039250610fe7565b505f9450869350849250611024915050565b505f905061101588888861100d83876101a09190910151600291820201015161ffff1690565b63ffffffff16565b90975060019550879450925050505b93509350939050565b73ffffffffffffffffffffffffffffffffffffffff8111156110ca5761022083015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f9d7e517e00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60c09092018051604080516020810190915290815260a01b9290921790915250565b60208101602082510282015b808210156111355781518151835281526020909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016110f8565b505050565b5f5b818310156105045782515f90600190821a1b6f07fffffe8000000000000000000000008116156113b757610100860151600116156111f65761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f5520a51700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6f07fffffe0000000000000000000000008116156112c95761122985856f07fffffe0000000003ff200000000000612546565b90955091505f6112398784612615565b50905080156112c35761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f53e6feba00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b506112ea565b6112e760018601856f07fffffe0000000003ff20000000000061251d565b94505b856040015160ff1660ff148061130757508560a0015160ff1660ff145b1561138d5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f3820634100000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b604086018051600190810190915260a0870180519091019052610100860180516009179052611536565b640100002600811615611409576113d7600186018564010000260061251d565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611536565b670400000000000000811615611455575050610100840180516008177ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe16905260019290920191610504565b658000000000008116156114e55761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fedad0c5800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176111c1565b505061113c565b5f5b818310156105045782515f90600190821a1b6f07fffffe00000000000000000000000081161561175d57610100860151600116156115f95761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f4e803df600000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b8461161581866f07fffffe0000000003ff200000000000612546565b80945081975050505f8061162e89610240015186612690565b91509150811561166f57611643898989612764565b97505f6116508a836129ef565b905061165d8a8383612a15565b50610100890180516002179052611749565b6116798986612bfa565b9092509050811561169d5761168f895f83612a15565b61169889612c74565b611749565b5f6060848a03600581016116b28d8d8d612764565b9b508c6101e0015151602002602001810190505f60059050604051935060208201840160405282818501528184528394506116fa8860056116f38760200190565b0185612cda565b5050506101e08b015180516001019061172d906117278361171e8680510160200190565b90602002900390565b83612ce3565b5061173a8b60ff84612a15565b50506101008901805160021790525b505050610100860180516001179052611af5565b6101008601516002161561187f576501000000000081165f036117fb5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f23b5c6ea00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b606086810180515f1a6003019190829053603b821115611847576040517f6232f2d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050610100860180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc169052600190940193611af5565b6502000000000081161561195b576060868101515f90811a91908290036119215761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f7f9db54200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b808801600383039250828153826004820101515f1a8360028301015160f01c600101535061194e88612c74565b5050600190940193611af5565b6401000026008116156119ad5761197b600186018564010000260061251d565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611af5565b6b0800000003ff2004000000008116156119e8576119cc868686612cef565b94506119d786612c74565b610100860180516001179052611af5565b65100000000000811615611a0d57611a008686612e19565b5050600190920191610504565b670800000000000000811615611a4557611a278686612e19565b611a3086613271565b50506004610100850152600190920191610504565b65800000000000811615611aa45761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176114b0565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176115c4565b505061153f565b60e08101518151516060919060f082901c9060208114611b48576040517f858f2dcf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051935060208401601083045f8183535060016008850483018101928391015f80805b88811015611ba55789811c61ffff81165163ffff0000601092831b16811760e01b8786015284019360f08390031b929092179101611b6c565b50825117909152878203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08181018952908801601f01166040525f5b82811015611c25576002810288016003015161ffff90811683018051602060f082901c019260e09190911c1690611c1a838284612cda565b505050600101611be2565b50505050505050919050565b6060805f611c3e8461359f565b90505f5b81811015611c81575f611c5586836135b9565b60040190505f611c6587846135e8565b60040282019050611c778883836135ff565b5050600101611c42565b5083611c8c866138bf565b92509250505b9250929050565b5f80808080611ca9888888613934565b985090925090508181036040811115611d3d5761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fff2f594900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b805f03611dc55761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fc75cd50900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60028106600103611e515761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fd76d9b5700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6001820397505f5b838910611fd45788515f90811a906001821b906703ff000000000000821615611ea557507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd08201611f9e565b6c7e000000000000000000000000821615611ee357507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa98201611f9e565b687e0000000000000000821615611f1d57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc98201611f9e565b6102208d01518c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f69f1e3e600000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909b019a831b96909617955050600401611e59565b50509350909150505b935093915050565b5f805f805f80611ff58888613984565b9296509094509250905061200a898486613e23565b826120158383613ea7565b9550955050505050935093915050565b5f808080612034878787613ef9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301805184840382529199509294509092505f91612072816140b3565b9190529698969750505050505050565b6001909101905f80836120a681856fffffffffdffffffffffffffeffffd9ff61251d565b9450848181036121315761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517ff73a1aa800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b61213c878787610c09565b95508561215a81876fffffffffdfffffffffffffffffffffff61251d565b9650868681106121e65761022089015188037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fc4b1913500000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b875160015f91821a1b906b20000000000000000000000082169003612256576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176121b1565b50600190970196876120158a868686866140df565b60605f825160020267ffffffffffffffff81111561228b5761228b614d4d565b6040519080825280601f01601f1916602001820160405280156122b5576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156122ef578051835186169085161781526020909201916002016122cd565b50939695505050505050565b5f8151600103612386575060208101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b60e082901d5f61233e8383836142a3565b905061ffff81111561237c576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250610239915050565b81515f0361239557505f919050565b6040517f1ac6690800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f815160020361249f57602082015160408301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d5f61240e8383836142a3565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b935060e085901d925090505f6124478484836142a3565b905060ff821180612458575060ff81115b1561248f576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60081b1794506102399350505050565b600282511015612395576040517ff16066b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81515f14612516576040517f9f16b02000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505f919050565b5f5b5f82600186515f1a1b1611838510161561253e5760018401935061251f565b509192915050565b5f80806001818787036020811161255d5780612560565b60205b915050875192505b8519600184841a1b1615818310161561258657600182019150612568565b9681019660208290036008810293841c90931b9261260857604080516020810185905201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fe47fe8b700000000000000000000000000000000000000000000000000000000825261061191600401614f8e565b5095969095509350505050565b5f806126218484612bfa565b909250905081611c925750610120830180515f93845260209384902060408051928352948201855293909401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909316601084901b62ff00001617909317909252909160ff90911660010190565b600182810180515f928392600560ff93909316602102870192830192909101835b818310156127555760018301516021909301805190935f90819060ff1681806126da838e6142ff565b915091508186165f036126fc575f809b509b5050505050505050505050611c92565b5f8761270c60018503891661432a565b016004028b015195505062ffffff90811693508416830391506127409050575060019750601c1a9550611c92945050505050565b6127498361432a565b840193505050506126b1565b505f9788975095505050505050565b81516101e08401515f80825291600190831a1b907ffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000008201610e71576127a885615052565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe169052805190955060015f91821a1b9250805b8587101561298d57865160015f9190911a1b93506401000026008416156128165761280f888888610c09565b96506127e3565b67400000000000000084161561283a5761282f87615052565b96506001905061298d565b6001886101000151165f0361290b57600482036128d25761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f8c9fdbb300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5f6128de898989614402565b60208581028701018190526101008b0180516001179052909850905061290383615052565b9250506127e3565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f722cd24a00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b806129e35761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612958565b50905250919392505050565b6101c08201516002828102820101516101e08401515f9261ffff90921691906104a39083565b612a1e8361442a565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb1660081790526020808401515f90811a8501602101805190911a60ff811492919060018101825350508115612aa7576040517f8092d1ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050825180516060808601515f90811a87016061018051939461ffff8616949093921a60ff81149291600886048503601c0191600181018253505f60038201537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe30180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690911790528115612b6a576040517f3abd0c5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050602090920183821b176018820185901b178083529160e0829003612bf25760408051601083901b6020908117601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016918252810190915281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000168117825286525b505050505050565b6101208201516101408301515f8381526020808220919384939290911c91600160ff84161b80821615612c5f5761ffff83165b8015612c5d578360201c8503612c50576001965061ffff8460101c169550612c5d565b51925061ffff8316612c2d565b505b17610140909601959095525090939092509050565b6060818101515f90811a919082900361113557602083810180515f1a600101919082815350603e8210612cd3576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b8083835e505050565b6020810283835e505050565b5f8080612cfd868686610e7b565b9096509250905080612d8b5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fb0e4e5b300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5f80612d96846144b6565b6101808901511615612dd75761016088015160101c5b8015801590612db9575082155b15612dd557602081015190519085149250600190910190612dac565b505b61016088015161ffff16612dfd600184612df15782612df5565b8383035b8b9190612a15565b5081612e0d57612e0d88856144cd565b50949695505050505050565b6060828101515f1a908115612ea95761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f6fb11cdc00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5050612eb48261442a565b61010082018051600416600890811790915260a0830151602084015160ff8083169360f89290921c9290911c1681035f819003612fde576004856101000151165f03612f7b5761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fab1d3ea700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b90820190603e8210612fb9576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60f882901b6020860152610200850151612fd3908461451f565b6102008601526130f9565b60018111156130f957808310156130705761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f78ef278200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b808311156130f95761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f43168e6800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b8082036001016020601083028101905b8181101561325d5760a08801516020848a0181015191831c61ffff16915f1a9060015b82811161324b5760208406601c0361314557925160f01c925b83516102008d015160019190911a9061315e90826145a3565b6102008e01525f82851480156131745750896001145b61317f576001613181565b8b5b6102008f015190915061319490826145e9565b6102008f0152600f8111806131a95750600f82115b1561322f576102208e01518d037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f7ea1869f00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b818160041b17600187015350506004939093019260010161312c565b50506001909401935050601001613109565b5050505060081b60a0909301929092525050565b60e081015160208083015160f083811c925f9290921a60010191908390036132c5576040517fa806284100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610200850151855180515f928392909160219060101c61ffff165b80156132f757805190925060101c61ffff166132e0565b506040518a82018051919650601c8401939160049160248901915f90811a805b8d8310156133dc5760048202860195506004878a03045b8082111561334c57965161ffff16601c81019950969003600761332e565b506004810298899003805186529894909401938103865b60078211156133a8575160101c61ffff1680518652601c909501947ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff990910190613363565b81156133c3575160101c61ffff168051865260048202909501945b50505060019182018051909291909101905f1a80613317565b50505082895250600488810180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9290940491909101601881901b8817939093179052601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660405260ff1094505083156134a8576040517fe972437e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134b56001808a1b615089565b891685891b60f06134c78b6010615012565b901b171760e08b01526101008a0180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7169052604080516020601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681815280820183525f80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001682178152908d52908c01819052908b0181905260608b0181905260808b0181905260a08b018190526101208b018190526101408b018190526102008b015250505050505050505050565b5f81515f036135af57505f919050565b50602001515f1a90565b5f806135c48461359f565b60020260010190505f6135d7858561465c565b949091019093016020019392505050565b5f806135f484846135b9565b515f1a949350505050565b808210156111355781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016138395760c08401515b80156138375760a081901c5161016086015161ffff60e085901c1660208101805160089390931b62ffff0016600187901a1760e81b7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909316929092179091526040517f570c7a630000000000000000000000000000000000000000000000000000000081529192915f908190819073ffffffffffffffffffffffffffffffffffffffff86169063570c7a63906136f2908790600401614f8e565b5f60405180830381865afa15801561370c573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526137519190810190615128565b925092509250821561382d57815160041461379a57816040517fbe2d187d0000000000000000000000000000000000000000000000000000000081526004016106119190614f8e565b60208201517fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff88161789525f5b81518110156138225761381a828281518110613803576138036151d5565b60200260200101518c6144cd90919063ffffffff16565b6001016137e5565b505050505050613837565b505050505061363a565b505b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016138b357606061ffff8260e01c1690505f6003820152600581019050806040517faedfba2f0000000000000000000000000000000000000000000000000000000081526004016106119190614f8e565b506004820191506135ff565b6101608101516040805161ffff8316808252602080820283019081019093529092909160109190911c90835b8082111561392b5760208301518252915161ffff16917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101906138eb565b50505050919050565b5f808080613943866002615012565b9050806c7e0000007e03ff0000000000005b86821081600184515f1a1b161515161561397457600182019150613955565b5090979096508695509350505050565b5f82818061399983866520000000000061251d565b925085831415836139b381886703ff00000000000061251d565b94508085036139ed57507f34bd20690000000000000000000000000000000000000000000000000000000094505f9250829150613e1a9050565b5f806139f98a886146b2565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613a37575095505f9350839250613e1a915050565b86519095506540000000000060015f9290921a9190911b161515888710169150508015613cc657506001909301925f84613a7a81896703ff00000000000061251d565b9550808603613ab557507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f9350839250613e1a915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b660100000000000016151516600103613b24577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613ab7565b818114613b7b575f80613b3784846146b2565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613b77575097505f9550859450613e1a9350505050565b9350505b5f831215613bb657507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f9450849350613e1a92505050565b8315613bc257825f0392505b80820394505f851315613c0257507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f9450849350613e1a92505050565b855f03613c1157829550613cc3565b5f8590036043811115613c5257507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f9550859450613e1a9350505050565b600a0a8681025f88838381613c6957613c69615025565b0514159050601b82900b8214158180613c7f5750805b15613cbb57507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f9850889750613e1a9650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b161515878610168015613e0b5760019095019485613d06818a6520000000000061251d565b965086613d1c818b6703ff00000000000061251d565b9750808803613d5957507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f9550859450613e1a9350505050565b505f80613d66838a6146b2565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613da6575097505f9550859450613e1a9350505050565b9250508482015f83138015613dba57508581125b80613dce57505f83128015613dce57508581135b15613e0757507fd556b1110000000000000000000000000000000000000000000000000000000097505f9550859450613e1a9350505050565b9450505b845f03613e16575f93505b5050505b92959194509250565b7fffffffff00000000000000000000000000000000000000000000000000000000811615611135576102208301515f9083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000179050815f528060045260245ffd5b5f805f613eb485856147dc565b9150915080610731576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610611565b5f80806001850181806f7ffffffffffffffffffffffb0000000081807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b8b0301602080821015613f475750805b875193505b84600185851a1b1615158184101615613f6a57600183019250613f4c565b505080602003613ff5576102208c01518b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f30515bda00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b85810180519095505f1a6001811b6404000000001615806140155750858b145b1561409b576102208d015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f04022fbf00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b50949b939a505060018a019850919650505050505050565b5f80601f90505f60e09050818451168082175f528060208601600183016020035e50505f519392505050565b5f60608186860361ffff811115614125576040517fb6da789c00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b604080516041888803848101838101929092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169093526002828101859052018152935060228401925061417b898484612cda565b6141888783850183612cda565b50505060c08701515b80156142525760a081901c516040517fc6c0cbb60000000000000000000000000000000000000000000000000000000081529091905f90819073ffffffffffffffffffffffffffffffffffffffff84169063c6c0cbb6906141f6908890600401614f8e565b6040805180830381865afa158015614210573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142349190615202565b91509150811561424a5794506104a39350505050565b505050614191565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612d56565b5f805f6142b18686866148e2565b91509150806142f6576040517f05e476780000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610611565b50949350505050565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116611c92575060019250929050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361435b5750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f805f614412888888610e7b565b9250925092508215614252579093509150611fdd9050565b8051602080830180515f90811a8086016021015160a0939190831a61447c5785518488018051600861ffff909316929092046020038801601e83901a840360010160100290811b909217905260f01092505b50508015612cd3576040517f5b1a42d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6144c36101008361522c565b6001901b92915050565b6101608201805160408051808201909152601091821c808252602082018590528351600161ffff909116019282901b9290921790925261450c836144b6565b6101809094018051909417909352505050565b5f61452a83836145e9565b925060ff600884901c8116830190811115614571576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff841660089190911b17905092915050565b5f60ff8316828110156145e2576040517f23b49a2a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050900390565b5f60ff808416830190600885901c811690601086901c90831115614639576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808311156146445750815b601081901b600883901b841717935050505092915050565b5f6146668361359f565b82106146a25781836040517ffcfaeff1000000000000000000000000000000000000000000000000000000008152600401610611929190615264565b50600202016003015161ffff1690565b81515f90819065200000000000600191831a9190911b161515838510168085019082806146df8488614ae9565b90925090507fffffffff0000000000000000000000000000000000000000000000000000000082161561471a575093505f9250611c92915050565b825f0361477d577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161474e575f614770565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95509350611c9292505050565b7f800000000000000000000000000000000000000000000000000000000000000081116147aa575f6147cc565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f601b83900b8314838382614840577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561482057620186a0860595506005850194505b8586601b0b1461483b57600a86059550846001019450614820565b614856565b855f0361485657505f925060019150611c929050565b848560030b146148b2575f85121561487657505f9250829150611c929050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610611565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f851215614928576040517f4a7d166b0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610611565b845f0361493a57505f90506001611fdd565b8460ff8416850185811215614985576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610611565b5f805f8312156149ef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb38312156149c6575f809550955050505050611fdd565b825f03600a0a91508184816149dd576149dd615025565b0495505084029091149150611fdd9050565b5f831315614ad957604d831315614a45576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610611565b82600a0a9150817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81614a7a57614a7a615025565b04841115614ac7576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610611565b5091909102925060019150611fdd9050565b8360019550955050505050611fdd565b5f80828410614b1c57507f34bd20690000000000000000000000000000000000000000000000000000000090505f611c92565b835f03614b55576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b878210158015614b8d5750604d83105b15614bd057815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a8590030201614b7d565b878210614cf65781515f1a8490036001811115614c1857507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611c929350505050565b600a84900a8102828101831115614c5b57507f0fdc26350000000000000000000000000000000000000000000000000000000096505f9550611c92945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b878210614cf65781515f1a60308114614ccb57507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611c929350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190614c87565b5f9890975095505050505050565b614d0c61527c565b565b5f60208284031215614d1e575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610507575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614dc157614dc1614d4d565b604052919050565b5f67ffffffffffffffff821115614de257614de2614d4d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f60208284031215614e1e575f80fd5b813567ffffffffffffffff811115614e34575f80fd5b8201601f81018413614e44575f80fd5b8035614e57614e5282614dc9565b614d7a565b818152856020838501011115614e6b575f80fd5b816020840160208301375f91810160200191909152949350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b80831015614ee257835173ffffffffffffffffffffffffffffffffffffffff168252928401926001929092019190840190614eac565b509695505050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b604081525f614f4b6040830185614eed565b8281036020848101919091528451808352858201928201905f5b81811015614f8157845183529383019391830191600101614f65565b5090979650505050505050565b602081525f6105076020830184614eed565b80516020808301519190811015614fdf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561018057610180614fe5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361508257615082614fe5565b5060010190565b8181038181111561018057610180614fe5565b80518015158114610239575f80fd5b5f82601f8301126150ba575f80fd5b8151602067ffffffffffffffff8211156150d6576150d6614d4d565b8160051b6150e5828201614d7a565b92835284810182019282810190878511156150fe575f80fd5b83870192505b8483101561511d57825182529183019190830190615104565b979650505050505050565b5f805f6060848603121561513a575f80fd5b6151438461509c565b9250602084015167ffffffffffffffff8082111561515f575f80fd5b818601915086601f830112615172575f80fd5b8151615180614e5282614dc9565b818152886020838601011115615194575f80fd5b8160208501602083015e5f60208383010152809550505060408601519150808211156151be575f80fd5b506151cb868287016150ab565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215615213575f80fd5b61521c8361509c565b9150602083015190509250929050565b5f8261525f577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b828152604060208201525f610c456040830184614eed565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0288400100420b0280046b0641220186adb8a044003012020f2a880521281ac8811a000000000000000000080000000000100000000000000002000000000000000000290ea98a3a10f9c53927bda61c6395ad0e9fb4a8075dbeaf2d313e9e09b06d681dfe49062ce21ac13e83a6cc2ad2d2123422c3e0052f369e1f27267220a0a68d2f357696465d217b131120880f24f4a8242f1af53f41f7290afa3e8638acf3d13397e9fd00443a453b406bb547b9059d25a3cd1e11d0c3260b15eb4d16fc94274427bc412baf2cc2321b8f630dca9efe403ce35f1400684845c291e3425d68b13d5f9a151eb98c15239cd9c10c1f698235c8d3843c08d579273459d41a2c9ff617a5b2cd15c0031810f621af127ba34c26bb6c4137b2ad3d1b73563d0210215f36aa563921098e690457fb180376e752066a470128f11de101fcc60522de7ddd183d3d6d4196c37031cba2872e7b3af5304eee7219a8093543082b5f0801f5a522fb22fb22fb23c724db24db23c723c724db22fb22fb22fb24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db" - } -} diff --git a/crates/test_fixtures/abi/RainlangStore.json b/crates/test_fixtures/abi/RainlangStore.json deleted file mode 100644 index 81ea78554..000000000 --- a/crates/test_fixtures/abi/RainlangStore.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "get", - "inputs": [ - { - "name": "namespace", - "type": "uint256", - "internalType": "FullyQualifiedNamespace" - }, - { - "name": "key", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "set", - "inputs": [ - { - "name": "namespace", - "type": "uint256", - "internalType": "StateNamespace" - }, - { - "name": "kvs", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { - "name": "interfaceId", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "event", - "name": "Set", - "inputs": [ - { - "name": "namespace", - "type": "uint256", - "indexed": false, - "internalType": "FullyQualifiedNamespace" - }, - { - "name": "key", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "value", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "OddSetLength", - "inputs": [ - { - "name": "length", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "bytecode": { - "object": "0x6080604052348015600e575f80fd5b5061039f8061001c5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c806301ffc9a71461004357806304b19db41461006b578063295f36d714610080575b5f80fd5b61005661005136600461025c565b6100b6565b60405190151581526020015b60405180910390f35b61007e6100793660046102a2565b61014e565b005b6100a861008e36600461031a565b5f9182526020828152604080842092845291905290205490565b604051908152602001610062565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f2deeab6300000000000000000000000000000000000000000000000000000000148061014857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61015960028261033a565b15610197576040517f01c71f3d0000000000000000000000000000000000000000000000000000000081526004810182905260240160405180910390fd5b5f8381523360205260408120905b82811015610255575f8484838181106101c0576101c0610372565b9050602002013590505f8585846001018181106101df576101df610372565b9050602002013590507f245edc72356e0d4eee6c8edc5e2f5cbe7cc71f347769147ef686bc681845da8784838360405161022c939291909283526020830191909152604082015260600190565b60405180910390a15f8481526020818152604080832094835293905291909120556002016101a5565b5050505050565b5f6020828403121561026c575f80fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461029b575f80fd5b9392505050565b5f805f604084860312156102b4575f80fd5b83359250602084013567ffffffffffffffff808211156102d2575f80fd5b818601915086601f8301126102e5575f80fd5b8135818111156102f3575f80fd5b8760208260051b8501011115610307575f80fd5b6020830194508093505050509250925092565b5f806040838503121561032b575f80fd5b50508035926020909101359150565b5f8261036d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd" - }, - "deployedBytecode": { - "object": "0x608060405234801561000f575f80fd5b506004361061003f575f3560e01c806301ffc9a71461004357806304b19db41461006b578063295f36d714610080575b5f80fd5b61005661005136600461025c565b6100b6565b60405190151581526020015b60405180910390f35b61007e6100793660046102a2565b61014e565b005b6100a861008e36600461031a565b5f9182526020828152604080842092845291905290205490565b604051908152602001610062565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f2deeab6300000000000000000000000000000000000000000000000000000000148061014857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61015960028261033a565b15610197576040517f01c71f3d0000000000000000000000000000000000000000000000000000000081526004810182905260240160405180910390fd5b5f8381523360205260408120905b82811015610255575f8484838181106101c0576101c0610372565b9050602002013590505f8585846001018181106101df576101df610372565b9050602002013590507f245edc72356e0d4eee6c8edc5e2f5cbe7cc71f347769147ef686bc681845da8784838360405161022c939291909283526020830191909152604082015260600190565b60405180910390a15f8481526020818152604080832094835293905291909120556002016101a5565b5050505050565b5f6020828403121561026c575f80fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461029b575f80fd5b9392505050565b5f805f604084860312156102b4575f80fd5b83359250602084013567ffffffffffffffff808211156102d2575f80fd5b818601915086601f8301126102e5575f80fd5b8135818111156102f3575f80fd5b8760208260051b8501011115610307575f80fd5b6020830194508093505050509250925092565b5f806040838503121561032b575f80fd5b50508035926020909101359150565b5f8261036d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd" - } -} diff --git a/crates/test_fixtures/abi/TestERC20.json b/crates/test_fixtures/abi/TestERC20.json deleted file mode 100644 index 56cf56d7d..000000000 --- a/crates/test_fixtures/abi/TestERC20.json +++ /dev/null @@ -1,349 +0,0 @@ -{ - "abi": [ - { - "type": "constructor", - "inputs": [ - { - "name": "name_", - "type": "string", - "internalType": "string" - }, - { - "name": "symbol_", - "type": "string", - "internalType": "string" - }, - { - "name": "decimals_", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "recipient_", - "type": "address", - "internalType": "address" - }, - { - "name": "supply_", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "allowance", - "inputs": [ - { - "name": "owner", - "type": "address", - "internalType": "address" - }, - { - "name": "spender", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "approve", - "inputs": [ - { - "name": "spender", - "type": "address", - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "balanceOf", - "inputs": [ - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "decimals", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint8", - "internalType": "uint8" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "name", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "string", - "internalType": "string" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "symbol", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "string", - "internalType": "string" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "totalSupply", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "transfer", - "inputs": [ - { - "name": "to", - "type": "address", - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferFrom", - "inputs": [ - { - "name": "from", - "type": "address", - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "Approval", - "inputs": [ - { - "name": "owner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "spender", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Transfer", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "ERC20InsufficientAllowance", - "inputs": [ - { - "name": "spender", - "type": "address", - "internalType": "address" - }, - { - "name": "allowance", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "needed", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ERC20InsufficientBalance", - "inputs": [ - { - "name": "sender", - "type": "address", - "internalType": "address" - }, - { - "name": "balance", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "needed", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ERC20InvalidApprover", - "inputs": [ - { - "name": "approver", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "ERC20InvalidReceiver", - "inputs": [ - { - "name": "receiver", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "ERC20InvalidSender", - "inputs": [ - { - "name": "sender", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "ERC20InvalidSpender", - "inputs": [ - { - "name": "spender", - "type": "address", - "internalType": "address" - } - ] - } - ], - "bytecode": { - "object": "0x608060405234801561000f575f80fd5b50604051610d4d380380610d4d83398101604081905261002e9161026e565b8484600361003c8382610391565b5060046100498282610391565b50506005805460ff191660ff861617905550610065828261006f565b5050505050610475565b6001600160a01b03821661009d5760405163ec442f0560e01b81525f60048201526024015b60405180910390fd5b6100a85f83836100ac565b5050565b6001600160a01b0383166100d6578060025f8282546100cb9190610450565b909155506101469050565b6001600160a01b0383165f90815260208190526040902054818110156101285760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610094565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b03821661016257600280548290039055610180565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516101c591815260200190565b60405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126101f5575f80fd5b81516001600160401b038082111561020f5761020f6101d2565b604051601f8301601f19908116603f01168101908282118183101715610237576102376101d2565b8160405283815286602085880101111561024f575f80fd5b8360208701602083015e5f602085830101528094505050505092915050565b5f805f805f60a08688031215610282575f80fd5b85516001600160401b0380821115610298575f80fd5b6102a489838a016101e6565b965060208801519150808211156102b9575f80fd5b506102c6888289016101e6565b945050604086015160ff811681146102dc575f80fd5b60608701519093506001600160a01b03811681146102f8575f80fd5b80925050608086015190509295509295909350565b600181811c9082168061032157607f821691505b60208210810361033f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561038c57805f5260205f20601f840160051c8101602085101561036a5750805b601f840160051c820191505b81811015610389575f8155600101610376565b50505b505050565b81516001600160401b038111156103aa576103aa6101d2565b6103be816103b8845461030d565b84610345565b602080601f8311600181146103f1575f84156103da5750858301515b5f19600386901b1c1916600185901b178555610448565b5f85815260208120601f198616915b8281101561041f57888601518255948401946001909101908401610400565b508582101561043c57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b8082018082111561046f57634e487b7160e01b5f52601160045260245ffd5b92915050565b6108cb806104825f395ff3fe608060405234801561000f575f80fd5b506004361061009f575f3560e01c8063313ce5671161007257806395d89b411161005857806395d89b4114610153578063a9059cbb1461015b578063dd62ed3e1461016e575f80fd5b8063313ce5671461010957806370a082311461011e575f80fd5b806306fdde03146100a3578063095ea7b3146100c157806318160ddd146100e457806323b872dd146100f6575b5f80fd5b6100ab6101b3565b6040516100b89190610715565b60405180910390f35b6100d46100cf366004610790565b610243565b60405190151581526020016100b8565b6002545b6040519081526020016100b8565b6100d46101043660046107b8565b61025c565b60055460405160ff90911681526020016100b8565b6100e861012c3660046107f1565b73ffffffffffffffffffffffffffffffffffffffff165f9081526020819052604090205490565b6100ab61027f565b6100d4610169366004610790565b61028e565b6100e861017c366004610811565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260016020908152604080832093909416825291909152205490565b6060600380546101c290610842565b80601f01602080910402602001604051908101604052809291908181526020018280546101ee90610842565b80156102395780601f1061021057610100808354040283529160200191610239565b820191905f5260205f20905b81548152906001019060200180831161021c57829003601f168201915b5050505050905090565b5f3361025081858561029b565b60019150505b92915050565b5f336102698582856102ad565b610274858585610380565b506001949350505050565b6060600480546101c290610842565b5f33610250818585610380565b6102a88383836001610429565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81101561037a578181101561036c576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b61037a84848484035f610429565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166103cf576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610363565b73ffffffffffffffffffffffffffffffffffffffff821661041e576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610363565b6102a883838361056e565b73ffffffffffffffffffffffffffffffffffffffff8416610478576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610363565b73ffffffffffffffffffffffffffffffffffffffff83166104c7576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610363565b73ffffffffffffffffffffffffffffffffffffffff8085165f908152600160209081526040808320938716835292905220829055801561037a578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161056091815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff83166105a5578060025f82825461059a9190610893565b909155506106559050565b73ffffffffffffffffffffffffffffffffffffffff83165f908152602081905260409020548181101561062a576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610363565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661067e576002805482900390556106a9565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161070891815260200190565b60405180910390a3505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461078b575f80fd5b919050565b5f80604083850312156107a1575f80fd5b6107aa83610768565b946020939093013593505050565b5f805f606084860312156107ca575f80fd5b6107d384610768565b92506107e160208501610768565b9150604084013590509250925092565b5f60208284031215610801575f80fd5b61080a82610768565b9392505050565b5f8060408385031215610822575f80fd5b61082b83610768565b915061083960208401610768565b90509250929050565b600181811c9082168061085657607f821691505b60208210810361088d577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b80820180821115610256577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd" - }, - "deployedBytecode": { - "object": "0x608060405234801561000f575f80fd5b506004361061009f575f3560e01c8063313ce5671161007257806395d89b411161005857806395d89b4114610153578063a9059cbb1461015b578063dd62ed3e1461016e575f80fd5b8063313ce5671461010957806370a082311461011e575f80fd5b806306fdde03146100a3578063095ea7b3146100c157806318160ddd146100e457806323b872dd146100f6575b5f80fd5b6100ab6101b3565b6040516100b89190610715565b60405180910390f35b6100d46100cf366004610790565b610243565b60405190151581526020016100b8565b6002545b6040519081526020016100b8565b6100d46101043660046107b8565b61025c565b60055460405160ff90911681526020016100b8565b6100e861012c3660046107f1565b73ffffffffffffffffffffffffffffffffffffffff165f9081526020819052604090205490565b6100ab61027f565b6100d4610169366004610790565b61028e565b6100e861017c366004610811565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260016020908152604080832093909416825291909152205490565b6060600380546101c290610842565b80601f01602080910402602001604051908101604052809291908181526020018280546101ee90610842565b80156102395780601f1061021057610100808354040283529160200191610239565b820191905f5260205f20905b81548152906001019060200180831161021c57829003601f168201915b5050505050905090565b5f3361025081858561029b565b60019150505b92915050565b5f336102698582856102ad565b610274858585610380565b506001949350505050565b6060600480546101c290610842565b5f33610250818585610380565b6102a88383836001610429565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81101561037a578181101561036c576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b61037a84848484035f610429565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166103cf576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610363565b73ffffffffffffffffffffffffffffffffffffffff821661041e576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610363565b6102a883838361056e565b73ffffffffffffffffffffffffffffffffffffffff8416610478576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610363565b73ffffffffffffffffffffffffffffffffffffffff83166104c7576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610363565b73ffffffffffffffffffffffffffffffffffffffff8085165f908152600160209081526040808320938716835292905220829055801561037a578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161056091815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff83166105a5578060025f82825461059a9190610893565b909155506106559050565b73ffffffffffffffffffffffffffffffffffffffff83165f908152602081905260409020548181101561062a576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610363565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661067e576002805482900390556106a9565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161070891815260200190565b60405180910390a3505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461078b575f80fd5b919050565b5f80604083850312156107a1575f80fd5b6107aa83610768565b946020939093013593505050565b5f805f606084860312156107ca575f80fd5b6107d384610768565b92506107e160208501610768565b9150604084013590509250925092565b5f60208284031215610801575f80fd5b61080a82610768565b9392505050565b5f8060408385031215610822575f80fd5b61082b83610768565b915061083960208401610768565b90509250929050565b600181811c9082168061085657607f821691505b60208210810361088d577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b80820180821115610256577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd" - } -} diff --git a/crates/test_fixtures/src/lib.rs b/crates/test_fixtures/src/lib.rs deleted file mode 100644 index 217ba6277..000000000 --- a/crates/test_fixtures/src/lib.rs +++ /dev/null @@ -1,274 +0,0 @@ -//! Shared test fixtures for Rainlang Rust crates. - -use alloy::{ - contract::SolCallBuilder, - network::{AnyNetwork, AnyReceiptEnvelope, EthereumWallet}, - node_bindings::{Anvil, AnvilInstance}, - primitives::{Address, Bytes, U256, utils::parse_units}, - providers::{ - PendingTransactionError, Provider, ProviderBuilder, RootProvider, - ext::AnvilApi, - fillers::{FillProvider, JoinFill, WalletFiller}, - utils::JoinedRecommendedFillers, - }, - rpc::types::{Log, TransactionReceipt, TransactionRequest}, - serde::WithOtherFields, - signers::local::PrivateKeySigner, - sol, - sol_types::SolCall, - transports::{RpcError, TransportErrorKind}, -}; -use std::marker::PhantomData; - -sol!( - #![sol(all_derives = true, rpc = true)] - ERC20, "abi/TestERC20.json" -); - -sol!( - #![sol(all_derives = true, rpc = true)] - Interpreter, - "abi/RainlangInterpreter.json" -); - -sol!( - #![sol(all_derives = true, rpc = true)] - Store, - "abi/RainlangStore.json" -); - -sol!( - #![sol(all_derives = true, rpc = true)] - Parser, - "abi/RainlangParser.json" -); - -sol!( - #![sol(all_derives = true, rpc = true)] - Deployer, - "abi/RainlangExpressionDeployer.json" -); - -sol!( - #![sol(all_derives = true, rpc = true)] - RainlangContract, - "abi/Rainlang.json" -); - -/// Filler stack used by `LocalEvm` combining recommended fillers with a wallet signer. -pub type LocalEvmFillers = JoinFill>; -/// Provider type used by `LocalEvm`, combining the filler stack with a root provider. -pub type LocalEvmProvider = FillProvider, AnyNetwork>; - -/// LocalEvm is a thin wrapper around Anvil instance and alloy provider with -/// signers as well as rain contracts already deployed on it. -/// The first signer wallet is the main wallet that would sign any transactions -/// that dont specify a sender (transaction's 'to' field) -pub struct LocalEvm { - /// The Anvil instance, ie the local blockchain - pub anvil: AnvilInstance, - - /// The alloy provider instance of this local blockchain - pub provider: LocalEvmProvider, - - /// Alloy interpreter contract instance deployed on this blockchain - pub interpreter: Interpreter::InterpreterInstance, - - /// Alloy store contract instance deployed on this blockchain - pub store: Store::StoreInstance, - - /// Alloy parser contract instance deployed on this blockchain - pub parser: Parser::ParserInstance, - - /// Alloy expression deployer contract instance deployed on this blockchain - pub deployer: Deployer::DeployerInstance, - - /// Array of alloy ERC20 contract instances deployed on this blockchain - pub tokens: Vec>, - - /// Address of the deployed Rainlang instance. External tooling discovers - /// all component addresses by querying this single address. - pub rainlang: Address, - - /// All wallets of this local blockchain that can be used to perform transactions. - /// the first wallet is the blockchain's default wallet, ie transactions that dont - /// explicitly specify a sender address will use this as the sender - pub signer_wallets: Vec, -} - -impl LocalEvm { - /// Instantiates this struct with rain contracts deployed and no ERC20 tokens - pub async fn new() -> Self { - let anvil = Anvil::new().try_spawn().unwrap(); - - // set up signers from anvil accounts - let mut signer_wallets = vec![]; - let mut default_signer = - EthereumWallet::from(PrivateKeySigner::from(anvil.keys()[0].clone())); - let other_signer_wallets: Vec = anvil.keys()[1..] - .iter() - .map(|v| EthereumWallet::from(PrivateKeySigner::from(v.clone()))) - .collect(); - - for s in &other_signer_wallets { - default_signer.register_signer(s.default_signer()) - } - signer_wallets.push(default_signer); - signer_wallets.extend(other_signer_wallets); - - // Create a provider with the wallet and fillers with http endpoint of the anvil instance - let provider = ProviderBuilder::new_with_network::() - .wallet(signer_wallets[0].clone()) - .connect_http(anvil.endpoint_url()); - - // Deploy Rainlang to discover the deterministic addresses for all - // components. - let rainlang_instance = RainlangContract::deploy(provider.clone()).await.unwrap(); - let rainlang_addr = *rainlang_instance.address(); - let parser_addr = rainlang_instance.parserAddress().call().await.unwrap(); - let store_addr = rainlang_instance.storeAddress().call().await.unwrap(); - let interpreter_addr = rainlang_instance.interpreterAddress().call().await.unwrap(); - let deployer_addr = rainlang_instance - .expressionDeployerAddress() - .call() - .await - .unwrap(); - - // Deploy rain contracts, then copy their runtime code to the - // deterministic addresses that Rainlang returns. - let interpreter = Interpreter::deploy(provider.clone()).await.unwrap(); - let store = Store::deploy(provider.clone()).await.unwrap(); - let parser = Parser::deploy(provider.clone()).await.unwrap(); - let deployer = Deployer::deploy(provider.clone()).await.unwrap(); - - let parser_code = provider.get_code_at(*parser.address()).await.unwrap(); - let store_code = provider.get_code_at(*store.address()).await.unwrap(); - let interpreter_code = provider.get_code_at(*interpreter.address()).await.unwrap(); - let deployer_code = provider.get_code_at(*deployer.address()).await.unwrap(); - - provider - .anvil_set_code(parser_addr, parser_code) - .await - .unwrap(); - provider - .anvil_set_code(store_addr, store_code) - .await - .unwrap(); - provider - .anvil_set_code(interpreter_addr, interpreter_code) - .await - .unwrap(); - provider - .anvil_set_code(deployer_addr, deployer_code) - .await - .unwrap(); - - Self { - anvil, - provider, - interpreter, - store, - parser, - deployer, - tokens: vec![], - signer_wallets, - rainlang: rainlang_addr, - } - } - - /// Instantiates with number of ERC20 tokens with 18 decimals. - /// Each token after being deployed will mint 1 milion tokens to the - /// default address, which is the first signer wallet of this instance - pub async fn new_with_tokens(tokens_count: u8) -> Self { - let mut local_evm = Self::new().await; - - // deploy tokens contracts and mint 1 milion of each for the default address (first signer wallet) - for i in 1..=tokens_count { - local_evm - .deploy_new_token( - &format!("Token{}", i), - &format!("Token{}", i), - 18, - parse_units("1_000_000", 18).unwrap().into(), - local_evm.anvil.addresses()[0], - ) - .await; - } - local_evm - } - - /// Get the local rpc url of the underlying anvil instance - pub fn url(&self) -> String { - self.anvil.endpoint() - } - - /// Deploys a new ERC20 token with the given arguments - pub async fn deploy_new_token( - &mut self, - name: &str, - symbol: &str, - decimals: u8, - supply: U256, - recipient: Address, - ) -> ERC20::ERC20Instance { - let token = ERC20::deploy( - self.provider.clone(), - name.to_string(), - symbol.to_string(), - decimals, - recipient, - supply, - ) - .await - .unwrap(); - self.tokens.push(token.clone()); - token - } - - /// Sends a contract write transaction to the blockchain and returns the tx receipt - pub async fn send_contract_transaction( - &self, - contract_call: SolCallBuilder<&LocalEvmProvider, PhantomData, AnyNetwork>, - ) -> Result>>, PendingTransactionError> - { - self.provider - .send_transaction(contract_call.into_transaction_request()) - .await? - .get_receipt() - .await - } - - /// Sends (write call) a raw transaction request to the blockchain and returns the tx receipt - pub async fn send_transaction( - &self, - tx: WithOtherFields, - ) -> Result>>, PendingTransactionError> - { - self.provider - .send_transaction(tx) - .await? - .get_receipt() - .await - } - - /// Calls (readonly call) contract method and returns the decoded result - pub async fn call_contract( - &self, - contract_call: SolCallBuilder<&LocalEvmProvider, PhantomData, AnyNetwork>, - ) -> Result, RpcError> { - Ok(T::abi_decode_returns( - &self - .provider - .call(contract_call.into_transaction_request()) - .await?, - )) - } - - /// Calls (readonly call) a raw transaction and returns the result - pub async fn call( - &self, - tx: WithOtherFields, - ) -> Result> { - self.provider.call(tx).await - } -} diff --git a/flake.nix b/flake.nix index 29f0fb4dd..7fdcd114c 100644 --- a/flake.nix +++ b/flake.nix @@ -29,21 +29,10 @@ body = '' set -euxo pipefail - # Needed by deploy script. - mkdir -p deployments/latest; - - # Build metadata that is needed for deployments. + # Build the reference extern's meta, which its generated + # pointers file hashes. mkdir -p meta; forge script --silent ./script/BuildAuthoringMeta.sol; - rain meta build \ - -i <(cat ./meta/AuthoringMeta.rain.meta) \ - -m authoring-meta-v2 \ - -t cbor \ - -e deflate \ - -l none \ - -o meta/RainlangExpressionDeployer.rain.meta \ - ; - rain meta build \ -i <(cat ./meta/RainlangReferenceExternAuthoringMeta.rain.meta) \ -m authoring-meta-v2 \ @@ -54,15 +43,6 @@ ''; additionalBuildInputs = rainix.sol-build-inputs.${system} ++ [ rain.defaultPackage.${system} ]; }; - - test-wasm-build = rainix.mkTask.${system} { - name = "test-wasm-build"; - body = '' - set -euxo pipefail - - cargo build --target wasm32-unknown-unknown --exclude rainlang-cli --workspace - ''; - }; } // rainix.packages.${system}; @@ -70,7 +50,6 @@ inherit (rainix.devShells.${system}.default) shellHook; packages = [ packages.rainlang-prelude - packages.test-wasm-build ]; inputsFrom = [ rainix.devShells.${system}.default ]; }; diff --git a/foundry.toml b/foundry.toml index 6d069c2bf..1d7310bf0 100644 --- a/foundry.toml +++ b/foundry.toml @@ -1,7 +1,3 @@ -[package] -name = "rainlang" -version = "0.1.8" - [profile.default] src = 'src' out = 'out' @@ -21,6 +17,11 @@ evm_version = "cancun" # These settings should be used for snapshots optimizer = true +# NOT the org default of 100000. Every deploy address this repo pins is +# `CREATE2` over creation code, so this number is part of every address and +# codehash already live on chain. Lowering it to match the other deploy repos +# would move all five deployments and orphan every consumer pin, so it stays at +# the value the live deployments were compiled under. optimizer_runs = 1000000 ffi = true @@ -30,53 +31,34 @@ cbor_metadata = false fs_permissions = [ { access = "read-write", path = "./out/test/" }, { access = "read-write", path = "./meta" }, - { access = "read-write", path = "src/generated" }, - { access = "read-write", path = "./crates/bindings/abi" }, - { access = "read-write", path = "./crates/test_fixtures/abi" }, + # `script/Build.sol` writes `src/generated/RainlangReferenceExternPointers.sol`. + { access = "read-write", path = "./src/generated" }, { access = "read", path = "./out" }, - { access = "write", path = "./deployments/latest/RainlangParser" }, - { access = "write", path = "./deployments/latest/RainlangStore" }, - { access = "write", path = "./deployments/latest/RainlangInterpreter" }, - { access = "write", path = "./deployments/latest/RainlangExpressionDeployer" }, ] gas_limit = "18446744073709551615" [dependencies] -forge-std = "1.16.1" +forge-std = "1.16.2" "@openzeppelin-contracts" = "5.6.1" -"rain-datacontract" = "0.1.0" -"rain-deploy" = "0.1.3" -"rain-extrospection" = "0.1.1" -"rain-interpreter-interface" = "0.1.0" +"rain-datacontract" = "0.1.9" +rain-deploy = "0.1.7" +"rain-extrospection" = "0.1.14" "rain-intorastring" = "0.1.0" "rain-lib-hash" = "0.1.0" "rain-lib-memkv" = "0.1.0" "rain-lib-typecast" = "0.1.0" -"rain-math-binary" = "0.1.1" +"rain-math-binary" = "0.1.4" "rain-math-float" = "0.1.1" "rain-metadata" = "0.1.0" -"rain-sol-codegen" = "0.1.0" -"rain-solmem" = "0.1.3" +rain-sol-codegen = "0.1.36" +"rain-solmem" = "0.1.28" "rain-string" = "0.2.0" "rain-tofu-erc20-decimals" = "0.1.1" +"rainlang-interface" = "0.2.8" [soldeer] recursive_deps = false [fuzz] runs = 2048 - -[rpc_endpoints] -arbitrum = "${ARBITRUM_RPC_URL}" -base = "${BASE_RPC_URL}" -base_sepolia = "${BASE_SEPOLIA_RPC_URL}" -flare = "${FLARE_RPC_URL}" -polygon = "${POLYGON_RPC_URL}" - -[etherscan] -arbitrum = { key = "${CI_DEPLOY_ARBITRUM_ETHERSCAN_API_KEY}" } -base = { key = "${CI_DEPLOY_BASE_ETHERSCAN_API_KEY}" } -base_sepolia = { key = "${CI_DEPLOY_BASE_SEPOLIA_ETHERSCAN_API_KEY}" } -flare = { key = "${CI_DEPLOY_FLARE_ETHERSCAN_API_KEY}" } -polygon = { key = "${CI_DEPLOY_POLYGON_ETHERSCAN_API_KEY}" } diff --git a/meta/AuthoringMeta.rain.meta b/meta/AuthoringMeta.rain.meta deleted file mode 100644 index d7cb93f8d..000000000 Binary files a/meta/AuthoringMeta.rain.meta and /dev/null differ diff --git a/meta/RainlangExpressionDeployer.rain.meta b/meta/RainlangExpressionDeployer.rain.meta deleted file mode 100644 index 59854716b..000000000 Binary files a/meta/RainlangExpressionDeployer.rain.meta and /dev/null differ diff --git a/remappings.txt b/remappings.txt index 9dd4984c0..ce18f7698 100644 --- a/remappings.txt +++ b/remappings.txt @@ -1,19 +1,17 @@ @openzeppelin-contracts-5.6.1/=dependencies/@openzeppelin-contracts-5.6.1/ -forge-std-1.16.1/=dependencies/forge-std-1.16.1/ -rain-datacontract-0.1.0/=dependencies/rain-datacontract-0.1.0/ -rain-deploy-0.1.2/=dependencies/rain-deploy-0.1.2/ -rain-deploy-0.1.3/=dependencies/rain-deploy-0.1.3/ -rain-extrospection-0.1.0/=dependencies/rain-extrospection-0.1.0/ -rain-extrospection-0.1.1/=dependencies/rain-extrospection-0.1.1/ -rain-interpreter-interface-0.1.0/=dependencies/rain-interpreter-interface-0.1.0/ +forge-std-1.16.2/=dependencies/forge-std-1.16.2/ +rain-datacontract-0.1.9/=dependencies/rain-datacontract-0.1.9/ +rain-deploy-0.1.7/=dependencies/rain-deploy-0.1.7/ +rain-extrospection-0.1.14/=dependencies/rain-extrospection-0.1.14/ rain-intorastring-0.1.0/=dependencies/rain-intorastring-0.1.0/ rain-lib-hash-0.1.0/=dependencies/rain-lib-hash-0.1.0/ rain-lib-memkv-0.1.0/=dependencies/rain-lib-memkv-0.1.0/ rain-lib-typecast-0.1.0/=dependencies/rain-lib-typecast-0.1.0/ -rain-math-binary-0.1.1/=dependencies/rain-math-binary-0.1.1/ +rain-math-binary-0.1.4/=dependencies/rain-math-binary-0.1.4/ rain-math-float-0.1.1/=dependencies/rain-math-float-0.1.1/ rain-metadata-0.1.0/=dependencies/rain-metadata-0.1.0/ -rain-sol-codegen-0.1.0/=dependencies/rain-sol-codegen-0.1.0/ -rain-solmem-0.1.3/=dependencies/rain-solmem-0.1.3/ +rain-sol-codegen-0.1.36/=dependencies/rain-sol-codegen-0.1.36/ +rain-solmem-0.1.28/=dependencies/rain-solmem-0.1.28/ rain-string-0.2.0/=dependencies/rain-string-0.2.0/ rain-tofu-erc20-decimals-0.1.1/=dependencies/rain-tofu-erc20-decimals-0.1.1/ +rainlang-interface-0.2.8/=dependencies/rainlang-interface-0.2.8/ diff --git a/script/Build.sol b/script/Build.sol index bb9fb033d..37b4bb262 100644 --- a/script/Build.sol +++ b/script/Build.sol @@ -2,233 +2,45 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Script} from "forge-std-1.16.1/src/Script.sol"; -import {RainlangInterpreter} from "../src/concrete/RainlangInterpreter.sol"; -import {RainlangStore} from "../src/concrete/RainlangStore.sol"; -import {RainlangParser, PARSE_META_BUILD_DEPTH} from "../src/concrete/RainlangParser.sol"; -import {RainlangExpressionDeployer} from "../src/concrete/RainlangExpressionDeployer.sol"; -import {Rainlang} from "../src/concrete/Rainlang.sol"; +import {Script} from "forge-std-1.16.2/src/Script.sol"; +import {LibCodeGen} from "rain-sol-codegen-0.1.36/src/lib/LibCodeGen.sol"; +import {LibFs} from "rain-sol-codegen-0.1.36/src/lib/LibFs.sol"; +import {LibGenParseMeta} from "rainlang-interface-0.2.8/src/lib/codegen/LibGenParseMeta.sol"; import { RainlangReferenceExtern, LibRainlangReferenceExtern, EXTERN_PARSE_META_BUILD_DEPTH } from "../src/concrete/extern/RainlangReferenceExtern.sol"; -import {LibAllStandardOps} from "../src/lib/op/LibAllStandardOps.sol"; -import {LibCodeGen} from "rain-sol-codegen-0.1.0/src/lib/LibCodeGen.sol"; -import {LibGenParseMeta} from "rain-interpreter-interface-0.1.0/src/lib/codegen/LibGenParseMeta.sol"; -import {LibFs} from "rain-sol-codegen-0.1.0/src/lib/LibFs.sol"; -import {LibRainDeploy} from "rain-deploy-0.1.3/src/lib/LibRainDeploy.sol"; /// @title Build -/// @notice Forge script that generates Solidity source files containing -/// precomputed constant values (bytecode hashes, function pointer tables, -/// parse meta, deterministic deploy addresses) for each concrete contract. -/// Run via `forge script` during the build step. Each `build*` function -/// deploys the contract via the Zoltu factory in a local EVM, extracts its -/// runtime pointers, and writes a `.pointers.sol` file into `src/generated/`. +/// @notice Generates `src/generated/RainlangReferenceExternPointers.sol`, the +/// only generated file in the library: the reference extern's described-by +/// meta hash, parse meta, sub-parser word parsers, operand handlers, literal +/// parsers, integrity pointers and opcode pointers, read back off a fresh +/// instance. The deployed contracts' tables and deploy records are generated +/// in `rainlang.deploy`. contract Build is Script { - /// @notice Generates a Solidity address constant declaration string. - /// @param addr The address value. - /// @return A string containing the Solidity code for the address constant. - function addressConstantString(address addr) internal pure returns (string memory) { - return string.concat( - "\n", - "/// @dev The deterministic deploy address of the contract when deployed via\n", - "/// the Zoltu factory.\n", - "address constant DEPLOYED_ADDRESS = address(", - vm.toString(addr), - ");\n" - ); - } - - /// Builds the RainlangInterpreter opcode function pointer table. - function buildRainlangInterpreterPointers() internal { - address deployed = LibRainDeploy.deployZoltu(type(RainlangInterpreter).creationCode); - RainlangInterpreter interpreter = RainlangInterpreter(deployed); - - LibFs.buildFileForContract( - vm, - deployed, - "RainlangInterpreter", - string.concat( - addressConstantString(deployed), - LibCodeGen.bytesConstantString( - vm, - "/// @dev The creation bytecode of the contract.", - "CREATION_CODE", - type(RainlangInterpreter).creationCode - ), - LibCodeGen.bytesConstantString( - vm, "/// @dev The runtime bytecode of the contract.", "RUNTIME_CODE", deployed.code - ), - LibCodeGen.opcodeFunctionPointersConstantString(vm, interpreter) - ) - ); - } - - /// Builds the RainlangStore pointer file. - function buildRainlangStorePointers() internal { - address deployed = LibRainDeploy.deployZoltu(type(RainlangStore).creationCode); - - LibFs.buildFileForContract( - vm, - deployed, - "RainlangStore", - string.concat( - addressConstantString(deployed), - LibCodeGen.bytesConstantString( - vm, - "/// @dev The creation bytecode of the contract.", - "CREATION_CODE", - type(RainlangStore).creationCode - ), - LibCodeGen.bytesConstantString( - vm, "/// @dev The runtime bytecode of the contract.", "RUNTIME_CODE", deployed.code - ) - ) - ); - } - - /// Builds the RainlangParser pointer file including the parse meta - /// (generated from `authoringMetaV2`), operand handler pointers, and - /// literal parser pointers. - function buildRainlangParserPointers() internal { - address deployed = LibRainDeploy.deployZoltu(type(RainlangParser).creationCode); - RainlangParser parser = RainlangParser(deployed); - - LibFs.buildFileForContract( - vm, - deployed, - "RainlangParser", - string.concat( - string.concat( - addressConstantString(deployed), - LibCodeGen.bytesConstantString( - vm, - "/// @dev The creation bytecode of the contract.", - "CREATION_CODE", - type(RainlangParser).creationCode - ), - LibCodeGen.bytesConstantString( - vm, "/// @dev The runtime bytecode of the contract.", "RUNTIME_CODE", deployed.code - ) - ), - string.concat( - LibGenParseMeta.parseMetaConstantString( - vm, LibAllStandardOps.authoringMetaV2(), PARSE_META_BUILD_DEPTH - ), - LibCodeGen.operandHandlerFunctionPointersConstantString(vm, parser), - LibCodeGen.literalParserFunctionPointersConstantString(vm, parser) - ) - ) - ); - } - - /// Builds the RainlangExpressionDeployer pointer file including - /// the described-by meta hash and integrity function pointers. - function buildRainlangExpressionDeployerPointers() internal { - address deployed = LibRainDeploy.deployZoltu(type(RainlangExpressionDeployer).creationCode); - RainlangExpressionDeployer deployer = RainlangExpressionDeployer(deployed); - - string memory name = "RainlangExpressionDeployer"; - - LibFs.buildFileForContract( - vm, - deployed, - name, - string.concat( - string.concat( - addressConstantString(deployed), - LibCodeGen.bytesConstantString( - vm, - "/// @dev The creation bytecode of the contract.", - "CREATION_CODE", - type(RainlangExpressionDeployer).creationCode - ), - LibCodeGen.bytesConstantString( - vm, "/// @dev The runtime bytecode of the contract.", "RUNTIME_CODE", deployed.code - ) - ), - string.concat( - LibCodeGen.describedByMetaHashConstantString(vm, name), - LibCodeGen.integrityFunctionPointersConstantString(vm, deployer) - ) - ) - ); - } - - /// Builds the RainlangReferenceExtern pointer file including - /// described-by meta hash, parse meta, sub-parser word parsers, operand - /// handlers, literal parsers, integrity pointers, and opcode pointers. - function buildRainlangReferenceExternPointers() internal { - address deployed = LibRainDeploy.deployZoltu(type(RainlangReferenceExtern).creationCode); - RainlangReferenceExtern extern = RainlangReferenceExtern(deployed); - - string memory name = "RainlangReferenceExtern"; - + function run() external { + RainlangReferenceExtern extern = new RainlangReferenceExtern(); LibFs.buildFileForContract( vm, - deployed, - name, + address(extern), + "RainlangReferenceExternPointers", string.concat( string.concat( - addressConstantString(deployed), - LibCodeGen.bytesConstantString( - vm, - "/// @dev The creation bytecode of the contract.", - "CREATION_CODE", - type(RainlangReferenceExtern).creationCode - ), - LibCodeGen.bytesConstantString( - vm, "/// @dev The runtime bytecode of the contract.", "RUNTIME_CODE", deployed.code - ), - LibCodeGen.describedByMetaHashConstantString(vm, name) - ), - string.concat( + LibCodeGen.describedByMetaHashConstantString(vm, "RainlangReferenceExtern"), LibGenParseMeta.parseMetaConstantString( vm, LibRainlangReferenceExtern.authoringMetaV2(), EXTERN_PARSE_META_BUILD_DEPTH ), - LibCodeGen.subParserWordParsersConstantString(vm, extern), - LibCodeGen.operandHandlerFunctionPointersConstantString(vm, extern), - LibCodeGen.literalParserFunctionPointersConstantString(vm, extern) + LibCodeGen.subParserWordParsersConstantString(vm, extern) ), string.concat( + LibCodeGen.operandHandlerFunctionPointersConstantString(vm, extern), + LibCodeGen.literalParserFunctionPointersConstantString(vm, extern), LibCodeGen.integrityFunctionPointersConstantString(vm, extern), LibCodeGen.opcodeFunctionPointersConstantString(vm, extern) ) ) ); } - - /// Builds the Rainlang pointer file. - function buildRainlangPointers() internal { - address deployed = LibRainDeploy.deployZoltu(type(Rainlang).creationCode); - - LibFs.buildFileForContract( - vm, - deployed, - "Rainlang", - string.concat( - addressConstantString(deployed), - LibCodeGen.bytesConstantString( - vm, "/// @dev The creation bytecode of the contract.", "CREATION_CODE", type(Rainlang).creationCode - ), - LibCodeGen.bytesConstantString( - vm, "/// @dev The runtime bytecode of the contract.", "RUNTIME_CODE", deployed.code - ) - ) - ); - } - - /// Entry point. Etches the Zoltu factory and builds all pointer files. - function run() external { - LibRainDeploy.etchZoltuFactory(vm); - - buildRainlangInterpreterPointers(); - buildRainlangStorePointers(); - buildRainlangParserPointers(); - buildRainlangExpressionDeployerPointers(); - buildRainlangReferenceExternPointers(); - buildRainlangPointers(); - } } diff --git a/script/BuildAuthoringMeta.sol b/script/BuildAuthoringMeta.sol index fcd47cd3e..f9c077335 100644 --- a/script/BuildAuthoringMeta.sol +++ b/script/BuildAuthoringMeta.sol @@ -2,8 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Script} from "forge-std-1.16.1/src/Script.sol"; -import {LibAllStandardOps} from "../src/lib/op/LibAllStandardOps.sol"; +import {Script} from "forge-std-1.16.2/src/Script.sol"; import {LibRainlangReferenceExtern} from "../src/concrete/extern/RainlangReferenceExtern.sol"; /// @title BuildAuthoringMeta @@ -11,12 +10,10 @@ import {LibRainlangReferenceExtern} from "../src/concrete/extern/RainlangReferen /// disk for each parser. The output files are consumed by the `rainlang-prelude` /// meta build pipeline which deflates and cbor-encodes them. contract BuildAuthoringMeta is Script { - /// Writes raw ABI-encoded authoring meta bytes to disk for both the - /// standard ops and the reference extern. The output files are consumed - /// by the `rainlang-prelude` meta build pipeline to produce the final - /// deflated/cbor-encoded meta. + /// Writes the reference extern's raw ABI-encoded authoring meta bytes to + /// disk. The output file is consumed by the `rainlang-prelude` meta build + /// pipeline to produce the final deflated/cbor-encoded meta. function run() external { - vm.writeFileBinary("meta/AuthoringMeta.rain.meta", LibAllStandardOps.authoringMetaV2()); vm.writeFileBinary( "meta/RainlangReferenceExternAuthoringMeta.rain.meta", LibRainlangReferenceExtern.authoringMetaV2() ); diff --git a/script/CopyArtifacts.sol b/script/CopyArtifacts.sol deleted file mode 100644 index eaac083f4..000000000 --- a/script/CopyArtifacts.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: LicenseRef-DCL-1.0 -// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity =0.8.25; - -import {Script} from "forge-std-1.16.1/src/Script.sol"; -import {LibCopyArtifacts} from "./lib/LibCopyArtifacts.sol"; - -contract CopyArtifacts is Script { - function run() external { - string[] memory names = LibCopyArtifacts.contracts(); - for (uint256 i = 0; i < names.length; i++) { - _copyAbi(names[i]); - } - } - - function _copyAbi(string memory contractName) internal { - bytes memory artifact = LibCopyArtifacts.extractStable(vm, contractName); - string[] memory dsts = LibCopyArtifacts.committedPaths(contractName); - for (uint256 i = 0; i < dsts.length; i++) { - string memory dst = dsts[i]; - if (vm.exists(dst)) { - //forge-lint: disable-next-line(unsafe-cheatcode) - vm.removeFile(dst); - } - // Trailing newline so the written file matches the prettier-formatted - // committed artifact (prettier adds a final newline to JSON; without it - // the copy-artifacts determinism check and the prettier hook fight). - //forge-lint: disable-next-line(unsafe-cheatcode) - vm.writeFile(dst, string.concat(string(artifact), "\n")); - } - } -} diff --git a/script/Deploy.sol b/script/Deploy.sol deleted file mode 100644 index 32dd790b5..000000000 --- a/script/Deploy.sol +++ /dev/null @@ -1,136 +0,0 @@ -// SPDX-License-Identifier: LicenseRef-DCL-1.0 -// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity =0.8.25; - -import {Script, console2} from "forge-std-1.16.1/src/Script.sol"; -import {LibRainDeploy} from "rain-deploy-0.1.3/src/lib/LibRainDeploy.sol"; -import {LibInterpreterDeploy} from "../src/lib/deploy/LibInterpreterDeploy.sol"; -import {LibDecimalFloatDeploy} from "rain-math-float-0.1.1/src/lib/deploy/LibDecimalFloatDeploy.sol"; -import {UnknownDeploymentSuite} from "../src/error/ErrDeploy.sol"; -import {LibTOFUTokenDecimals} from "rain-tofu-erc20-decimals-0.1.1/src/lib/LibTOFUTokenDecimals.sol"; -import {CREATION_CODE as PARSER_CREATION_CODE} from "../src/generated/RainlangParser.pointers.sol"; -import {CREATION_CODE as STORE_CREATION_CODE} from "../src/generated/RainlangStore.pointers.sol"; -import {CREATION_CODE as INTERPRETER_CREATION_CODE} from "../src/generated/RainlangInterpreter.pointers.sol"; -import { - CREATION_CODE as EXPRESSION_DEPLOYER_CREATION_CODE -} from "../src/generated/RainlangExpressionDeployer.pointers.sol"; -import {CREATION_CODE as RAINLANG_CREATION_CODE} from "../src/generated/Rainlang.pointers.sol"; - -/// @dev Deployment suite selector for the parser. -bytes32 constant DEPLOYMENT_SUITE_PARSER = keccak256("parser"); -/// @dev Deployment suite selector for the store. -bytes32 constant DEPLOYMENT_SUITE_STORE = keccak256("store"); -/// @dev Deployment suite selector for the interpreter. -bytes32 constant DEPLOYMENT_SUITE_INTERPRETER = keccak256("interpreter"); -/// @dev Deployment suite selector for the expression deployer. -bytes32 constant DEPLOYMENT_SUITE_EXPRESSION_DEPLOYER = keccak256("expression-deployer"); -/// @dev Deployment suite selector for Rainlang. -bytes32 constant DEPLOYMENT_SUITE_RAINLANG = keccak256("rainlang"); - -/// @title Deploy -/// @notice Forge script that deploys a single interpreter component to all -/// supported networks. The `DEPLOYMENT_SUITE` env var selects which component -/// to deploy: "parser", "store", "interpreter", "expression-deployer", or -/// "rainlang". Defaults to "parser" if not set. Uses precompiled -/// creation code from the generated pointers files rather than compiling -/// contracts at deploy time. -contract Deploy is Script { - /// Storage mapping required by the `LibRainDeploy.deployAndBroadcast` API - /// to record dependency code hashes across networks. - mapping(string => mapping(address => bytes32)) internal sDepCodeHashes; - - /// Deploys the component selected by the `DEPLOYMENT_SUITE` env var. - /// Reverts if the suite is not recognised. - function run() external { - uint256 deployerPrivateKey = vm.envUint("DEPLOYMENT_KEY"); - - address[] memory deps = new address[](1); - deps[0] = LibDecimalFloatDeploy.ZOLTU_DEPLOYED_LOG_TABLES_ADDRESS; - - bytes32 suite = keccak256(bytes(vm.envOr("DEPLOYMENT_SUITE", string("parser")))); - - if (suite == DEPLOYMENT_SUITE_PARSER) { - console2.log("Deploying RainlangParser..."); - LibRainDeploy.deployAndBroadcast( - vm, - LibRainDeploy.supportedNetworks(), - deployerPrivateKey, - PARSER_CREATION_CODE, - "src/concrete/RainlangParser.sol:RainlangParser", - LibInterpreterDeploy.PARSER_DEPLOYED_ADDRESS, - LibInterpreterDeploy.PARSER_DEPLOYED_CODEHASH, - deps, - sDepCodeHashes - ); - } else if (suite == DEPLOYMENT_SUITE_STORE) { - console2.log("Deploying RainlangStore..."); - LibRainDeploy.deployAndBroadcast( - vm, - LibRainDeploy.supportedNetworks(), - deployerPrivateKey, - STORE_CREATION_CODE, - "src/concrete/RainlangStore.sol:RainlangStore", - LibInterpreterDeploy.STORE_DEPLOYED_ADDRESS, - LibInterpreterDeploy.STORE_DEPLOYED_CODEHASH, - deps, - sDepCodeHashes - ); - } else if (suite == DEPLOYMENT_SUITE_INTERPRETER) { - console2.log("Deploying RainlangInterpreter..."); - address[] memory interpreterDeps = new address[](2); - interpreterDeps[0] = LibDecimalFloatDeploy.ZOLTU_DEPLOYED_LOG_TABLES_ADDRESS; - interpreterDeps[1] = address(LibTOFUTokenDecimals.TOFU_DECIMALS_DEPLOYMENT); - LibRainDeploy.deployAndBroadcast( - vm, - LibRainDeploy.supportedNetworks(), - deployerPrivateKey, - INTERPRETER_CREATION_CODE, - "src/concrete/RainlangInterpreter.sol:RainlangInterpreter", - LibInterpreterDeploy.INTERPRETER_DEPLOYED_ADDRESS, - LibInterpreterDeploy.INTERPRETER_DEPLOYED_CODEHASH, - interpreterDeps, - sDepCodeHashes - ); - } else if (suite == DEPLOYMENT_SUITE_EXPRESSION_DEPLOYER) { - console2.log("Deploying RainlangExpressionDeployer..."); - address[] memory deployerDeps = new address[](5); - deployerDeps[0] = LibDecimalFloatDeploy.ZOLTU_DEPLOYED_LOG_TABLES_ADDRESS; - deployerDeps[1] = address(LibTOFUTokenDecimals.TOFU_DECIMALS_DEPLOYMENT); - deployerDeps[2] = LibInterpreterDeploy.PARSER_DEPLOYED_ADDRESS; - deployerDeps[3] = LibInterpreterDeploy.STORE_DEPLOYED_ADDRESS; - deployerDeps[4] = LibInterpreterDeploy.INTERPRETER_DEPLOYED_ADDRESS; - LibRainDeploy.deployAndBroadcast( - vm, - LibRainDeploy.supportedNetworks(), - deployerPrivateKey, - EXPRESSION_DEPLOYER_CREATION_CODE, - "src/concrete/RainlangExpressionDeployer.sol:RainlangExpressionDeployer", - LibInterpreterDeploy.EXPRESSION_DEPLOYER_DEPLOYED_ADDRESS, - LibInterpreterDeploy.EXPRESSION_DEPLOYER_DEPLOYED_CODEHASH, - deployerDeps, - sDepCodeHashes - ); - } else if (suite == DEPLOYMENT_SUITE_RAINLANG) { - console2.log("Deploying Rainlang..."); - address[] memory registryDeps = new address[](5); - registryDeps[0] = address(LibTOFUTokenDecimals.TOFU_DECIMALS_DEPLOYMENT); - registryDeps[1] = LibInterpreterDeploy.PARSER_DEPLOYED_ADDRESS; - registryDeps[2] = LibInterpreterDeploy.STORE_DEPLOYED_ADDRESS; - registryDeps[3] = LibInterpreterDeploy.INTERPRETER_DEPLOYED_ADDRESS; - registryDeps[4] = LibInterpreterDeploy.EXPRESSION_DEPLOYER_DEPLOYED_ADDRESS; - LibRainDeploy.deployAndBroadcast( - vm, - LibRainDeploy.supportedNetworks(), - deployerPrivateKey, - RAINLANG_CREATION_CODE, - "src/concrete/Rainlang.sol:Rainlang", - LibInterpreterDeploy.RAINLANG_DEPLOYED_ADDRESS, - LibInterpreterDeploy.RAINLANG_DEPLOYED_CODEHASH, - registryDeps, - sDepCodeHashes - ); - } else { - revert UnknownDeploymentSuite(suite); - } - } -} diff --git a/script/lib/LibCopyArtifacts.sol b/script/lib/LibCopyArtifacts.sol deleted file mode 100644 index 1fac6c392..000000000 --- a/script/lib/LibCopyArtifacts.sol +++ /dev/null @@ -1,93 +0,0 @@ -// SPDX-License-Identifier: LicenseRef-DCL-1.0 -// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity ^0.8.25; - -import {Vm} from "forge-std-1.16.1/src/Vm.sol"; - -/// @notice Shared logic between `script/CopyArtifacts.sol` (writes the -/// committed ABI). The `copy-artifacts` CI job runs that writer then -/// `git diff --exit-code`, so the committed copies are asserted fresh by -/// the absence of drift. -library LibCopyArtifacts { - /// @notice Contract artifacts that the Rust crates consume via - /// alloy::sol!. Adding a new contract here also requires the Rust - /// crate to reference it. - function contracts() internal pure returns (string[] memory) { - string[] memory names = new string[](11); - names[0] = "Rainlang"; - names[1] = "RainlangExpressionDeployer"; - names[2] = "RainlangInterpreter"; - names[3] = "RainlangParser"; - names[4] = "RainlangStore"; - names[5] = "TestERC20"; - names[6] = "IExpressionDeployerV3"; - names[7] = "IInterpreterStoreV3"; - names[8] = "IInterpreterV4"; - names[9] = "IParserPragmaV1"; - names[10] = "IParserV2"; - return names; - } - - /// @notice Path of the live forge build artifact for a contract. - function livePath(string memory contractName) internal pure returns (string memory) { - return string.concat("out/", contractName, ".sol/", contractName, ".json"); - } - - /// @notice Committed ABI copies that the Rust crates read at compile - /// time. A contract may be written to more than one location: a crate - /// that publishes to crates.io must carry its own packaged copy - /// (`cargo publish` only includes a crate's own directory), so the - /// `Rainlang` ABI consumed by both `bindings` and `test_fixtures` is - /// committed to each. The interface ABIs are read only by `bindings`; - /// the concrete contract and `TestERC20` ABIs are read only by - /// `test_fixtures`. - function committedPaths(string memory contractName) internal pure returns (string[] memory) { - bytes32 name = keccak256(bytes(contractName)); - - // Interfaces are consumed only by the `bindings` crate. - if ( - name == keccak256("IExpressionDeployerV3") || name == keccak256("IInterpreterStoreV3") - || name == keccak256("IInterpreterV4") || name == keccak256("IParserPragmaV1") - || name == keccak256("IParserV2") - ) { - return _paths(string.concat("crates/bindings/abi/", contractName, ".json")); - } - - // `Rainlang` is the discovery point consumed by both crates, so - // each carries its own packaged copy. - if (name == keccak256("Rainlang")) { - string[] memory paths = new string[](2); - paths[0] = string.concat("crates/bindings/abi/", contractName, ".json"); - paths[1] = string.concat("crates/test_fixtures/abi/", contractName, ".json"); - return paths; - } - - // The concrete contracts and `TestERC20` are consumed only by the - // `test_fixtures` crate. - return _paths(string.concat("crates/test_fixtures/abi/", contractName, ".json")); - } - - /// @notice Wraps a single path in a length-one array. - function _paths(string memory path) private pure returns (string[] memory) { - string[] memory paths = new string[](1); - paths[0] = path; - return paths; - } - - /// @notice Extracts the deterministic subset of the live forge - /// artifact via `jq` over `vm.ffi`. The full forge JSON is - /// non-deterministic across machines (solc source unit IDs in - /// `metadata.sources`, `sourceMap` and friends shift with filesystem - /// enumeration order). The kept keys — `abi`, `bytecode.object`, - /// `deployedBytecode.object` — are pure functions of the input source - /// and compiler settings. alloy::sol! reads `abi` for type - /// generation; the bytecode fields are consumed by the Rust EVM - /// setup at runtime. - function extractStable(Vm vm, string memory contractName) internal returns (bytes memory) { - string[] memory cmd = new string[](3); - cmd[0] = "jq"; - cmd[1] = "{abi, bytecode: {object: .bytecode.object}, deployedBytecode: {object: .deployedBytecode.object}}"; - cmd[2] = livePath(contractName); - return vm.ffi(cmd); - } -} diff --git a/slither.config.json b/slither.config.json index 73560ec3c..bbd3ecbbd 100644 --- a/slither.config.json +++ b/slither.config.json @@ -1,4 +1,4 @@ { - "detectors_to_exclude": "assembly-usage,solc-version,different-pragma-directives-are-used,unused-imports", + "detectors_to_exclude": "assembly-usage,solc-version,different-pragma-directives-are-used,unused-imports,unimplemented-functions", "filter_paths": "dependencies/" } diff --git a/soldeer.lock b/soldeer.lock index 79fff1265..984312e73 100644 --- a/soldeer.lock +++ b/soldeer.lock @@ -7,38 +7,31 @@ integrity = "bce03af7ada1eee21a7fff393f238bcd7cd75a022a4db55ffb6b0dbb32433d35" [[dependencies]] name = "forge-std" -version = "1.16.1" -url = "https://soldeer-revisions.s3.amazonaws.com/forge-std/1_16_1_08-05-2026_08:51:16_forge-std-1.16.zip" -checksum = "839b61832925c7152c7b6dffbfa4998d9e606211179bd8f604733124e8a7cb57" -integrity = "60e55d10150354ca4a1e2985c5456c834b92b82ef85ab0e1d92a7786cddbd219" +version = "1.16.2" +url = "https://soldeer-revisions.s3.amazonaws.com/forge-std/1_16_2_03-07-2026_07:37:45_forge-std-1.16.zip" +checksum = "405dccc9d60d753f6abc412b4adf0359f4390f65dbadbbb277a12b4946ed8969" +integrity = "5fb4325b60d7d4194bd0481e2f94398cf1d9c6561dd12a66fb2748ef4a68205f" [[dependencies]] name = "rain-datacontract" -version = "0.1.0" -url = "https://soldeer-revisions.s3.amazonaws.com/rain-datacontract/0_1_0_09-05-2026_20:00:31_rain.zip" -checksum = "81f6369a5e57da280d4598f0e909a66a432a1a8468c2f06b68dfdc2fe36745bd" -integrity = "f2e43fcbe27e7251ff981285271eec0a5ad49e1425dd02213f8a03df404f6670" +version = "0.1.9" +url = "https://soldeer-revisions.s3.amazonaws.com/rain-datacontract/0_1_9_25-08-2026_16:34:26_rain.zip" +checksum = "ea3bb9bfd9bd6fd32cc678d2dffafef7ffc62f0dcc752116170105b6649211a1" +integrity = "a76ad2f7efc0359f42bf2106cd57eca3f239e1eb08019f771b67802cebb54eb0" [[dependencies]] name = "rain-deploy" -version = "0.1.3" -url = "https://soldeer-revisions.s3.amazonaws.com/rain-deploy/0_1_3_20-05-2026_13:02:35_rain.zip" -checksum = "6e9a7a1562ee2766a1cc3a4a077b853ec628a3070b282e6e9102a252f2a6a5b5" -integrity = "10bff708d9e5d8b77655b8a8fc0c755cef8e3fc876cc3ff100425d27b08294a0" +version = "0.1.7" +url = "https://soldeer-revisions.s3.amazonaws.com/rain-deploy/0_1_7_19-08-2026_05:57:12_rain.zip" +checksum = "d0e868184ad16fc6abb704bb1dddab57ebf2beb042529690e030568f5c81a9b3" +integrity = "e51da6f2b3a0f427a0aac5d7714bed2027f5cf0f39b31f0692e9623ceeaa47f2" [[dependencies]] name = "rain-extrospection" -version = "0.1.1" -url = "https://soldeer-revisions.s3.amazonaws.com/rain-extrospection/0_1_1_20-05-2026_13:01:40_rain.zip" -checksum = "c2d1ad4b6a749a788616535635c8a19bbe61e514ecc907291ff270a67f832aed" -integrity = "aa7366cac7d9c7610350a49b8126c667d83812a974539e79ccd38a5577cd626b" - -[[dependencies]] -name = "rain-interpreter-interface" -version = "0.1.0" -url = "https://soldeer-revisions.s3.amazonaws.com/rain-interpreter-interface/0_1_0_12-05-2026_18:43:02_rain.interpreter.zip" -checksum = "887c4d5f1a87713c49f015b3fcdb295defbb495b126d15f9850c0ce72ef79639" -integrity = "c1b89f8a7ad02507ceb051b6c0f2750f6abe1ba99ffdfe1c9ac93905db90e75d" +version = "0.1.14" +url = "https://soldeer-revisions.s3.amazonaws.com/rain-extrospection/0_1_14_06-09-2026_09:00:43_rain.zip" +checksum = "a9f34937f66c48c8cd15a700ccebc56c25b6a8af32f0b8757fcfa92be8bbfb56" +integrity = "4fda4ce47b006de0619aba0591a00cece86454a5867643d99412bc57790cdce0" [[dependencies]] name = "rain-intorastring" @@ -70,10 +63,10 @@ integrity = "092781f87fd9227c4c95aafde59300c503d6a9a355beaeb5c5732fe6e36676d6" [[dependencies]] name = "rain-math-binary" -version = "0.1.1" -url = "https://soldeer-revisions.s3.amazonaws.com/rain-math-binary/0_1_1_09-05-2026_19:49:57_rain.math.zip" -checksum = "6f966e4f5f59103b62de2004005db508824622495b893a646d0e2a35511f0093" -integrity = "4cfaa11c0e48ac46824a10fec2184863d114f09c171544b721d782386708dca7" +version = "0.1.4" +url = "https://soldeer-revisions.s3.amazonaws.com/rain-math-binary/0_1_4_17-08-2026_05:22:01_rain.math.zip" +checksum = "1787eb0bc883c4922deb5e547ecaf0bd0f9a31e99c51f3b11744c3324eb592f6" +integrity = "857d22060d058ec173e88448c2d44f0cb884b2381669d0dbe1d3bebb168715ea" [[dependencies]] name = "rain-math-float" @@ -91,17 +84,17 @@ integrity = "f17f10aa50e9e2b254c689c83f41b3cabab81c95bad06424b9b3e9c92d02e577" [[dependencies]] name = "rain-sol-codegen" -version = "0.1.0" -url = "https://soldeer-revisions.s3.amazonaws.com/rain-sol-codegen/0_1_0_09-05-2026_20:30:25_rain.sol.zip" -checksum = "6b5abd394c5db86ac64214262b7a5115158f480b2fbd74442672dfe52bb67310" -integrity = "e22748ce2ba7eca3ce71e23b2271d1c0f370b989507e784b0a4850a7a9e52157" +version = "0.1.36" +url = "https://soldeer-revisions.s3.amazonaws.com/rain-sol-codegen/0_1_36_18-08-2026_09:20:33_rain.sol.zip" +checksum = "b5d101d46941a95fee441224e101004139814ae9afa2793138874bd7e93991ff" +integrity = "164e2655ac8b66bcf52c799421706d3dfaab987addaaeadd74574e70fd2eb6ed" [[dependencies]] name = "rain-solmem" -version = "0.1.3" -url = "https://soldeer-revisions.s3.amazonaws.com/rain-solmem/0_1_3_09-05-2026_19:49:33_rain.zip" -checksum = "1d405bb81f7c9e56d1717de0d60da918d2fc2fa4db083efd2abe9906378d019f" -integrity = "e879d2743f9d884f647b9dd489889a83f2cea5f76eb69409a113e1baa69d3643" +version = "0.1.28" +url = "https://soldeer-revisions.s3.amazonaws.com/rain-solmem/0_1_28_03-09-2026_07:34:16_rain.zip" +checksum = "3dafbef001edb181683a43c3c295e3f88e2ffcedd751e986562e71e29560c9f0" +integrity = "e7508cd81a998a67118a0fca314d504dc62850d6b535d29c824f696f214e4b23" [[dependencies]] name = "rain-string" @@ -116,3 +109,10 @@ version = "0.1.1" url = "https://soldeer-revisions.s3.amazonaws.com/rain-tofu-erc20-decimals/0_1_1_12-05-2026_15:44:19_rain.tofu.zip" checksum = "2a48a362ac80a85a8792492fcaf943a86a95009a8aeaced3b50554bbed1e5874" integrity = "9e1fccf893dd0d90aeb445c78f9eee3904bc50287ff1da30b954508f18412cd2" + +[[dependencies]] +name = "rainlang-interface" +version = "0.2.8" +url = "https://soldeer-revisions.s3.amazonaws.com/rainlang-interface/0_2_8_06-09-2026_08:58:04_rainlang.zip" +checksum = "aae7d5721cdd21240f5dca7b1d6a861101431ead94db6def6a134932b54e7947" +integrity = "508259e321ecc0ad9b0ff1a8b0ac1e66a8858e599ce7328e06b6a4e7d3ae8889" diff --git a/src/abstract/BaseRainlang.sol b/src/abstract/BaseRainlang.sol new file mode 100644 index 000000000..1b3b1021d --- /dev/null +++ b/src/abstract/BaseRainlang.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: LicenseRef-DCL-1.0 +// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd +pragma solidity ^0.8.25; + +import {IRainlang} from "../interface/IRainlang.sol"; +import {ERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/ERC165.sol"; + +/// @title BaseRainlang +/// @notice Rainlang contract that exposes the addresses of the four core +/// interpreter components: Deployer, Interpreter, Store, and Parser, so that +/// external tooling can discover all component addresses from a single known +/// Rainlang address. The addresses themselves are the `IRainlang` functions, +/// which a concrete binds. +abstract contract BaseRainlang is IRainlang, ERC165 { + /// @inheritdoc ERC165 + function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { + return interfaceId == type(IRainlang).interfaceId || super.supportsInterface(interfaceId); + } +} diff --git a/src/concrete/RainlangExpressionDeployer.sol b/src/abstract/BaseRainlangExpressionDeployer.sol similarity index 58% rename from src/concrete/RainlangExpressionDeployer.sol rename to src/abstract/BaseRainlangExpressionDeployer.sol index f104745db..c4ead8559 100644 --- a/src/concrete/RainlangExpressionDeployer.sol +++ b/src/abstract/BaseRainlangExpressionDeployer.sol @@ -1,29 +1,33 @@ // SPDX-License-Identifier: LicenseRef-DCL-1.0 // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity =0.8.25; +pragma solidity ^0.8.25; import {ERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/ERC165.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; -import {IParserV2} from "rain-interpreter-interface-0.1.0/src/interface/IParserV2.sol"; -import {IParserPragmaV1, PragmaV1} from "rain-interpreter-interface-0.1.0/src/interface/IParserPragmaV1.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; +import {IParserV2} from "rainlang-interface-0.2.8/src/interface/IParserV2.sol"; +import {IParserPragmaV1, PragmaV1} from "rainlang-interface-0.2.8/src/interface/IParserPragmaV1.sol"; import {IDescribedByMetaV1} from "rain-metadata-0.1.0/src/interface/IDescribedByMetaV1.sol"; import {LibIntegrityCheck} from "../lib/integrity/LibIntegrityCheck.sol"; import {LibInterpreterStateDataContract} from "../lib/state/LibInterpreterStateDataContract.sol"; import {LibAllStandardOps} from "../lib/op/LibAllStandardOps.sol"; -import { - INTEGRITY_FUNCTION_POINTERS, - DESCRIBED_BY_META_HASH -} from "../generated/RainlangExpressionDeployer.pointers.sol"; -import {IIntegrityToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IIntegrityToolingV1.sol"; -import {RainlangParser} from "./RainlangParser.sol"; -import {LibInterpreterDeploy} from "../lib/deploy/LibInterpreterDeploy.sol"; +import {IIntegrityToolingV1} from "rain-sol-codegen-0.1.36/src/interface/IIntegrityToolingV1.sol"; +import {BaseRainlangParser} from "./BaseRainlangParser.sol"; -/// @title RainlangExpressionDeployer +/// @title BaseRainlangExpressionDeployer /// @notice Coordinates parse, integrity check, and serialization for -/// deploying Rainlang expressions. -contract RainlangExpressionDeployer is IDescribedByMetaV1, IParserV2, IParserPragmaV1, IIntegrityToolingV1, ERC165 { +/// deploying Rainlang expressions. Everything except the parser it delegates +/// to, the integrity function pointer table and the described-by meta hash, +/// which a concrete binds by overriding `parser`, `integrityFunctionPointers` +/// and `describedByMetaV1`. +abstract contract BaseRainlangExpressionDeployer is + IDescribedByMetaV1, + IParserV2, + IParserPragmaV1, + IIntegrityToolingV1, + ERC165 +{ /// @inheritdoc ERC165 function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IDescribedByMetaV1).interfaceId || interfaceId == type(IParserV2).interfaceId @@ -31,10 +35,18 @@ contract RainlangExpressionDeployer is IDescribedByMetaV1, IParserV2, IParserPra || super.supportsInterface(interfaceId); } + /// @notice The parser `parse2` and `parsePragma1` delegate to. + /// @return The parser. + function parser() internal view virtual returns (BaseRainlangParser); + + /// @notice The integrity function pointers `parse2` checks bytecode + /// against. + /// @return The packed integrity function pointers. + function integrityFunctionPointers() internal view virtual returns (bytes memory); + /// @inheritdoc IParserV2 function parse2(bytes memory data) external view virtual override returns (bytes memory) { - (bytes memory bytecode, bytes32[] memory constants) = - RainlangParser(LibInterpreterDeploy.PARSER_DEPLOYED_ADDRESS).unsafeParse(data); + (bytes memory bytecode, bytes32[] memory constants) = parser().unsafeParse(data); uint256 size = LibInterpreterStateDataContract.serializeSize(bytecode, constants); bytes memory serialized; @@ -47,7 +59,7 @@ contract RainlangExpressionDeployer is IDescribedByMetaV1, IParserV2, IParserPra } LibInterpreterStateDataContract.unsafeSerialize(cursor, bytecode, constants); - bytes memory io = LibIntegrityCheck.integrityCheck2(INTEGRITY_FUNCTION_POINTERS, bytecode, constants); + bytes memory io = LibIntegrityCheck.integrityCheck2(integrityFunctionPointers(), bytecode, constants); // Nothing is done with IO in IParserV2. (io); @@ -58,18 +70,12 @@ contract RainlangExpressionDeployer is IDescribedByMetaV1, IParserV2, IParserPra /// more gas efficient to call the parser directly. /// @inheritdoc IParserPragmaV1 function parsePragma1(bytes calldata data) external view virtual override returns (PragmaV1 memory) { - // The parser at the deterministic Zoltu address is also an - // IParserPragmaV1. - return RainlangParser(LibInterpreterDeploy.PARSER_DEPLOYED_ADDRESS).parsePragma1(data); + // The parser is also an IParserPragmaV1. + return parser().parsePragma1(data); } /// @inheritdoc IIntegrityToolingV1 function buildIntegrityFunctionPointers() external view virtual override returns (bytes memory) { return LibAllStandardOps.integrityFunctionPointers(); } - - /// @inheritdoc IDescribedByMetaV1 - function describedByMetaV1() external pure virtual override returns (bytes32) { - return DESCRIBED_BY_META_HASH; - } } diff --git a/src/abstract/BaseRainlangExtern.sol b/src/abstract/BaseRainlangExtern.sol index 39299b71d..ee7d76c77 100644 --- a/src/abstract/BaseRainlangExtern.sol +++ b/src/abstract/BaseRainlangExtern.sol @@ -4,14 +4,14 @@ pragma solidity =0.8.25; import {ERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/ERC165.sol"; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import { IInterpreterExternV4, ExternDispatchV2, StackItem -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterExternV4.sol"; -import {IIntegrityToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IIntegrityToolingV1.sol"; -import {IOpcodeToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IOpcodeToolingV1.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterExternV4.sol"; +import {IIntegrityToolingV1} from "rain-sol-codegen-0.1.36/src/interface/IIntegrityToolingV1.sol"; +import {IOpcodeToolingV1} from "rain-sol-codegen-0.1.36/src/interface/IOpcodeToolingV1.sol"; import {ExternOpcodeOutOfRange, ExternPointersMismatch, ExternOpcodePointersEmpty} from "../error/ErrExtern.sol"; import {OPCODE_FUNCTION_POINTER_SHIFT} from "../lib/eval/LibEval.sol"; diff --git a/src/concrete/RainlangInterpreter.sol b/src/abstract/BaseRainlangInterpreter.sol similarity index 78% rename from src/concrete/RainlangInterpreter.sol rename to src/abstract/BaseRainlangInterpreter.sol index e3532a228..0e5e471d2 100644 --- a/src/concrete/RainlangInterpreter.sol +++ b/src/abstract/BaseRainlangInterpreter.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: LicenseRef-DCL-1.0 // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity =0.8.25; +pragma solidity ^0.8.25; import {ERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/ERC165.sol"; import {LibMemoryKV, MemoryKVKey, MemoryKVVal} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; @@ -14,22 +14,17 @@ import { SourceIndexV2, EvalV4, StackItem -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import { - - // Exported for convenience. - //forge-lint: disable-next-line(unused-import) - BYTECODE_HASH as INTERPRETER_BYTECODE_HASH, - OPCODE_FUNCTION_POINTERS -} from "../generated/RainlangInterpreter.pointers.sol"; -import {IOpcodeToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IOpcodeToolingV1.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {IOpcodeToolingV1} from "rain-sol-codegen-0.1.36/src/interface/IOpcodeToolingV1.sol"; import {OddSetLength} from "../error/ErrStore.sol"; import {ZeroFunctionPointers} from "../error/ErrEval.sol"; -/// @title RainlangInterpreter +/// @title BaseRainlangInterpreter /// @notice Implementation of a Rainlang interpreter that is compatible with -/// native onchain Rainlang parsing. -contract RainlangInterpreter is IInterpreterV4, IOpcodeToolingV1, ERC165 { +/// native onchain Rainlang parsing. Everything except the opcode function +/// pointer table, which a concrete binds by overriding +/// `opcodeFunctionPointers`. +abstract contract BaseRainlangInterpreter is IInterpreterV4, IOpcodeToolingV1, ERC165 { using LibEval for InterpreterState; using LibInterpreterStateDataContract for bytes; @@ -40,15 +35,13 @@ contract RainlangInterpreter is IInterpreterV4, IOpcodeToolingV1, ERC165 { } /// @notice Returns the packed 2-byte function pointer table used by the - /// eval loop to dispatch each opcode. Virtual so subclasses can override - /// the table. Overrides MUST return the same non-empty value at construction - /// time and at runtime. Returning empty bytes at runtime would cause - /// division-by-zero in the eval loop's modulo-based dispatch, leading to - /// reads from arbitrary memory interpreted as function pointers. + /// eval loop to dispatch each opcode. Overrides MUST return the same + /// non-empty value at construction time and at runtime. Returning empty + /// bytes at runtime would cause division-by-zero in the eval loop's + /// modulo-based dispatch, leading to reads from arbitrary memory + /// interpreted as function pointers. /// @return The opcode function pointers for the interpreter. - function opcodeFunctionPointers() internal view virtual returns (bytes memory) { - return OPCODE_FUNCTION_POINTERS; - } + function opcodeFunctionPointers() internal view virtual returns (bytes memory); /// @inheritdoc IInterpreterV4 /// @dev `eval4` does NOT re-run integrity checks on `eval.bytecode`. It diff --git a/src/concrete/RainlangParser.sol b/src/abstract/BaseRainlangParser.sol similarity index 73% rename from src/concrete/RainlangParser.sol rename to src/abstract/BaseRainlangParser.sol index 908324855..a51febd41 100644 --- a/src/concrete/RainlangParser.sol +++ b/src/abstract/BaseRainlangParser.sol @@ -1,39 +1,34 @@ // SPDX-License-Identifier: LicenseRef-DCL-1.0 // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity =0.8.25; +pragma solidity ^0.8.25; import {ERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/ERC165.sol"; import {LibParse} from "../lib/parse/LibParse.sol"; -import {PragmaV1} from "rain-interpreter-interface-0.1.0/src/interface/IParserPragmaV1.sol"; +import {PragmaV1} from "rainlang-interface-0.2.8/src/interface/IParserPragmaV1.sol"; import {LibParseState, ParseState} from "../lib/parse/LibParseState.sol"; import {LibParsePragma} from "../lib/parse/LibParsePragma.sol"; import {LibAllStandardOps} from "../lib/op/LibAllStandardOps.sol"; -import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.28/src/lib/LibBytes.sol"; import {LibParseInterstitial} from "../lib/parse/LibParseInterstitial.sol"; -import { - LITERAL_PARSER_FUNCTION_POINTERS, +import {IParserToolingV1} from "rain-sol-codegen-0.1.36/src/interface/IParserToolingV1.sol"; - // Exported for convenience. - //forge-lint: disable-next-line(unused-import) - BYTECODE_HASH as PARSER_BYTECODE_HASH, - OPERAND_HANDLER_FUNCTION_POINTERS, - PARSE_META, +/// @dev The depth the parse meta is built at, for every parser built over the +/// standard ops' authoring meta. +uint8 constant PARSE_META_BUILD_DEPTH = 2; - // Exported for convenience. - //forge-lint: disable-next-line(unused-import) - PARSE_META_BUILD_DEPTH -} from "../generated/RainlangParser.pointers.sol"; -import {IParserToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IParserToolingV1.sol"; - -/// @title RainlangParser +/// @title BaseRainlangParser /// @notice Converts Rainlang text to bytecode. /// @dev The parser implementation. NOT intended to be called directly so /// intentionally does NOT implement various interfaces. The expression deployer /// calls into this contract and exposes the relevant interfaces, with additional /// safety and integrity checks. -contract RainlangParser is ERC165, IParserToolingV1 { +/// +/// Everything except the parse meta and the function pointer tables, which a +/// concrete binds by overriding `parseMeta`, `operandHandlerFunctionPointers` +/// and `literalParserFunctionPointers`. +abstract contract BaseRainlangParser is ERC165, IParserToolingV1 { using LibParse for ParseState; using LibParseState for ParseState; using LibParsePragma for ParseState; @@ -83,25 +78,19 @@ contract RainlangParser is ERC165, IParserToolingV1 { return PragmaV1(parseState.exportSubParsers()); } - /// @notice Virtual function to return the parse meta. + /// @notice The parse meta the parser resolves words against. /// @return The parse meta bytes. - function parseMeta() internal pure virtual returns (bytes memory) { - return PARSE_META; - } + function parseMeta() internal view virtual returns (bytes memory); - /// @notice Virtual function to return the operand handler function - /// pointers. + /// @notice The operand handler function pointers the parser dispatches + /// through. /// @return The packed operand handler function pointers. - function operandHandlerFunctionPointers() internal pure virtual returns (bytes memory) { - return OPERAND_HANDLER_FUNCTION_POINTERS; - } + function operandHandlerFunctionPointers() internal view virtual returns (bytes memory); - /// @notice Virtual function to return the literal parser function - /// pointers. + /// @notice The literal parser function pointers the parser dispatches + /// through. /// @return The packed literal parser function pointers. - function literalParserFunctionPointers() internal pure virtual returns (bytes memory) { - return LITERAL_PARSER_FUNCTION_POINTERS; - } + function literalParserFunctionPointers() internal view virtual returns (bytes memory); /// @inheritdoc IParserToolingV1 function buildOperandHandlerFunctionPointers() external pure override returns (bytes memory) { diff --git a/src/concrete/RainlangStore.sol b/src/abstract/BaseRainlangStore.sol similarity index 85% rename from src/concrete/RainlangStore.sol rename to src/abstract/BaseRainlangStore.sol index 2a3a3e5f5..6b2bf20a1 100644 --- a/src/concrete/RainlangStore.sol +++ b/src/abstract/BaseRainlangStore.sol @@ -1,28 +1,24 @@ // SPDX-License-Identifier: LicenseRef-DCL-1.0 // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity =0.8.25; +pragma solidity ^0.8.25; import {ERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/ERC165.sol"; -import {IInterpreterStoreV3} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; +import {IInterpreterStoreV3} from "rainlang-interface-0.2.8/src/interface/IInterpreterStoreV3.sol"; import { LibNamespace, FullyQualifiedNamespace, StateNamespace -} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; - -// Exported for convenience. -//forge-lint: disable-next-line(unused-import) -import {BYTECODE_HASH as STORE_BYTECODE_HASH} from "../generated/RainlangStore.pointers.sol"; +} from "rainlang-interface-0.2.8/src/lib/ns/LibNamespace.sol"; import {OddSetLength} from "../error/ErrStore.sol"; -/// @title RainlangStore +/// @title BaseRainlangStore /// @notice Simplest possible `IInterpreterStoreV3` that could work. /// Takes key/value pairings from the input array and stores each in an internal /// mapping. `StateNamespace` is fully qualified only by `msg.sender` on set and /// doesn't attempt to do any deduping etc. if the same key appears twice it will /// be set twice. -contract RainlangStore is IInterpreterStoreV3, ERC165 { +abstract contract BaseRainlangStore is IInterpreterStoreV3, ERC165 { using LibNamespace for StateNamespace; /// Store is several tiers of sandbox. diff --git a/src/abstract/BaseRainlangSubParser.sol b/src/abstract/BaseRainlangSubParser.sol index 11d59bd90..ace330711 100644 --- a/src/abstract/BaseRainlangSubParser.sol +++ b/src/abstract/BaseRainlangSubParser.sol @@ -3,19 +3,19 @@ pragma solidity =0.8.25; import {ERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/ERC165.sol"; -import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.28/src/lib/LibBytes.sol"; // AuthoringMetaV2 exported for convenience. //forge-lint: disable-next-line(unused-import) -import {ISubParserV4, AuthoringMetaV2} from "rain-interpreter-interface-0.1.0/src/interface/ISubParserV4.sol"; +import {ISubParserV4, AuthoringMetaV2} from "rainlang-interface-0.2.8/src/interface/ISubParserV4.sol"; import {LibSubParse, ParseState} from "../lib/parse/LibSubParse.sol"; import {CMASK_RHS_WORD_TAIL} from "rain-string-0.2.0/src/lib/parse/LibParseCMask.sol"; import {LibParse, OperandV2} from "../lib/parse/LibParse.sol"; -import {LibParseMeta} from "rain-interpreter-interface-0.1.0/src/lib/parse/LibParseMeta.sol"; +import {LibParseMeta} from "rainlang-interface-0.2.8/src/lib/parse/LibParseMeta.sol"; import {LibParseOperand} from "../lib/parse/LibParseOperand.sol"; import {IDescribedByMetaV1} from "rain-metadata-0.1.0/src/interface/IDescribedByMetaV1.sol"; -import {IParserToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IParserToolingV1.sol"; -import {ISubParserToolingV1} from "rain-sol-codegen-0.1.0/src/interface/ISubParserToolingV1.sol"; +import {IParserToolingV1} from "rain-sol-codegen-0.1.36/src/interface/IParserToolingV1.sol"; +import {ISubParserToolingV1} from "rain-sol-codegen-0.1.36/src/interface/ISubParserToolingV1.sol"; import {SubParserIndexOutOfBounds} from "../error/ErrSubParse.sol"; /// @dev This is a placeholder for the subparser function pointers. diff --git a/src/concrete/Rainlang.sol b/src/concrete/Rainlang.sol deleted file mode 100644 index 0d6993761..000000000 --- a/src/concrete/Rainlang.sol +++ /dev/null @@ -1,40 +0,0 @@ -// SPDX-License-Identifier: LicenseRef-DCL-1.0 -// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity =0.8.25; - -import {LibInterpreterDeploy} from "../lib/deploy/LibInterpreterDeploy.sol"; -import {IRainlang} from "../interface/IRainlang.sol"; -import {ERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/ERC165.sol"; - -/// @title Rainlang -/// @notice Rainlang contract that exposes the deterministic Zoltu deploy -/// addresses of the four core interpreter components: Deployer, Interpreter, -/// Store, and Parser. Deployed via the same Zoltu pattern so that external -/// tooling can discover all component addresses from a single known Rainlang -/// address. -contract Rainlang is IRainlang, ERC165 { - /// @inheritdoc ERC165 - function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { - return interfaceId == type(IRainlang).interfaceId || super.supportsInterface(interfaceId); - } - - /// @inheritdoc IRainlang - function expressionDeployerAddress() external pure virtual override returns (address) { - return LibInterpreterDeploy.EXPRESSION_DEPLOYER_DEPLOYED_ADDRESS; - } - - /// @inheritdoc IRainlang - function interpreterAddress() external pure virtual override returns (address) { - return LibInterpreterDeploy.INTERPRETER_DEPLOYED_ADDRESS; - } - - /// @inheritdoc IRainlang - function storeAddress() external pure virtual override returns (address) { - return LibInterpreterDeploy.STORE_DEPLOYED_ADDRESS; - } - - /// @inheritdoc IRainlang - function parserAddress() external pure virtual override returns (address) { - return LibInterpreterDeploy.PARSER_DEPLOYED_ADDRESS; - } -} diff --git a/src/concrete/extern/RainlangReferenceExtern.sol b/src/concrete/extern/RainlangReferenceExtern.sol index 74c2c255b..a5af7570a 100644 --- a/src/concrete/extern/RainlangReferenceExtern.sol +++ b/src/concrete/extern/RainlangReferenceExtern.sol @@ -35,7 +35,7 @@ import { LITERAL_PARSER_FUNCTION_POINTERS, INTEGRITY_FUNCTION_POINTERS, OPCODE_FUNCTION_POINTERS -} from "../../generated/RainlangReferenceExtern.pointers.sol"; +} from "../../generated/RainlangReferenceExternPointers.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; import {IDescribedByMetaV1} from "rain-metadata-0.1.0/src/interface/IDescribedByMetaV1.sol"; diff --git a/src/error/ErrExtern.sol b/src/error/ErrExtern.sol index 0e2be373b..69085a401 100644 --- a/src/error/ErrExtern.sol +++ b/src/error/ErrExtern.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {NotAnExternContract} from "rain-interpreter-interface-0.1.0/src/error/ErrExtern.sol"; +import {NotAnExternContract} from "rainlang-interface-0.2.8/src/error/ErrExtern.sol"; /// @dev Workaround for https://github.com/foundry-rs/foundry/issues/6572 contract ErrExtern {} diff --git a/src/generated/0_1_9/Rainlang.sol b/src/generated/0_1_9/Rainlang.sol new file mode 100644 index 000000000..7d48f6eff --- /dev/null +++ b/src/generated/0_1_9/Rainlang.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: LicenseRef-DCL-1.0 +// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd +pragma solidity ^0.8.25; + +// THIS FILE IS AUTOGENERATED BY THE BUILD SCRIPT. DO NOT EDIT BY HAND. + +/// @dev Hash of the known bytecode. +bytes32 constant BYTECODE_HASH = bytes32(0x0ede701e11e0d7c97a02afd2626ba13ae6446bb4d1c01e8cd36e81d6220422a9); + +/// @dev The deterministic deploy address of the contract when deployed via +/// the Zoltu factory. +address constant DEPLOYED_ADDRESS = address(0x820FB8ae43350f6F4F60117955751b0a6777aC54); + +/// @dev The creation bytecode of the contract. +bytes constant CREATION_CODE = + hex"6080604052348015600e575f80fd5b506101f68061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063107628021161004d57806310762802146100ca5780634501e517146100e4578063f2c4da93146100fe575f80fd5b806301ffc9a7146100685780630c1916a414610090575b5f80fd5b61007b6100763660046101b0565b610118565b60405190151581526020015b60405180910390f35b7230ff8d5386ef3addd5ccacc6ddb9c3d0c5adaa5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610087565b73b90c299a8321fbdd8d0f367e560f5341f840da3f6100a5565b734c52eee7fb6aed0f1a30130d96d02409d9d886cf6100a5565b731aa775533e28b1d843e1a589034984e3a62005dc6100a5565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fabaa01220000000000000000000000000000000000000000000000000000000014806101aa57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f602082840312156101c0575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101ef575f80fd5b939250505056"; + +/// @dev The runtime bytecode of the contract. +bytes constant RUNTIME_CODE = + hex"608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063107628021161004d57806310762802146100ca5780634501e517146100e4578063f2c4da93146100fe575f80fd5b806301ffc9a7146100685780630c1916a414610090575b5f80fd5b61007b6100763660046101b0565b610118565b60405190151581526020015b60405180910390f35b7230ff8d5386ef3addd5ccacc6ddb9c3d0c5adaa5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610087565b73b90c299a8321fbdd8d0f367e560f5341f840da3f6100a5565b734c52eee7fb6aed0f1a30130d96d02409d9d886cf6100a5565b731aa775533e28b1d843e1a589034984e3a62005dc6100a5565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fabaa01220000000000000000000000000000000000000000000000000000000014806101aa57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f602082840312156101c0575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101ef575f80fd5b939250505056"; + +/// @dev The addresses that MUST already have code on a network before +/// this release can be broadcast there, `abi.encode`d as an `address[]` +/// because Solidity has no file-scope constant of dynamic array type. +bytes constant DEPENDENCIES = + hex"000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000030ff8d5386ef3addd5ccacc6ddb9c3d0c5adaa0000000000000000000000001aa775533e28b1d843e1a589034984e3a62005dc0000000000000000000000004c52eee7fb6aed0f1a30130d96d02409d9d886cf000000000000000000000000b90c299a8321fbdd8d0f367e560f5341f840da3f"; diff --git a/src/generated/0_1_9/RainlangExpressionDeployer.sol b/src/generated/0_1_9/RainlangExpressionDeployer.sol new file mode 100644 index 000000000..1b729abd7 --- /dev/null +++ b/src/generated/0_1_9/RainlangExpressionDeployer.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: LicenseRef-DCL-1.0 +// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd +pragma solidity ^0.8.25; + +// THIS FILE IS AUTOGENERATED BY THE BUILD SCRIPT. DO NOT EDIT BY HAND. + +/// @dev Hash of the known bytecode. +bytes32 constant BYTECODE_HASH = bytes32(0x725b5ad61ab974a2a62ef017c55344cb27d05944e22dc69f839ca2df1f2cebe8); + +/// @dev The deterministic deploy address of the contract when deployed via +/// the Zoltu factory. +address constant DEPLOYED_ADDRESS = address(0xb90c299a8321fbdd8D0F367e560f5341F840dA3F); + +/// @dev The creation bytecode of the contract. +bytes constant CREATION_CODE = + hex"6080604052348015600e575f80fd5b50611ca68061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c80636f5aa28d1161004d5780636f5aa28d146100b0578063a3869e14146100de578063b92d7553146100fe575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b610076366004611617565b610106565b60405190151581526020015b60405180910390f35b6100a361009e366004611656565b610282565b60405161008791906116c2565b6040517f0ae1ecb6c0f6314beaf4d4cd803ba14c900b0eecb1ecd39a52739cff9ae2c34a8152602001610087565b6100f16100ec366004611811565b610346565b60405161008791906118d7565b6100f1610466565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f6f5aa28d00000000000000000000000000000000000000000000000000000000148061019857507fffffffff0000000000000000000000000000000000000000000000000000000082167fa3869e1400000000000000000000000000000000000000000000000000000000145b806101e457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5514ca2000000000000000000000000000000000000000000000000000000000145b8061023057507fffffffff0000000000000000000000000000000000000000000000000000000082167fb92d755300000000000000000000000000000000000000000000000000000000145b8061027c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080516020810182526060815290517f5514ca200000000000000000000000000000000000000000000000000000000081527230ff8d5386ef3addd5ccacc6ddb9c3d0c5adaa90635514ca20906102e090869086906004016118e9565b5f60405180830381865afa1580156102fa573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261033f9190810190611958565b9392505050565b6040517f7764fd9c0000000000000000000000000000000000000000000000000000000081526060905f9081907230ff8d5386ef3addd5ccacc6ddb9c3d0c5adaa90637764fd9c9061039c9087906004016118d7565b5f60405180830381865afa1580156103b6573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103fb9190810190611a37565b915091505f610414838351905160406020909202010190565b60408051602083820181019092528281529192508101610435818686610475565b5f6104596040518060c0016040528060908152602001611c166090913987876104b8565b5091979650505050505050565b6060610470610877565b905090565b80600182510160200281015b8082101561049c578151855260209485019490910190610481565b50506104b36104a88390565b848451602001610b4a565b505050565b60605f6104c484610b53565b85519091506020860190600290046104db86610b6d565b8260020267ffffffffffffffff8111156104f7576104f7611727565b6040519080825280601f01601f191660200182016040528015610521576020820181803683370190505b509350602084015f5b8481101561086b575f8061053e8a84610d8a565b915091508184538060018501536002840193505f61055d8b848c610dad565b90505f601861056c8d87610e14565b0390505f61057a8d87610e43565b600402820190505b808210156107b557815162ffffff811690601d81901a600f81169160049190911c90601c1a61160d8c82106105ff5760808801516040517fc8344ab1000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018e90526064015b60405180910390fd5b50600281028d015160f01c5f806106148a8885565b915091508582146106685760808a01516040517fddf56071000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018790526064016105f6565b8481146106b85760808a01516040517ffc8b5603000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604481018690526064016105f6565b895182111561070a5760808a01518a516040517f2cab6bff00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018390526064016105f6565b8951829003808b5260408b0151111561076c5760808a01518a516040808d015190517f1bc5ab0f0000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915260448201526064016105f6565b89518101808b5260208b0151101561078657895160208b01525b600181111561079757895160408b01525b50505060808701805160010190525050506004929092019150610582565b6107bf8d87610e5a565b8360200151146108135782602001516107d88e88610e5a565b6040517f4d9c18dc000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016105f6565b8251841461085a5782516040517f4689f0b30000000000000000000000000000000000000000000000000000000081526004810191909152602481018590526044016105f6565b50506001909301925061052a915050565b50505050509392505050565b606061160d5f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff168152602001610e728152602001610eee8152602001610f5181526020016111ac81526020016111b581526020016111bf81526020016111c881526020016111e281526020016111b58152602001611287815260200161128781526020016112e281526020016113ab81526020016113b881526020016111b581526020016111bf81526020016113b881526020016111b581526020016111bf81526020016111bf81526020016111b581526020016111b581526020016111b581526020016111ac81526020016111ac81526020016111ac81526020016111ac81526020016113c281526020016111b581526020016113e681526020016113ff81526020016111b581526020016113c281526020016111b581526020016111b581526020016113b881526020016111bf81526020016111b581526020016111b581526020016111bf815260200161140881526020016111b581526020016111bf815260200161140881526020016111ac81526020016111bf81526020016111bf81526020016111bf81526020016111bf81526020016111b581526020016111bf81526020016111bf815260200161140881526020016111ac81526020016111ac815260200161140881526020016111ac81526020016111ac815260200161140881526020016111b581526020016111bf815260200161140881526020016113b881526020016113b88152602001611408815260200161140881526020016111ac81526020016114088152602001611408815260200161140881526020016111bf81526020016113ff815250905060608190506048815114610b385780516040517fc8b569010000000000000000000000000000000000000000000000000000000081526004810191909152602481018490526044016105f6565b610b4181611421565b94505050505090565b8083835e505050565b5f81515f03610b6357505f919050565b50602001515f1a90565b5f610b7782610b53565b90508015610d485781516001600283020190811115610bc457826040517f17f4bc5e0000000000000000000000000000000000000000000000000000000081526004016105f691906118d7565b82516020828501810191850101602160027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860102860181019086015b808210610d0457815160f01c8481016004810185811115610c4f57896040517e39ba560000000000000000000000000000000000000000000000000000000081526004016105f691906118d7565b81515f81901a90600181901a90600281901a9060031a80821180610c7257508281115b15610cad578d876040517feaf45f4f0000000000000000000000000000000000000000000000000000000081526004016105f6929190611b28565b505050600481028201878114610cf1578b6040517ffbb8027a0000000000000000000000000000000000000000000000000000000081526004016105f691906118d7565b8397506002870396505050505050610c01565b838314610d3f57866040517fde67b29a0000000000000000000000000000000000000000000000000000000081526004016105f691906118d7565b50505050505050565b600182511115610d8657816040517fd013da5d0000000000000000000000000000000000000000000000000000000081526004016105f691906118d7565b5050565b5f805f610d978585610e14565b51600281901a9660039190911a95509350505050565b610de26040518060c001604052805f81526020015f81526020015f8152602001606081526020015f8152602001606081525090565b506040805160c081018252838152602081018490529081019290925260608201525f608082015260a081019190915290565b5f80610e1f84610b53565b60020260010190505f610e3285856114b1565b949091019093016020019392505050565b5f80610e4f8484610e14565b515f1a949350505050565b5f80610e668484610e14565b5160011a949350505050565b81515f90819061ffff8416908110610ecd57608085015185516040517feaa16f3300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f6565b8460400151811115610ee157604085018190525b505f946001945092505050565b6060820151515f90819061ffff8416908110610ee15760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f6565b6060820151515f90819061ffff8416908110610fb45760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f6565b5f85606001518281518110610fcb57610fcb611b49565b602002602001015190505f80610fe4839060a082901c90565b91509150611012827f18003f8e00000000000000000000000000000000000000000000000000000000611507565b611060576040517f23016c8900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016105f6565b6040517f40c04edc00000000000000000000000000000000000000000000000000000000815260048101829052600f601089901c81166024830181905260148a901c9091166044830181905290915f90819073ffffffffffffffffffffffffffffffffffffffff8716906340c04edc906064016040805180830381865afa1580156110ed573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111119190611b76565b91509150838214611158576040517f528cc0fb00000000000000000000000000000000000000000000000000000000815260048101859052602481018390526044016105f6565b82811461119b576040517fc5ff08dc00000000000000000000000000000000000000000000000000000000815260048101849052602481018290526044016105f6565b909b909a5098505050505050505050565b505f9160019150565b5060029160019150565b50600191829150565b5f806111d484846111e2565b506001958695509350505050565b5f8060ff83811690600885901c16808303611229576040517f46f0ca6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101006112368284611b98565b1115611278576040517f8abcdd3f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016105f6565b50600295600195509350505050565b5f8061ffff831660ff81118061129b575080155b156112d5576040517fc1be16a1000000000000000000000000000000000000000000000000000000008152600481018290526024016105f6565b5060019485945092505050565b60a08201515f90819061ffff841690600f601486901c811691601087901c90911690849081906113129086610d8a565b91509150818314611359576040517f9199e58e00000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016105f6565b8381101561139d576040517fff13710800000000000000000000000000000000000000000000000000000000815260048101829052602481018590526044016105f6565b509791965090945050505050565b60101c600f169160019150565b5060039160019150565b5f80600f601084901c16806113d85760016113da565b805b95600195509350505050565b5f80600f601084901c16600281116113d85760026113da565b506002915f9150565b5f80600f601084901c16600181116113d85760026113da565b60605f825160020267ffffffffffffffff81111561144157611441611727565b6040519080825280601f01601f19166020018201604052801561146b576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156114a557805183518616908516178152602090920191600201611483565b50939695505050505050565b5f6114bb83610b53565b82106114f75781836040517ffcfaeff10000000000000000000000000000000000000000000000000000000081526004016105f6929190611bd0565b50600202016003015161ffff1690565b5f61151183611522565b801561033f575061033f838361159c565b5f61154d827f01ffc9a70000000000000000000000000000000000000000000000000000000061159c565b15611595575f8061157e847fffffffff000000000000000000000000000000000000000000000000000000006115c0565b9150915081801561158d575080155b949350505050565b505f919050565b5f805f6115a985856115c0565b915091508180156115b75750805b95945050505050565b7f01ffc9a7000000000000000000000000000000000000000000000000000000005f818152600483905290819060208260248188617530fa92505f511515601f3d11169150509250929050565b611615611be8565b565b5f60208284031215611627575f80fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461033f575f80fd5b5f8060208385031215611667575f80fd5b823567ffffffffffffffff8082111561167e575f80fd5b818501915085601f830112611691575f80fd5b81358181111561169f575f80fd5b8660208285010111156116b0575f80fd5b60209290920196919550909350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b8083101561171c57835173ffffffffffffffffffffffffffffffffffffffff1682529284019260019290920191908401906116e6565b509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516020810167ffffffffffffffff8111828210171561177757611777611727565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117c4576117c4611727565b604052919050565b5f67ffffffffffffffff8211156117e5576117e5611727565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f60208284031215611821575f80fd5b813567ffffffffffffffff811115611837575f80fd5b8201601f81018413611847575f80fd5b803561185a611855826117cc565b61177d565b81815285602083850101111561186e575f80fd5b816020840160208301375f91810160200191909152949350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61033f602083018461188b565b60208152816020820152818360408301375f818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b5f67ffffffffffffffff82111561194e5761194e611727565b5060051b60200190565b5f6020808385031215611969575f80fd5b825167ffffffffffffffff80821115611980575f80fd5b8185019150828287031215611993575f80fd5b61199b611754565b8251828111156119a9575f80fd5b80840193505086601f8401126119bd575f80fd5b825191506119cd61185583611935565b82815260059290921b830184019184810190888411156119eb575f80fd5b938501935b83851015611a2a57845173ffffffffffffffffffffffffffffffffffffffff81168114611a1b575f80fd5b825293850193908501906119f0565b8252509695505050505050565b5f8060408385031215611a48575f80fd5b825167ffffffffffffffff80821115611a5f575f80fd5b818501915085601f830112611a72575f80fd5b81516020611a82611855836117cc565b8281528882848701011115611a95575f80fd5b828286018383015e5f81840183015287820151909650935082841115611ab9575f80fd5b838701935087601f850112611acc575f80fd5b83519250611adc61185584611935565b83815260059390931b8401810192818101925088841115611afb575f80fd5b938101935b83851015611b1957845183529381019391810191611b00565b80955050505050509250929050565b604081525f611b3a604083018561188b565b90508260208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215611b87575f80fd5b505080516020909101519092909150565b8082018082111561027c577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b828152604060208201525f61158d604083018461188b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0e720eee0f5111ac11b511bf11c811e211b51287128712e213ab13b811b511bf13b811b511bf11bf11b511b511b511ac11ac11ac11ac13c211b513e613ff11b513c211b511b513b811bf11b511b511bf140811b511bf140811ac11bf11bf11bf11bf11b511bf11bf140811ac11ac140811ac11ac140811b511bf140813b813b81408140811ac14081408140811bf13ff"; + +/// @dev The runtime bytecode of the contract. +bytes constant RUNTIME_CODE = + hex"608060405234801561000f575f80fd5b5060043610610064575f3560e01c80636f5aa28d1161004d5780636f5aa28d146100b0578063a3869e14146100de578063b92d7553146100fe575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b610076366004611617565b610106565b60405190151581526020015b60405180910390f35b6100a361009e366004611656565b610282565b60405161008791906116c2565b6040517f0ae1ecb6c0f6314beaf4d4cd803ba14c900b0eecb1ecd39a52739cff9ae2c34a8152602001610087565b6100f16100ec366004611811565b610346565b60405161008791906118d7565b6100f1610466565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f6f5aa28d00000000000000000000000000000000000000000000000000000000148061019857507fffffffff0000000000000000000000000000000000000000000000000000000082167fa3869e1400000000000000000000000000000000000000000000000000000000145b806101e457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5514ca2000000000000000000000000000000000000000000000000000000000145b8061023057507fffffffff0000000000000000000000000000000000000000000000000000000082167fb92d755300000000000000000000000000000000000000000000000000000000145b8061027c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080516020810182526060815290517f5514ca200000000000000000000000000000000000000000000000000000000081527230ff8d5386ef3addd5ccacc6ddb9c3d0c5adaa90635514ca20906102e090869086906004016118e9565b5f60405180830381865afa1580156102fa573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261033f9190810190611958565b9392505050565b6040517f7764fd9c0000000000000000000000000000000000000000000000000000000081526060905f9081907230ff8d5386ef3addd5ccacc6ddb9c3d0c5adaa90637764fd9c9061039c9087906004016118d7565b5f60405180830381865afa1580156103b6573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103fb9190810190611a37565b915091505f610414838351905160406020909202010190565b60408051602083820181019092528281529192508101610435818686610475565b5f6104596040518060c0016040528060908152602001611c166090913987876104b8565b5091979650505050505050565b6060610470610877565b905090565b80600182510160200281015b8082101561049c578151855260209485019490910190610481565b50506104b36104a88390565b848451602001610b4a565b505050565b60605f6104c484610b53565b85519091506020860190600290046104db86610b6d565b8260020267ffffffffffffffff8111156104f7576104f7611727565b6040519080825280601f01601f191660200182016040528015610521576020820181803683370190505b509350602084015f5b8481101561086b575f8061053e8a84610d8a565b915091508184538060018501536002840193505f61055d8b848c610dad565b90505f601861056c8d87610e14565b0390505f61057a8d87610e43565b600402820190505b808210156107b557815162ffffff811690601d81901a600f81169160049190911c90601c1a61160d8c82106105ff5760808801516040517fc8344ab1000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018e90526064015b60405180910390fd5b50600281028d015160f01c5f806106148a8885565b915091508582146106685760808a01516040517fddf56071000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018790526064016105f6565b8481146106b85760808a01516040517ffc8b5603000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604481018690526064016105f6565b895182111561070a5760808a01518a516040517f2cab6bff00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018390526064016105f6565b8951829003808b5260408b0151111561076c5760808a01518a516040808d015190517f1bc5ab0f0000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915260448201526064016105f6565b89518101808b5260208b0151101561078657895160208b01525b600181111561079757895160408b01525b50505060808701805160010190525050506004929092019150610582565b6107bf8d87610e5a565b8360200151146108135782602001516107d88e88610e5a565b6040517f4d9c18dc000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016105f6565b8251841461085a5782516040517f4689f0b30000000000000000000000000000000000000000000000000000000081526004810191909152602481018590526044016105f6565b50506001909301925061052a915050565b50505050509392505050565b606061160d5f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff168152602001610e728152602001610eee8152602001610f5181526020016111ac81526020016111b581526020016111bf81526020016111c881526020016111e281526020016111b58152602001611287815260200161128781526020016112e281526020016113ab81526020016113b881526020016111b581526020016111bf81526020016113b881526020016111b581526020016111bf81526020016111bf81526020016111b581526020016111b581526020016111b581526020016111ac81526020016111ac81526020016111ac81526020016111ac81526020016113c281526020016111b581526020016113e681526020016113ff81526020016111b581526020016113c281526020016111b581526020016111b581526020016113b881526020016111bf81526020016111b581526020016111b581526020016111bf815260200161140881526020016111b581526020016111bf815260200161140881526020016111ac81526020016111bf81526020016111bf81526020016111bf81526020016111bf81526020016111b581526020016111bf81526020016111bf815260200161140881526020016111ac81526020016111ac815260200161140881526020016111ac81526020016111ac815260200161140881526020016111b581526020016111bf815260200161140881526020016113b881526020016113b88152602001611408815260200161140881526020016111ac81526020016114088152602001611408815260200161140881526020016111bf81526020016113ff815250905060608190506048815114610b385780516040517fc8b569010000000000000000000000000000000000000000000000000000000081526004810191909152602481018490526044016105f6565b610b4181611421565b94505050505090565b8083835e505050565b5f81515f03610b6357505f919050565b50602001515f1a90565b5f610b7782610b53565b90508015610d485781516001600283020190811115610bc457826040517f17f4bc5e0000000000000000000000000000000000000000000000000000000081526004016105f691906118d7565b82516020828501810191850101602160027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860102860181019086015b808210610d0457815160f01c8481016004810185811115610c4f57896040517e39ba560000000000000000000000000000000000000000000000000000000081526004016105f691906118d7565b81515f81901a90600181901a90600281901a9060031a80821180610c7257508281115b15610cad578d876040517feaf45f4f0000000000000000000000000000000000000000000000000000000081526004016105f6929190611b28565b505050600481028201878114610cf1578b6040517ffbb8027a0000000000000000000000000000000000000000000000000000000081526004016105f691906118d7565b8397506002870396505050505050610c01565b838314610d3f57866040517fde67b29a0000000000000000000000000000000000000000000000000000000081526004016105f691906118d7565b50505050505050565b600182511115610d8657816040517fd013da5d0000000000000000000000000000000000000000000000000000000081526004016105f691906118d7565b5050565b5f805f610d978585610e14565b51600281901a9660039190911a95509350505050565b610de26040518060c001604052805f81526020015f81526020015f8152602001606081526020015f8152602001606081525090565b506040805160c081018252838152602081018490529081019290925260608201525f608082015260a081019190915290565b5f80610e1f84610b53565b60020260010190505f610e3285856114b1565b949091019093016020019392505050565b5f80610e4f8484610e14565b515f1a949350505050565b5f80610e668484610e14565b5160011a949350505050565b81515f90819061ffff8416908110610ecd57608085015185516040517feaa16f3300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f6565b8460400151811115610ee157604085018190525b505f946001945092505050565b6060820151515f90819061ffff8416908110610ee15760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f6565b6060820151515f90819061ffff8416908110610fb45760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f6565b5f85606001518281518110610fcb57610fcb611b49565b602002602001015190505f80610fe4839060a082901c90565b91509150611012827f18003f8e00000000000000000000000000000000000000000000000000000000611507565b611060576040517f23016c8900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016105f6565b6040517f40c04edc00000000000000000000000000000000000000000000000000000000815260048101829052600f601089901c81166024830181905260148a901c9091166044830181905290915f90819073ffffffffffffffffffffffffffffffffffffffff8716906340c04edc906064016040805180830381865afa1580156110ed573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111119190611b76565b91509150838214611158576040517f528cc0fb00000000000000000000000000000000000000000000000000000000815260048101859052602481018390526044016105f6565b82811461119b576040517fc5ff08dc00000000000000000000000000000000000000000000000000000000815260048101849052602481018290526044016105f6565b909b909a5098505050505050505050565b505f9160019150565b5060029160019150565b50600191829150565b5f806111d484846111e2565b506001958695509350505050565b5f8060ff83811690600885901c16808303611229576040517f46f0ca6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101006112368284611b98565b1115611278576040517f8abcdd3f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016105f6565b50600295600195509350505050565b5f8061ffff831660ff81118061129b575080155b156112d5576040517fc1be16a1000000000000000000000000000000000000000000000000000000008152600481018290526024016105f6565b5060019485945092505050565b60a08201515f90819061ffff841690600f601486901c811691601087901c90911690849081906113129086610d8a565b91509150818314611359576040517f9199e58e00000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016105f6565b8381101561139d576040517fff13710800000000000000000000000000000000000000000000000000000000815260048101829052602481018590526044016105f6565b509791965090945050505050565b60101c600f169160019150565b5060039160019150565b5f80600f601084901c16806113d85760016113da565b805b95600195509350505050565b5f80600f601084901c16600281116113d85760026113da565b506002915f9150565b5f80600f601084901c16600181116113d85760026113da565b60605f825160020267ffffffffffffffff81111561144157611441611727565b6040519080825280601f01601f19166020018201604052801561146b576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156114a557805183518616908516178152602090920191600201611483565b50939695505050505050565b5f6114bb83610b53565b82106114f75781836040517ffcfaeff10000000000000000000000000000000000000000000000000000000081526004016105f6929190611bd0565b50600202016003015161ffff1690565b5f61151183611522565b801561033f575061033f838361159c565b5f61154d827f01ffc9a70000000000000000000000000000000000000000000000000000000061159c565b15611595575f8061157e847fffffffff000000000000000000000000000000000000000000000000000000006115c0565b9150915081801561158d575080155b949350505050565b505f919050565b5f805f6115a985856115c0565b915091508180156115b75750805b95945050505050565b7f01ffc9a7000000000000000000000000000000000000000000000000000000005f818152600483905290819060208260248188617530fa92505f511515601f3d11169150509250929050565b611615611be8565b565b5f60208284031215611627575f80fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461033f575f80fd5b5f8060208385031215611667575f80fd5b823567ffffffffffffffff8082111561167e575f80fd5b818501915085601f830112611691575f80fd5b81358181111561169f575f80fd5b8660208285010111156116b0575f80fd5b60209290920196919550909350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b8083101561171c57835173ffffffffffffffffffffffffffffffffffffffff1682529284019260019290920191908401906116e6565b509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516020810167ffffffffffffffff8111828210171561177757611777611727565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117c4576117c4611727565b604052919050565b5f67ffffffffffffffff8211156117e5576117e5611727565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f60208284031215611821575f80fd5b813567ffffffffffffffff811115611837575f80fd5b8201601f81018413611847575f80fd5b803561185a611855826117cc565b61177d565b81815285602083850101111561186e575f80fd5b816020840160208301375f91810160200191909152949350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61033f602083018461188b565b60208152816020820152818360408301375f818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b5f67ffffffffffffffff82111561194e5761194e611727565b5060051b60200190565b5f6020808385031215611969575f80fd5b825167ffffffffffffffff80821115611980575f80fd5b8185019150828287031215611993575f80fd5b61199b611754565b8251828111156119a9575f80fd5b80840193505086601f8401126119bd575f80fd5b825191506119cd61185583611935565b82815260059290921b830184019184810190888411156119eb575f80fd5b938501935b83851015611a2a57845173ffffffffffffffffffffffffffffffffffffffff81168114611a1b575f80fd5b825293850193908501906119f0565b8252509695505050505050565b5f8060408385031215611a48575f80fd5b825167ffffffffffffffff80821115611a5f575f80fd5b818501915085601f830112611a72575f80fd5b81516020611a82611855836117cc565b8281528882848701011115611a95575f80fd5b828286018383015e5f81840183015287820151909650935082841115611ab9575f80fd5b838701935087601f850112611acc575f80fd5b83519250611adc61185584611935565b83815260059390931b8401810192818101925088841115611afb575f80fd5b938101935b83851015611b1957845183529381019391810191611b00565b80955050505050509250929050565b604081525f611b3a604083018561188b565b90508260208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215611b87575f80fd5b505080516020909101519092909150565b8082018082111561027c577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b828152604060208201525f61158d604083018461188b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0e720eee0f5111ac11b511bf11c811e211b51287128712e213ab13b811b511bf13b811b511bf11bf11b511b511b511ac11ac11ac11ac13c211b513e613ff11b513c211b511b513b811bf11b511b511bf140811b511bf140811ac11bf11bf11bf11bf11b511bf11bf140811ac11ac140811ac11ac140811b511bf140813b813b81408140811ac14081408140811bf13ff"; + +/// @dev The addresses that MUST already have code on a network before +/// this release can be broadcast there, `abi.encode`d as an `address[]` +/// because Solidity has no file-scope constant of dynamic array type. +bytes constant DEPENDENCIES = + hex"000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000030ff8d5386ef3addd5ccacc6ddb9c3d0c5adaa"; diff --git a/src/generated/RainlangInterpreter.pointers.sol b/src/generated/0_1_9/RainlangInterpreter.sol similarity index 98% rename from src/generated/RainlangInterpreter.pointers.sol rename to src/generated/0_1_9/RainlangInterpreter.sol index 3dca0c869..2dd4ef15b 100644 --- a/src/generated/RainlangInterpreter.pointers.sol +++ b/src/generated/0_1_9/RainlangInterpreter.sol @@ -2,12 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -// THIS FILE IS AUTOGENERATED BY ./script/BuildPointers.sol - -// This file is committed to the repository because there is a circular -// dependency between the contract and its pointers file. The contract -// needs the pointers file to exist so that it can compile, and the pointers -// file needs the contract to exist so that it can be compiled. +// THIS FILE IS AUTOGENERATED BY THE BUILD SCRIPT. DO NOT EDIT BY HAND. /// @dev Hash of the known bytecode. bytes32 constant BYTECODE_HASH = bytes32(0x80a0ef85c409ac3d7657f7df30c34d7f87780ac04830f56297ef324f98b9d1d6); @@ -24,9 +19,8 @@ bytes constant CREATION_CODE = bytes constant RUNTIME_CODE = hex"608060405234801561000f575f80fd5b506004361061003f575f3560e01c806301ffc9a714610043578063514b5d4f1461006b578063d04dfe2314610080575b5f80fd5b6100566100513660046154a6565b6100a1565b60405190151581526020015b60405180910390f35b610073610185565b6040516100629190615531565b61009361008e366004615543565b610194565b6040516100629291906155b4565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fd04dfe2300000000000000000000000000000000000000000000000000000000148061013357507fffffffff0000000000000000000000000000000000000000000000000000000082167f514b5d4f00000000000000000000000000000000000000000000000000000000145b8061017f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606061018f610390565b905090565b6060805f61021b84830135602086018035906101b0908861562d565b6101bd6080890189615648565b6101c69161574b565b6101ce61063c565b6101db60408b018b61580e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092979695949392505061065c9050565b9050600261022c60c0860186615648565b61023792915061589c565b156102895761024960c0850185615648565b6040517f01c71f3d000000000000000000000000000000000000000000000000000000008152610280925060040190815260200190565b60405180910390fd5b5f5b61029860c0860186615648565b905081101561031b576060820151610304906102b760c0880188615648565b848181106102c7576102c76158af565b90506020020135878060c001906102de9190615648565b6102e9866001615909565b8181106102f8576102f86158af565b905060200201356107a7565b6060830152610314600282615909565b905061028b565b5061038661032c60a0860186615648565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250859392507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91505061087d565b9250925050915091565b6040805161092081018252604880825261097c60208301526109cb92820192909252610a0d606082810191909152610bce6080830152610c4e60a0830152610c6060c0830152610c7860e0830152610cba610100830152610d0f610120830152610d21610140830152610d33610160830152610d45610180830152610dea6101a0830152610e276101c0830152610ff36101e083015261115d61020083015261124a6102208301526113ec610240830181905261153b61026084015261160d6102808401526116d36102a08401526118226102c08401526102e083015261191061030083015261193f610320830181905261034083015261196e61036083015261199d610380830152611a256103a0830152611a396103c0830152611b266103e0830152611b8a610400830152611ba2610420830152611c1d610440830152611c35610460830152611c4d610480830152611c866104a0830152611cb06104c0830152611cc86104e0830152611ce0610500830152611ced610520830152611de8610540830152611e0a610560830152611e17610580830152611ecf6105a0830152611f1e6105c0830152611f616105e0830152611f85610600830152611f92610620830152611f9f61064083015261203861066083015261208161068083015261208e6106a083015261210d6106c083015261215c6106e08301526121ab6107008301526121f861072083015261224761074083015261229661076083015261234e61078083015261237a6107a083015261239c6107c08301526124546107e08301526124956108008301526124bc6108208301526125096108408301526125566108608301526125a56108808301526125f26108a083015261263f6108c083015261268c6108e083015261277d6109008301529190819080610633816127af565b94505050505090565b60606040518060c0016040528060908152602001615c8360909139905090565b6106bd60405180610120016040528060608152602001606081526020015f81526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020016060815260200160608152602001606081525090565b602087810180516040600191820184028b018181015182515f91821a808252948501870281019093526041808301968381019593600285020190910191908401905b8381101561073d57875160f01c83015160408051600192831a80825283016020908102909101918290529084526002909901989290920191016106ff565b505050506040518061012001604052808281526020018481526020018b81526020015f81526020018a81526020018973ffffffffffffffffffffffffffffffffffffffff168152602001888152602001838152602001878152509450505050509695505050505050565b5f82815260208120600f900660100284811c61ffff1690815b82156107da57825186146107da57604083015192506107c0565b821580156108285760405193506060840160405286845285602085015281604085015260028860f01c0161ffff60f01b1989168160f01b1798505061ffff831b19881684841b17975061082f565b8560208501525b50505061ffff811115610871576040517fcadaf56d00000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b849150505b9392505050565b6060805f806108948760e001518860400151612833565b915091505f80885f01518960400151815181106108b3576108b36158af565b60200260200101519150819050838851146109075787516040517fd628439f000000000000000000000000000000000000000000000000000000008152610280918691600401918252602082015260400190565b87511561092c575f60208951028203915060208901905061092a81838b51612856565b505b61093c898a604001518385612862565b90505f83881061094c578361094e565b875b90506060602083039050818152806109698c60600151612af3565b975097505050505050505b935093915050565b604083015183516020600192830181029091015161ffff8516909201029003517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152809392505050565b60208084015161ffff841660010190910201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152809392505050565b602083015180515f9161ffff851691600f601087901c811692601488901c9091169185919085908110610a4257610a426158af565b602002602001015190505f80610a5b839060a082901c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08a0180518882526040517f58c07152000000000000000000000000000000000000000000000000000000008152939550919350915f9073ffffffffffffffffffffffffffffffffffffffff8616906358c0715290610ae0908790879060040161591c565b5f60405180830381865afa158015610afa573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b3f919081019061593c565b905080518714610b885780516040517fc3385cb0000000000000000000000000000000000000000000000000000000008152610280918991600401918252602082015260400190565b818352602088028b019a50602081016020880281015b80821015610bbb5760208d039c5081518d52602082019150610b9e565b509a9d9c50505050505050505050505050565b60c083015180515f9160ff85811692600887901c90911691849184908110610bf857610bf86158af565b60200260200101518281518110610c1157610c116158af565b60209081029190910101517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909501948552509295945050505050565b60208101805182511681529392505050565b80515f90610c6d81612d66565b835250909392505050565b80516001600884901c60ff9081169190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0193161c919091168152919050565b805160209091018051600160ff600886901c81169190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01941684811b199091169390921690911b919091178152919050565b60208101805182511781529392505050565b805161ffff83161b8152809392505050565b805161ffff83161c8152809392505050565b8251600161ffff841690810160209081028301515f93600f601088901c811693601489901c90911692908190850288015b80891015610d935760208203915088518252602089019850610d76565b5060408a01805190879052610daa8b828486612862565b60408c0182905260208602998a9003999092508201895b81841015610dd9578351815260209384019301610dc1565b50989b9a5050505050505050505050565b60109190911c600f166020028082207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190920101908152919050565b805160208201516040909201805190925f929173ffffffffffffffffffffffffffffffffffffffff83168314610e8c576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101849052602401610280565b73ffffffffffffffffffffffffffffffffffffffff82168214610ede576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b73ffffffffffffffffffffffffffffffffffffffff81168114610f30576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301525f919085169063dd62ed3e90604401602060405180830381865afa158015610fa5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc991906159bd565b90505f610fd585612e3e565b90505f610fe28383612ee7565b508852509598975050505050505050565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff82168214611052576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b73ffffffffffffffffffffffffffffffffffffffff811681146110a4576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa158015611111573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061113591906159bd565b90505f61114184612e3e565b90505f61114e8383612f28565b87525094979650505050505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff811681146111b3576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f815f1c73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ff573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061122391906159bd565b90505f61122f83612e3e565b90505f61123c8383612f28565b865250939695505050505050565b805160208201516040909201805190925f929173ffffffffffffffffffffffffffffffffffffffff831683146112af576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101849052602401610280565b73ffffffffffffffffffffffffffffffffffffffff82168214611301576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b73ffffffffffffffffffffffffffffffffffffffff81168114611353576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301525f919085169063dd62ed3e90604401602060405180830381865afa1580156113c8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061123c91906159bd565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff8216821461144b576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b73ffffffffffffffffffffffffffffffffffffffff8116811461149d576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa15801561150a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152e91906159bd565b8552509295945050505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff81168114611591576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f815f1c73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115dd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160191906159bd565b84525091949350505050565b80515f9073ffffffffffffffffffffffffffffffffffffffff81168114611663576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b5f815f1c73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116af573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160191906159d4565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff82168214611732576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b73ffffffffffffffffffffffffffffffffffffffff81168114611784576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101829052602401610280565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f91908416906370a0823190602401602060405180830381865afa1580156117f1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061181591906159bd565b90505f61123c825f612f28565b80516020909101805190915f9173ffffffffffffffffffffffffffffffffffffffff82168214611881576040517f479ef3f700000000000000000000000000000000000000000000000000000000815260048101839052602401610280565b6040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018290525f9073ffffffffffffffffffffffffffffffffffffffff841690636352211e90602401602060405180830381865afa1580156118ec573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152e91906159d4565b437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b467fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020600f601085901c1602828101918201925f928391905b80821015611a1957815192507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff831615611a0e57828652611a19565b8160200191506119d6565b50939695505050505050565b805160209091018051909114815292915050565b5f805f80805f80600f8960101c169350600284069250879150602083850302820190506020831502810397508215611a7057805194505b5f5b81831015611abb5750815195507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff86161580611ab05760208301518952611abb565b826040019250611a72565b8015611b1757604080518082019091525f6020820152600887901c601f88168083019190915281525b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102809190615531565b50969998505050505050505050565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216611b8057604080518082019091525f6020820152600882901c601f8316808301919091528152611ae4565b5091949350505050565b80516020909101805190915f918261152e8383612f4c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020600f601085901c1602828101918201925f928391905b80821015611a1957815192507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316611c12575f8652611a19565b816020019150611bdb565b80516020909101805190915f918261152e8383612f9a565b80516020909101805190915f918261152e8383612fe9565b805160407bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911615156020028203810151910190815292915050565b80515f90817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615611601565b80516020909101805190915f918261152e8383613039565b80516020909101805190915f918261152e8383613088565b80515f90610c6d816130d8565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d611d3f84848484613123565b9094509250600f60108a901c1660025b81811015611da55789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d9250611d9886868686613123565b9096509450600101611d4f565b5050611db18484613259565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe098909801978852509598975050505050505050565b80516020909101805190915f916116016002611e04848461335f565b906133c1565b80515f90610c6d81613406565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d611e69848484846134c2565b9094509250600f60108a901c1660025b81811015611da55789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d9250611ec2868686866134c2565b9096509450600101611e79565b7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b80515f90610c6d7fffffffbe19cfc6ef4f44cf88f14500d013df534fcaad48fca1d5ca47bea26fcc8273c51a14251b0dcf0ae24a96b7153991378938f5f5613add565b80515f90610c6d60028273c51a14251b0dcf0ae24a96b7153991378938f5f5613add565b80515f90610c6d81613d37565b80515f90610c6d81613ddd565b80516020909101805190915f9182611fb78382613039565b90505f611fc48382613039565b90505f6120227fffffffff0000000000000000000000000000000000000000000000000000000573c51a14251b0dcf0ae24a96b7153991378938f5f561201b61200c886130d8565b6120158a6130d8565b90613e28565b9190613add565b90508115158315151461123c5761114e81613e6d565b80515f9061204f8161204981613406565b90613e9f565b90507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116612078575060015b82525092915050565b80515f90610c6d81613ee4565b805160208201516040909201915f91906120a88282613f16565b9150600f601086901c1660025b818110156120db57855160209096019592506120d18484613f16565b93506001016120b5565b5050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0929092019182525092915050565b7f80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7f7fffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91906121c58282613f32565b9150600f601086901c1660025b818110156120db57855160209096019592506121ee8484613f32565b93506001016121d2565b7f7fffffff800000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b7f80000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d6122e884848484613f3d565b9094509250600f60108a901c1660025b81811015611da55789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d925061234186868686613f3d565b90965094506001016122f8565b80516020909101805190915f91611601828273c51a14251b0dcf0ae24a96b7153991378938f5f5613add565b80515f90610c6d8173c51a14251b0dcf0ae24a96b7153991378938f5f561405c565b805160208201516040909201915f91907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316601b90810b9160e085811d9291851690910b9084901d6123ee84848484614088565b9094509250600f60108a901c1660025b81811015611da55789516020909a019996507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716601b0b935060e087901d925061244786868686614088565b90965094506001016123fe565b805160208201516040909201805190925f929161152e61248e8273c51a14251b0dcf0ae24a96b7153991378938f5f561201b86600161335f565b8490613e28565b805160208201516040909201805190925f929161152e6124b58383613e28565b849061335f565b805160208201516040909201915f91906124d68183615909565b9150600f601086901c1660025b818110156120db57855160209096019592506124ff8385615909565b93506001016124e3565b805160208201516040909201915f919061252381836159ef565b9150600f601086901c1660025b818110156120db578551602090960195925061254c83856159ef565b9350600101612530565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09190910190815292915050565b805160208201516040909201915f91906125bf8183615a02565b9150600f601086901c1660025b818110156120db57855160209096019592506125e88385615a02565b93506001016125cc565b805160208201516040909201915f919061260c8183615b37565b9150600f601086901c1660025b818110156120db57855160209096019592506126358385615b37565b9350600101612619565b805160208201516040909201915f91906126598183615b42565b9150600f601086901c1660025b818110156120db57855160209096019592506126828385615b42565b9350600101612666565b805160608401515f9190829081906126a490846140b2565b91509150815f0361276e5760a087015160808801516040517f295f36d70000000000000000000000000000000000000000000000000000000081526004810191909152602481018590525f9173ffffffffffffffffffffffffffffffffffffffff169063295f36d790604401602060405180830381865afa15801561272b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061274f91906159bd565b60608901519091506127629085836107a7565b60608901528552612772565b8085525b509295945050505050565b8051602082015160608501516040909301925f92919061279e9083836107a7565b606087015250829150509392505050565b60605f825160020267ffffffffffffffff8111156127cf576127cf6156ac565b6040519080825280601f01601f1916602001820160405280156127f9576020820181803683370190505b50905061ffff80196020850160208651028101600285015b81831015611a1957805183518616908516178152602090920191600201612811565b5f805f61284085856140f9565b51600281901a9660039190911a95509350505050565b6020810283835e505050565b5f80856040015190505f805f805f60028b61010001515161288391906159ef565b60e08c01516101008d0151602080830151600261ffff9b909b168b8102850160219081015160f01c5f93841a9d909d029095019b909b019384015160258086019b50600791831a91821691829003600402909501909401985092965001935090915061549e90805b86881015612a6d5787519050600284825f1a060285015160f01c925062ffffff8160e01c1691506129218e838e8663ffffffff16565b9b506002848260041a060285015160f01c925062ffffff8160c01c16915061294e8e838e8663ffffffff16565b9b506002848260081a060285015160f01c925062ffffff8160a01c16915061297b8e838e8663ffffffff16565b9b5060028482600c1a060285015160f01c925062ffffff8160801c1691506129a88e838e8663ffffffff16565b9b506002848260101a060285015160f01c925062ffffff8160601c1691506129d58e838e8663ffffffff16565b9b506002848260141a060285015160f01c925062ffffff8160401c169150612a028e838e8663ffffffff16565b9b506002848260181a060285015160f01c925062ffffff8160201c169150612a2f8e838e8663ffffffff16565b9b5060028482601c1a060285015160f01c925062ffffff81169150612a598e838e8663ffffffff16565b9b50612a66602089615909565b97506128eb565b612a78601c89615b42565b9750612a85866004615a02565b612a8f9089615909565b96505b86881015612ad55750508551601c81901a83900660020284015160f01c915062ffffff811690612ac18e838e86565b9b50612ace600489615909565b9750612a92565b612ae18d8a8e8e614128565b50999c9b505050505050505050505050565b6040805160f083901c602081810283010190925290815261ffff63ffffffff67ffffffffffffffff6fffffffffffffffffffffffffffffffff612b5f565b5f5b8215612b5957825182526020830151602083015260408301519250604082019150612b33565b50919050565b602085018660101b60901c8015612c4f578060401c8015612bcd578060201c8015612b9157612b8e8185612b31565b93505b508086168015612bcb578060101c8015612bb257612baf8186612b31565b94505b508088168015612bc957612bc68186612b31565b94505b505b505b508084168015612c4d578060201c8015612c11578060101c8015612bf857612bf58186612b31565b94505b508088168015612c0f57612c0c8186612b31565b94505b505b508086168015612c4b578060101c8015612c3257612c2f8186612b31565b94505b508088168015612c4957612c468186612b31565b94505b505b505b505b508682168015612d5b578060401c8015612cd9578060201c8015612c9d578060101c8015612c8457612c818186612b31565b94505b508088168015612c9b57612c988186612b31565b94505b505b508086168015612cd7578060101c8015612cbe57612cbb8186612b31565b94505b508088168015612cd557612cd28186612b31565b94505b505b505b508084168015612d59578060201c8015612d1d578060101c8015612d0457612d018186612b31565b94505b508088168015612d1b57612d188186612b31565b94505b505b508086168015612d57578060101c8015612d3e57612d3b8186612b31565b94505b508088168015612d5557612d528186612b31565b94505b505b505b505b505050505050919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d975750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f612e476141bb565b6040517ff5c36eaf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb93899063f5c36eaf90602401602060405180830381865afa158015612ec3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061017f9190615b55565b5f805f805f612ef68787614261565b9250925092505f80612f088585613259565b9150915081838015612f175750815b9650965050505050505b9250929050565b5f805f612f3585856142bd565b91509150612f43828261431f565b95945050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d612f8f84848484614379565b979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d612fdd84848484614390565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61302c84848484614390565b1315979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d61307c84848484614390565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6130cb84848484614390565b1215979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82821215613118576131128282614464565b90925090505b5f612f438383614507565b5f808515841517801561314f57865f036131435784849250925050613250565b86869250925050613250565b6131598787614565565b90975095506131688585614565565b90955093508584131561317c579395929492935b838603604c811115613195578787935093505050613250565b80600a0a86816131a7576131a761586f565b0595505086850180881860ff90811c151589881890911c1516801561324257877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03613229576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a905260248101899052604401610280565b600a968790059690980586019760019790970196613246565b8198505b5050868692509250505b94509492505050565b5f601b83900b83148383826132bd577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561329d57620186a0860595506005850194505b8586601b0b146132b857600a8605955084600101945061329d565b6132d3565b855f036132d357505f925060019150612f219050565b848560030b1461332f575f8512156132f357505f9250829150612f219050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d84806133a486868686613123565b915091505f6133b38383614507565b9a9950505050505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d84806133a4868686866134c2565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82811261343d57509192915050565b5f8061344984846145bb565b91509150805f0361345e575093949350505050565b5f8113156134b7576134b282847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4613123565b935091505b5f612f8f8385614507565b5f80835f03613507576040517f7a97930f0000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610280565b855f0361351857505f905080613250565b5f805f806135268a8a614623565b919b50995091506135378888614623565b919950975090505f6135488b6148c4565b90505f6135548a6148c4565b90507f161bcca7119915b50764b4abe86529797775a5f1719510000000000000000000604c818310156139715784156135b257507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000009050604b613930565b6f4b3b4ca85a86c47a098a2240000000008310156136de57678ac7230489e80000831015613642576402540be40083101561361057620186a08310156136005750620186a0905060056138b9565b506402540be4009050600a6138b9565b655af3107a400083101561362f5750655af3107a40009050600e6138b9565b50678ac7230489e80000905060136138b9565b6b204fce5e3e250261100000008310156136945769152d02c7e14af680000083101561367d575069152d02c7e14af6800000905060176138b9565b506b204fce5e3e250261100000009050601c6138b9565b6d314dc6448d9338c15b0a000000008310156136c357506d314dc6448d9338c15b0a00000000905060216138b9565b506f4b3b4ca85a86c47a098a224000000000905060266138b9565b780197d4df19d605767337e9f14d3eec8920e4000000000000008310156137d65773af298d050e4395d69670b12b7f41000000000000831015613771577172cb5bd86321e38cb6ce6682e8000000000083101561375257507172cb5bd86321e38cb6ce6682e800000000009050602b6138b9565b5073af298d050e4395d69670b12b7f41000000000000905060306138b9565b76010b46c6cdd6e3e0828f4db456ff0c8ea00000000000008310156137b2575076010b46c6cdd6e3e0828f4db456ff0c8ea0000000000000905060356138b9565b50780197d4df19d605767337e9f14d3eec8920e4000000000000009050603a6138b9565b7c03b58e88c75313ec9d329eaaa18fb92f75215b1710000000000000000083101561386c577a026e4d30eccc3215dd8f3157d27e23acbdcfe6800000000000000083101561384457507a026e4d30eccc3215dd8f3157d27e23acbdcfe680000000000000009050603f6138b9565b507c03b58e88c75313ec9d329eaaa18fb92f75215b17100000000000000000905060446138b9565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000008310156138b957507e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca000000000000000000905060495b8183116138ed57600a820491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016138b9565b815f03613930576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c9052604401610280565b85613971576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018f9052602481018e9052604401610280565b807f8000000000000000000000000000000000000000000000000000000000000000018d126139a457808d039c50613a17565b7f80000000000000000000000000000000000000000000000000000000000000009c90038c015f811315613a1757807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038b13613a0457998a0199613a17565b5f80995099505050505050505050613250565b5f808e128015613a2657505f8c135b15613a63577f80000000000000000000000000000000000000000000000000000000000000008e01808d13613a5b575f613a5f565b808d035b9150505b8b818f01039750613a808f8e613a7a888789614925565b8b614a0a565b90995097505f811315613aca57604c811315613aaa575f809a509a50505050505050505050613250565b80600a0a8981613abc57613abc61586f565b059850885f03613aca575f97505b5096985094965061325095505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff848116601b0b9060e086901d908516613b1a5750600191506108769050565b5f8213613bb357815f03613b7757613b32855f613039565b15613b6c576040517f8be8297200000000000000000000000000000000000000000000000000000000815260048101869052602401610280565b505f91506108769050565b6040517fcceba0f10000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b613bbe856001612f4c565b8015613bcf5750613bcf865f612f9a565b15613bde578592505050610876565b613be8855f613039565b15613c1157613c08613bf987613ee4565b613c0287613e6d565b86613add565b92505050610876565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b60e086901d5f80613c4484846145bb565b915091505f613c5483855f614b11565b905060015f8080613c8b8f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b9160e09190911d90565b915091505b60018510613cd25784600116600103613cb557613caf84848484613f3d565b90945092505b600185901c9450613cc882828484613f3d565b9092509050613c90565b5f80613cdf8f8e8e614c28565b91509150613cef82828a8d613f3d565b9092509050613cff8f8383614f5d565b9092509050613d1082828888613f3d565b90925090505f613d208383614507565b9e5050505050505050505050505050509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d828112613d6e57509192915050565b5f80613d7a84846145bb565b915091505f84128015613d8c57508015155b156134b7576134b282847f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4614088565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d82613e1083836145bb565b9150505f613e1e8284614507565b9695505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d84806133a486868686613f3d565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d6131128282614464565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d84806133a486868686614088565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d61311282826150ce565b5f613f218383612f9a565b613f2b5781610876565b5090919050565b5f613f218383613039565b5f8085158415178015613f55575f92505f9150614052565b613f5f8487615b75565b91505f613f6b886148c4565b90505f613f77876148c4565b90505f613f848383615127565b5090505f6f0785ee10d5da46d900f436a000000000821115613fb9576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a7640000821115613fda57670de0b6b3a7640000820491506012015b633b9aca00821115613ff357633b9aca00820491506009015b61271082111561400857612710820491506004015b811561401c57600a82049150600101614008565b6140268187615b75565b95506140488b8a614042878761403d87600a615b37565b614925565b89614a0a565b9097509550505050505b5094509492505050565b5f610876837fffffffff0000000000000000000000000000000000000000000000000000000584613add565b5f806140948484614464565b90945092506140a586868686613123565b9150915094509492505050565b5f80825f526010600f60205f20060261ffff85821c165b80156140f057805185036140e75760019350602081015192506140f0565b604001516140c9565b50509250929050565b5f8061410484615162565b60020260010190505f614117858561517c565b949091019093016020019392505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08201805163ffff0000601087901b1661ffff86161782527f312f5ae588c6ff62cd3f006af06cd48c98d7321649db7d8b2c396a81a204655591905f808686036004017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8801865afa5090525050505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580614212575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b1561425f576040517f73e6d7b300000000000000000000000000000000000000000000000000000000815273200e12d10bb0c5e4a17e7018f0f1161919bb93896004820152602401610280565b565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8611156142ac57600a860460018201600a88065f14935093509350506142b6565b8593509150600190505b9250925092565b5f805f805f6142cc8787614261565b92509250925080614313576040517fc47179660000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604401610280565b50909590945092505050565b5f805f61432c8585613259565b9150915080614371576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610280565b509392505050565b5f61438685858585614390565b1495945050505050565b5f80851584151781871282861218178584141780156143b55786859250925050613250565b505f858413156143c9575092949193919260015b8386035f8112604c82131780156143fc5782156143ee575f8994509450505050613250565b885f94509450505050613250565b600a82900a8981028a8282816144145761441461586f565b0514614440578415614430575f8b965096505050505050613250565b8a5f965096505050505050613250565b84156144555788965094506132509350505050565b95508794506132509350505050565b5f807f800000000000000000000000000000000000000000000000000000000000000084036144fd577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83036144f0576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810185905260248101849052604401610280565b600a840593508260010192505b50505f9190910391565b5f805f6145148585613259565b9150915080158015614524575081155b15614371576040517f8eba4d070000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610280565b5f805f805f6145748787614623565b92509250925080614313576040517f05e51ecb0000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610280565b5f805f83126145ce57508290505f612f21565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb483121561460057505f905082612f21565b5f839003600a0a8085816146165761461661586f565b0794859003959350505050565b5f805f845f0361463b57505f915081905060016142b6565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f0361484f576f4b3b4ca85a86c47a098a22400000000085051580156146a457507f80000000000000000000000000000000000000000000000000000000000000268412155b156146c5576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561470d57507f80000000000000000000000000000000000000000000000000000000000000138412155b1561472657678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c640000000000000000850515801561477257507f800000000000000000000000000000000000000000000000000000000000000a8412155b15614788576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e400000000000000000085051580156147d757507f80000000000000000000000000000000000000000000000000000000000000028412155b156147ed57606485029450600284039350614788565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee8000000000000000000850515801561483d57507f80000000000000000000000000000000000000000000000000000000000000018412155b1561484f57600a850294506001840393505b600a8086029081058614801561488557507f80000000000000000000000000000000000000000000000000000000000000018512155b15614894578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b5f80821215614921577f8000000000000000000000000000000000000000000000000000000000000000820361491b57507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b5f805f6149328686615127565b91509150815f036149565783818161494c5761494c61586f565b0492505050610876565b8382106149a0576040517f6c59da12000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610280565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614ad4577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614ac157614a697f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001615909565b8403614a9957507f8000000000000000000000000000000000000000000000000000000000000000905081613250565b614aa4600a856159ef565b614aad90615b9c565b614ab8846001615b75565b91509150613250565b614aca84615b9c565b8391509150613250565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614b0757614aad600a856159ef565b5082905081613250565b5f818303614b20575082610876565b82821315614b6357828203604c811380614b3a57505f8113155b15614b48575f915050610876565b80600a0a8581614b5a57614b5a61586f565b05915050610876565b818303604c811380614b7557505f8113155b15614bbd576040517f1d5d6d10000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260448101849052606401610280565b600a81900a85810286828281614bd557614bd561586f565b0514614c1e576040517f1d5d6d10000000000000000000000000000000000000000000000000000000008152600481018890526024810187905260448101869052606401610280565b9250610876915050565b5f808383614c368282614565565b90965094505f8613614cb757855f03614c7b576040517f561fc7b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5d3fd4db0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610280565b5050837f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000003614cf557614ceb83604c615b75565b5f91509150610974565b7f161bcca7119915b50764b4abe86529797775a5f171951000000000000000000084121580614d44577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb5614d66565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb45b5f0b8412614f21575f805f805f85614d7f57604b614d82565b604c5b614d8c908a615b75565b90505f8087614db9577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000614dda565b7e05a8e89d75252446eb5d5d5b1cc5edf20a1a059e10ca0000000000000000005b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169050808c81614e0c57614e0c61586f565b05818102955090850193507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18019050614e458c826151d2565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000000295508594508a8414614ed1576123278114614eac57614e878c826001016151d2565b7d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000002614ece565b7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000005b94505b50614f01838b848c89897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4615259565b909a509850614f128a8a835f613123565b97509750505050505050610974565b614f2b85856150ce565b9095509350614f3b868686614c28565b9095509350614f4a8585614464565b9250925050610974565b50935093915050565b5f805f841215614f9957614f718484614464565b9094509250614f81858585614f5d565b9094509250614f9084846150ce565b91509150610974565b5f80614fa586866145bb565b9092509050845f8080614fb885856152f6565b9194509250905061270d612710614fd0600182615bcc565b8514614fe757614fe18d86866153e5565b90925090505b8315615072575f614ff9866001615b75565b90505b80848583028161500e5761500e61586f565b051461502557600a84059350600a88059750614ffc565b6150666150328588615bf2565b8961503d8785615bf2565b8f87877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc615259565b909d509b506150999050565b819b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9a505b5050505050866150aa84835f614b11565b6150b5886001615b75565b6150bf9190615b75565b94509450505050935093915050565b5f8061511c7f161bcca7119915b50764b4abe86529797775a5f17195100000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb486866134c2565b915091509250929050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b5f81515f0361517257505f919050565b50602001515f1a90565b5f61518683615162565b82106151c25781836040517ffcfaeff1000000000000000000000000000000000000000000000000000000008152600401610280929190615c3d565b50600202016003015161ffff1690565b5f806151e1600a6123286159ef565b6151ec906002615a02565b6151f7906001615909565b90505f615207600a6123286159ef565b90506002600a8504026001015f8052600281601e883c505f51617fff8116935061800081161561523657918101915b505f80526001600a8506600a6064870402018301601f873c50505f510192915050565b5f8088880361526c5750839050816152ea565b5f805f8061527c8c8b8f8d614088565b915091505f8061528e8a8a8d8c614088565b9150915061529e84848484613f3d565b8096508197505050505050505f806152b88b8b8f8d614088565b915091505f806152ca868686866134c2565b915091505f806152dc84848f8e613123565b909a50985050505050505050505b97509795505050505050565b5f805f837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0361532e57508391505f905060016142b6565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8412156153bc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb084121561538d57505f91505082151560016142b6565b5f846004015f03600a0a90505f8187816153a9576153a961586f565b05945050808402861415925090506142b6565b5f84126153d157505f915081905060016142b6565b50505060048101600a0a82025f60016142b6565b5f808060646153f7600a6123286159ef565b615404600a6123286159ef565b61540f906002615a02565b61541a906001615909565b6154249190615909565b61542e9190615909565b9050615472565b5f8052600280600a8504028301601e833c5f80516107d0840193505f80526001600a8606600a6064880402018501601f853c5f5101949350505050565b61547d858288615435565b92508315614f5457615493600186018288615435565b915050935093915050565b61425f615c55565b5f602082840312156154b6575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610876575f80fd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61087660208301846154e5565b5f60208284031215615553575f80fd5b813567ffffffffffffffff811115615569575f80fd5b820160e08185031215610876575f80fd5b5f815180845260208085019450602084015f5b838110156155a95781518752958201959082019060010161558d565b509495945050505050565b604081525f6155c6604083018561557a565b8281036020848101919091528451808352858201928201905f5b818110156155fc578451835293830193918301916001016155e0565b5090979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461562a575f80fd5b50565b5f6020828403121561563d575f80fd5b813561087681615609565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261567b575f80fd5b83018035915067ffffffffffffffff821115615695575f80fd5b6020019150600581901b3603821315612f21575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715615720576157206156ac565b604052919050565b5f67ffffffffffffffff821115615741576157416156ac565b5060051b60200190565b5f61575d61575884615728565b6156d9565b83815260208082019190600586811b86013681111561577a575f80fd5b865b8181101561580157803567ffffffffffffffff81111561579a575f80fd5b880136601f8201126157aa575f80fd5b80356157b861575882615728565b81815290851b820186019086810190368311156157d3575f80fd5b928701925b828410156157f1578335825292870192908701906157d8565b895250505094830194830161577c565b5092979650505050505050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615841575f80fd5b83018035915067ffffffffffffffff82111561585b575f80fd5b602001915036819003821315612f21575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826158aa576158aa61586f565b500690565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561017f5761017f6158dc565b828152604060208201525f615934604083018461557a565b949350505050565b5f602080838503121561594d575f80fd5b825167ffffffffffffffff811115615963575f80fd5b8301601f81018513615973575f80fd5b805161598161575882615728565b81815260059190911b8201830190838101908783111561599f575f80fd5b928401925b82841015612f8f578351825292840192908401906159a4565b5f602082840312156159cd575f80fd5b5051919050565b5f602082840312156159e4575f80fd5b815161087681615609565b5f826159fd576159fd61586f565b500490565b808202811582820484141761017f5761017f6158dc565b600181815b80851115615a7257817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615a5857615a586158dc565b80851615615a6557918102915b93841c9390800290615a1e565b509250929050565b5f82615a885750600161017f565b81615a9457505f61017f565b8160018114615aaa5760028114615ab457615ad0565b600191505061017f565b60ff841115615ac557615ac56158dc565b50506001821b61017f565b5060208310610133831016604e8410600b8410161715615af3575081810a61017f565b615afd8383615a19565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615b2f57615b2f6158dc565b029392505050565b5f6108768383615a7a565b8181038181111561017f5761017f6158dc565b5f60208284031215615b65575f80fd5b815160ff81168114610876575f80fd5b8082018281125f831280158216821582161715615b9457615b946158dc565b505092915050565b5f7f8000000000000000000000000000000000000000000000000000000000000000820361491b5761491b6158dc565b8181035f831280158383131683831282161715615beb57615beb6158dc565b5092915050565b8082025f82127f800000000000000000000000000000000000000000000000000000000000000084141615615c2957615c296158dc565b818105831482151761017f5761017f6158dc565b828152604060208201525f61593460408301846154e5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe097c09cb0a0d0bce0c4e0c600c780cba0d0f0d210d330d450dea0e270ff3115d124a13ec153b160d16d3182213ec1910193f193f196e199d1a251a391b261b8a1ba21c1d1c351c4d1c861cb01cc81ce01ced1de81e0a1e171ecf1f1e1f611f851f921f9f20382081208e210d215c21ab21f822472296234e237a239c2454249524bc2509255625a525f2263f268c277d"; -/// @dev The function pointers known to the interpreter for dynamic dispatch. -/// By setting these as a constant they can be inlined into the interpreter -/// and loaded at eval time for very low gas (~100) due to the compiler -/// optimising it to a single `codecopy` to build the in memory bytes array. -bytes constant OPCODE_FUNCTION_POINTERS = - hex"097c09cb0a0d0bce0c4e0c600c780cba0d0f0d210d330d450dea0e270ff3115d124a13ec153b160d16d3182213ec1910193f193f196e199d1a251a391b261b8a1ba21c1d1c351c4d1c861cb01cc81ce01ced1de81e0a1e171ecf1f1e1f611f851f921f9f20382081208e210d215c21ab21f822472296234e237a239c2454249524bc2509255625a525f2263f268c277d"; +/// @dev The addresses that MUST already have code on a network before +/// this release can be broadcast there, `abi.encode`d as an `address[]` +/// because Solidity has no file-scope constant of dynamic array type. +bytes constant DEPENDENCIES = + hex"00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c51a14251b0dcf0ae24a96b7153991378938f5f5000000000000000000000000200e12d10bb0c5e4a17e7018f0f1161919bb9389"; diff --git a/src/generated/0_1_9/RainlangParser.sol b/src/generated/0_1_9/RainlangParser.sol new file mode 100644 index 000000000..e3bf61d0d --- /dev/null +++ b/src/generated/0_1_9/RainlangParser.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: LicenseRef-DCL-1.0 +// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd +pragma solidity ^0.8.25; + +// THIS FILE IS AUTOGENERATED BY THE BUILD SCRIPT. DO NOT EDIT BY HAND. + +/// @dev Hash of the known bytecode. +bytes32 constant BYTECODE_HASH = bytes32(0x2de1c0c4d2f338a7112c212f9264a6d1f14bc17b9dc673696e19419ed20aeac5); + +/// @dev The deterministic deploy address of the contract when deployed via +/// the Zoltu factory. +address constant DEPLOYED_ADDRESS = address(0x0030FF8D5386EF3AdDD5CcaCc6DdB9c3D0C5adaA); + +/// @dev The creation bytecode of the contract. +bytes constant CREATION_CODE = + hex"6080604052348015600e575f80fd5b506154ab8061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c80637764fd9c1161004d5780637764fd9c146100b0578063ccf44775146100d1578063d6d8c9a8146100e6575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b610076366004614d1c565b6100ee565b60405190151581526020015b60405180910390f35b6100a361009e366004614e1c565b610186565b6040516100879190614e96565b6100c36100be366004614e1c565b61023e565b604051610087929190614f47565b6100d961025e565b6040516100879190614f9c565b6100d961026d565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f1a2c8edd00000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040805160208101909152606081525f6101e3836101a2610277565b6101aa61029a565b60408051808201909152600881527f1c591fa51fe5204200000000000000000000000000000000000000000000000060208201526102ba565b90505f6020840190505f6101fa8580510160200190565b90506102078383836104ac565b915061021483838361050e565b9150604051806020016040528061022a856106db565b90529350505050610239610739565b919050565b606080610255610250846101a2610277565b61077e565b91509150915091565b60606102686108fb565b905090565b6060610268610948565b6060604051806101a0016040528061016381526020016152b86101639139905090565b60606040518060c001604052806090815260200161541b60909139905090565b6103476040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b8152602001848152602001858152602001600467ffffffffffffffff8111156103cd576103cd614d5b565b6040519080825280602002602001820160405280156103f6578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016828152808301825283517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001681178452855290840182905283018190529082018190526080820181905260a082018190526101208201819052610140820181905261020082015290505b95945050505050565b5f5b8183101561050457825160015f9190911a1b6401000026008116156104df576104d8858585610c09565b93506104fe565b658000000000008116156104f8576104d8858585610c4d565b50610504565b506104ae565b50815b9392505050565b815160408051808201909152601081527f7573696e672d776f7264732d66726f6d0000000000000000000000000000000060208201525f919061055090614fae565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008216146105815783915050610507565b5060108301925081831061061a5761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fe3e4992d00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60405180910390fd5b825160015f91821a1b90640100002600821690036106835761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176105dc565b836001019350505b818310156105045761069e8484846104ac565b925081831015610504575f806106b5868686610e7b565b9096509092509050816106c9575050610504565b6106d486868361102d565b505061068b565b60c08101516040516060919073ffffffffffffffffffffffffffffffffffffffff602082015f5b841561072357848316825260a09490941c5193602090910190600101610702565b8352604052610731826110ec565b509392505050565b60405162010000811061077b576040517f766c065f00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b50565b6060805f8361022001515111156108d0575f61079f84610220015160200190565b90505f6107b485610220015180510160200190565b90506107c18583836104ac565b91506107ce85838361050e565b91505b80821015610805576107e48583836104ac565b91506107f18583836110fa565b91506107fe8583836114fd565b91506107d1565b80821461083e576040517f7d565df600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610100850151600816156108cd5761022085015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517ff06f54cf00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b50505b5f806108e56108de86611abc565b8690611bf1565b915091506108f1610739565b9094909350915050565b6040805160a0810182526004808252611c596020830152611fa592820192909252611fe5606082810191909152612042608083015291908190805b61093f8161222b565b94505050505090565b6060614d125f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff1681526020016122bb81526020016122bb81526020016122bb8152602001612387815260200161249b815260200161249b81526020016123878152602001612387815260200161249b81526020016122bb81526020016122bb81526020016122bb815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b8152509050606081905060488151146109365780516040517fc8b56901000000000000000000000000000000000000000000000000000000008152600481019190915260248101849052604401610611565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690525f610c4583836401000026006124dd565b949350505050565b6101008301805160011790525f60048301821015610ce75761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f25a7646800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b825160f01c612f2a8114610d765761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f3e47169c00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6003840193505f5b83851015610e1b5784515f1a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd18101610e0f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86015160f01c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d18101610e0d57505050600193840193610e1b565b505b85600101955050610d7e565b80610e715761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017610cb2565b5092949350505050565b81515f90819081908190600181831a1b6703ff200000000000811615610fa25786610ea7896001615020565b1015610f9957600182811a1b7ffffffffffffffffffffffffffffffffffeffffffffffffffffff00000000000082821701610ee4575f9350610f93565b7ffffffffffffffffffffffffffffffffffffffffffeffffffffff00000000000082821701610f8e576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f75c28ff900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b600193505b50610fe7565b60019250610fe7565b640400000000811615610fb85760029250610fe7565b6b080000000000000000000000811615610fd55760039250610fe7565b505f9450869350849250611024915050565b505f905061101588888861100d83876101a09190910151600291820201015161ffff1690565b63ffffffff16565b90975060019550879450925050505b93509350939050565b73ffffffffffffffffffffffffffffffffffffffff8111156110ca5761022083015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f9d7e517e00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60c09092018051604080516020810190915290815260a01b9290921790915250565b806110f681612506565b5050565b5f5b818310156105045782515f90600190821a1b6f07fffffe80000000000000000000000081161561137757610100860151600116156111b65761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f5520a51700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6f07fffffe000000000000000000000000811615611289576111e985856f07fffffe0000000003ff200000000000612554565b90955091505f6111f98784612623565b50905080156112835761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f53e6feba00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b506112aa565b6112a760018601856f07fffffe0000000003ff2000000000006124dd565b94505b856040015160ff1660ff14806112c757508560a0015160ff1660ff145b1561134d5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f3820634100000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b604086018051600190810190915260a08701805190910190526101008601805160091790526114f6565b6401000026008116156113c95761139760018601856401000026006124dd565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe16905294506114f6565b670400000000000000811615611415575050610100840180516008177ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe16905260019290920191610504565b658000000000008116156114a55761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fedad0c5800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017611181565b50506110fc565b5f5b818310156105045782515f90600190821a1b6f07fffffe00000000000000000000000081161561171d57610100860151600116156115b95761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f4e803df600000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b846115d581866f07fffffe0000000003ff200000000000612554565b80945081975050505f806115ee8961024001518661269e565b91509150811561162f57611603898989612772565b97505f6116108a836129fd565b905061161d8a8383612a23565b50610100890180516002179052611709565b6116398986612c08565b9092509050811561165d5761164f895f83612a23565b61165889612c82565b611709565b5f6060848a03600581016116728d8d8d612772565b9b508c6101e0015151602002602001810190505f60059050604051935060208201840160405282818501528184528394506116ba8860056116b38760200190565b0185612ce8565b5050506101e08b01518051600101906116ed906116e7836116de8680510160200190565b90602002900390565b83612cf1565b506116fa8b60ff84612a23565b50506101008901805160021790525b505050610100860180516001179052611ab5565b6101008601516002161561183f576501000000000081165f036117bb5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f23b5c6ea00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b606086810180515f1a6003019190829053603b821115611807576040517f6232f2d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050610100860180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc169052600190940193611ab5565b6502000000000081161561191b576060868101515f90811a91908290036118e15761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f7f9db54200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b808801600383039250828153826004820101515f1a8360028301015160f01c600101535061190e88612c82565b5050600190940193611ab5565b64010000260081161561196d5761193b60018601856401000026006124dd565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611ab5565b6b0800000003ff2004000000008116156119a85761198c868686612cfd565b945061199786612c82565b610100860180516001179052611ab5565b651000000000008116156119cd576119c08686612e27565b5050600190920191610504565b670800000000000000811615611a05576119e78686612e27565b6119f08661327f565b50506004610100850152600190920191610504565b65800000000000811615611a645761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017611470565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017611584565b50506114ff565b60e08101518151516060919060f082901c9060208114611b08576040517f858f2dcf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051935060208401601083045f8183535060016008850483018101928391015f80805b88811015611b655789811c61ffff81165163ffff0000601092831b16811760e01b8786015284019360f08390031b929092179101611b2c565b50825117909152878203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08181018952908801601f01166040525f5b82811015611be5576002810288016003015161ffff90811683018051602060f082901c019260e09190911c1690611bda838284612ce8565b505050600101611ba2565b50505050505050919050565b6060805f611bfe846135ad565b90505f5b81811015611c41575f611c1586836135c7565b60040190505f611c2587846135f6565b60040282019050611c3788838361360d565b5050600101611c02565b5083611c4c866138cd565b92509250505b9250929050565b5f80808080611c69888888613942565b985090925090508181036040811115611cfd5761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fff2f594900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b805f03611d855761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fc75cd50900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60028106600103611e115761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fd76d9b5700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6001820397505f5b838910611f945788515f90811a906001821b906703ff000000000000821615611e6557507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd08201611f5e565b6c7e000000000000000000000000821615611ea357507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa98201611f5e565b687e0000000000000000821615611edd57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc98201611f5e565b6102208d01518c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f69f1e3e600000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909b019a831b96909617955050600401611e19565b50509350909150505b935093915050565b5f805f805f80611fb58888613992565b92965090945092509050611fca898486613e31565b82611fd58383613eb5565b9550955050505050935093915050565b5f808080611ff4878787613f07565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301805184840382529199509294509092505f91612032816140c1565b9190529698969750505050505050565b6001909101905f808361206681856fffffffffdffffffffffffffeffffd9ff6124dd565b9450848181036120f15761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517ff73a1aa800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6120fc878787610c09565b95508561211a81876fffffffffdfffffffffffffffffffffff6124dd565b9650868681106121a65761022089015188037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fc4b1913500000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b875160015f91821a1b906b20000000000000000000000082169003612216576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612171565b5060019097019687611fd58a868686866140ed565b60605f825160020267ffffffffffffffff81111561224b5761224b614d5b565b6040519080825280601f01601f191660200182016040528015612275576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156122af5780518351861690851617815260209092019160020161228d565b50939695505050505050565b5f8151600103612346575060208101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b60e082901d5f6122fe8383836142b1565b905061ffff81111561233c576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250610239915050565b81515f0361235557505f919050565b6040517f1ac6690800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f815160020361245f57602082015160408301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d5f6123ce8383836142b1565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b935060e085901d925090505f6124078484836142b1565b905060ff821180612418575060ff81115b1561244f576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60081b1794506102399350505050565b600282511015612355576040517ff16066b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81515f146124d6576040517f9f16b02000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505f919050565b5f5b5f82600186515f1a1b161183851016156124fe576001840193506124df565b509192915050565b60208101602082510282015b8082101561254f5781518151835281526020909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001612512565b505050565b5f80806001818787036020811161256b578061256e565b60205b915050875192505b8519600184841a1b1615818310161561259457600182019150612576565b9681019660208290036008810293841c90931b9261261657604080516020810185905201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fe47fe8b700000000000000000000000000000000000000000000000000000000825261061191600401614f9c565b5095969095509350505050565b5f8061262f8484612c08565b909250905081611c525750610120830180515f93845260209384902060408051928352948201855293909401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909316601084901b62ff00001617909317909252909160ff90911660010190565b600182810180515f928392600560ff93909316602102870192830192909101835b818310156127635760018301516021909301805190935f90819060ff1681806126e8838e61430d565b915091508186165f0361270a575f809b509b5050505050505050505050611c52565b5f8761271a600185038916614338565b016004028b015195505062ffffff908116935084168303915061274e9050575060019750601c1a9550611c52945050505050565b61275783614338565b840193505050506126bf565b505f9788975095505050505050565b81516101e08401515f80825291600190831a1b907ffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000008201610e71576127b685615060565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe169052805190955060015f91821a1b9250805b8587101561299b57865160015f9190911a1b93506401000026008416156128245761281d888888610c09565b96506127f1565b6740000000000000008416156128485761283d87615060565b96506001905061299b565b6001886101000151165f0361291957600482036128e05761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f8c9fdbb300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5f6128ec898989614410565b60208581028701018190526101008b0180516001179052909850905061291183615060565b9250506127f1565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f722cd24a00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b806129f15761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612966565b50905250919392505050565b6101c08201516002828102820101516101e08401515f9261ffff90921691906104a39083565b612a2c83614438565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb1660081790526020808401515f90811a8501602101805190911a60ff811492919060018101825350508115612ab5576040517f8092d1ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050825180516060808601515f90811a87016061018051939461ffff8616949093921a60ff81149291600886048503601c0191600181018253505f60038201537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe30180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690911790528115612b78576040517f3abd0c5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050602090920183821b176018820185901b178083529160e0829003612c005760408051601083901b6020908117601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016918252810190915281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000168117825286525b505050505050565b6101208201516101408301515f8381526020808220919384939290911c91600160ff84161b80821615612c6d5761ffff83165b8015612c6b578360201c8503612c5e576001965061ffff8460101c169550612c6b565b51925061ffff8316612c3b565b505b17610140909601959095525090939092509050565b6060818101515f90811a919082900361254f57602083810180515f1a600101919082815350603e8210612ce1576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b8083835e505050565b6020810283835e505050565b5f8080612d0b868686610e7b565b9096509250905080612d995761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fb0e4e5b300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5f80612da4846144c4565b6101808901511615612de55761016088015160101c5b8015801590612dc7575082155b15612de357602081015190519085149250600190910190612dba565b505b61016088015161ffff16612e0b600184612dff5782612e03565b8383035b8b9190612a23565b5081612e1b57612e1b88856144db565b50949695505050505050565b6060828101515f1a908115612eb75761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f6fb11cdc00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5050612ec282614438565b61010082018051600416600890811790915260a0830151602084015160ff8083169360f89290921c9290911c1681035f819003612fec576004856101000151165f03612f895761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fab1d3ea700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b90820190603e8210612fc7576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60f882901b6020860152610200850151612fe1908461452d565b610200860152613107565b6001811115613107578083101561307e5761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f78ef278200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b808311156131075761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f43168e6800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b8082036001016020601083028101905b8181101561326b5760a08801516020848a0181015191831c61ffff16915f1a9060015b8281116132595760208406601c0361315357925160f01c925b83516102008d015160019190911a9061316c90826145b1565b6102008e01525f82851480156131825750896001145b61318d57600161318f565b8b5b6102008f01519091506131a290826145f7565b6102008f0152600f8111806131b75750600f82115b1561323d576102208e01518d037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f7ea1869f00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b818160041b17600187015350506004939093019260010161313a565b50506001909401935050601001613117565b5050505060081b60a0909301929092525050565b60e081015160208083015160f083811c925f9290921a60010191908390036132d3576040517fa806284100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610200850151855180515f928392909160219060101c61ffff165b801561330557805190925060101c61ffff166132ee565b506040518a82018051919650601c8401939160049160248901915f90811a805b8d8310156133ea5760048202860195506004878a03045b8082111561335a57965161ffff16601c81019950969003600761333c565b506004810298899003805186529894909401938103865b60078211156133b6575160101c61ffff1680518652601c909501947ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff990910190613371565b81156133d1575160101c61ffff168051865260048202909501945b50505060019182018051909291909101905f1a80613325565b50505082895250600488810180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9290940491909101601881901b8817939093179052601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660405260ff1094505083156134b6576040517fe972437e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134c36001808a1b615097565b891685891b60f06134d58b6010615020565b901b171760e08b01526101008a0180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7169052604080516020601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681815280820183525f80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001682178152908d52908c01819052908b0181905260608b0181905260808b0181905260a08b018190526101208b018190526101408b018190526102008b015250505050505050505050565b5f81515f036135bd57505f919050565b50602001515f1a90565b5f806135d2846135ad565b60020260010190505f6135e5858561466a565b949091019093016020019392505050565b5f8061360284846135c7565b515f1a949350505050565b8082101561254f5781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016138475760c08401515b80156138455760a081901c5161016086015161ffff60e085901c1660208101805160089390931b62ffff0016600187901a1760e81b7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909316929092179091526040517f570c7a630000000000000000000000000000000000000000000000000000000081529192915f908190819073ffffffffffffffffffffffffffffffffffffffff86169063570c7a6390613700908790600401614f9c565b5f60405180830381865afa15801561371a573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261375f9190810190615136565b925092509250821561383b5781516004146137a857816040517fbe2d187d0000000000000000000000000000000000000000000000000000000081526004016106119190614f9c565b60208201517fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff88161789525f5b815181101561383057613828828281518110613811576138116151e3565b60200260200101518c6144db90919063ffffffff16565b6001016137f3565b505050505050613845565b5050505050613648565b505b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016138c157606061ffff8260e01c1690505f6003820152600581019050806040517faedfba2f0000000000000000000000000000000000000000000000000000000081526004016106119190614f9c565b5060048201915061360d565b6101608101516040805161ffff8316808252602080820283019081019093529092909160109190911c90835b808211156139395760208301518252915161ffff16917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101906138f9565b50505050919050565b5f808080613951866002615020565b9050806c7e0000007e03ff0000000000005b86821081600184515f1a1b161515161561398257600182019150613963565b5090979096508695509350505050565b5f8281806139a78386652000000000006124dd565b925085831415836139c181886703ff0000000000006124dd565b94508085036139fb57507f34bd20690000000000000000000000000000000000000000000000000000000094505f9250829150613e289050565b5f80613a078a886146c0565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613a45575095505f9350839250613e28915050565b86519095506540000000000060015f9290921a9190911b161515888710169150508015613cd457506001909301925f84613a8881896703ff0000000000006124dd565b9550808603613ac357507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f9350839250613e28915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b660100000000000016151516600103613b32577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613ac5565b818114613b89575f80613b4584846146c0565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613b85575097505f9550859450613e289350505050565b9350505b5f831215613bc457507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f9450849350613e2892505050565b8315613bd057825f0392505b80820394505f851315613c1057507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f9450849350613e2892505050565b855f03613c1f57829550613cd1565b5f8590036043811115613c6057507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f9550859450613e289350505050565b600a0a8681025f88838381613c7757613c77615033565b0514159050601b82900b8214158180613c8d5750805b15613cc957507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f9850889750613e289650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b161515878610168015613e195760019095019485613d14818a652000000000006124dd565b965086613d2a818b6703ff0000000000006124dd565b9750808803613d6757507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f9550859450613e289350505050565b505f80613d74838a6146c0565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613db4575097505f9550859450613e289350505050565b9250508482015f83138015613dc857508581125b80613ddc57505f83128015613ddc57508581135b15613e1557507fd556b1110000000000000000000000000000000000000000000000000000000097505f9550859450613e289350505050565b9450505b845f03613e24575f93505b5050505b92959194509250565b7fffffffff0000000000000000000000000000000000000000000000000000000081161561254f576102208301515f9083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000179050815f528060045260245ffd5b5f805f613ec285856147ea565b9150915080610731576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610611565b5f80806001850181806f7ffffffffffffffffffffffb0000000081807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b8b0301602080821015613f555750805b875193505b84600185851a1b1615158184101615613f7857600183019250613f5a565b505080602003614003576102208c01518b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f30515bda00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b85810180519095505f1a6001811b6404000000001615806140235750858b145b156140a9576102208d015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f04022fbf00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b50949b939a505060018a019850919650505050505050565b5f80601f90505f60e09050818451168082175f528060208601600183016020035e50505f519392505050565b5f60608186860361ffff811115614133576040517fb6da789c00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b604080516041888803848101838101929092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690935260028281018590520181529350602284019250614189898484612ce8565b6141968783850183612ce8565b50505060c08701515b80156142605760a081901c516040517fc6c0cbb60000000000000000000000000000000000000000000000000000000081529091905f90819073ffffffffffffffffffffffffffffffffffffffff84169063c6c0cbb690614204908890600401614f9c565b6040805180830381865afa15801561421e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142429190615210565b9150915081156142585794506104a39350505050565b50505061419f565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612d64565b5f805f6142bf8686866148f0565b9150915080614304576040517f05e476780000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610611565b50949350505050565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116611c52575060019250929050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036143695750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f805f614420888888610e7b565b9250925092508215614260579093509150611f9d9050565b8051602080830180515f90811a8086016021015160a0939190831a61448a5785518488018051600861ffff909316929092046020038801601e83901a840360010160100290811b909217905260f01092505b50508015612ce1576040517f5b1a42d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6144d16101008361523a565b6001901b92915050565b6101608201805160408051808201909152601091821c808252602082018590528351600161ffff909116019282901b9290921790925261451a836144c4565b6101809094018051909417909352505050565b5f61453883836145f7565b925060ff600884901c811683019081111561457f576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff841660089190911b17905092915050565b5f60ff8316828110156145f0576040517f23b49a2a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050900390565b5f60ff808416830190600885901c811690601086901c90831115614647576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808311156146525750815b601081901b600883901b841717935050505092915050565b5f614674836135ad565b82106146b05781836040517ffcfaeff1000000000000000000000000000000000000000000000000000000008152600401610611929190615272565b50600202016003015161ffff1690565b81515f90819065200000000000600191831a9190911b161515838510168085019082806146ed8488614af7565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615614728575093505f9250611c52915050565b825f0361478b577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161475c575f61477e565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95509350611c5292505050565b7f800000000000000000000000000000000000000000000000000000000000000081116147b8575f6147da565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f601b83900b831483838261484e577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561482e57620186a0860595506005850194505b8586601b0b1461484957600a8605955084600101945061482e565b614864565b855f0361486457505f925060019150611c529050565b848560030b146148c0575f85121561488457505f9250829150611c529050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610611565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f851215614936576040517f4a7d166b0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610611565b845f0361494857505f90506001611f9d565b8460ff8416850185811215614993576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610611565b5f805f8312156149fd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb38312156149d4575f809550955050505050611f9d565b825f03600a0a91508184816149eb576149eb615033565b0495505084029091149150611f9d9050565b5f831315614ae757604d831315614a53576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610611565b82600a0a9150817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81614a8857614a88615033565b04841115614ad5576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610611565b5091909102925060019150611f9d9050565b8360019550955050505050611f9d565b5f80828410614b2a57507f34bd20690000000000000000000000000000000000000000000000000000000090505f611c52565b835f03614b63576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b878210158015614b9b5750604d83105b15614bde57815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a8590030201614b8b565b878210614d045781515f1a8490036001811115614c2657507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611c529350505050565b600a84900a8102828101831115614c6957507f0fdc26350000000000000000000000000000000000000000000000000000000096505f9550611c52945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b878210614d045781515f1a60308114614cd957507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611c529350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190614c95565b5f9890975095505050505050565b614d1a61528a565b565b5f60208284031215614d2c575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610507575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614dcf57614dcf614d5b565b604052919050565b5f67ffffffffffffffff821115614df057614df0614d5b565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f60208284031215614e2c575f80fd5b813567ffffffffffffffff811115614e42575f80fd5b8201601f81018413614e52575f80fd5b8035614e65614e6082614dd7565b614d88565b818152856020838501011115614e79575f80fd5b816020840160208301375f91810160200191909152949350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b80831015614ef057835173ffffffffffffffffffffffffffffffffffffffff168252928401926001929092019190840190614eba565b509695505050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b604081525f614f596040830185614efb565b8281036020848101919091528451808352858201928201905f5b81811015614f8f57845183529383019391830191600101614f73565b5090979650505050505050565b602081525f6105076020830184614efb565b80516020808301519190811015614fed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561018057610180614ff3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361509057615090614ff3565b5060010190565b8181038181111561018057610180614ff3565b80518015158114610239575f80fd5b5f82601f8301126150c8575f80fd5b8151602067ffffffffffffffff8211156150e4576150e4614d5b565b8160051b6150f3828201614d88565b928352848101820192828101908785111561510c575f80fd5b83870192505b8483101561512b57825182529183019190830190615112565b979650505050505050565b5f805f60608486031215615148575f80fd5b615151846150aa565b9250602084015167ffffffffffffffff8082111561516d575f80fd5b818601915086601f830112615180575f80fd5b815161518e614e6082614dd7565b8181528860208386010111156151a2575f80fd5b8160208501602083015e5f60208383010152809550505060408601519150808211156151cc575f80fd5b506151d9868287016150b9565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215615221575f80fd5b61522a836150aa565b9150602083015190509250929050565b5f8261526d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b828152604060208201525f610c456040830184614efb565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0288400100420b0280046b0641220186adb8a044003012020f2a880521281ac8811a000000000000000000080000000000100000000000000002000000000000000000290ea98a3a10f9c53927bda61c6395ad0e9fb4a8075dbeaf2d313e9e09b06d681dfe49062ce21ac13e83a6cc2ad2d2123422c3e0052f369e1f27267220a0a68d2f357696465d217b131120880f24f4a8242f1af53f41f7290afa3e8638acf3d13397e9fd00443a453b406bb547b9059d25a3cd1e11d0c3260b15eb4d16fc94274427bc412baf2cc2321b8f630dca9efe403ce35f1400684845c291e3425d68b13d5f9a151eb98c15239cd9c10c1f698235c8d3843c08d579273459d41a2c9ff617a5b2cd15c0031810f621af127ba34c26bb6c4137b2ad3d1b73563d0210215f36aa563921098e690457fb180376e752066a470128f11de101fcc60522de7ddd183d3d6d4196c37031cba2872e7b3af5304eee7219a8093543082b5f0801f5a522bb22bb22bb2387249b249b23872387249b22bb22bb22bb249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b"; + +/// @dev The runtime bytecode of the contract. +bytes constant RUNTIME_CODE = + hex"608060405234801561000f575f80fd5b5060043610610064575f3560e01c80637764fd9c1161004d5780637764fd9c146100b0578063ccf44775146100d1578063d6d8c9a8146100e6575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b610076366004614d1c565b6100ee565b60405190151581526020015b60405180910390f35b6100a361009e366004614e1c565b610186565b6040516100879190614e96565b6100c36100be366004614e1c565b61023e565b604051610087929190614f47565b6100d961025e565b6040516100879190614f9c565b6100d961026d565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f1a2c8edd00000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040805160208101909152606081525f6101e3836101a2610277565b6101aa61029a565b60408051808201909152600881527f1c591fa51fe5204200000000000000000000000000000000000000000000000060208201526102ba565b90505f6020840190505f6101fa8580510160200190565b90506102078383836104ac565b915061021483838361050e565b9150604051806020016040528061022a856106db565b90529350505050610239610739565b919050565b606080610255610250846101a2610277565b61077e565b91509150915091565b60606102686108fb565b905090565b6060610268610948565b6060604051806101a0016040528061016381526020016152b86101639139905090565b60606040518060c001604052806090815260200161541b60909139905090565b6103476040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b8152602001848152602001858152602001600467ffffffffffffffff8111156103cd576103cd614d5b565b6040519080825280602002602001820160405280156103f6578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016828152808301825283517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001681178452855290840182905283018190529082018190526080820181905260a082018190526101208201819052610140820181905261020082015290505b95945050505050565b5f5b8183101561050457825160015f9190911a1b6401000026008116156104df576104d8858585610c09565b93506104fe565b658000000000008116156104f8576104d8858585610c4d565b50610504565b506104ae565b50815b9392505050565b815160408051808201909152601081527f7573696e672d776f7264732d66726f6d0000000000000000000000000000000060208201525f919061055090614fae565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008216146105815783915050610507565b5060108301925081831061061a5761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fe3e4992d00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60405180910390fd5b825160015f91821a1b90640100002600821690036106835761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176105dc565b836001019350505b818310156105045761069e8484846104ac565b925081831015610504575f806106b5868686610e7b565b9096509092509050816106c9575050610504565b6106d486868361102d565b505061068b565b60c08101516040516060919073ffffffffffffffffffffffffffffffffffffffff602082015f5b841561072357848316825260a09490941c5193602090910190600101610702565b8352604052610731826110ec565b509392505050565b60405162010000811061077b576040517f766c065f00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b50565b6060805f8361022001515111156108d0575f61079f84610220015160200190565b90505f6107b485610220015180510160200190565b90506107c18583836104ac565b91506107ce85838361050e565b91505b80821015610805576107e48583836104ac565b91506107f18583836110fa565b91506107fe8583836114fd565b91506107d1565b80821461083e576040517f7d565df600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610100850151600816156108cd5761022085015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517ff06f54cf00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b50505b5f806108e56108de86611abc565b8690611bf1565b915091506108f1610739565b9094909350915050565b6040805160a0810182526004808252611c596020830152611fa592820192909252611fe5606082810191909152612042608083015291908190805b61093f8161222b565b94505050505090565b6060614d125f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff1681526020016122bb81526020016122bb81526020016122bb8152602001612387815260200161249b815260200161249b81526020016123878152602001612387815260200161249b81526020016122bb81526020016122bb81526020016122bb815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b815260200161249b8152509050606081905060488151146109365780516040517fc8b56901000000000000000000000000000000000000000000000000000000008152600481019190915260248101849052604401610611565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690525f610c4583836401000026006124dd565b949350505050565b6101008301805160011790525f60048301821015610ce75761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f25a7646800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b825160f01c612f2a8114610d765761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f3e47169c00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6003840193505f5b83851015610e1b5784515f1a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd18101610e0f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86015160f01c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d18101610e0d57505050600193840193610e1b565b505b85600101955050610d7e565b80610e715761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017610cb2565b5092949350505050565b81515f90819081908190600181831a1b6703ff200000000000811615610fa25786610ea7896001615020565b1015610f9957600182811a1b7ffffffffffffffffffffffffffffffffffeffffffffffffffffff00000000000082821701610ee4575f9350610f93565b7ffffffffffffffffffffffffffffffffffffffffffeffffffffff00000000000082821701610f8e576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f75c28ff900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b600193505b50610fe7565b60019250610fe7565b640400000000811615610fb85760029250610fe7565b6b080000000000000000000000811615610fd55760039250610fe7565b505f9450869350849250611024915050565b505f905061101588888861100d83876101a09190910151600291820201015161ffff1690565b63ffffffff16565b90975060019550879450925050505b93509350939050565b73ffffffffffffffffffffffffffffffffffffffff8111156110ca5761022083015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f9d7e517e00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60c09092018051604080516020810190915290815260a01b9290921790915250565b806110f681612506565b5050565b5f5b818310156105045782515f90600190821a1b6f07fffffe80000000000000000000000081161561137757610100860151600116156111b65761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f5520a51700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6f07fffffe000000000000000000000000811615611289576111e985856f07fffffe0000000003ff200000000000612554565b90955091505f6111f98784612623565b50905080156112835761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f53e6feba00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b506112aa565b6112a760018601856f07fffffe0000000003ff2000000000006124dd565b94505b856040015160ff1660ff14806112c757508560a0015160ff1660ff145b1561134d5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f3820634100000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b604086018051600190810190915260a08701805190910190526101008601805160091790526114f6565b6401000026008116156113c95761139760018601856401000026006124dd565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe16905294506114f6565b670400000000000000811615611415575050610100840180516008177ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe16905260019290920191610504565b658000000000008116156114a55761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fedad0c5800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017611181565b50506110fc565b5f5b818310156105045782515f90600190821a1b6f07fffffe00000000000000000000000081161561171d57610100860151600116156115b95761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f4e803df600000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b846115d581866f07fffffe0000000003ff200000000000612554565b80945081975050505f806115ee8961024001518661269e565b91509150811561162f57611603898989612772565b97505f6116108a836129fd565b905061161d8a8383612a23565b50610100890180516002179052611709565b6116398986612c08565b9092509050811561165d5761164f895f83612a23565b61165889612c82565b611709565b5f6060848a03600581016116728d8d8d612772565b9b508c6101e0015151602002602001810190505f60059050604051935060208201840160405282818501528184528394506116ba8860056116b38760200190565b0185612ce8565b5050506101e08b01518051600101906116ed906116e7836116de8680510160200190565b90602002900390565b83612cf1565b506116fa8b60ff84612a23565b50506101008901805160021790525b505050610100860180516001179052611ab5565b6101008601516002161561183f576501000000000081165f036117bb5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f23b5c6ea00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b606086810180515f1a6003019190829053603b821115611807576040517f6232f2d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050610100860180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc169052600190940193611ab5565b6502000000000081161561191b576060868101515f90811a91908290036118e15761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f7f9db54200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b808801600383039250828153826004820101515f1a8360028301015160f01c600101535061190e88612c82565b5050600190940193611ab5565b64010000260081161561196d5761193b60018601856401000026006124dd565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611ab5565b6b0800000003ff2004000000008116156119a85761198c868686612cfd565b945061199786612c82565b610100860180516001179052611ab5565b651000000000008116156119cd576119c08686612e27565b5050600190920191610504565b670800000000000000811615611a05576119e78686612e27565b6119f08661327f565b50506004610100850152600190920191610504565b65800000000000811615611a645761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017611470565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017611584565b50506114ff565b60e08101518151516060919060f082901c9060208114611b08576040517f858f2dcf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051935060208401601083045f8183535060016008850483018101928391015f80805b88811015611b655789811c61ffff81165163ffff0000601092831b16811760e01b8786015284019360f08390031b929092179101611b2c565b50825117909152878203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08181018952908801601f01166040525f5b82811015611be5576002810288016003015161ffff90811683018051602060f082901c019260e09190911c1690611bda838284612ce8565b505050600101611ba2565b50505050505050919050565b6060805f611bfe846135ad565b90505f5b81811015611c41575f611c1586836135c7565b60040190505f611c2587846135f6565b60040282019050611c3788838361360d565b5050600101611c02565b5083611c4c866138cd565b92509250505b9250929050565b5f80808080611c69888888613942565b985090925090508181036040811115611cfd5761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fff2f594900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b805f03611d855761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fc75cd50900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60028106600103611e115761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fd76d9b5700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6001820397505f5b838910611f945788515f90811a906001821b906703ff000000000000821615611e6557507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd08201611f5e565b6c7e000000000000000000000000821615611ea357507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa98201611f5e565b687e0000000000000000821615611edd57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc98201611f5e565b6102208d01518c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f69f1e3e600000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909b019a831b96909617955050600401611e19565b50509350909150505b935093915050565b5f805f805f80611fb58888613992565b92965090945092509050611fca898486613e31565b82611fd58383613eb5565b9550955050505050935093915050565b5f808080611ff4878787613f07565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301805184840382529199509294509092505f91612032816140c1565b9190529698969750505050505050565b6001909101905f808361206681856fffffffffdffffffffffffffeffffd9ff6124dd565b9450848181036120f15761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517ff73a1aa800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6120fc878787610c09565b95508561211a81876fffffffffdfffffffffffffffffffffff6124dd565b9650868681106121a65761022089015188037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fc4b1913500000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b875160015f91821a1b906b20000000000000000000000082169003612216576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612171565b5060019097019687611fd58a868686866140ed565b60605f825160020267ffffffffffffffff81111561224b5761224b614d5b565b6040519080825280601f01601f191660200182016040528015612275576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156122af5780518351861690851617815260209092019160020161228d565b50939695505050505050565b5f8151600103612346575060208101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b60e082901d5f6122fe8383836142b1565b905061ffff81111561233c576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250610239915050565b81515f0361235557505f919050565b6040517f1ac6690800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f815160020361245f57602082015160408301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d5f6123ce8383836142b1565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b935060e085901d925090505f6124078484836142b1565b905060ff821180612418575060ff81115b1561244f576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60081b1794506102399350505050565b600282511015612355576040517ff16066b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81515f146124d6576040517f9f16b02000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505f919050565b5f5b5f82600186515f1a1b161183851016156124fe576001840193506124df565b509192915050565b60208101602082510282015b8082101561254f5781518151835281526020909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001612512565b505050565b5f80806001818787036020811161256b578061256e565b60205b915050875192505b8519600184841a1b1615818310161561259457600182019150612576565b9681019660208290036008810293841c90931b9261261657604080516020810185905201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fe47fe8b700000000000000000000000000000000000000000000000000000000825261061191600401614f9c565b5095969095509350505050565b5f8061262f8484612c08565b909250905081611c525750610120830180515f93845260209384902060408051928352948201855293909401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909316601084901b62ff00001617909317909252909160ff90911660010190565b600182810180515f928392600560ff93909316602102870192830192909101835b818310156127635760018301516021909301805190935f90819060ff1681806126e8838e61430d565b915091508186165f0361270a575f809b509b5050505050505050505050611c52565b5f8761271a600185038916614338565b016004028b015195505062ffffff908116935084168303915061274e9050575060019750601c1a9550611c52945050505050565b61275783614338565b840193505050506126bf565b505f9788975095505050505050565b81516101e08401515f80825291600190831a1b907ffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000008201610e71576127b685615060565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe169052805190955060015f91821a1b9250805b8587101561299b57865160015f9190911a1b93506401000026008416156128245761281d888888610c09565b96506127f1565b6740000000000000008416156128485761283d87615060565b96506001905061299b565b6001886101000151165f0361291957600482036128e05761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f8c9fdbb300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5f6128ec898989614410565b60208581028701018190526101008b0180516001179052909850905061291183615060565b9250506127f1565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f722cd24a00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b806129f15761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612966565b50905250919392505050565b6101c08201516002828102820101516101e08401515f9261ffff90921691906104a39083565b612a2c83614438565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb1660081790526020808401515f90811a8501602101805190911a60ff811492919060018101825350508115612ab5576040517f8092d1ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050825180516060808601515f90811a87016061018051939461ffff8616949093921a60ff81149291600886048503601c0191600181018253505f60038201537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe30180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690911790528115612b78576040517f3abd0c5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050602090920183821b176018820185901b178083529160e0829003612c005760408051601083901b6020908117601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016918252810190915281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000168117825286525b505050505050565b6101208201516101408301515f8381526020808220919384939290911c91600160ff84161b80821615612c6d5761ffff83165b8015612c6b578360201c8503612c5e576001965061ffff8460101c169550612c6b565b51925061ffff8316612c3b565b505b17610140909601959095525090939092509050565b6060818101515f90811a919082900361254f57602083810180515f1a600101919082815350603e8210612ce1576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b8083835e505050565b6020810283835e505050565b5f8080612d0b868686610e7b565b9096509250905080612d995761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fb0e4e5b300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5f80612da4846144c4565b6101808901511615612de55761016088015160101c5b8015801590612dc7575082155b15612de357602081015190519085149250600190910190612dba565b505b61016088015161ffff16612e0b600184612dff5782612e03565b8383035b8b9190612a23565b5081612e1b57612e1b88856144db565b50949695505050505050565b6060828101515f1a908115612eb75761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f6fb11cdc00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5050612ec282614438565b61010082018051600416600890811790915260a0830151602084015160ff8083169360f89290921c9290911c1681035f819003612fec576004856101000151165f03612f895761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fab1d3ea700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b90820190603e8210612fc7576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60f882901b6020860152610200850151612fe1908461452d565b610200860152613107565b6001811115613107578083101561307e5761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f78ef278200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b808311156131075761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f43168e6800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b8082036001016020601083028101905b8181101561326b5760a08801516020848a0181015191831c61ffff16915f1a9060015b8281116132595760208406601c0361315357925160f01c925b83516102008d015160019190911a9061316c90826145b1565b6102008e01525f82851480156131825750896001145b61318d57600161318f565b8b5b6102008f01519091506131a290826145f7565b6102008f0152600f8111806131b75750600f82115b1561323d576102208e01518d037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f7ea1869f00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b818160041b17600187015350506004939093019260010161313a565b50506001909401935050601001613117565b5050505060081b60a0909301929092525050565b60e081015160208083015160f083811c925f9290921a60010191908390036132d3576040517fa806284100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610200850151855180515f928392909160219060101c61ffff165b801561330557805190925060101c61ffff166132ee565b506040518a82018051919650601c8401939160049160248901915f90811a805b8d8310156133ea5760048202860195506004878a03045b8082111561335a57965161ffff16601c81019950969003600761333c565b506004810298899003805186529894909401938103865b60078211156133b6575160101c61ffff1680518652601c909501947ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff990910190613371565b81156133d1575160101c61ffff168051865260048202909501945b50505060019182018051909291909101905f1a80613325565b50505082895250600488810180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9290940491909101601881901b8817939093179052601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660405260ff1094505083156134b6576040517fe972437e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134c36001808a1b615097565b891685891b60f06134d58b6010615020565b901b171760e08b01526101008a0180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7169052604080516020601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681815280820183525f80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001682178152908d52908c01819052908b0181905260608b0181905260808b0181905260a08b018190526101208b018190526101408b018190526102008b015250505050505050505050565b5f81515f036135bd57505f919050565b50602001515f1a90565b5f806135d2846135ad565b60020260010190505f6135e5858561466a565b949091019093016020019392505050565b5f8061360284846135c7565b515f1a949350505050565b8082101561254f5781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016138475760c08401515b80156138455760a081901c5161016086015161ffff60e085901c1660208101805160089390931b62ffff0016600187901a1760e81b7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909316929092179091526040517f570c7a630000000000000000000000000000000000000000000000000000000081529192915f908190819073ffffffffffffffffffffffffffffffffffffffff86169063570c7a6390613700908790600401614f9c565b5f60405180830381865afa15801561371a573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261375f9190810190615136565b925092509250821561383b5781516004146137a857816040517fbe2d187d0000000000000000000000000000000000000000000000000000000081526004016106119190614f9c565b60208201517fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff88161789525f5b815181101561383057613828828281518110613811576138116151e3565b60200260200101518c6144db90919063ffffffff16565b6001016137f3565b505050505050613845565b5050505050613648565b505b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016138c157606061ffff8260e01c1690505f6003820152600581019050806040517faedfba2f0000000000000000000000000000000000000000000000000000000081526004016106119190614f9c565b5060048201915061360d565b6101608101516040805161ffff8316808252602080820283019081019093529092909160109190911c90835b808211156139395760208301518252915161ffff16917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101906138f9565b50505050919050565b5f808080613951866002615020565b9050806c7e0000007e03ff0000000000005b86821081600184515f1a1b161515161561398257600182019150613963565b5090979096508695509350505050565b5f8281806139a78386652000000000006124dd565b925085831415836139c181886703ff0000000000006124dd565b94508085036139fb57507f34bd20690000000000000000000000000000000000000000000000000000000094505f9250829150613e289050565b5f80613a078a886146c0565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613a45575095505f9350839250613e28915050565b86519095506540000000000060015f9290921a9190911b161515888710169150508015613cd457506001909301925f84613a8881896703ff0000000000006124dd565b9550808603613ac357507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f9350839250613e28915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b660100000000000016151516600103613b32577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613ac5565b818114613b89575f80613b4584846146c0565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613b85575097505f9550859450613e289350505050565b9350505b5f831215613bc457507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f9450849350613e2892505050565b8315613bd057825f0392505b80820394505f851315613c1057507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f9450849350613e2892505050565b855f03613c1f57829550613cd1565b5f8590036043811115613c6057507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f9550859450613e289350505050565b600a0a8681025f88838381613c7757613c77615033565b0514159050601b82900b8214158180613c8d5750805b15613cc957507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f9850889750613e289650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b161515878610168015613e195760019095019485613d14818a652000000000006124dd565b965086613d2a818b6703ff0000000000006124dd565b9750808803613d6757507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f9550859450613e289350505050565b505f80613d74838a6146c0565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613db4575097505f9550859450613e289350505050565b9250508482015f83138015613dc857508581125b80613ddc57505f83128015613ddc57508581135b15613e1557507fd556b1110000000000000000000000000000000000000000000000000000000097505f9550859450613e289350505050565b9450505b845f03613e24575f93505b5050505b92959194509250565b7fffffffff0000000000000000000000000000000000000000000000000000000081161561254f576102208301515f9083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000179050815f528060045260245ffd5b5f805f613ec285856147ea565b9150915080610731576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610611565b5f80806001850181806f7ffffffffffffffffffffffb0000000081807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b8b0301602080821015613f555750805b875193505b84600185851a1b1615158184101615613f7857600183019250613f5a565b505080602003614003576102208c01518b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f30515bda00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b85810180519095505f1a6001811b6404000000001615806140235750858b145b156140a9576102208d015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f04022fbf00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b50949b939a505060018a019850919650505050505050565b5f80601f90505f60e09050818451168082175f528060208601600183016020035e50505f519392505050565b5f60608186860361ffff811115614133576040517fb6da789c00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b604080516041888803848101838101929092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690935260028281018590520181529350602284019250614189898484612ce8565b6141968783850183612ce8565b50505060c08701515b80156142605760a081901c516040517fc6c0cbb60000000000000000000000000000000000000000000000000000000081529091905f90819073ffffffffffffffffffffffffffffffffffffffff84169063c6c0cbb690614204908890600401614f9c565b6040805180830381865afa15801561421e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142429190615210565b9150915081156142585794506104a39350505050565b50505061419f565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612d64565b5f805f6142bf8686866148f0565b9150915080614304576040517f05e476780000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610611565b50949350505050565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116611c52575060019250929050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036143695750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f805f614420888888610e7b565b9250925092508215614260579093509150611f9d9050565b8051602080830180515f90811a8086016021015160a0939190831a61448a5785518488018051600861ffff909316929092046020038801601e83901a840360010160100290811b909217905260f01092505b50508015612ce1576040517f5b1a42d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6144d16101008361523a565b6001901b92915050565b6101608201805160408051808201909152601091821c808252602082018590528351600161ffff909116019282901b9290921790925261451a836144c4565b6101809094018051909417909352505050565b5f61453883836145f7565b925060ff600884901c811683019081111561457f576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff841660089190911b17905092915050565b5f60ff8316828110156145f0576040517f23b49a2a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050900390565b5f60ff808416830190600885901c811690601086901c90831115614647576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808311156146525750815b601081901b600883901b841717935050505092915050565b5f614674836135ad565b82106146b05781836040517ffcfaeff1000000000000000000000000000000000000000000000000000000008152600401610611929190615272565b50600202016003015161ffff1690565b81515f90819065200000000000600191831a9190911b161515838510168085019082806146ed8488614af7565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615614728575093505f9250611c52915050565b825f0361478b577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161475c575f61477e565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95509350611c5292505050565b7f800000000000000000000000000000000000000000000000000000000000000081116147b8575f6147da565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f601b83900b831483838261484e577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561482e57620186a0860595506005850194505b8586601b0b1461484957600a8605955084600101945061482e565b614864565b855f0361486457505f925060019150611c529050565b848560030b146148c0575f85121561488457505f9250829150611c529050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610611565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f851215614936576040517f4a7d166b0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610611565b845f0361494857505f90506001611f9d565b8460ff8416850185811215614993576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610611565b5f805f8312156149fd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb38312156149d4575f809550955050505050611f9d565b825f03600a0a91508184816149eb576149eb615033565b0495505084029091149150611f9d9050565b5f831315614ae757604d831315614a53576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610611565b82600a0a9150817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81614a8857614a88615033565b04841115614ad5576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610611565b5091909102925060019150611f9d9050565b8360019550955050505050611f9d565b5f80828410614b2a57507f34bd20690000000000000000000000000000000000000000000000000000000090505f611c52565b835f03614b63576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b878210158015614b9b5750604d83105b15614bde57815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a8590030201614b8b565b878210614d045781515f1a8490036001811115614c2657507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611c529350505050565b600a84900a8102828101831115614c6957507f0fdc26350000000000000000000000000000000000000000000000000000000096505f9550611c52945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b878210614d045781515f1a60308114614cd957507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611c529350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190614c95565b5f9890975095505050505050565b614d1a61528a565b565b5f60208284031215614d2c575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610507575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614dcf57614dcf614d5b565b604052919050565b5f67ffffffffffffffff821115614df057614df0614d5b565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f60208284031215614e2c575f80fd5b813567ffffffffffffffff811115614e42575f80fd5b8201601f81018413614e52575f80fd5b8035614e65614e6082614dd7565b614d88565b818152856020838501011115614e79575f80fd5b816020840160208301375f91810160200191909152949350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b80831015614ef057835173ffffffffffffffffffffffffffffffffffffffff168252928401926001929092019190840190614eba565b509695505050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b604081525f614f596040830185614efb565b8281036020848101919091528451808352858201928201905f5b81811015614f8f57845183529383019391830191600101614f73565b5090979650505050505050565b602081525f6105076020830184614efb565b80516020808301519190811015614fed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561018057610180614ff3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361509057615090614ff3565b5060010190565b8181038181111561018057610180614ff3565b80518015158114610239575f80fd5b5f82601f8301126150c8575f80fd5b8151602067ffffffffffffffff8211156150e4576150e4614d5b565b8160051b6150f3828201614d88565b928352848101820192828101908785111561510c575f80fd5b83870192505b8483101561512b57825182529183019190830190615112565b979650505050505050565b5f805f60608486031215615148575f80fd5b615151846150aa565b9250602084015167ffffffffffffffff8082111561516d575f80fd5b818601915086601f830112615180575f80fd5b815161518e614e6082614dd7565b8181528860208386010111156151a2575f80fd5b8160208501602083015e5f60208383010152809550505060408601519150808211156151cc575f80fd5b506151d9868287016150b9565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215615221575f80fd5b61522a836150aa565b9150602083015190509250929050565b5f8261526d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b828152604060208201525f610c456040830184614efb565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0288400100420b0280046b0641220186adb8a044003012020f2a880521281ac8811a000000000000000000080000000000100000000000000002000000000000000000290ea98a3a10f9c53927bda61c6395ad0e9fb4a8075dbeaf2d313e9e09b06d681dfe49062ce21ac13e83a6cc2ad2d2123422c3e0052f369e1f27267220a0a68d2f357696465d217b131120880f24f4a8242f1af53f41f7290afa3e8638acf3d13397e9fd00443a453b406bb547b9059d25a3cd1e11d0c3260b15eb4d16fc94274427bc412baf2cc2321b8f630dca9efe403ce35f1400684845c291e3425d68b13d5f9a151eb98c15239cd9c10c1f698235c8d3843c08d579273459d41a2c9ff617a5b2cd15c0031810f621af127ba34c26bb6c4137b2ad3d1b73563d0210215f36aa563921098e690457fb180376e752066a470128f11de101fcc60522de7ddd183d3d6d4196c37031cba2872e7b3af5304eee7219a8093543082b5f0801f5a522bb22bb22bb2387249b249b23872387249b22bb22bb22bb249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b249b"; + +/// @dev The addresses that MUST already have code on a network before +/// this release can be broadcast there, `abi.encode`d as an `address[]` +/// because Solidity has no file-scope constant of dynamic array type. +bytes constant DEPENDENCIES = + hex"00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"; diff --git a/src/generated/RainlangStore.pointers.sol b/src/generated/0_1_9/RainlangStore.sol similarity index 90% rename from src/generated/RainlangStore.pointers.sol rename to src/generated/0_1_9/RainlangStore.sol index d8267598c..ab1bd0357 100644 --- a/src/generated/RainlangStore.pointers.sol +++ b/src/generated/0_1_9/RainlangStore.sol @@ -2,12 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -// THIS FILE IS AUTOGENERATED BY ./script/BuildPointers.sol - -// This file is committed to the repository because there is a circular -// dependency between the contract and its pointers file. The contract -// needs the pointers file to exist so that it can compile, and the pointers -// file needs the contract to exist so that it can be compiled. +// THIS FILE IS AUTOGENERATED BY THE BUILD SCRIPT. DO NOT EDIT BY HAND. /// @dev Hash of the known bytecode. bytes32 constant BYTECODE_HASH = bytes32(0xdaa0024dc105c6a9ea0838604bad0a5e662743eca97789c2cecfdf8667d0bf9b); @@ -23,3 +18,9 @@ bytes constant CREATION_CODE = /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = hex"608060405234801561000f575f80fd5b506004361061003f575f3560e01c806301ffc9a71461004357806304b19db41461006b578063295f36d714610080575b5f80fd5b61005661005136600461025c565b6100b6565b60405190151581526020015b60405180910390f35b61007e6100793660046102a2565b61014e565b005b6100a861008e36600461031a565b5f9182526020828152604080842092845291905290205490565b604051908152602001610062565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f2deeab6300000000000000000000000000000000000000000000000000000000148061014857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61015960028261033a565b15610197576040517f01c71f3d0000000000000000000000000000000000000000000000000000000081526004810182905260240160405180910390fd5b5f8381523360205260408120905b82811015610255575f8484838181106101c0576101c0610372565b9050602002013590505f8585846001018181106101df576101df610372565b9050602002013590507f245edc72356e0d4eee6c8edc5e2f5cbe7cc71f347769147ef686bc681845da8784838360405161022c939291909283526020830191909152604082015260600190565b60405180910390a15f8481526020818152604080832094835293905291909120556002016101a5565b5050505050565b5f6020828403121561026c575f80fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461029b575f80fd5b9392505050565b5f805f604084860312156102b4575f80fd5b83359250602084013567ffffffffffffffff808211156102d2575f80fd5b818601915086601f8301126102e5575f80fd5b8135818111156102f3575f80fd5b8760208260051b8501011115610307575f80fd5b6020830194508093505050509250925092565b5f806040838503121561032b575f80fd5b50508035926020909101359150565b5f8261036d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd"; + +/// @dev The addresses that MUST already have code on a network before +/// this release can be broadcast there, `abi.encode`d as an `address[]` +/// because Solidity has no file-scope constant of dynamic array type. +bytes constant DEPENDENCIES = + hex"00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"; diff --git a/src/generated/Rainlang.pointers.sol b/src/generated/Rainlang.pointers.sol deleted file mode 100644 index 926cfad3a..000000000 --- a/src/generated/Rainlang.pointers.sol +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-License-Identifier: LicenseRef-DCL-1.0 -// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity ^0.8.25; - -// THIS FILE IS AUTOGENERATED BY ./script/BuildPointers.sol - -// This file is committed to the repository because there is a circular -// dependency between the contract and its pointers file. The contract -// needs the pointers file to exist so that it can compile, and the pointers -// file needs the contract to exist so that it can be compiled. - -/// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x4434a2c7ec31e395796c1814414b3780b8bbb6d8dd81eeef8ea4526ce19db60c); - -/// @dev The deterministic deploy address of the contract when deployed via -/// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x7A2e7530787D15Ff55Ad3c8701226bf4C34e4C74); - -/// @dev The creation bytecode of the contract. -bytes constant CREATION_CODE = - hex"6080604052348015600e575f80fd5b506101f78061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063107628021161004d57806310762802146100cb5780634501e517146100e5578063f2c4da93146100ff575f80fd5b806301ffc9a7146100685780630c1916a414610090575b5f80fd5b61007b6100763660046101b1565b610119565b60405190151581526020015b60405180910390f35b739179445a637e6ae72bb38273944fab96834488dd5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610087565b73c9e1d673ed122193b28376016ac506de2fa20bee6100a6565b734c52eee7fb6aed0f1a30130d96d02409d9d886cf6100a6565b731aa775533e28b1d843e1a589034984e3a62005dc6100a6565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fabaa01220000000000000000000000000000000000000000000000000000000014806101ab57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f602082840312156101c1575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101f0575f80fd5b939250505056"; - -/// @dev The runtime bytecode of the contract. -bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063107628021161004d57806310762802146100cb5780634501e517146100e5578063f2c4da93146100ff575f80fd5b806301ffc9a7146100685780630c1916a414610090575b5f80fd5b61007b6100763660046101b1565b610119565b60405190151581526020015b60405180910390f35b739179445a637e6ae72bb38273944fab96834488dd5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610087565b73c9e1d673ed122193b28376016ac506de2fa20bee6100a6565b734c52eee7fb6aed0f1a30130d96d02409d9d886cf6100a6565b731aa775533e28b1d843e1a589034984e3a62005dc6100a6565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fabaa01220000000000000000000000000000000000000000000000000000000014806101ab57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f602082840312156101c1575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101f0575f80fd5b939250505056"; diff --git a/src/generated/RainlangExpressionDeployer.pointers.sol b/src/generated/RainlangExpressionDeployer.pointers.sol deleted file mode 100644 index 5ffe71dd9..000000000 --- a/src/generated/RainlangExpressionDeployer.pointers.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: LicenseRef-DCL-1.0 -// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity ^0.8.25; - -// THIS FILE IS AUTOGENERATED BY ./script/BuildPointers.sol - -// This file is committed to the repository because there is a circular -// dependency between the contract and its pointers file. The contract -// needs the pointers file to exist so that it can compile, and the pointers -// file needs the contract to exist so that it can be compiled. - -/// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x5a63ce8a1036d4495c1b30104a217c5e90458b3d469d334695e72c2e6da0484b); - -/// @dev The deterministic deploy address of the contract when deployed via -/// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0xC9e1D673eD122193b28376016AC506De2fA20beE); - -/// @dev The creation bytecode of the contract. -bytes constant CREATION_CODE = - hex"6080604052348015600e575f80fd5b50611ca88061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c80636f5aa28d1161004d5780636f5aa28d146100b0578063a3869e14146100de578063b92d7553146100fe575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b610076366004611619565b610106565b60405190151581526020015b60405180910390f35b6100a361009e366004611658565b610282565b60405161008791906116c4565b6040517f0ae1ecb6c0f6314beaf4d4cd803ba14c900b0eecb1ecd39a52739cff9ae2c34a8152602001610087565b6100f16100ec366004611813565b610347565b60405161008791906118d9565b6100f1610468565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f6f5aa28d00000000000000000000000000000000000000000000000000000000148061019857507fffffffff0000000000000000000000000000000000000000000000000000000082167fa3869e1400000000000000000000000000000000000000000000000000000000145b806101e457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5514ca2000000000000000000000000000000000000000000000000000000000145b8061023057507fffffffff0000000000000000000000000000000000000000000000000000000082167fb92d755300000000000000000000000000000000000000000000000000000000145b8061027c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080516020810182526060815290517f5514ca20000000000000000000000000000000000000000000000000000000008152739179445a637e6ae72bb38273944fab96834488dd90635514ca20906102e190869086906004016118eb565b5f60405180830381865afa1580156102fb573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610340919081019061195a565b9392505050565b6040517f7764fd9c0000000000000000000000000000000000000000000000000000000081526060905f908190739179445a637e6ae72bb38273944fab96834488dd90637764fd9c9061039e9087906004016118d9565b5f60405180830381865afa1580156103b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103fd9190810190611a39565b915091505f610416838351905160406020909202010190565b60408051602083820181019092528281529192508101610437818686610477565b5f61045b6040518060c0016040528060908152602001611c186090913987876104ba565b5091979650505050505050565b6060610472610879565b905090565b80600182510160200281015b8082101561049e578151855260209485019490910190610483565b50506104b56104aa8390565b848451602001610b4c565b505050565b60605f6104c684610b55565b85519091506020860190600290046104dd86610b6f565b8260020267ffffffffffffffff8111156104f9576104f9611729565b6040519080825280601f01601f191660200182016040528015610523576020820181803683370190505b509350602084015f5b8481101561086d575f806105408a84610d8c565b915091508184538060018501536002840193505f61055f8b848c610daf565b90505f601861056e8d87610e16565b0390505f61057c8d87610e45565b600402820190505b808210156107b757815162ffffff811690601d81901a600f81169160049190911c90601c1a61160f8c82106106015760808801516040517fc8344ab1000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018e90526064015b60405180910390fd5b50600281028d015160f01c5f806106168a8885565b9150915085821461066a5760808a01516040517fddf56071000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018790526064016105f8565b8481146106ba5760808a01516040517ffc8b5603000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604481018690526064016105f8565b895182111561070c5760808a01518a516040517f2cab6bff00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018390526064016105f8565b8951829003808b5260408b0151111561076e5760808a01518a516040808d015190517f1bc5ab0f0000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915260448201526064016105f8565b89518101808b5260208b0151101561078857895160208b01525b600181111561079957895160408b01525b50505060808701805160010190525050506004929092019150610584565b6107c18d87610e5c565b8360200151146108155782602001516107da8e88610e5c565b6040517f4d9c18dc000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016105f8565b8251841461085c5782516040517f4689f0b30000000000000000000000000000000000000000000000000000000081526004810191909152602481018590526044016105f8565b50506001909301925061052c915050565b50505050509392505050565b606061160f5f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff168152602001610e748152602001610ef08152602001610f5381526020016111ae81526020016111b781526020016111c181526020016111ca81526020016111e481526020016111b78152602001611289815260200161128981526020016112e481526020016113ad81526020016113ba81526020016111b781526020016111c181526020016113ba81526020016111b781526020016111c181526020016111c181526020016111b781526020016111b781526020016111b781526020016111ae81526020016111ae81526020016111ae81526020016111ae81526020016113c481526020016111b781526020016113e8815260200161140181526020016111b781526020016113c481526020016111b781526020016111b781526020016113ba81526020016111c181526020016111b781526020016111b781526020016111c1815260200161140a81526020016111b781526020016111c1815260200161140a81526020016111ae81526020016111c181526020016111c181526020016111c181526020016111c181526020016111b781526020016111c181526020016111c1815260200161140a81526020016111ae81526020016111ae815260200161140a81526020016111ae81526020016111ae815260200161140a81526020016111b781526020016111c1815260200161140a81526020016113ba81526020016113ba815260200161140a815260200161140a81526020016111ae815260200161140a815260200161140a815260200161140a81526020016111c18152602001611401815250905060608190506048815114610b3a5780516040517fc8b569010000000000000000000000000000000000000000000000000000000081526004810191909152602481018490526044016105f8565b610b4381611423565b94505050505090565b8083835e505050565b5f81515f03610b6557505f919050565b50602001515f1a90565b5f610b7982610b55565b90508015610d4a5781516001600283020190811115610bc657826040517f17f4bc5e0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b82516020828501810191850101602160027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860102860181019086015b808210610d0657815160f01c8481016004810185811115610c5157896040517e39ba560000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b81515f81901a90600181901a90600281901a9060031a80821180610c7457508281115b15610caf578d876040517feaf45f4f0000000000000000000000000000000000000000000000000000000081526004016105f8929190611b2a565b505050600481028201878114610cf3578b6040517ffbb8027a0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b8397506002870396505050505050610c03565b838314610d4157866040517fde67b29a0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b50505050505050565b600182511115610d8857816040517fd013da5d0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b5050565b5f805f610d998585610e16565b51600281901a9660039190911a95509350505050565b610de46040518060c001604052805f81526020015f81526020015f8152602001606081526020015f8152602001606081525090565b506040805160c081018252838152602081018490529081019290925260608201525f608082015260a081019190915290565b5f80610e2184610b55565b60020260010190505f610e3485856114b3565b949091019093016020019392505050565b5f80610e518484610e16565b515f1a949350505050565b5f80610e688484610e16565b5160011a949350505050565b81515f90819061ffff8416908110610ecf57608085015185516040517feaa16f3300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b8460400151811115610ee357604085018190525b505f946001945092505050565b6060820151515f90819061ffff8416908110610ee35760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b6060820151515f90819061ffff8416908110610fb65760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b5f85606001518281518110610fcd57610fcd611b4b565b602002602001015190505f80610fe6839060a082901c90565b91509150611014827f18003f8e00000000000000000000000000000000000000000000000000000000611509565b611062576040517f23016c8900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016105f8565b6040517f40c04edc00000000000000000000000000000000000000000000000000000000815260048101829052600f601089901c81166024830181905260148a901c9091166044830181905290915f90819073ffffffffffffffffffffffffffffffffffffffff8716906340c04edc906064016040805180830381865afa1580156110ef573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111139190611b78565b9150915083821461115a576040517f528cc0fb00000000000000000000000000000000000000000000000000000000815260048101859052602481018390526044016105f8565b82811461119d576040517fc5ff08dc00000000000000000000000000000000000000000000000000000000815260048101849052602481018290526044016105f8565b909b909a5098505050505050505050565b505f9160019150565b5060029160019150565b50600191829150565b5f806111d684846111e4565b506001958695509350505050565b5f8060ff83811690600885901c1680830361122b576040517f46f0ca6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101006112388284611b9a565b111561127a576040517f8abcdd3f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016105f8565b50600295600195509350505050565b5f8061ffff831660ff81118061129d575080155b156112d7576040517fc1be16a1000000000000000000000000000000000000000000000000000000008152600481018290526024016105f8565b5060019485945092505050565b60a08201515f90819061ffff841690600f601486901c811691601087901c90911690849081906113149086610d8c565b9150915081831461135b576040517f9199e58e00000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016105f8565b8381101561139f576040517fff13710800000000000000000000000000000000000000000000000000000000815260048101829052602481018590526044016105f8565b509791965090945050505050565b60101c600f169160019150565b5060039160019150565b5f80600f601084901c16806113da5760016113dc565b805b95600195509350505050565b5f80600f601084901c16600281116113da5760026113dc565b506002915f9150565b5f80600f601084901c16600181116113da5760026113dc565b60605f825160020267ffffffffffffffff81111561144357611443611729565b6040519080825280601f01601f19166020018201604052801561146d576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156114a757805183518616908516178152602090920191600201611485565b50939695505050505050565b5f6114bd83610b55565b82106114f95781836040517ffcfaeff10000000000000000000000000000000000000000000000000000000081526004016105f8929190611bd2565b50600202016003015161ffff1690565b5f61151383611524565b80156103405750610340838361159e565b5f61154f827f01ffc9a70000000000000000000000000000000000000000000000000000000061159e565b15611597575f80611580847fffffffff000000000000000000000000000000000000000000000000000000006115c2565b9150915081801561158f575080155b949350505050565b505f919050565b5f805f6115ab85856115c2565b915091508180156115b95750805b95945050505050565b7f01ffc9a7000000000000000000000000000000000000000000000000000000005f818152600483905290819060208260248188617530fa92505f511515601f3d11169150509250929050565b611617611bea565b565b5f60208284031215611629575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610340575f80fd5b5f8060208385031215611669575f80fd5b823567ffffffffffffffff80821115611680575f80fd5b818501915085601f830112611693575f80fd5b8135818111156116a1575f80fd5b8660208285010111156116b2575f80fd5b60209290920196919550909350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b8083101561171e57835173ffffffffffffffffffffffffffffffffffffffff1682529284019260019290920191908401906116e8565b509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516020810167ffffffffffffffff8111828210171561177957611779611729565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117c6576117c6611729565b604052919050565b5f67ffffffffffffffff8211156117e7576117e7611729565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f60208284031215611823575f80fd5b813567ffffffffffffffff811115611839575f80fd5b8201601f81018413611849575f80fd5b803561185c611857826117ce565b61177f565b818152856020838501011115611870575f80fd5b816020840160208301375f91810160200191909152949350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f610340602083018461188d565b60208152816020820152818360408301375f818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b5f67ffffffffffffffff82111561195057611950611729565b5060051b60200190565b5f602080838503121561196b575f80fd5b825167ffffffffffffffff80821115611982575f80fd5b8185019150828287031215611995575f80fd5b61199d611756565b8251828111156119ab575f80fd5b80840193505086601f8401126119bf575f80fd5b825191506119cf61185783611937565b82815260059290921b830184019184810190888411156119ed575f80fd5b938501935b83851015611a2c57845173ffffffffffffffffffffffffffffffffffffffff81168114611a1d575f80fd5b825293850193908501906119f2565b8252509695505050505050565b5f8060408385031215611a4a575f80fd5b825167ffffffffffffffff80821115611a61575f80fd5b818501915085601f830112611a74575f80fd5b81516020611a84611857836117ce565b8281528882848701011115611a97575f80fd5b828286018383015e5f81840183015287820151909650935082841115611abb575f80fd5b838701935087601f850112611ace575f80fd5b83519250611ade61185784611937565b83815260059390931b8401810192818101925088841115611afd575f80fd5b938101935b83851015611b1b57845183529381019391810191611b02565b80955050505050509250929050565b604081525f611b3c604083018561188d565b90508260208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215611b89575f80fd5b505080516020909101519092909150565b8082018082111561027c577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b828152604060208201525f61158f604083018461188d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0e740ef00f5311ae11b711c111ca11e411b71289128912e413ad13ba11b711c113ba11b711c111c111b711b711b711ae11ae11ae11ae13c411b713e8140111b713c411b711b713ba11c111b711b711c1140a11b711c1140a11ae11c111c111c111c111b711c111c1140a11ae11ae140a11ae11ae140a11b711c1140a13ba13ba140a140a11ae140a140a140a11c11401"; - -/// @dev The runtime bytecode of the contract. -bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b5060043610610064575f3560e01c80636f5aa28d1161004d5780636f5aa28d146100b0578063a3869e14146100de578063b92d7553146100fe575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b610076366004611619565b610106565b60405190151581526020015b60405180910390f35b6100a361009e366004611658565b610282565b60405161008791906116c4565b6040517f0ae1ecb6c0f6314beaf4d4cd803ba14c900b0eecb1ecd39a52739cff9ae2c34a8152602001610087565b6100f16100ec366004611813565b610347565b60405161008791906118d9565b6100f1610468565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f6f5aa28d00000000000000000000000000000000000000000000000000000000148061019857507fffffffff0000000000000000000000000000000000000000000000000000000082167fa3869e1400000000000000000000000000000000000000000000000000000000145b806101e457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5514ca2000000000000000000000000000000000000000000000000000000000145b8061023057507fffffffff0000000000000000000000000000000000000000000000000000000082167fb92d755300000000000000000000000000000000000000000000000000000000145b8061027c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080516020810182526060815290517f5514ca20000000000000000000000000000000000000000000000000000000008152739179445a637e6ae72bb38273944fab96834488dd90635514ca20906102e190869086906004016118eb565b5f60405180830381865afa1580156102fb573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610340919081019061195a565b9392505050565b6040517f7764fd9c0000000000000000000000000000000000000000000000000000000081526060905f908190739179445a637e6ae72bb38273944fab96834488dd90637764fd9c9061039e9087906004016118d9565b5f60405180830381865afa1580156103b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103fd9190810190611a39565b915091505f610416838351905160406020909202010190565b60408051602083820181019092528281529192508101610437818686610477565b5f61045b6040518060c0016040528060908152602001611c186090913987876104ba565b5091979650505050505050565b6060610472610879565b905090565b80600182510160200281015b8082101561049e578151855260209485019490910190610483565b50506104b56104aa8390565b848451602001610b4c565b505050565b60605f6104c684610b55565b85519091506020860190600290046104dd86610b6f565b8260020267ffffffffffffffff8111156104f9576104f9611729565b6040519080825280601f01601f191660200182016040528015610523576020820181803683370190505b509350602084015f5b8481101561086d575f806105408a84610d8c565b915091508184538060018501536002840193505f61055f8b848c610daf565b90505f601861056e8d87610e16565b0390505f61057c8d87610e45565b600402820190505b808210156107b757815162ffffff811690601d81901a600f81169160049190911c90601c1a61160f8c82106106015760808801516040517fc8344ab1000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018e90526064015b60405180910390fd5b50600281028d015160f01c5f806106168a8885565b9150915085821461066a5760808a01516040517fddf56071000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018790526064016105f8565b8481146106ba5760808a01516040517ffc8b5603000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604481018690526064016105f8565b895182111561070c5760808a01518a516040517f2cab6bff00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018390526064016105f8565b8951829003808b5260408b0151111561076e5760808a01518a516040808d015190517f1bc5ab0f0000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915260448201526064016105f8565b89518101808b5260208b0151101561078857895160208b01525b600181111561079957895160408b01525b50505060808701805160010190525050506004929092019150610584565b6107c18d87610e5c565b8360200151146108155782602001516107da8e88610e5c565b6040517f4d9c18dc000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016105f8565b8251841461085c5782516040517f4689f0b30000000000000000000000000000000000000000000000000000000081526004810191909152602481018590526044016105f8565b50506001909301925061052c915050565b50505050509392505050565b606061160f5f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff168152602001610e748152602001610ef08152602001610f5381526020016111ae81526020016111b781526020016111c181526020016111ca81526020016111e481526020016111b78152602001611289815260200161128981526020016112e481526020016113ad81526020016113ba81526020016111b781526020016111c181526020016113ba81526020016111b781526020016111c181526020016111c181526020016111b781526020016111b781526020016111b781526020016111ae81526020016111ae81526020016111ae81526020016111ae81526020016113c481526020016111b781526020016113e8815260200161140181526020016111b781526020016113c481526020016111b781526020016111b781526020016113ba81526020016111c181526020016111b781526020016111b781526020016111c1815260200161140a81526020016111b781526020016111c1815260200161140a81526020016111ae81526020016111c181526020016111c181526020016111c181526020016111c181526020016111b781526020016111c181526020016111c1815260200161140a81526020016111ae81526020016111ae815260200161140a81526020016111ae81526020016111ae815260200161140a81526020016111b781526020016111c1815260200161140a81526020016113ba81526020016113ba815260200161140a815260200161140a81526020016111ae815260200161140a815260200161140a815260200161140a81526020016111c18152602001611401815250905060608190506048815114610b3a5780516040517fc8b569010000000000000000000000000000000000000000000000000000000081526004810191909152602481018490526044016105f8565b610b4381611423565b94505050505090565b8083835e505050565b5f81515f03610b6557505f919050565b50602001515f1a90565b5f610b7982610b55565b90508015610d4a5781516001600283020190811115610bc657826040517f17f4bc5e0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b82516020828501810191850101602160027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860102860181019086015b808210610d0657815160f01c8481016004810185811115610c5157896040517e39ba560000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b81515f81901a90600181901a90600281901a9060031a80821180610c7457508281115b15610caf578d876040517feaf45f4f0000000000000000000000000000000000000000000000000000000081526004016105f8929190611b2a565b505050600481028201878114610cf3578b6040517ffbb8027a0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b8397506002870396505050505050610c03565b838314610d4157866040517fde67b29a0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b50505050505050565b600182511115610d8857816040517fd013da5d0000000000000000000000000000000000000000000000000000000081526004016105f891906118d9565b5050565b5f805f610d998585610e16565b51600281901a9660039190911a95509350505050565b610de46040518060c001604052805f81526020015f81526020015f8152602001606081526020015f8152602001606081525090565b506040805160c081018252838152602081018490529081019290925260608201525f608082015260a081019190915290565b5f80610e2184610b55565b60020260010190505f610e3485856114b3565b949091019093016020019392505050565b5f80610e518484610e16565b515f1a949350505050565b5f80610e688484610e16565b5160011a949350505050565b81515f90819061ffff8416908110610ecf57608085015185516040517feaa16f3300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b8460400151811115610ee357604085018190525b505f946001945092505050565b6060820151515f90819061ffff8416908110610ee35760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b6060820151515f90819061ffff8416908110610fb65760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b5f85606001518281518110610fcd57610fcd611b4b565b602002602001015190505f80610fe6839060a082901c90565b91509150611014827f18003f8e00000000000000000000000000000000000000000000000000000000611509565b611062576040517f23016c8900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016105f8565b6040517f40c04edc00000000000000000000000000000000000000000000000000000000815260048101829052600f601089901c81166024830181905260148a901c9091166044830181905290915f90819073ffffffffffffffffffffffffffffffffffffffff8716906340c04edc906064016040805180830381865afa1580156110ef573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111139190611b78565b9150915083821461115a576040517f528cc0fb00000000000000000000000000000000000000000000000000000000815260048101859052602481018390526044016105f8565b82811461119d576040517fc5ff08dc00000000000000000000000000000000000000000000000000000000815260048101849052602481018290526044016105f8565b909b909a5098505050505050505050565b505f9160019150565b5060029160019150565b50600191829150565b5f806111d684846111e4565b506001958695509350505050565b5f8060ff83811690600885901c1680830361122b576040517f46f0ca6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101006112388284611b9a565b111561127a576040517f8abcdd3f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016105f8565b50600295600195509350505050565b5f8061ffff831660ff81118061129d575080155b156112d7576040517fc1be16a1000000000000000000000000000000000000000000000000000000008152600481018290526024016105f8565b5060019485945092505050565b60a08201515f90819061ffff841690600f601486901c811691601087901c90911690849081906113149086610d8c565b9150915081831461135b576040517f9199e58e00000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016105f8565b8381101561139f576040517fff13710800000000000000000000000000000000000000000000000000000000815260048101829052602481018590526044016105f8565b509791965090945050505050565b60101c600f169160019150565b5060039160019150565b5f80600f601084901c16806113da5760016113dc565b805b95600195509350505050565b5f80600f601084901c16600281116113da5760026113dc565b506002915f9150565b5f80600f601084901c16600181116113da5760026113dc565b60605f825160020267ffffffffffffffff81111561144357611443611729565b6040519080825280601f01601f19166020018201604052801561146d576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156114a757805183518616908516178152602090920191600201611485565b50939695505050505050565b5f6114bd83610b55565b82106114f95781836040517ffcfaeff10000000000000000000000000000000000000000000000000000000081526004016105f8929190611bd2565b50600202016003015161ffff1690565b5f61151383611524565b80156103405750610340838361159e565b5f61154f827f01ffc9a70000000000000000000000000000000000000000000000000000000061159e565b15611597575f80611580847fffffffff000000000000000000000000000000000000000000000000000000006115c2565b9150915081801561158f575080155b949350505050565b505f919050565b5f805f6115ab85856115c2565b915091508180156115b95750805b95945050505050565b7f01ffc9a7000000000000000000000000000000000000000000000000000000005f818152600483905290819060208260248188617530fa92505f511515601f3d11169150509250929050565b611617611bea565b565b5f60208284031215611629575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610340575f80fd5b5f8060208385031215611669575f80fd5b823567ffffffffffffffff80821115611680575f80fd5b818501915085601f830112611693575f80fd5b8135818111156116a1575f80fd5b8660208285010111156116b2575f80fd5b60209290920196919550909350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b8083101561171e57835173ffffffffffffffffffffffffffffffffffffffff1682529284019260019290920191908401906116e8565b509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516020810167ffffffffffffffff8111828210171561177957611779611729565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117c6576117c6611729565b604052919050565b5f67ffffffffffffffff8211156117e7576117e7611729565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f60208284031215611823575f80fd5b813567ffffffffffffffff811115611839575f80fd5b8201601f81018413611849575f80fd5b803561185c611857826117ce565b61177f565b818152856020838501011115611870575f80fd5b816020840160208301375f91810160200191909152949350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f610340602083018461188d565b60208152816020820152818360408301375f818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b5f67ffffffffffffffff82111561195057611950611729565b5060051b60200190565b5f602080838503121561196b575f80fd5b825167ffffffffffffffff80821115611982575f80fd5b8185019150828287031215611995575f80fd5b61199d611756565b8251828111156119ab575f80fd5b80840193505086601f8401126119bf575f80fd5b825191506119cf61185783611937565b82815260059290921b830184019184810190888411156119ed575f80fd5b938501935b83851015611a2c57845173ffffffffffffffffffffffffffffffffffffffff81168114611a1d575f80fd5b825293850193908501906119f2565b8252509695505050505050565b5f8060408385031215611a4a575f80fd5b825167ffffffffffffffff80821115611a61575f80fd5b818501915085601f830112611a74575f80fd5b81516020611a84611857836117ce565b8281528882848701011115611a97575f80fd5b828286018383015e5f81840183015287820151909650935082841115611abb575f80fd5b838701935087601f850112611ace575f80fd5b83519250611ade61185784611937565b83815260059390931b8401810192818101925088841115611afd575f80fd5b938101935b83851015611b1b57845183529381019391810191611b02565b80955050505050509250929050565b604081525f611b3c604083018561188d565b90508260208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215611b89575f80fd5b505080516020909101519092909150565b8082018082111561027c577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b828152604060208201525f61158f604083018461188d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0e740ef00f5311ae11b711c111ca11e411b71289128912e413ad13ba11b711c113ba11b711c111c111b711b711b711ae11ae11ae11ae13c411b713e8140111b713c411b711b713ba11c111b711b711c1140a11b711c1140a11ae11c111c111c111c111b711c111c1140a11ae11ae140a11ae11ae140a11b711c1140a13ba13ba140a140a11ae140a140a140a11c11401"; - -/// @dev The hash of the meta that describes the contract. -bytes32 constant DESCRIBED_BY_META_HASH = bytes32(0x0ae1ecb6c0f6314beaf4d4cd803ba14c900b0eecb1ecd39a52739cff9ae2c34a); - -/// @dev The function pointers for the integrity check fns. -bytes constant INTEGRITY_FUNCTION_POINTERS = - hex"0e740ef00f5311ae11b711c111ca11e411b71289128912e413ad13ba11b711c113ba11b711c111c111b711b711b711ae11ae11ae11ae13c411b713e8140111b713c411b711b713ba11c111b711b711c1140a11b711c1140a11ae11c111c111c111c111b711c111c1140a11ae11ae140a11ae11ae140a11b711c1140a13ba13ba140a140a11ae140a140a140a11c11401"; diff --git a/src/generated/RainlangParser.pointers.sol b/src/generated/RainlangParser.pointers.sol deleted file mode 100644 index f0c2778e3..000000000 --- a/src/generated/RainlangParser.pointers.sol +++ /dev/null @@ -1,61 +0,0 @@ -// SPDX-License-Identifier: LicenseRef-DCL-1.0 -// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity ^0.8.25; - -// THIS FILE IS AUTOGENERATED BY ./script/BuildPointers.sol - -// This file is committed to the repository because there is a circular -// dependency between the contract and its pointers file. The contract -// needs the pointers file to exist so that it can compile, and the pointers -// file needs the contract to exist so that it can be compiled. - -/// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x729a2facceada6a158fbb00945d6371cadf1ce78e9b3f56724e30fb8e397d7d6); - -/// @dev The deterministic deploy address of the contract when deployed via -/// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x9179445a637E6Ae72Bb38273944FAB96834488dd); - -/// @dev The creation bytecode of the contract. -bytes constant CREATION_CODE = - hex"6080604052348015600e575f80fd5b5061549d8061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c80637764fd9c1161004d5780637764fd9c146100b0578063ccf44775146100d1578063d6d8c9a8146100e6575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b610076366004614d0e565b6100ee565b60405190151581526020015b60405180910390f35b6100a361009e366004614e0e565b610186565b6040516100879190614e88565b6100c36100be366004614e0e565b61023e565b604051610087929190614f39565b6100d961025e565b6040516100879190614f8e565b6100d961026d565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f1a2c8edd00000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040805160208101909152606081525f6101e3836101a2610277565b6101aa61029a565b60408051808201909152600881527f1c991fe52025208200000000000000000000000000000000000000000000000060208201526102ba565b90505f6020840190505f6101fa8580510160200190565b90506102078383836104ac565b915061021483838361050e565b9150604051806020016040528061022a856106db565b90529350505050610239610739565b919050565b606080610255610250846101a2610277565b61077e565b91509150915091565b60606102686108fb565b905090565b6060610268610948565b6060604051806101a0016040528061016381526020016152aa6101639139905090565b60606040518060c001604052806090815260200161540d60909139905090565b6103476040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b8152602001848152602001858152602001600467ffffffffffffffff8111156103cd576103cd614d4d565b6040519080825280602002602001820160405280156103f6578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016828152808301825283517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001681178452855290840182905283018190529082018190526080820181905260a082018190526101208201819052610140820181905261020082015290505b95945050505050565b5f5b8183101561050457825160015f9190911a1b6401000026008116156104df576104d8858585610c09565b93506104fe565b658000000000008116156104f8576104d8858585610c4d565b50610504565b506104ae565b50815b9392505050565b815160408051808201909152601081527f7573696e672d776f7264732d66726f6d0000000000000000000000000000000060208201525f919061055090614fa0565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008216146105815783915050610507565b5060108301925081831061061a5761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fe3e4992d00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60405180910390fd5b825160015f91821a1b90640100002600821690036106835761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176105dc565b836001019350505b818310156105045761069e8484846104ac565b925081831015610504575f806106b5868686610e7b565b9096509092509050816106c9575050610504565b6106d486868361102d565b505061068b565b60c08101516040516060919073ffffffffffffffffffffffffffffffffffffffff602082015f5b841561072357848316825260a09490941c5193602090910190600101610702565b8352604052610731826110ec565b509392505050565b60405162010000811061077b576040517f766c065f00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b50565b6060805f8361022001515111156108d0575f61079f84610220015160200190565b90505f6107b485610220015180510160200190565b90506107c18583836104ac565b91506107ce85838361050e565b91505b80821015610805576107e48583836104ac565b91506107f185838361113a565b91506107fe85838361153d565b91506107d1565b80821461083e576040517f7d565df600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610100850151600816156108cd5761022085015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517ff06f54cf00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b50505b5f806108e56108de86611afc565b8690611c31565b915091506108f1610739565b9094909350915050565b6040805160a0810182526004808252611c996020830152611fe592820192909252612025606082810191909152612082608083015291908190805b61093f8161226b565b94505050505090565b6060614d045f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff1681526020016122fb81526020016122fb81526020016122fb81526020016123c781526020016124db81526020016124db81526020016123c781526020016123c781526020016124db81526020016122fb81526020016122fb81526020016122fb81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db8152509050606081905060488151146109365780516040517fc8b56901000000000000000000000000000000000000000000000000000000008152600481019190915260248101849052604401610611565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690525f610c45838364010000260061251d565b949350505050565b6101008301805160011790525f60048301821015610ce75761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f25a7646800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b825160f01c612f2a8114610d765761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f3e47169c00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6003840193505f5b83851015610e1b5784515f1a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd18101610e0f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86015160f01c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d18101610e0d57505050600193840193610e1b565b505b85600101955050610d7e565b80610e715761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017610cb2565b5092949350505050565b81515f90819081908190600181831a1b6703ff200000000000811615610fa25786610ea7896001615012565b1015610f9957600182811a1b7ffffffffffffffffffffffffffffffffffeffffffffffffffffff00000000000082821701610ee4575f9350610f93565b7ffffffffffffffffffffffffffffffffffffffffffeffffffffff00000000000082821701610f8e576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f75c28ff900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b600193505b50610fe7565b60019250610fe7565b640400000000811615610fb85760029250610fe7565b6b080000000000000000000000811615610fd55760039250610fe7565b505f9450869350849250611024915050565b505f905061101588888861100d83876101a09190910151600291820201015161ffff1690565b63ffffffff16565b90975060019550879450925050505b93509350939050565b73ffffffffffffffffffffffffffffffffffffffff8111156110ca5761022083015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f9d7e517e00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60c09092018051604080516020810190915290815260a01b9290921790915250565b60208101602082510282015b808210156111355781518151835281526020909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016110f8565b505050565b5f5b818310156105045782515f90600190821a1b6f07fffffe8000000000000000000000008116156113b757610100860151600116156111f65761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f5520a51700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6f07fffffe0000000000000000000000008116156112c95761122985856f07fffffe0000000003ff200000000000612546565b90955091505f6112398784612615565b50905080156112c35761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f53e6feba00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b506112ea565b6112e760018601856f07fffffe0000000003ff20000000000061251d565b94505b856040015160ff1660ff148061130757508560a0015160ff1660ff145b1561138d5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f3820634100000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b604086018051600190810190915260a0870180519091019052610100860180516009179052611536565b640100002600811615611409576113d7600186018564010000260061251d565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611536565b670400000000000000811615611455575050610100840180516008177ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe16905260019290920191610504565b658000000000008116156114e55761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fedad0c5800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176111c1565b505061113c565b5f5b818310156105045782515f90600190821a1b6f07fffffe00000000000000000000000081161561175d57610100860151600116156115f95761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f4e803df600000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b8461161581866f07fffffe0000000003ff200000000000612546565b80945081975050505f8061162e89610240015186612690565b91509150811561166f57611643898989612764565b97505f6116508a836129ef565b905061165d8a8383612a15565b50610100890180516002179052611749565b6116798986612bfa565b9092509050811561169d5761168f895f83612a15565b61169889612c74565b611749565b5f6060848a03600581016116b28d8d8d612764565b9b508c6101e0015151602002602001810190505f60059050604051935060208201840160405282818501528184528394506116fa8860056116f38760200190565b0185612cda565b5050506101e08b015180516001019061172d906117278361171e8680510160200190565b90602002900390565b83612ce3565b5061173a8b60ff84612a15565b50506101008901805160021790525b505050610100860180516001179052611af5565b6101008601516002161561187f576501000000000081165f036117fb5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f23b5c6ea00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b606086810180515f1a6003019190829053603b821115611847576040517f6232f2d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050610100860180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc169052600190940193611af5565b6502000000000081161561195b576060868101515f90811a91908290036119215761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f7f9db54200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b808801600383039250828153826004820101515f1a8360028301015160f01c600101535061194e88612c74565b5050600190940193611af5565b6401000026008116156119ad5761197b600186018564010000260061251d565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611af5565b6b0800000003ff2004000000008116156119e8576119cc868686612cef565b94506119d786612c74565b610100860180516001179052611af5565b65100000000000811615611a0d57611a008686612e19565b5050600190920191610504565b670800000000000000811615611a4557611a278686612e19565b611a3086613271565b50506004610100850152600190920191610504565b65800000000000811615611aa45761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176114b0565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176115c4565b505061153f565b60e08101518151516060919060f082901c9060208114611b48576040517f858f2dcf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051935060208401601083045f8183535060016008850483018101928391015f80805b88811015611ba55789811c61ffff81165163ffff0000601092831b16811760e01b8786015284019360f08390031b929092179101611b6c565b50825117909152878203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08181018952908801601f01166040525f5b82811015611c25576002810288016003015161ffff90811683018051602060f082901c019260e09190911c1690611c1a838284612cda565b505050600101611be2565b50505050505050919050565b6060805f611c3e8461359f565b90505f5b81811015611c81575f611c5586836135b9565b60040190505f611c6587846135e8565b60040282019050611c778883836135ff565b5050600101611c42565b5083611c8c866138bf565b92509250505b9250929050565b5f80808080611ca9888888613934565b985090925090508181036040811115611d3d5761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fff2f594900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b805f03611dc55761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fc75cd50900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60028106600103611e515761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fd76d9b5700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6001820397505f5b838910611fd45788515f90811a906001821b906703ff000000000000821615611ea557507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd08201611f9e565b6c7e000000000000000000000000821615611ee357507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa98201611f9e565b687e0000000000000000821615611f1d57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc98201611f9e565b6102208d01518c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f69f1e3e600000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909b019a831b96909617955050600401611e59565b50509350909150505b935093915050565b5f805f805f80611ff58888613984565b9296509094509250905061200a898486613e23565b826120158383613ea7565b9550955050505050935093915050565b5f808080612034878787613ef9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301805184840382529199509294509092505f91612072816140b3565b9190529698969750505050505050565b6001909101905f80836120a681856fffffffffdffffffffffffffeffffd9ff61251d565b9450848181036121315761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517ff73a1aa800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b61213c878787610c09565b95508561215a81876fffffffffdfffffffffffffffffffffff61251d565b9650868681106121e65761022089015188037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fc4b1913500000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b875160015f91821a1b906b20000000000000000000000082169003612256576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176121b1565b50600190970196876120158a868686866140df565b60605f825160020267ffffffffffffffff81111561228b5761228b614d4d565b6040519080825280601f01601f1916602001820160405280156122b5576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156122ef578051835186169085161781526020909201916002016122cd565b50939695505050505050565b5f8151600103612386575060208101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b60e082901d5f61233e8383836142a3565b905061ffff81111561237c576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250610239915050565b81515f0361239557505f919050565b6040517f1ac6690800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f815160020361249f57602082015160408301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d5f61240e8383836142a3565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b935060e085901d925090505f6124478484836142a3565b905060ff821180612458575060ff81115b1561248f576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60081b1794506102399350505050565b600282511015612395576040517ff16066b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81515f14612516576040517f9f16b02000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505f919050565b5f5b5f82600186515f1a1b1611838510161561253e5760018401935061251f565b509192915050565b5f80806001818787036020811161255d5780612560565b60205b915050875192505b8519600184841a1b1615818310161561258657600182019150612568565b9681019660208290036008810293841c90931b9261260857604080516020810185905201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fe47fe8b700000000000000000000000000000000000000000000000000000000825261061191600401614f8e565b5095969095509350505050565b5f806126218484612bfa565b909250905081611c925750610120830180515f93845260209384902060408051928352948201855293909401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909316601084901b62ff00001617909317909252909160ff90911660010190565b600182810180515f928392600560ff93909316602102870192830192909101835b818310156127555760018301516021909301805190935f90819060ff1681806126da838e6142ff565b915091508186165f036126fc575f809b509b5050505050505050505050611c92565b5f8761270c60018503891661432a565b016004028b015195505062ffffff90811693508416830391506127409050575060019750601c1a9550611c92945050505050565b6127498361432a565b840193505050506126b1565b505f9788975095505050505050565b81516101e08401515f80825291600190831a1b907ffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000008201610e71576127a885615052565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe169052805190955060015f91821a1b9250805b8587101561298d57865160015f9190911a1b93506401000026008416156128165761280f888888610c09565b96506127e3565b67400000000000000084161561283a5761282f87615052565b96506001905061298d565b6001886101000151165f0361290b57600482036128d25761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f8c9fdbb300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5f6128de898989614402565b60208581028701018190526101008b0180516001179052909850905061290383615052565b9250506127e3565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f722cd24a00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b806129e35761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612958565b50905250919392505050565b6101c08201516002828102820101516101e08401515f9261ffff90921691906104a39083565b612a1e8361442a565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb1660081790526020808401515f90811a8501602101805190911a60ff811492919060018101825350508115612aa7576040517f8092d1ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050825180516060808601515f90811a87016061018051939461ffff8616949093921a60ff81149291600886048503601c0191600181018253505f60038201537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe30180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690911790528115612b6a576040517f3abd0c5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050602090920183821b176018820185901b178083529160e0829003612bf25760408051601083901b6020908117601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016918252810190915281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000168117825286525b505050505050565b6101208201516101408301515f8381526020808220919384939290911c91600160ff84161b80821615612c5f5761ffff83165b8015612c5d578360201c8503612c50576001965061ffff8460101c169550612c5d565b51925061ffff8316612c2d565b505b17610140909601959095525090939092509050565b6060818101515f90811a919082900361113557602083810180515f1a600101919082815350603e8210612cd3576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b8083835e505050565b6020810283835e505050565b5f8080612cfd868686610e7b565b9096509250905080612d8b5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fb0e4e5b300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5f80612d96846144b6565b6101808901511615612dd75761016088015160101c5b8015801590612db9575082155b15612dd557602081015190519085149250600190910190612dac565b505b61016088015161ffff16612dfd600184612df15782612df5565b8383035b8b9190612a15565b5081612e0d57612e0d88856144cd565b50949695505050505050565b6060828101515f1a908115612ea95761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f6fb11cdc00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5050612eb48261442a565b61010082018051600416600890811790915260a0830151602084015160ff8083169360f89290921c9290911c1681035f819003612fde576004856101000151165f03612f7b5761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fab1d3ea700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b90820190603e8210612fb9576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60f882901b6020860152610200850151612fd3908461451f565b6102008601526130f9565b60018111156130f957808310156130705761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f78ef278200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b808311156130f95761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f43168e6800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b8082036001016020601083028101905b8181101561325d5760a08801516020848a0181015191831c61ffff16915f1a9060015b82811161324b5760208406601c0361314557925160f01c925b83516102008d015160019190911a9061315e90826145a3565b6102008e01525f82851480156131745750896001145b61317f576001613181565b8b5b6102008f015190915061319490826145e9565b6102008f0152600f8111806131a95750600f82115b1561322f576102208e01518d037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f7ea1869f00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b818160041b17600187015350506004939093019260010161312c565b50506001909401935050601001613109565b5050505060081b60a0909301929092525050565b60e081015160208083015160f083811c925f9290921a60010191908390036132c5576040517fa806284100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610200850151855180515f928392909160219060101c61ffff165b80156132f757805190925060101c61ffff166132e0565b506040518a82018051919650601c8401939160049160248901915f90811a805b8d8310156133dc5760048202860195506004878a03045b8082111561334c57965161ffff16601c81019950969003600761332e565b506004810298899003805186529894909401938103865b60078211156133a8575160101c61ffff1680518652601c909501947ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff990910190613363565b81156133c3575160101c61ffff168051865260048202909501945b50505060019182018051909291909101905f1a80613317565b50505082895250600488810180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9290940491909101601881901b8817939093179052601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660405260ff1094505083156134a8576040517fe972437e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134b56001808a1b615089565b891685891b60f06134c78b6010615012565b901b171760e08b01526101008a0180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7169052604080516020601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681815280820183525f80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001682178152908d52908c01819052908b0181905260608b0181905260808b0181905260a08b018190526101208b018190526101408b018190526102008b015250505050505050505050565b5f81515f036135af57505f919050565b50602001515f1a90565b5f806135c48461359f565b60020260010190505f6135d7858561465c565b949091019093016020019392505050565b5f806135f484846135b9565b515f1a949350505050565b808210156111355781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016138395760c08401515b80156138375760a081901c5161016086015161ffff60e085901c1660208101805160089390931b62ffff0016600187901a1760e81b7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909316929092179091526040517f570c7a630000000000000000000000000000000000000000000000000000000081529192915f908190819073ffffffffffffffffffffffffffffffffffffffff86169063570c7a63906136f2908790600401614f8e565b5f60405180830381865afa15801561370c573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526137519190810190615128565b925092509250821561382d57815160041461379a57816040517fbe2d187d0000000000000000000000000000000000000000000000000000000081526004016106119190614f8e565b60208201517fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff88161789525f5b81518110156138225761381a828281518110613803576138036151d5565b60200260200101518c6144cd90919063ffffffff16565b6001016137e5565b505050505050613837565b505050505061363a565b505b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016138b357606061ffff8260e01c1690505f6003820152600581019050806040517faedfba2f0000000000000000000000000000000000000000000000000000000081526004016106119190614f8e565b506004820191506135ff565b6101608101516040805161ffff8316808252602080820283019081019093529092909160109190911c90835b8082111561392b5760208301518252915161ffff16917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101906138eb565b50505050919050565b5f808080613943866002615012565b9050806c7e0000007e03ff0000000000005b86821081600184515f1a1b161515161561397457600182019150613955565b5090979096508695509350505050565b5f82818061399983866520000000000061251d565b925085831415836139b381886703ff00000000000061251d565b94508085036139ed57507f34bd20690000000000000000000000000000000000000000000000000000000094505f9250829150613e1a9050565b5f806139f98a886146b2565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613a37575095505f9350839250613e1a915050565b86519095506540000000000060015f9290921a9190911b161515888710169150508015613cc657506001909301925f84613a7a81896703ff00000000000061251d565b9550808603613ab557507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f9350839250613e1a915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b660100000000000016151516600103613b24577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613ab7565b818114613b7b575f80613b3784846146b2565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613b77575097505f9550859450613e1a9350505050565b9350505b5f831215613bb657507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f9450849350613e1a92505050565b8315613bc257825f0392505b80820394505f851315613c0257507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f9450849350613e1a92505050565b855f03613c1157829550613cc3565b5f8590036043811115613c5257507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f9550859450613e1a9350505050565b600a0a8681025f88838381613c6957613c69615025565b0514159050601b82900b8214158180613c7f5750805b15613cbb57507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f9850889750613e1a9650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b161515878610168015613e0b5760019095019485613d06818a6520000000000061251d565b965086613d1c818b6703ff00000000000061251d565b9750808803613d5957507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f9550859450613e1a9350505050565b505f80613d66838a6146b2565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613da6575097505f9550859450613e1a9350505050565b9250508482015f83138015613dba57508581125b80613dce57505f83128015613dce57508581135b15613e0757507fd556b1110000000000000000000000000000000000000000000000000000000097505f9550859450613e1a9350505050565b9450505b845f03613e16575f93505b5050505b92959194509250565b7fffffffff00000000000000000000000000000000000000000000000000000000811615611135576102208301515f9083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000179050815f528060045260245ffd5b5f805f613eb485856147dc565b9150915080610731576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610611565b5f80806001850181806f7ffffffffffffffffffffffb0000000081807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b8b0301602080821015613f475750805b875193505b84600185851a1b1615158184101615613f6a57600183019250613f4c565b505080602003613ff5576102208c01518b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f30515bda00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b85810180519095505f1a6001811b6404000000001615806140155750858b145b1561409b576102208d015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f04022fbf00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b50949b939a505060018a019850919650505050505050565b5f80601f90505f60e09050818451168082175f528060208601600183016020035e50505f519392505050565b5f60608186860361ffff811115614125576040517fb6da789c00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b604080516041888803848101838101929092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169093526002828101859052018152935060228401925061417b898484612cda565b6141888783850183612cda565b50505060c08701515b80156142525760a081901c516040517fc6c0cbb60000000000000000000000000000000000000000000000000000000081529091905f90819073ffffffffffffffffffffffffffffffffffffffff84169063c6c0cbb6906141f6908890600401614f8e565b6040805180830381865afa158015614210573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142349190615202565b91509150811561424a5794506104a39350505050565b505050614191565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612d56565b5f805f6142b18686866148e2565b91509150806142f6576040517f05e476780000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610611565b50949350505050565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116611c92575060019250929050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361435b5750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f805f614412888888610e7b565b9250925092508215614252579093509150611fdd9050565b8051602080830180515f90811a8086016021015160a0939190831a61447c5785518488018051600861ffff909316929092046020038801601e83901a840360010160100290811b909217905260f01092505b50508015612cd3576040517f5b1a42d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6144c36101008361522c565b6001901b92915050565b6101608201805160408051808201909152601091821c808252602082018590528351600161ffff909116019282901b9290921790925261450c836144b6565b6101809094018051909417909352505050565b5f61452a83836145e9565b925060ff600884901c8116830190811115614571576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff841660089190911b17905092915050565b5f60ff8316828110156145e2576040517f23b49a2a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050900390565b5f60ff808416830190600885901c811690601086901c90831115614639576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808311156146445750815b601081901b600883901b841717935050505092915050565b5f6146668361359f565b82106146a25781836040517ffcfaeff1000000000000000000000000000000000000000000000000000000008152600401610611929190615264565b50600202016003015161ffff1690565b81515f90819065200000000000600191831a9190911b161515838510168085019082806146df8488614ae9565b90925090507fffffffff0000000000000000000000000000000000000000000000000000000082161561471a575093505f9250611c92915050565b825f0361477d577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161474e575f614770565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95509350611c9292505050565b7f800000000000000000000000000000000000000000000000000000000000000081116147aa575f6147cc565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f601b83900b8314838382614840577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561482057620186a0860595506005850194505b8586601b0b1461483b57600a86059550846001019450614820565b614856565b855f0361485657505f925060019150611c929050565b848560030b146148b2575f85121561487657505f9250829150611c929050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610611565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f851215614928576040517f4a7d166b0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610611565b845f0361493a57505f90506001611fdd565b8460ff8416850185811215614985576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610611565b5f805f8312156149ef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb38312156149c6575f809550955050505050611fdd565b825f03600a0a91508184816149dd576149dd615025565b0495505084029091149150611fdd9050565b5f831315614ad957604d831315614a45576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610611565b82600a0a9150817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81614a7a57614a7a615025565b04841115614ac7576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610611565b5091909102925060019150611fdd9050565b8360019550955050505050611fdd565b5f80828410614b1c57507f34bd20690000000000000000000000000000000000000000000000000000000090505f611c92565b835f03614b55576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b878210158015614b8d5750604d83105b15614bd057815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a8590030201614b7d565b878210614cf65781515f1a8490036001811115614c1857507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611c929350505050565b600a84900a8102828101831115614c5b57507f0fdc26350000000000000000000000000000000000000000000000000000000096505f9550611c92945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b878210614cf65781515f1a60308114614ccb57507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611c929350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190614c87565b5f9890975095505050505050565b614d0c61527c565b565b5f60208284031215614d1e575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610507575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614dc157614dc1614d4d565b604052919050565b5f67ffffffffffffffff821115614de257614de2614d4d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f60208284031215614e1e575f80fd5b813567ffffffffffffffff811115614e34575f80fd5b8201601f81018413614e44575f80fd5b8035614e57614e5282614dc9565b614d7a565b818152856020838501011115614e6b575f80fd5b816020840160208301375f91810160200191909152949350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b80831015614ee257835173ffffffffffffffffffffffffffffffffffffffff168252928401926001929092019190840190614eac565b509695505050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b604081525f614f4b6040830185614eed565b8281036020848101919091528451808352858201928201905f5b81811015614f8157845183529383019391830191600101614f65565b5090979650505050505050565b602081525f6105076020830184614eed565b80516020808301519190811015614fdf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561018057610180614fe5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361508257615082614fe5565b5060010190565b8181038181111561018057610180614fe5565b80518015158114610239575f80fd5b5f82601f8301126150ba575f80fd5b8151602067ffffffffffffffff8211156150d6576150d6614d4d565b8160051b6150e5828201614d7a565b92835284810182019282810190878511156150fe575f80fd5b83870192505b8483101561511d57825182529183019190830190615104565b979650505050505050565b5f805f6060848603121561513a575f80fd5b6151438461509c565b9250602084015167ffffffffffffffff8082111561515f575f80fd5b818601915086601f830112615172575f80fd5b8151615180614e5282614dc9565b818152886020838601011115615194575f80fd5b8160208501602083015e5f60208383010152809550505060408601519150808211156151be575f80fd5b506151cb868287016150ab565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215615213575f80fd5b61521c8361509c565b9150602083015190509250929050565b5f8261525f577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b828152604060208201525f610c456040830184614eed565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0288400100420b0280046b0641220186adb8a044003012020f2a880521281ac8811a000000000000000000080000000000100000000000000002000000000000000000290ea98a3a10f9c53927bda61c6395ad0e9fb4a8075dbeaf2d313e9e09b06d681dfe49062ce21ac13e83a6cc2ad2d2123422c3e0052f369e1f27267220a0a68d2f357696465d217b131120880f24f4a8242f1af53f41f7290afa3e8638acf3d13397e9fd00443a453b406bb547b9059d25a3cd1e11d0c3260b15eb4d16fc94274427bc412baf2cc2321b8f630dca9efe403ce35f1400684845c291e3425d68b13d5f9a151eb98c15239cd9c10c1f698235c8d3843c08d579273459d41a2c9ff617a5b2cd15c0031810f621af127ba34c26bb6c4137b2ad3d1b73563d0210215f36aa563921098e690457fb180376e752066a470128f11de101fcc60522de7ddd183d3d6d4196c37031cba2872e7b3af5304eee7219a8093543082b5f0801f5a522fb22fb22fb23c724db24db23c723c724db22fb22fb22fb24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db"; - -/// @dev The runtime bytecode of the contract. -bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b5060043610610064575f3560e01c80637764fd9c1161004d5780637764fd9c146100b0578063ccf44775146100d1578063d6d8c9a8146100e6575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b610076366004614d0e565b6100ee565b60405190151581526020015b60405180910390f35b6100a361009e366004614e0e565b610186565b6040516100879190614e88565b6100c36100be366004614e0e565b61023e565b604051610087929190614f39565b6100d961025e565b6040516100879190614f8e565b6100d961026d565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f1a2c8edd00000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040805160208101909152606081525f6101e3836101a2610277565b6101aa61029a565b60408051808201909152600881527f1c991fe52025208200000000000000000000000000000000000000000000000060208201526102ba565b90505f6020840190505f6101fa8580510160200190565b90506102078383836104ac565b915061021483838361050e565b9150604051806020016040528061022a856106db565b90529350505050610239610739565b919050565b606080610255610250846101a2610277565b61077e565b91509150915091565b60606102686108fb565b905090565b6060610268610948565b6060604051806101a0016040528061016381526020016152aa6101639139905090565b60606040518060c001604052806090815260200161540d60909139905090565b6103476040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b8152602001848152602001858152602001600467ffffffffffffffff8111156103cd576103cd614d4d565b6040519080825280602002602001820160405280156103f6578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016828152808301825283517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001681178452855290840182905283018190529082018190526080820181905260a082018190526101208201819052610140820181905261020082015290505b95945050505050565b5f5b8183101561050457825160015f9190911a1b6401000026008116156104df576104d8858585610c09565b93506104fe565b658000000000008116156104f8576104d8858585610c4d565b50610504565b506104ae565b50815b9392505050565b815160408051808201909152601081527f7573696e672d776f7264732d66726f6d0000000000000000000000000000000060208201525f919061055090614fa0565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008216146105815783915050610507565b5060108301925081831061061a5761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fe3e4992d00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60405180910390fd5b825160015f91821a1b90640100002600821690036106835761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176105dc565b836001019350505b818310156105045761069e8484846104ac565b925081831015610504575f806106b5868686610e7b565b9096509092509050816106c9575050610504565b6106d486868361102d565b505061068b565b60c08101516040516060919073ffffffffffffffffffffffffffffffffffffffff602082015f5b841561072357848316825260a09490941c5193602090910190600101610702565b8352604052610731826110ec565b509392505050565b60405162010000811061077b576040517f766c065f00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b50565b6060805f8361022001515111156108d0575f61079f84610220015160200190565b90505f6107b485610220015180510160200190565b90506107c18583836104ac565b91506107ce85838361050e565b91505b80821015610805576107e48583836104ac565b91506107f185838361113a565b91506107fe85838361153d565b91506107d1565b80821461083e576040517f7d565df600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610100850151600816156108cd5761022085015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517ff06f54cf00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b50505b5f806108e56108de86611afc565b8690611c31565b915091506108f1610739565b9094909350915050565b6040805160a0810182526004808252611c996020830152611fe592820192909252612025606082810191909152612082608083015291908190805b61093f8161226b565b94505050505090565b6060614d045f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff1681526020016122fb81526020016122fb81526020016122fb81526020016123c781526020016124db81526020016124db81526020016123c781526020016123c781526020016124db81526020016122fb81526020016122fb81526020016122fb81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db81526020016124db8152509050606081905060488151146109365780516040517fc8b56901000000000000000000000000000000000000000000000000000000008152600481019190915260248101849052604401610611565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690525f610c45838364010000260061251d565b949350505050565b6101008301805160011790525f60048301821015610ce75761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f25a7646800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b825160f01c612f2a8114610d765761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f3e47169c00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6003840193505f5b83851015610e1b5784515f1a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd18101610e0f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86015160f01c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d18101610e0d57505050600193840193610e1b565b505b85600101955050610d7e565b80610e715761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017610cb2565b5092949350505050565b81515f90819081908190600181831a1b6703ff200000000000811615610fa25786610ea7896001615012565b1015610f9957600182811a1b7ffffffffffffffffffffffffffffffffffeffffffffffffffffff00000000000082821701610ee4575f9350610f93565b7ffffffffffffffffffffffffffffffffffffffffffeffffffffff00000000000082821701610f8e576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f75c28ff900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b600193505b50610fe7565b60019250610fe7565b640400000000811615610fb85760029250610fe7565b6b080000000000000000000000811615610fd55760039250610fe7565b505f9450869350849250611024915050565b505f905061101588888861100d83876101a09190910151600291820201015161ffff1690565b63ffffffff16565b90975060019550879450925050505b93509350939050565b73ffffffffffffffffffffffffffffffffffffffff8111156110ca5761022083015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f9d7e517e00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60c09092018051604080516020810190915290815260a01b9290921790915250565b60208101602082510282015b808210156111355781518151835281526020909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016110f8565b505050565b5f5b818310156105045782515f90600190821a1b6f07fffffe8000000000000000000000008116156113b757610100860151600116156111f65761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f5520a51700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6f07fffffe0000000000000000000000008116156112c95761122985856f07fffffe0000000003ff200000000000612546565b90955091505f6112398784612615565b50905080156112c35761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f53e6feba00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b506112ea565b6112e760018601856f07fffffe0000000003ff20000000000061251d565b94505b856040015160ff1660ff148061130757508560a0015160ff1660ff145b1561138d5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f3820634100000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b604086018051600190810190915260a0870180519091019052610100860180516009179052611536565b640100002600811615611409576113d7600186018564010000260061251d565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611536565b670400000000000000811615611455575050610100840180516008177ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe16905260019290920191610504565b658000000000008116156114e55761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fedad0c5800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176111c1565b505061113c565b5f5b818310156105045782515f90600190821a1b6f07fffffe00000000000000000000000081161561175d57610100860151600116156115f95761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f4e803df600000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b8461161581866f07fffffe0000000003ff200000000000612546565b80945081975050505f8061162e89610240015186612690565b91509150811561166f57611643898989612764565b97505f6116508a836129ef565b905061165d8a8383612a15565b50610100890180516002179052611749565b6116798986612bfa565b9092509050811561169d5761168f895f83612a15565b61169889612c74565b611749565b5f6060848a03600581016116b28d8d8d612764565b9b508c6101e0015151602002602001810190505f60059050604051935060208201840160405282818501528184528394506116fa8860056116f38760200190565b0185612cda565b5050506101e08b015180516001019061172d906117278361171e8680510160200190565b90602002900390565b83612ce3565b5061173a8b60ff84612a15565b50506101008901805160021790525b505050610100860180516001179052611af5565b6101008601516002161561187f576501000000000081165f036117fb5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f23b5c6ea00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b606086810180515f1a6003019190829053603b821115611847576040517f6232f2d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050610100860180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc169052600190940193611af5565b6502000000000081161561195b576060868101515f90811a91908290036119215761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f7f9db54200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b808801600383039250828153826004820101515f1a8360028301015160f01c600101535061194e88612c74565b5050600190940193611af5565b6401000026008116156119ad5761197b600186018564010000260061251d565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611af5565b6b0800000003ff2004000000008116156119e8576119cc868686612cef565b94506119d786612c74565b610100860180516001179052611af5565b65100000000000811615611a0d57611a008686612e19565b5050600190920191610504565b670800000000000000811615611a4557611a278686612e19565b611a3086613271565b50506004610100850152600190920191610504565b65800000000000811615611aa45761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176114b0565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176115c4565b505061153f565b60e08101518151516060919060f082901c9060208114611b48576040517f858f2dcf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051935060208401601083045f8183535060016008850483018101928391015f80805b88811015611ba55789811c61ffff81165163ffff0000601092831b16811760e01b8786015284019360f08390031b929092179101611b6c565b50825117909152878203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08181018952908801601f01166040525f5b82811015611c25576002810288016003015161ffff90811683018051602060f082901c019260e09190911c1690611c1a838284612cda565b505050600101611be2565b50505050505050919050565b6060805f611c3e8461359f565b90505f5b81811015611c81575f611c5586836135b9565b60040190505f611c6587846135e8565b60040282019050611c778883836135ff565b5050600101611c42565b5083611c8c866138bf565b92509250505b9250929050565b5f80808080611ca9888888613934565b985090925090508181036040811115611d3d5761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fff2f594900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b805f03611dc55761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fc75cd50900000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60028106600103611e515761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fd76d9b5700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6001820397505f5b838910611fd45788515f90811a906001821b906703ff000000000000821615611ea557507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd08201611f9e565b6c7e000000000000000000000000821615611ee357507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa98201611f9e565b687e0000000000000000821615611f1d57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc98201611f9e565b6102208d01518c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f69f1e3e600000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909b019a831b96909617955050600401611e59565b50509350909150505b935093915050565b5f805f805f80611ff58888613984565b9296509094509250905061200a898486613e23565b826120158383613ea7565b9550955050505050935093915050565b5f808080612034878787613ef9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301805184840382529199509294509092505f91612072816140b3565b9190529698969750505050505050565b6001909101905f80836120a681856fffffffffdffffffffffffffeffffd9ff61251d565b9450848181036121315761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517ff73a1aa800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b61213c878787610c09565b95508561215a81876fffffffffdfffffffffffffffffffffff61251d565b9650868681106121e65761022089015188037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fc4b1913500000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b875160015f91821a1b906b20000000000000000000000082169003612256576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176121b1565b50600190970196876120158a868686866140df565b60605f825160020267ffffffffffffffff81111561228b5761228b614d4d565b6040519080825280601f01601f1916602001820160405280156122b5576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156122ef578051835186169085161781526020909201916002016122cd565b50939695505050505050565b5f8151600103612386575060208101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b60e082901d5f61233e8383836142a3565b905061ffff81111561237c576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250610239915050565b81515f0361239557505f919050565b6040517f1ac6690800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f815160020361249f57602082015160408301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d5f61240e8383836142a3565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b935060e085901d925090505f6124478484836142a3565b905060ff821180612458575060ff81115b1561248f576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60081b1794506102399350505050565b600282511015612395576040517ff16066b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81515f14612516576040517f9f16b02000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505f919050565b5f5b5f82600186515f1a1b1611838510161561253e5760018401935061251f565b509192915050565b5f80806001818787036020811161255d5780612560565b60205b915050875192505b8519600184841a1b1615818310161561258657600182019150612568565b9681019660208290036008810293841c90931b9261260857604080516020810185905201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fe47fe8b700000000000000000000000000000000000000000000000000000000825261061191600401614f8e565b5095969095509350505050565b5f806126218484612bfa565b909250905081611c925750610120830180515f93845260209384902060408051928352948201855293909401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909316601084901b62ff00001617909317909252909160ff90911660010190565b600182810180515f928392600560ff93909316602102870192830192909101835b818310156127555760018301516021909301805190935f90819060ff1681806126da838e6142ff565b915091508186165f036126fc575f809b509b5050505050505050505050611c92565b5f8761270c60018503891661432a565b016004028b015195505062ffffff90811693508416830391506127409050575060019750601c1a9550611c92945050505050565b6127498361432a565b840193505050506126b1565b505f9788975095505050505050565b81516101e08401515f80825291600190831a1b907ffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000008201610e71576127a885615052565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe169052805190955060015f91821a1b9250805b8587101561298d57865160015f9190911a1b93506401000026008416156128165761280f888888610c09565b96506127e3565b67400000000000000084161561283a5761282f87615052565b96506001905061298d565b6001886101000151165f0361290b57600482036128d25761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f8c9fdbb300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5f6128de898989614402565b60208581028701018190526101008b0180516001179052909850905061290383615052565b9250506127e3565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517f722cd24a00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b806129e35761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612958565b50905250919392505050565b6101c08201516002828102820101516101e08401515f9261ffff90921691906104a39083565b612a1e8361442a565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb1660081790526020808401515f90811a8501602101805190911a60ff811492919060018101825350508115612aa7576040517f8092d1ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050825180516060808601515f90811a87016061018051939461ffff8616949093921a60ff81149291600886048503601c0191600181018253505f60038201537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe30180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690911790528115612b6a576040517f3abd0c5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050602090920183821b176018820185901b178083529160e0829003612bf25760408051601083901b6020908117601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016918252810190915281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000168117825286525b505050505050565b6101208201516101408301515f8381526020808220919384939290911c91600160ff84161b80821615612c5f5761ffff83165b8015612c5d578360201c8503612c50576001965061ffff8460101c169550612c5d565b51925061ffff8316612c2d565b505b17610140909601959095525090939092509050565b6060818101515f90811a919082900361113557602083810180515f1a600101919082815350603e8210612cd3576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b8083835e505050565b6020810283835e505050565b5f8080612cfd868686610e7b565b9096509250905080612d8b5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000175b6040517fb0e4e5b300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5f80612d96846144b6565b6101808901511615612dd75761016088015160101c5b8015801590612db9575082155b15612dd557602081015190519085149250600190910190612dac565b505b61016088015161ffff16612dfd600184612df15782612df5565b8383035b8b9190612a15565b5081612e0d57612e0d88856144cd565b50949695505050505050565b6060828101515f1a908115612ea95761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f6fb11cdc00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b5050612eb48261442a565b61010082018051600416600890811790915260a0830151602084015160ff8083169360f89290921c9290911c1681035f819003612fde576004856101000151165f03612f7b5761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517fab1d3ea700000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b90820190603e8210612fb9576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60f882901b6020860152610200850151612fd3908461451f565b6102008601526130f9565b60018111156130f957808310156130705761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f78ef278200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b808311156130f95761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f43168e6800000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b8082036001016020601083028101905b8181101561325d5760a08801516020848a0181015191831c61ffff16915f1a9060015b82811161324b5760208406601c0361314557925160f01c925b83516102008d015160019190911a9061315e90826145a3565b6102008e01525f82851480156131745750896001145b61317f576001613181565b8b5b6102008f015190915061319490826145e9565b6102008f0152600f8111806131a95750600f82115b1561322f576102208e01518d037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f7ea1869f00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b818160041b17600187015350506004939093019260010161312c565b50506001909401935050601001613109565b5050505060081b60a0909301929092525050565b60e081015160208083015160f083811c925f9290921a60010191908390036132c5576040517fa806284100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610200850151855180515f928392909160219060101c61ffff165b80156132f757805190925060101c61ffff166132e0565b506040518a82018051919650601c8401939160049160248901915f90811a805b8d8310156133dc5760048202860195506004878a03045b8082111561334c57965161ffff16601c81019950969003600761332e565b506004810298899003805186529894909401938103865b60078211156133a8575160101c61ffff1680518652601c909501947ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff990910190613363565b81156133c3575160101c61ffff168051865260048202909501945b50505060019182018051909291909101905f1a80613317565b50505082895250600488810180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9290940491909101601881901b8817939093179052601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660405260ff1094505083156134a8576040517fe972437e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134b56001808a1b615089565b891685891b60f06134c78b6010615012565b901b171760e08b01526101008a0180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7169052604080516020601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681815280820183525f80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001682178152908d52908c01819052908b0181905260608b0181905260808b0181905260a08b018190526101208b018190526101408b018190526102008b015250505050505050505050565b5f81515f036135af57505f919050565b50602001515f1a90565b5f806135c48461359f565b60020260010190505f6135d7858561465c565b949091019093016020019392505050565b5f806135f484846135b9565b515f1a949350505050565b808210156111355781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016138395760c08401515b80156138375760a081901c5161016086015161ffff60e085901c1660208101805160089390931b62ffff0016600187901a1760e81b7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909316929092179091526040517f570c7a630000000000000000000000000000000000000000000000000000000081529192915f908190819073ffffffffffffffffffffffffffffffffffffffff86169063570c7a63906136f2908790600401614f8e565b5f60405180830381865afa15801561370c573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526137519190810190615128565b925092509250821561382d57815160041461379a57816040517fbe2d187d0000000000000000000000000000000000000000000000000000000081526004016106119190614f8e565b60208201517fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff88161789525f5b81518110156138225761381a828281518110613803576138036151d5565b60200260200101518c6144cd90919063ffffffff16565b6001016137e5565b505050505050613837565b505050505061363a565b505b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016138b357606061ffff8260e01c1690505f6003820152600581019050806040517faedfba2f0000000000000000000000000000000000000000000000000000000081526004016106119190614f8e565b506004820191506135ff565b6101608101516040805161ffff8316808252602080820283019081019093529092909160109190911c90835b8082111561392b5760208301518252915161ffff16917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101906138eb565b50505050919050565b5f808080613943866002615012565b9050806c7e0000007e03ff0000000000005b86821081600184515f1a1b161515161561397457600182019150613955565b5090979096508695509350505050565b5f82818061399983866520000000000061251d565b925085831415836139b381886703ff00000000000061251d565b94508085036139ed57507f34bd20690000000000000000000000000000000000000000000000000000000094505f9250829150613e1a9050565b5f806139f98a886146b2565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613a37575095505f9350839250613e1a915050565b86519095506540000000000060015f9290921a9190911b161515888710169150508015613cc657506001909301925f84613a7a81896703ff00000000000061251d565b9550808603613ab557507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f9350839250613e1a915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b660100000000000016151516600103613b24577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613ab7565b818114613b7b575f80613b3784846146b2565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613b77575097505f9550859450613e1a9350505050565b9350505b5f831215613bb657507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f9450849350613e1a92505050565b8315613bc257825f0392505b80820394505f851315613c0257507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f9450849350613e1a92505050565b855f03613c1157829550613cc3565b5f8590036043811115613c5257507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f9550859450613e1a9350505050565b600a0a8681025f88838381613c6957613c69615025565b0514159050601b82900b8214158180613c7f5750805b15613cbb57507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f9850889750613e1a9650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b161515878610168015613e0b5760019095019485613d06818a6520000000000061251d565b965086613d1c818b6703ff00000000000061251d565b9750808803613d5957507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f9550859450613e1a9350505050565b505f80613d66838a6146b2565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613da6575097505f9550859450613e1a9350505050565b9250508482015f83138015613dba57508581125b80613dce57505f83128015613dce57508581135b15613e0757507fd556b1110000000000000000000000000000000000000000000000000000000097505f9550859450613e1a9350505050565b9450505b845f03613e16575f93505b5050505b92959194509250565b7fffffffff00000000000000000000000000000000000000000000000000000000811615611135576102208301515f9083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000179050815f528060045260245ffd5b5f805f613eb485856147dc565b9150915080610731576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610611565b5f80806001850181806f7ffffffffffffffffffffffb0000000081807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b8b0301602080821015613f475750805b875193505b84600185851a1b1615158184101615613f6a57600183019250613f4c565b505080602003613ff5576102208c01518b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f30515bda00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b85810180519095505f1a6001811b6404000000001615806140155750858b145b1561409b576102208d015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000176040517f04022fbf00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b50949b939a505060018a019850919650505050505050565b5f80601f90505f60e09050818451168082175f528060208601600183016020035e50505f519392505050565b5f60608186860361ffff811115614125576040517fb6da789c00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b604080516041888803848101838101929092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169093526002828101859052018152935060228401925061417b898484612cda565b6141888783850183612cda565b50505060c08701515b80156142525760a081901c516040517fc6c0cbb60000000000000000000000000000000000000000000000000000000081529091905f90819073ffffffffffffffffffffffffffffffffffffffff84169063c6c0cbb6906141f6908890600401614f8e565b6040805180830381865afa158015614210573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142349190615202565b91509150811561424a5794506104a39350505050565b505050614191565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad7895000017612d56565b5f805f6142b18686866148e2565b91509150806142f6576040517f05e476780000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604401610611565b50949350505050565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116611c92575060019250929050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361435b5750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f805f614412888888610e7b565b9250925092508215614252579093509150611fdd9050565b8051602080830180515f90811a8086016021015160a0939190831a61447c5785518488018051600861ffff909316929092046020038801601e83901a840360010160100290811b909217905260f01092505b50508015612cd3576040517f5b1a42d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6144c36101008361522c565b6001901b92915050565b6101608201805160408051808201909152601091821c808252602082018590528351600161ffff909116019282901b9290921790925261450c836144b6565b6101809094018051909417909352505050565b5f61452a83836145e9565b925060ff600884901c8116830190811115614571576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff841660089190911b17905092915050565b5f60ff8316828110156145e2576040517f23b49a2a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050900390565b5f60ff808416830190600885901c811690601086901c90831115614639576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808311156146445750815b601081901b600883901b841717935050505092915050565b5f6146668361359f565b82106146a25781836040517ffcfaeff1000000000000000000000000000000000000000000000000000000008152600401610611929190615264565b50600202016003015161ffff1690565b81515f90819065200000000000600191831a9190911b161515838510168085019082806146df8488614ae9565b90925090507fffffffff0000000000000000000000000000000000000000000000000000000082161561471a575093505f9250611c92915050565b825f0361477d577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161474e575f614770565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95509350611c9292505050565b7f800000000000000000000000000000000000000000000000000000000000000081116147aa575f6147cc565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f601b83900b8314838382614840577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561482057620186a0860595506005850194505b8586601b0b1461483b57600a86059550846001019450614820565b614856565b855f0361485657505f925060019150611c929050565b848560030b146148b2575f85121561487657505f9250829150611c929050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610611565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f851215614928576040517f4a7d166b0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610611565b845f0361493a57505f90506001611fdd565b8460ff8416850185811215614985576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610611565b5f805f8312156149ef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb38312156149c6575f809550955050505050611fdd565b825f03600a0a91508184816149dd576149dd615025565b0495505084029091149150611fdd9050565b5f831315614ad957604d831315614a45576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610611565b82600a0a9150817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81614a7a57614a7a615025565b04841115614ac7576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610611565b5091909102925060019150611fdd9050565b8360019550955050505050611fdd565b5f80828410614b1c57507f34bd20690000000000000000000000000000000000000000000000000000000090505f611c92565b835f03614b55576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b878210158015614b8d5750604d83105b15614bd057815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a8590030201614b7d565b878210614cf65781515f1a8490036001811115614c1857507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611c929350505050565b600a84900a8102828101831115614c5b57507f0fdc26350000000000000000000000000000000000000000000000000000000096505f9550611c92945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b878210614cf65781515f1a60308114614ccb57507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611c929350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190614c87565b5f9890975095505050505050565b614d0c61527c565b565b5f60208284031215614d1e575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610507575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614dc157614dc1614d4d565b604052919050565b5f67ffffffffffffffff821115614de257614de2614d4d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f60208284031215614e1e575f80fd5b813567ffffffffffffffff811115614e34575f80fd5b8201601f81018413614e44575f80fd5b8035614e57614e5282614dc9565b614d7a565b818152856020838501011115614e6b575f80fd5b816020840160208301375f91810160200191909152949350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b80831015614ee257835173ffffffffffffffffffffffffffffffffffffffff168252928401926001929092019190840190614eac565b509695505050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b604081525f614f4b6040830185614eed565b8281036020848101919091528451808352858201928201905f5b81811015614f8157845183529383019391830191600101614f65565b5090979650505050505050565b602081525f6105076020830184614eed565b80516020808301519190811015614fdf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561018057610180614fe5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361508257615082614fe5565b5060010190565b8181038181111561018057610180614fe5565b80518015158114610239575f80fd5b5f82601f8301126150ba575f80fd5b8151602067ffffffffffffffff8211156150d6576150d6614d4d565b8160051b6150e5828201614d7a565b92835284810182019282810190878511156150fe575f80fd5b83870192505b8483101561511d57825182529183019190830190615104565b979650505050505050565b5f805f6060848603121561513a575f80fd5b6151438461509c565b9250602084015167ffffffffffffffff8082111561515f575f80fd5b818601915086601f830112615172575f80fd5b8151615180614e5282614dc9565b818152886020838601011115615194575f80fd5b8160208501602083015e5f60208383010152809550505060408601519150808211156151be575f80fd5b506151cb868287016150ab565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215615213575f80fd5b61521c8361509c565b9150602083015190509250929050565b5f8261525f577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b828152604060208201525f610c456040830184614eed565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0288400100420b0280046b0641220186adb8a044003012020f2a880521281ac8811a000000000000000000080000000000100000000000000002000000000000000000290ea98a3a10f9c53927bda61c6395ad0e9fb4a8075dbeaf2d313e9e09b06d681dfe49062ce21ac13e83a6cc2ad2d2123422c3e0052f369e1f27267220a0a68d2f357696465d217b131120880f24f4a8242f1af53f41f7290afa3e8638acf3d13397e9fd00443a453b406bb547b9059d25a3cd1e11d0c3260b15eb4d16fc94274427bc412baf2cc2321b8f630dca9efe403ce35f1400684845c291e3425d68b13d5f9a151eb98c15239cd9c10c1f698235c8d3843c08d579273459d41a2c9ff617a5b2cd15c0031810f621af127ba34c26bb6c4137b2ad3d1b73563d0210215f36aa563921098e690457fb180376e752066a470128f11de101fcc60522de7ddd183d3d6d4196c37031cba2872e7b3af5304eee7219a8093543082b5f0801f5a522fb22fb22fb23c724db24db23c723c724db22fb22fb22fb24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db"; - -/// @dev The parse meta that is used to lookup word definitions. -/// The structure of the parse meta is: -/// - 1 byte: The depth of the bloom filters -/// - 1 byte: The hashing seed -/// - The bloom filters, each is 32 bytes long, one for each build depth. -/// - All the items for each word, each is 4 bytes long. Each item's first byte -/// is its opcode index, the remaining 3 bytes are the word fingerprint. -/// To do a lookup, the word is hashed with the seed, then the first byte of the -/// hash is compared against the bloom filter. If there is a hit then we count -/// the number of 1 bits in the bloom filter up to this item's 1 bit. We then -/// treat this a the index of the item in the items array. We then compare the -/// word fingerprint against the fingerprint of the item at this index. If the -/// fingerprints equal then we have a match, else we increment the seed and try -/// again with the next bloom filter, offsetting all the indexes by the total -/// bit count of the previous bloom filter. If we reach the end of the bloom -/// filters then we have a miss. -bytes constant PARSE_META = - hex"0288400100420b0280046b0641220186adb8a044003012020f2a880521281ac8811a000000000000000000080000000000100000000000000002000000000000000000290ea98a3a10f9c53927bda61c6395ad0e9fb4a8075dbeaf2d313e9e09b06d681dfe49062ce21ac13e83a6cc2ad2d2123422c3e0052f369e1f27267220a0a68d2f357696465d217b131120880f24f4a8242f1af53f41f7290afa3e8638acf3d13397e9fd00443a453b406bb547b9059d25a3cd1e11d0c3260b15eb4d16fc94274427bc412baf2cc2321b8f630dca9efe403ce35f1400684845c291e3425d68b13d5f9a151eb98c15239cd9c10c1f698235c8d3843c08d579273459d41a2c9ff617a5b2cd15c0031810f621af127ba34c26bb6c4137b2ad3d1b73563d0210215f36aa563921098e690457fb180376e752066a470128f11de101fcc60522de7ddd183d3d6d4196c37031cba2872e7b3af5304eee7219a8093543082b5f0801f5a5"; - -/// @dev The build depth of the parser meta. - -uint8 constant PARSE_META_BUILD_DEPTH = 2; - -/// @dev Every two bytes is a function pointer for an operand handler. -/// These positional indexes all map to the same indexes looked up in the parse -/// meta. -bytes constant OPERAND_HANDLER_FUNCTION_POINTERS = - hex"22fb22fb22fb23c724db24db23c723c724db22fb22fb22fb24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db24db"; - -/// @dev Every two bytes is a function pointer for a literal parser. -/// Literal dispatches are determined by the first byte(s) of the literal -/// rather than a full word lookup, and are done with simple conditional -/// jumps as the possibilities are limited compared to the number of words we -/// have. -bytes constant LITERAL_PARSER_FUNCTION_POINTERS = hex"1c991fe520252082"; diff --git a/src/generated/RainlangReferenceExtern.pointers.sol b/src/generated/RainlangReferenceExtern.pointers.sol deleted file mode 100644 index fa4f7adb2..000000000 --- a/src/generated/RainlangReferenceExtern.pointers.sol +++ /dev/null @@ -1,79 +0,0 @@ -// SPDX-License-Identifier: LicenseRef-DCL-1.0 -// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity ^0.8.25; - -// THIS FILE IS AUTOGENERATED BY ./script/BuildPointers.sol - -// This file is committed to the repository because there is a circular -// dependency between the contract and its pointers file. The contract -// needs the pointers file to exist so that it can compile, and the pointers -// file needs the contract to exist so that it can be compiled. - -/// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x6dd8a41c541426172cb4f10c3f1215f95c64fe8d68199aafea4211bd1ed2a994); - -/// @dev The deterministic deploy address of the contract when deployed via -/// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x0D6Fe530A6Cd98409ACfE006fb45C2bde0Cbe74f); - -/// @dev The creation bytecode of the contract. -bytes constant CREATION_CODE = - hex"6080604052348015600e575f80fd5b505f602e604080518082019091526002815261090360f01b602082015290565b519050805f03605057604051630ae9809f60e31b815260040160405180910390fd5b5f606f6040805180820190915260028152610c9960f01b602082015290565b519050808214609f5760405163550eaa3b60e01b8152600481018390526024810182905260440160405180910390fd5b5050612ee7806100ae5f395ff3fe608060405234801561000f575f80fd5b50600436106100c4575f3560e01c806358c071521161007d578063c6c0cbb611610058578063c6c0cbb6146101ad578063ccf44775146101d7578063d6d8c9a8146101df575f80fd5b806358c07152146101575780636f5aa28d14610177578063b92d7553146101a5575f80fd5b806340c04edc116100ad57806340c04edc14610105578063514b5d4f1461012d578063570c7a6314610135575f80fd5b806301ffc9a7146100c8578063336284d4146100f0575b5f80fd5b6100db6100d6366004612a31565b6101e7565b60405190151581526020015b60405180910390f35b6100f86101f7565b6040516100e79190612ac3565b610118610113366004612ad5565b610259565b604080519283526020830191909152016100e7565b6100f8610328565b610148610143366004612b7a565b61034a565b6040516100e793929190612c27565b61016a610165366004612c84565b610500565b6040516100e79190612d31565b6040517fadf71693c6ecf3fd560904bc46973d1b6e651440d15366673f9b3984749e7c1681526020016100e7565b6100f861058e565b6101c06101bb366004612b7a565b6105b0565b6040805192151583526020830191909152016100e7565b6100f86106c7565b6100f86106e9565b5f6101f18261072c565b92915050565b6040805160c0810182526005808252610819602083015261083992820192909252610847606082810191909152610855608083015261086460a08301529190819080610247565b60405180910390fd5b61025081610873565b94505050505090565b5f805f61029660408051808201909152600281527f0c99000000000000000000000000000000000000000000000000000000000000602082015290565b90505f60028251816102aa576102aa612d74565b04905060208201601088901c61ffff168281106102fd576040517f417deaf3000000000000000000000000000000000000000000000000000000008152600481018290526024810184905260440161023e565b6002810282015161ffff8a169060f01c610316828b8b84565b909c909b509950505050505050505050565b6040805180820190915260018082526109036020830152606091819080610247565b5f6060805f805f6103968761035d6109af565b60408051808201909152600a81527f0f1a0f5c0f1a0f1a0f1a0000000000000000000000000000000000000000000060208201526109cf565b9250925092505f6103ac82610220015160200190565b90505f82610220015151826103c19190612da1565b90505f6103df83836f07fffffe0000000003ff200000000000610ac0565b80925081945050505f806103f886610240015184610b93565b9150915081156104d3575f61040d8783610c6a565b9050612a275f61044d60408051808201909152600a81527f0819083908470855086400000000000000000000000000000000000000000000602082015290565b90505f6002825161045e9190612dd9565b90508085106104a3576040517f77ba3620000000000000000000000000000000000000000000000000000000008152600481018690526024810182905260440161023e565b6001850160020282015161ffff1692506104bc8c8c8686565b9e509e509e505050505050505050505050506104f9565b5050604080515f80825281830190925260208101828152919a5090985096505050505050505b9193909250565b60605f61053d60408051808201909152600281527f0903000000000000000000000000000000000000000000000000000000000000602082015290565b90505f600282518161055157610551612d74565b04601086901c61ffff9081168281066002028501602090810151939450850192909188169060f01c610581828983565b9998505050505050505050565b604080518082019091526001808252610c996020830152606091819080610247565b5f805f805f6105d8866002810151815160228084019461ffff93909316840101920160200190565b9250925092505f805f6105eb8686610ca0565b92509250925082156106b757612a275f61063560408051808201909152600281527f0e71000000000000000000000000000000000000000000000000000000000000602082015290565b90505f600282516106469190612dd9565b905080851061068b576040517f77ba3620000000000000000000000000000000000000000000000000000000008152600481018690526024810182905260440161023e565b600185810160020283015161ffff1693506106a5858a8a87565b9a509a50505050505050505050915091565b505f988998509650505050505050565b604080518082019091526001808252610e716020830152606091819080610247565b6040805160c0810182526005808252610f1a60208301819052610f5c9383019390935260608281018490526080830184905260a083019390935290819080610247565b5f7f18003f8e000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806107be57507fb92d7553000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061080a57507f514b5d4f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806101f157506101f18261102d565b5f60608061082a308787875f6111a7565b92509250925093509350939050565b5f60608061082a868561125a565b5f60608061082a5f806112e5565b5f60608061082a5f60016112e5565b5f60608061082a60015f6112e5565b60605f825160020267ffffffffffffffff81111561089357610893612afe565b6040519080825280601f01601f1916602001820160405280156108bd576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156108f7578051835186169085161781526020909201916002016108d5565b50939695505050505050565b60605f6109406f0785ee10d5da46d900f436a0000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdb611380565b90505f5b83518110156109a6575f84828151811061096057610960612e11565b6020026020010151905061097d83826113da90919063ffffffff16565b90508085838151811061099257610992612e11565b602090810291909101015250600101610944565b50919392505050565b6060604051806060016040528060368152602001612eb160369139905090565b5f80610a5e6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b606061ffff600288015116935060ff600388015116925061ffff600588015116600588019750808852602081018801915050610aaa87878760405180602001604052805f81525061143c565b915080826101e001819052505093509350939050565b5f808060018187870360208111610ad75780610ada565b60205b915050875192505b8519600184841a1b16158183101615610b0057600182019150610ae2565b9681019660208290036008810293841c90931b92610b8257604080516020810185905201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fe47fe8b700000000000000000000000000000000000000000000000000000000825261023e91600401612ac3565b50869350909150505b935093915050565b600182810180515f928392600560ff93909316602102870192830192909101835b81831015610c585760018301516021909301805190935f90819060ff168180610bdd838e611629565b915091508186165f03610bff575f809b509b5050505050505050505050610c63565b5f87610c0f600185038916611654565b016004028b015195505062ffffff9081169350841683039150610c439050575060019750601c1a9550610c63945050505050565b610c4c83611654565b84019350505050610bb4565b5f8095509550505050505b9250929050565b6101c08201516002828102820101516101e08401515f9261ffff9092169190610c909083565b95945050505050565b5091829150565b81515f908190819085850390601282118015610d1b57506040518060400160405280601281526020017f7265662d65787465726e2d7265706561742d0000000000000000000000000000815250610cf690612e3e565b7fffffffffffffffffffffffffffffffffffff00000000000000000000000000008216145b15610e595760408051602080820183525f808352835180830185528181528451808401865282815285519384019095528183529093610d5a939261143c565b90505f610d6b8260128b018a61172c565b9099509050878914610da9576040517fe502905600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80610dbe610db75f80611380565b829061176c565b80610dd95750610dd9610dd260095f611380565b82906117bb565b80610e0f5750610e0d610deb8261180a565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b155b15610e46576040517fb6b34a6800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600196505f95509350610e6a92505050565b505f9350839250829150610e6a9050565b9250925092565b5f6009841115610eb0576040517fae7c08430000000000000000000000000000000000000000000000000000000081526004810185905260240161023e565b5f838303604e8110610ef1576040517fd6073cd60000000000000000000000000000000000000000000000000000000081526004810182905260240161023e565b5f5b81811015610f0f57600a81900a87029290920191600101610ef3565b509095945050505050565b5f81515f14610f55576040517f9f16b02000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505f919050565b5f8151600103610fe7575060208101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b60e082901d5f610f9f838383611855565b905061ffff811115610fdd576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250611028915050565b81515f03610ff657505f919050565b6040517f1ac6690800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f91ccb1d50000000000000000000000000000000000000000000000000000000014806110bf57507fffffffff0000000000000000000000000000000000000000000000000000000082167f6f5aa28d00000000000000000000000000000000000000000000000000000000145b8061110b57507fffffffff0000000000000000000000000000000000000000000000000000000082167f1a2c8edd00000000000000000000000000000000000000000000000000000000145b8061115757507fffffffff0000000000000000000000000000000000000000000000000000000082167f336284d400000000000000000000000000000000000000000000000000000000145b806101f157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146101f1565b5f60608061ffff8711156111ea576040517fcc3c82b10000000000000000000000000000000000000000000000000000000081526004810188905260240161023e565b6040805160248101909152600481018890526002876021830153806020830153506004815260408051808201909152600180825260109690961b9690961760a01b73ffffffffffffffffffffffffffffffffffffffff999099169890981760208601525091969294509192505050565b5f60608061ffff85111561129d576040517fec1899b50000000000000000000000000000000000000000000000000000000081526004810186905260240161023e565b60408051602481019091526004810186905260016010602183015380602083015350600481526040805180820190915260018082526020820196909652949690955092505050565b5f60608060ff8511806112f8575060ff84115b15611339576040517f9b0f3261000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161023e565b6040805160248101909152600386602383015385602283015360106021830153806020830153506004815260408051602081019091525f8152600197919650945092505050565b5f805f61138d85856118b1565b91509150806113d2576040517f22c9f7bb000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161023e565b509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d848061141f868686866119b7565b915091505f61142e8383611aed565b9a9950505050505050505050565b6114c96040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b8152602001848152602001858152602001600467ffffffffffffffff81111561154f5761154f612afe565b604051908082528060200260200182016040528015611578578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016828152808301825283517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001681178452855290840182905283018190529082018190526080820181905260a08201819052610120820181905261014082018190526102008201529050610c90565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116610c63575060019250929050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036116855750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f805f8061173c8888611b4b565b92965090945092509050611751898486611fea565b8261175c8383611380565b9550955050505050935093915050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6117af84848484612073565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6117fe84848484612073565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d8261183d8383612147565b9150505f61184b8284611aed565b9695505050505050565b5f805f6118638686866121af565b91509150806118a8576040517f05e47678000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260440161023e565b50949350505050565b5f601b83900b8314838382611915577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156118f557620186a0860595506005850194505b8586601b0b1461191057600a860595508460010194506118f5565b61192b565b855f0361192b57505f925060019150610c639050565b848560030b14611987575f85121561194b57505f9250829150610c639050565b6040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018390526024810182905260440161023e565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f80851584151780156119e357865f036119d75784849250925050611ae4565b86869250925050611ae4565b6119ed87876123b6565b90975095506119fc85856123b6565b909550935085841315611a10579395929492935b838603604c811115611a29578787935093505050611ae4565b80600a0a8681611a3b57611a3b612d74565b0595505086850180881860ff90811c151589881890911c15168015611ad657877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03611abd576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260440161023e565b600a968790059690980586019760019790970196611ada565b8198505b5050868692509250505b94509492505050565b5f805f611afa85856118b1565b9150915080158015611b0a575081155b156113d2576040517f8eba4d07000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161023e565b5f828180611b60838665200000000000612418565b92508583141583611b7a81886703ff000000000000612418565b9450808503611bb457507f34bd20690000000000000000000000000000000000000000000000000000000094505f9250829150611fe19050565b5f80611bc08a88612441565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615611bfe575095505f9350839250611fe1915050565b86519095506540000000000060015f9290921a9190911b161515888710169150508015611e8d57506001909301925f84611c4181896703ff000000000000612418565b9550808603611c7c57507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f9350839250611fe1915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b660100000000000016151516600103611ceb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01611c7e565b818114611d42575f80611cfe8484612441565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615611d3e575097505f9550859450611fe19350505050565b9350505b5f831215611d7d57507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f9450849350611fe192505050565b8315611d8957825f0392505b80820394505f851315611dc957507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f9450849350611fe192505050565b855f03611dd857829550611e8a565b5f8590036043811115611e1957507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f9550859450611fe19350505050565b600a0a8681025f88838381611e3057611e30612d74565b0514159050601b82900b8214158180611e465750805b15611e8257507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f9850889750611fe19650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b161515878610168015611fd25760019095019485611ecd818a65200000000000612418565b965086611ee3818b6703ff000000000000612418565b9750808803611f2057507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f9550859450611fe19350505050565b505f80611f2d838a612441565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615611f6d575097505f9550859450611fe19350505050565b9250508482015f83138015611f8157508581125b80611f9557505f83128015611f9557508581135b15611fce57507fd556b1110000000000000000000000000000000000000000000000000000000097505f9550859450611fe19350505050565b9450505b845f03611fdd575f93505b5050505b92959194509250565b7fffffffff0000000000000000000000000000000000000000000000000000000081161561206e576102208301515f9083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000179050815f528060045260245ffd5b505050565b5f80851584151781871282861218178584141780156120985786859250925050611ae4565b505f858413156120ac575092949193919260015b8386035f8112604c82131780156120df5782156120d1575f8994509450505050611ae4565b885f94509450505050611ae4565b600a82900a8981028a8282816120f7576120f7612d74565b0514612123578415612113575f8b965096505050505050611ae4565b8a5f965096505050505050611ae4565b8415612138578896509450611ae49350505050565b9550879450611ae49350505050565b5f805f831261215a57508290505f610c63565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb483121561218c57505f905082610c63565b5f839003600a0a8085816121a2576121a2612d74565b0794859003959350505050565b5f805f8512156121f5576040517f4a7d166b000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161023e565b845f0361220757505f90506001610b8b565b8460ff8416850185811215612252576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018890526024810187905260440161023e565b5f805f8312156122bc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3831215612293575f809550955050505050610b8b565b825f03600a0a91508184816122aa576122aa612d74565b0495505084029091149150610b8b9050565b5f8313156123a657604d831315612312576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff8816604482015260640161023e565b82600a0a9150817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8161234757612347612d74565b04841115612394576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff8816604482015260640161023e565b5091909102925060019150610b8b9050565b8360019550955050505050610b8b565b5f805f805f6123c5878761256b565b9250925092508061240c576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018890526024810187905260440161023e565b50909590945092505050565b5f5b5f82600186515f1a1b161183851016156124395760018401935061241a565b509192915050565b81515f90819065200000000000600191831a9190911b1615158385101680850190828061246e848861280c565b90925090507fffffffff000000000000000000000000000000000000000000000000000000008216156124a9575093505f9250610c63915050565b825f0361250c577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116124dd575f6124ff565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95509350610c6392505050565b7f80000000000000000000000000000000000000000000000000000000000000008111612539575f61255b565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f805f845f0361258357505f91508190506001610e6a565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03612797576f4b3b4ca85a86c47a098a22400000000085051580156125ec57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561260d576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561265557507f80000000000000000000000000000000000000000000000000000000000000138412155b1561266e57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c64000000000000000085051580156126ba57507f800000000000000000000000000000000000000000000000000000000000000a8412155b156126d0576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561271f57507f80000000000000000000000000000000000000000000000000000000000000028412155b15612735576064850294506002840393506126d0565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee8000000000000000000850515801561278557507f80000000000000000000000000000000000000000000000000000000000000018412155b1561279757600a850294506001840393505b600a808602908105861480156127cd57507f80000000000000000000000000000000000000000000000000000000000000018512155b156127dc578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b5f8082841061283f57507f34bd20690000000000000000000000000000000000000000000000000000000090505f610c63565b835f03612878576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b8782101580156128b05750604d83105b156128f357815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a85900302016128a0565b878210612a195781515f1a849003600181111561293b57507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450610c639350505050565b600a84900a810282810183111561297e57507f0fdc26350000000000000000000000000000000000000000000000000000000096505f9550610c63945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b878210612a195781515f1a603081146129ee57507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450610c639350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101906129aa565b5f9890975095505050505050565b612a2f612e83565b565b5f60208284031215612a41575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612a70575f80fd5b9392505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f612a706020830184612a77565b5f805f60608486031215612ae7575f80fd5b505081359360208301359350604090920135919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612b7257612b72612afe565b604052919050565b5f6020808385031215612b8b575f80fd5b823567ffffffffffffffff80821115612ba2575f80fd5b818501915085601f830112612bb5575f80fd5b813581811115612bc757612bc7612afe565b612bf7847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612b2b565b91508082528684828501011115612c0c575f80fd5b80848401858401375f90820190930192909252509392505050565b83151581525f602060606020840152612c436060840186612a77565b8381036040850152845180825260208087019201905f5b81811015612c7657835183529284019291840191600101612c5a565b509098975050505050505050565b5f8060408385031215612c95575f80fd5b8235915060208084013567ffffffffffffffff80821115612cb4575f80fd5b818601915086601f830112612cc7575f80fd5b813581811115612cd957612cd9612afe565b8060051b9150612cea848301612b2b565b8181529183018401918481019089841115612d03575f80fd5b938501935b83851015612d2157843582529385019390850190612d08565b8096505050505050509250929050565b602080825282518282018190525f9190848201906040850190845b81811015612d6857835183529284019291840191600101612d4c565b50909695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b808201808211156101f1577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f82612e0c577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b80516020808301519190811015612e7d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0100000000008000000000000000000000110000000000000020000000000000008000e438fc04aafc63025be81c0384254101285ca1"; - -/// @dev The runtime bytecode of the contract. -bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b50600436106100c4575f3560e01c806358c071521161007d578063c6c0cbb611610058578063c6c0cbb6146101ad578063ccf44775146101d7578063d6d8c9a8146101df575f80fd5b806358c07152146101575780636f5aa28d14610177578063b92d7553146101a5575f80fd5b806340c04edc116100ad57806340c04edc14610105578063514b5d4f1461012d578063570c7a6314610135575f80fd5b806301ffc9a7146100c8578063336284d4146100f0575b5f80fd5b6100db6100d6366004612a31565b6101e7565b60405190151581526020015b60405180910390f35b6100f86101f7565b6040516100e79190612ac3565b610118610113366004612ad5565b610259565b604080519283526020830191909152016100e7565b6100f8610328565b610148610143366004612b7a565b61034a565b6040516100e793929190612c27565b61016a610165366004612c84565b610500565b6040516100e79190612d31565b6040517fadf71693c6ecf3fd560904bc46973d1b6e651440d15366673f9b3984749e7c1681526020016100e7565b6100f861058e565b6101c06101bb366004612b7a565b6105b0565b6040805192151583526020830191909152016100e7565b6100f86106c7565b6100f86106e9565b5f6101f18261072c565b92915050565b6040805160c0810182526005808252610819602083015261083992820192909252610847606082810191909152610855608083015261086460a08301529190819080610247565b60405180910390fd5b61025081610873565b94505050505090565b5f805f61029660408051808201909152600281527f0c99000000000000000000000000000000000000000000000000000000000000602082015290565b90505f60028251816102aa576102aa612d74565b04905060208201601088901c61ffff168281106102fd576040517f417deaf3000000000000000000000000000000000000000000000000000000008152600481018290526024810184905260440161023e565b6002810282015161ffff8a169060f01c610316828b8b84565b909c909b509950505050505050505050565b6040805180820190915260018082526109036020830152606091819080610247565b5f6060805f805f6103968761035d6109af565b60408051808201909152600a81527f0f1a0f5c0f1a0f1a0f1a0000000000000000000000000000000000000000000060208201526109cf565b9250925092505f6103ac82610220015160200190565b90505f82610220015151826103c19190612da1565b90505f6103df83836f07fffffe0000000003ff200000000000610ac0565b80925081945050505f806103f886610240015184610b93565b9150915081156104d3575f61040d8783610c6a565b9050612a275f61044d60408051808201909152600a81527f0819083908470855086400000000000000000000000000000000000000000000602082015290565b90505f6002825161045e9190612dd9565b90508085106104a3576040517f77ba3620000000000000000000000000000000000000000000000000000000008152600481018690526024810182905260440161023e565b6001850160020282015161ffff1692506104bc8c8c8686565b9e509e509e505050505050505050505050506104f9565b5050604080515f80825281830190925260208101828152919a5090985096505050505050505b9193909250565b60605f61053d60408051808201909152600281527f0903000000000000000000000000000000000000000000000000000000000000602082015290565b90505f600282518161055157610551612d74565b04601086901c61ffff9081168281066002028501602090810151939450850192909188169060f01c610581828983565b9998505050505050505050565b604080518082019091526001808252610c996020830152606091819080610247565b5f805f805f6105d8866002810151815160228084019461ffff93909316840101920160200190565b9250925092505f805f6105eb8686610ca0565b92509250925082156106b757612a275f61063560408051808201909152600281527f0e71000000000000000000000000000000000000000000000000000000000000602082015290565b90505f600282516106469190612dd9565b905080851061068b576040517f77ba3620000000000000000000000000000000000000000000000000000000008152600481018690526024810182905260440161023e565b600185810160020283015161ffff1693506106a5858a8a87565b9a509a50505050505050505050915091565b505f988998509650505050505050565b604080518082019091526001808252610e716020830152606091819080610247565b6040805160c0810182526005808252610f1a60208301819052610f5c9383019390935260608281018490526080830184905260a083019390935290819080610247565b5f7f18003f8e000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806107be57507fb92d7553000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061080a57507f514b5d4f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806101f157506101f18261102d565b5f60608061082a308787875f6111a7565b92509250925093509350939050565b5f60608061082a868561125a565b5f60608061082a5f806112e5565b5f60608061082a5f60016112e5565b5f60608061082a60015f6112e5565b60605f825160020267ffffffffffffffff81111561089357610893612afe565b6040519080825280601f01601f1916602001820160405280156108bd576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156108f7578051835186169085161781526020909201916002016108d5565b50939695505050505050565b60605f6109406f0785ee10d5da46d900f436a0000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdb611380565b90505f5b83518110156109a6575f84828151811061096057610960612e11565b6020026020010151905061097d83826113da90919063ffffffff16565b90508085838151811061099257610992612e11565b602090810291909101015250600101610944565b50919392505050565b6060604051806060016040528060368152602001612eb160369139905090565b5f80610a5e6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b606061ffff600288015116935060ff600388015116925061ffff600588015116600588019750808852602081018801915050610aaa87878760405180602001604052805f81525061143c565b915080826101e001819052505093509350939050565b5f808060018187870360208111610ad75780610ada565b60205b915050875192505b8519600184841a1b16158183101615610b0057600182019150610ae2565b9681019660208290036008810293841c90931b92610b8257604080516020810185905201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fe47fe8b700000000000000000000000000000000000000000000000000000000825261023e91600401612ac3565b50869350909150505b935093915050565b600182810180515f928392600560ff93909316602102870192830192909101835b81831015610c585760018301516021909301805190935f90819060ff168180610bdd838e611629565b915091508186165f03610bff575f809b509b5050505050505050505050610c63565b5f87610c0f600185038916611654565b016004028b015195505062ffffff9081169350841683039150610c439050575060019750601c1a9550610c63945050505050565b610c4c83611654565b84019350505050610bb4565b5f8095509550505050505b9250929050565b6101c08201516002828102820101516101e08401515f9261ffff9092169190610c909083565b95945050505050565b5091829150565b81515f908190819085850390601282118015610d1b57506040518060400160405280601281526020017f7265662d65787465726e2d7265706561742d0000000000000000000000000000815250610cf690612e3e565b7fffffffffffffffffffffffffffffffffffff00000000000000000000000000008216145b15610e595760408051602080820183525f808352835180830185528181528451808401865282815285519384019095528183529093610d5a939261143c565b90505f610d6b8260128b018a61172c565b9099509050878914610da9576040517fe502905600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80610dbe610db75f80611380565b829061176c565b80610dd95750610dd9610dd260095f611380565b82906117bb565b80610e0f5750610e0d610deb8261180a565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b155b15610e46576040517fb6b34a6800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600196505f95509350610e6a92505050565b505f9350839250829150610e6a9050565b9250925092565b5f6009841115610eb0576040517fae7c08430000000000000000000000000000000000000000000000000000000081526004810185905260240161023e565b5f838303604e8110610ef1576040517fd6073cd60000000000000000000000000000000000000000000000000000000081526004810182905260240161023e565b5f5b81811015610f0f57600a81900a87029290920191600101610ef3565b509095945050505050565b5f81515f14610f55576040517f9f16b02000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505f919050565b5f8151600103610fe7575060208101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b60e082901d5f610f9f838383611855565b905061ffff811115610fdd576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250611028915050565b81515f03610ff657505f919050565b6040517f1ac6690800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f91ccb1d50000000000000000000000000000000000000000000000000000000014806110bf57507fffffffff0000000000000000000000000000000000000000000000000000000082167f6f5aa28d00000000000000000000000000000000000000000000000000000000145b8061110b57507fffffffff0000000000000000000000000000000000000000000000000000000082167f1a2c8edd00000000000000000000000000000000000000000000000000000000145b8061115757507fffffffff0000000000000000000000000000000000000000000000000000000082167f336284d400000000000000000000000000000000000000000000000000000000145b806101f157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146101f1565b5f60608061ffff8711156111ea576040517fcc3c82b10000000000000000000000000000000000000000000000000000000081526004810188905260240161023e565b6040805160248101909152600481018890526002876021830153806020830153506004815260408051808201909152600180825260109690961b9690961760a01b73ffffffffffffffffffffffffffffffffffffffff999099169890981760208601525091969294509192505050565b5f60608061ffff85111561129d576040517fec1899b50000000000000000000000000000000000000000000000000000000081526004810186905260240161023e565b60408051602481019091526004810186905260016010602183015380602083015350600481526040805180820190915260018082526020820196909652949690955092505050565b5f60608060ff8511806112f8575060ff84115b15611339576040517f9b0f3261000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161023e565b6040805160248101909152600386602383015385602283015360106021830153806020830153506004815260408051602081019091525f8152600197919650945092505050565b5f805f61138d85856118b1565b91509150806113d2576040517f22c9f7bb000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161023e565b509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d848061141f868686866119b7565b915091505f61142e8383611aed565b9a9950505050505050505050565b6114c96040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b8152602001848152602001858152602001600467ffffffffffffffff81111561154f5761154f612afe565b604051908082528060200260200182016040528015611578578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016828152808301825283517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001681178452855290840182905283018190529082018190526080820181905260a08201819052610120820181905261014082018190526102008201529050610c90565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116610c63575060019250929050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036116855750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f805f8061173c8888611b4b565b92965090945092509050611751898486611fea565b8261175c8383611380565b9550955050505050935093915050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6117af84848484612073565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d6117fe84848484612073565b12979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d8261183d8383612147565b9150505f61184b8284611aed565b9695505050505050565b5f805f6118638686866121af565b91509150806118a8576040517f05e47678000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260440161023e565b50949350505050565b5f601b83900b8314838382611915577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156118f557620186a0860595506005850194505b8586601b0b1461191057600a860595508460010194506118f5565b61192b565b855f0361192b57505f925060019150610c639050565b848560030b14611987575f85121561194b57505f9250829150610c639050565b6040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018390526024810182905260440161023e565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f80851584151780156119e357865f036119d75784849250925050611ae4565b86869250925050611ae4565b6119ed87876123b6565b90975095506119fc85856123b6565b909550935085841315611a10579395929492935b838603604c811115611a29578787935093505050611ae4565b80600a0a8681611a3b57611a3b612d74565b0595505086850180881860ff90811c151589881890911c15168015611ad657877f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03611abd576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260440161023e565b600a968790059690980586019760019790970196611ada565b8198505b5050868692509250505b94509492505050565b5f805f611afa85856118b1565b9150915080158015611b0a575081155b156113d2576040517f8eba4d07000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161023e565b5f828180611b60838665200000000000612418565b92508583141583611b7a81886703ff000000000000612418565b9450808503611bb457507f34bd20690000000000000000000000000000000000000000000000000000000094505f9250829150611fe19050565b5f80611bc08a88612441565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615611bfe575095505f9350839250611fe1915050565b86519095506540000000000060015f9290921a9190911b161515888710169150508015611e8d57506001909301925f84611c4181896703ff000000000000612418565b9550808603611c7c57507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f9350839250611fe1915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b660100000000000016151516600103611ceb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01611c7e565b818114611d42575f80611cfe8484612441565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615611d3e575097505f9550859450611fe19350505050565b9350505b5f831215611d7d57507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f9450849350611fe192505050565b8315611d8957825f0392505b80820394505f851315611dc957507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f9450849350611fe192505050565b855f03611dd857829550611e8a565b5f8590036043811115611e1957507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f9550859450611fe19350505050565b600a0a8681025f88838381611e3057611e30612d74565b0514159050601b82900b8214158180611e465750805b15611e8257507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f9850889750611fe19650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b161515878610168015611fd25760019095019485611ecd818a65200000000000612418565b965086611ee3818b6703ff000000000000612418565b9750808803611f2057507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f9550859450611fe19350505050565b505f80611f2d838a612441565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615611f6d575097505f9550859450611fe19350505050565b9250508482015f83138015611f8157508581125b80611f9557505f83128015611f9557508581135b15611fce57507fd556b1110000000000000000000000000000000000000000000000000000000097505f9550859450611fe19350505050565b9450505b845f03611fdd575f93505b5050505b92959194509250565b7fffffffff0000000000000000000000000000000000000000000000000000000081161561206e576102208301515f9083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0017f53c102422473590ce12511beab7637e1c33b596a7d58a80ea98463ad78950000179050815f528060045260245ffd5b505050565b5f80851584151781871282861218178584141780156120985786859250925050611ae4565b505f858413156120ac575092949193919260015b8386035f8112604c82131780156120df5782156120d1575f8994509450505050611ae4565b885f94509450505050611ae4565b600a82900a8981028a8282816120f7576120f7612d74565b0514612123578415612113575f8b965096505050505050611ae4565b8a5f965096505050505050611ae4565b8415612138578896509450611ae49350505050565b9550879450611ae49350505050565b5f805f831261215a57508290505f610c63565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb483121561218c57505f905082610c63565b5f839003600a0a8085816121a2576121a2612d74565b0794859003959350505050565b5f805f8512156121f5576040517f4a7d166b000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161023e565b845f0361220757505f90506001610b8b565b8460ff8416850185811215612252576040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018890526024810187905260440161023e565b5f805f8312156122bc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3831215612293575f809550955050505050610b8b565b825f03600a0a91508184816122aa576122aa612d74565b0495505084029091149150610b8b9050565b5f8313156123a657604d831315612312576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff8816604482015260640161023e565b82600a0a9150817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8161234757612347612d74565b04841115612394576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff8816604482015260640161023e565b5091909102925060019150610b8b9050565b8360019550955050505050610b8b565b5f805f805f6123c5878761256b565b9250925092508061240c576040517f05e51ecb000000000000000000000000000000000000000000000000000000008152600481018890526024810187905260440161023e565b50909590945092505050565b5f5b5f82600186515f1a1b161183851016156124395760018401935061241a565b509192915050565b81515f90819065200000000000600191831a9190911b1615158385101680850190828061246e848861280c565b90925090507fffffffff000000000000000000000000000000000000000000000000000000008216156124a9575093505f9250610c63915050565b825f0361250c577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116124dd575f6124ff565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95509350610c6392505050565b7f80000000000000000000000000000000000000000000000000000000000000008111612539575f61255b565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f805f845f0361258357505f91508190506001610e6a565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee800000000000000000085055f03612797576f4b3b4ca85a86c47a098a22400000000085051580156125ec57507f80000000000000000000000000000000000000000000000000000000000000268412155b1561260d576f4b3b4ca85a86c47a098a224000000000850294506026840393505b7728c87cb5c89a2571ebfdcb54864ada834a00000000000000850515801561265557507f80000000000000000000000000000000000000000000000000000000000000138412155b1561266e57678ac7230489e80000850294506013840393505b7b097edd871cfda3a5697758bf0e3cbb5ac5741c64000000000000000085051580156126ba57507f800000000000000000000000000000000000000000000000000000000000000a8412155b156126d0576402540be40085029450600a840393505b7e3899162693736ac531a5a58f1fbb4b746504382ca7e4000000000000000000850515801561271f57507f80000000000000000000000000000000000000000000000000000000000000028412155b15612735576064850294506002840393506126d0565b7f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee8000000000000000000850515801561278557507f80000000000000000000000000000000000000000000000000000000000000018412155b1561279757600a850294506001840393505b600a808602908105861480156127cd57507f80000000000000000000000000000000000000000000000000000000000000018512155b156127dc578095506001850394505b50939492935050507f0235fadd81c2822bb3f07877973d50f28bf22a31be8ee80000000000000000008305151590565b5f8082841061283f57507f34bd20690000000000000000000000000000000000000000000000000000000090505f610c63565b835f03612878576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b8782101580156128b05750604d83105b156128f357815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a85900302016128a0565b878210612a195781515f1a849003600181111561293b57507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450610c639350505050565b600a84900a810282810183111561297e57507f0fdc26350000000000000000000000000000000000000000000000000000000096505f9550610c63945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b878210612a195781515f1a603081146129ee57507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450610c639350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101906129aa565b5f9890975095505050505050565b612a2f612e83565b565b5f60208284031215612a41575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612a70575f80fd5b9392505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f612a706020830184612a77565b5f805f60608486031215612ae7575f80fd5b505081359360208301359350604090920135919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612b7257612b72612afe565b604052919050565b5f6020808385031215612b8b575f80fd5b823567ffffffffffffffff80821115612ba2575f80fd5b818501915085601f830112612bb5575f80fd5b813581811115612bc757612bc7612afe565b612bf7847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612b2b565b91508082528684828501011115612c0c575f80fd5b80848401858401375f90820190930192909252509392505050565b83151581525f602060606020840152612c436060840186612a77565b8381036040850152845180825260208087019201905f5b81811015612c7657835183529284019291840191600101612c5a565b509098975050505050505050565b5f8060408385031215612c95575f80fd5b8235915060208084013567ffffffffffffffff80821115612cb4575f80fd5b818601915086601f830112612cc7575f80fd5b813581811115612cd957612cd9612afe565b8060051b9150612cea848301612b2b565b8181529183018401918481019089841115612d03575f80fd5b938501935b83851015612d2157843582529385019390850190612d08565b8096505050505050509250929050565b602080825282518282018190525f9190848201906040850190845b81811015612d6857835183529284019291840191600101612d4c565b50909695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b808201808211156101f1577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f82612e0c577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b80516020808301519190811015612e7d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0100000000008000000000000000000000110000000000000020000000000000008000e438fc04aafc63025be81c0384254101285ca1"; - -/// @dev The hash of the meta that describes the contract. -bytes32 constant DESCRIBED_BY_META_HASH = bytes32(0xadf71693c6ecf3fd560904bc46973d1b6e651440d15366673f9b3984749e7c16); - -/// @dev The parse meta that is used to lookup word definitions. -/// The structure of the parse meta is: -/// - 1 byte: The depth of the bloom filters -/// - 1 byte: The hashing seed -/// - The bloom filters, each is 32 bytes long, one for each build depth. -/// - All the items for each word, each is 4 bytes long. Each item's first byte -/// is its opcode index, the remaining 3 bytes are the word fingerprint. -/// To do a lookup, the word is hashed with the seed, then the first byte of the -/// hash is compared against the bloom filter. If there is a hit then we count -/// the number of 1 bits in the bloom filter up to this item's 1 bit. We then -/// treat this a the index of the item in the items array. We then compare the -/// word fingerprint against the fingerprint of the item at this index. If the -/// fingerprints equal then we have a match, else we increment the seed and try -/// again with the next bloom filter, offsetting all the indexes by the total -/// bit count of the previous bloom filter. If we reach the end of the bloom -/// filters then we have a miss. -bytes constant PARSE_META = - hex"0100000000008000000000000000000000110000000000000020000000000000008000e438fc04aafc63025be81c0384254101285ca1"; - -/// @dev The build depth of the parser meta. - -uint8 constant PARSE_META_BUILD_DEPTH = 1; - -/// @dev The function pointers for the sub parser functions that produce the -/// bytecode that this contract knows about. This is both constructing the subParser -/// bytecode that dials back into this contract at eval time, and mapping -/// to things that happen entirely on the interpreter such as well known -/// constants and references to the context grid. -bytes constant SUB_PARSER_WORD_PARSERS = hex"08190839084708550864"; - -/// @dev Every two bytes is a function pointer for an operand handler. -/// These positional indexes all map to the same indexes looked up in the parse -/// meta. -bytes constant OPERAND_HANDLER_FUNCTION_POINTERS = hex"0f1a0f5c0f1a0f1a0f1a"; - -/// @dev Every two bytes is a function pointer for a literal parser. -/// Literal dispatches are determined by the first byte(s) of the literal -/// rather than a full word lookup, and are done with simple conditional -/// jumps as the possibilities are limited compared to the number of words we -/// have. -bytes constant LITERAL_PARSER_FUNCTION_POINTERS = hex"0e71"; - -/// @dev The function pointers for the integrity check fns. -bytes constant INTEGRITY_FUNCTION_POINTERS = hex"0c99"; - -/// @dev The function pointers known to the interpreter for dynamic dispatch. -/// By setting these as a constant they can be inlined into the interpreter -/// and loaded at eval time for very low gas (~100) due to the compiler -/// optimising it to a single `codecopy` to build the in memory bytes array. -bytes constant OPCODE_FUNCTION_POINTERS = hex"0903"; diff --git a/src/generated/RainlangReferenceExternPointers.sol b/src/generated/RainlangReferenceExternPointers.sol new file mode 100644 index 000000000..efe3f26fb --- /dev/null +++ b/src/generated/RainlangReferenceExternPointers.sol @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: LicenseRef-DCL-1.0 +// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd +pragma solidity ^0.8.25; + +// THIS FILE IS AUTOGENERATED BY THE BUILD SCRIPT. DO NOT EDIT BY HAND. + +/// @dev Hash of the known bytecode. +bytes32 constant BYTECODE_HASH = bytes32(0x6dd8a41c541426172cb4f10c3f1215f95c64fe8d68199aafea4211bd1ed2a994); + +/// @dev The hash of the meta that describes the contract. +bytes32 constant DESCRIBED_BY_META_HASH = bytes32(0xadf71693c6ecf3fd560904bc46973d1b6e651440d15366673f9b3984749e7c16); + +/// @dev The parse meta that is used to lookup word definitions. +/// The structure of the parse meta is: +/// - 1 byte: The depth of the bloom filters +/// - 1 byte: The hashing seed +/// - The bloom filters, each is 32 bytes long, one for each build depth. +/// - All the items for each word, each is 4 bytes long. Each item's first byte +/// is its opcode index, the remaining 3 bytes are the word fingerprint. +/// To do a lookup, the word is hashed with the seed, then the first byte of the +/// hash is compared against the bloom filter. If there is a hit then we count +/// the number of 1 bits in the bloom filter up to this item's 1 bit. We then +/// treat this a the index of the item in the items array. We then compare the +/// word fingerprint against the fingerprint of the item at this index. If the +/// fingerprints equal then we have a match, else we increment the seed and try +/// again with the next bloom filter, offsetting all the indexes by the total +/// bit count of the previous bloom filter. If we reach the end of the bloom +/// filters then we have a miss. +bytes constant PARSE_META = + hex"0100000000008000000000000000000000110000000000000020000000000000008000e438fc04aafc63025be81c0384254101285ca1"; + +/// @dev The build depth of the parser meta. + +uint8 constant PARSE_META_BUILD_DEPTH = 1; + +/// @dev The function pointers for the sub parser functions that produce the +/// bytecode that this contract knows about. This is both constructing the subParser +/// bytecode that dials back into this contract at eval time, and mapping +/// to things that happen entirely on the interpreter such as well known +/// constants and references to the context grid. +bytes constant SUB_PARSER_WORD_PARSERS = hex"08190839084708550864"; + +/// @dev Every two bytes is a function pointer for an operand handler. +/// These positional indexes all map to the same indexes looked up in the parse +/// meta. +bytes constant OPERAND_HANDLER_FUNCTION_POINTERS = hex"0f1a0f5c0f1a0f1a0f1a"; + +/// @dev Every two bytes is a function pointer for a literal parser. +/// Literal dispatches are determined by the first byte(s) of the literal +/// rather than a full word lookup, and are done with simple conditional +/// jumps as the possibilities are limited compared to the number of words we +/// have. +bytes constant LITERAL_PARSER_FUNCTION_POINTERS = hex"0e71"; + +/// @dev The function pointers for the integrity check fns. +bytes constant INTEGRITY_FUNCTION_POINTERS = hex"0c99"; + +/// @dev The function pointers known to the interpreter for dynamic dispatch. +/// By setting these as a constant they can be inlined into the interpreter +/// and loaded at eval time for very low gas (~100) due to the compiler +/// optimising it to a single `codecopy` to build the in memory bytes array. +bytes constant OPCODE_FUNCTION_POINTERS = hex"0903"; diff --git a/src/lib/deploy/LibInterpreterDeploy.sol b/src/lib/deploy/LibInterpreterDeploy.sol deleted file mode 100644 index 2622c288c..000000000 --- a/src/lib/deploy/LibInterpreterDeploy.sol +++ /dev/null @@ -1,112 +0,0 @@ -// SPDX-License-Identifier: LicenseRef-DCL-1.0 -// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity ^0.8.25; - -import {Vm} from "forge-std-1.16.1/src/Vm.sol"; - -import { - BYTECODE_HASH as PARSER_HASH, - DEPLOYED_ADDRESS as PARSER_ADDR, - RUNTIME_CODE as PARSER_RUNTIME_CODE -} from "../../generated/RainlangParser.pointers.sol"; -import { - BYTECODE_HASH as STORE_HASH, - DEPLOYED_ADDRESS as STORE_ADDR, - RUNTIME_CODE as STORE_RUNTIME_CODE -} from "../../generated/RainlangStore.pointers.sol"; -import { - BYTECODE_HASH as INTERPRETER_HASH, - DEPLOYED_ADDRESS as INTERPRETER_ADDR, - RUNTIME_CODE as INTERPRETER_RUNTIME_CODE -} from "../../generated/RainlangInterpreter.pointers.sol"; -import { - BYTECODE_HASH as EXPRESSION_DEPLOYER_HASH, - DEPLOYED_ADDRESS as EXPRESSION_DEPLOYER_ADDR, - RUNTIME_CODE as EXPRESSION_DEPLOYER_RUNTIME_CODE -} from "../../generated/RainlangExpressionDeployer.pointers.sol"; -import { - BYTECODE_HASH as RAINLANG_HASH, - DEPLOYED_ADDRESS as RAINLANG_ADDR, - RUNTIME_CODE as RAINLANG_RUNTIME_CODE -} from "../../generated/Rainlang.pointers.sol"; - -/// @title LibInterpreterDeploy -/// @notice A library containing the deployed address and code hash of the Interpreter -/// contracts when deployed with the rain standard zoltu deployer. This allows -/// idempotent deployments against precommitted addresses and hashes that can be -/// easily verified automatically in tests and scripts rather than relying on -/// registries or manual verification. -library LibInterpreterDeploy { - /// The address of the `RainlangParser` contract when deployed with the - /// rain standard zoltu deployer. - address constant PARSER_DEPLOYED_ADDRESS = PARSER_ADDR; - - /// The code hash of the `RainlangParser` contract when deployed with - /// the rain standard zoltu deployer. This can be used to verify that the - /// deployed contract has the expected bytecode, which provides stronger - /// guarantees than just checking the address. - bytes32 constant PARSER_DEPLOYED_CODEHASH = PARSER_HASH; - - /// The address of the `RainlangStore` contract when deployed with the - /// rain standard zoltu deployer. - address constant STORE_DEPLOYED_ADDRESS = STORE_ADDR; - - /// The code hash of the `RainlangStore` contract when deployed with - /// the rain standard zoltu deployer. This can be used to verify that the - /// deployed contract has the expected bytecode, which provides stronger - /// guarantees than just checking the address. - bytes32 constant STORE_DEPLOYED_CODEHASH = STORE_HASH; - - /// The address of the `RainlangInterpreter` contract when deployed with the rain - /// standard zoltu deployer. - address constant INTERPRETER_DEPLOYED_ADDRESS = INTERPRETER_ADDR; - - /// The code hash of the `RainlangInterpreter` contract when deployed with the rain - /// standard zoltu deployer. This can be used to verify that the deployed - /// contract has the expected bytecode, which provides stronger guarantees - /// than just checking the address. - bytes32 constant INTERPRETER_DEPLOYED_CODEHASH = INTERPRETER_HASH; - - /// The address of the `RainlangExpressionDeployer` contract when - /// deployed with the rain standard zoltu deployer. - address constant EXPRESSION_DEPLOYER_DEPLOYED_ADDRESS = EXPRESSION_DEPLOYER_ADDR; - - /// The code hash of the `RainlangExpressionDeployer` contract when - /// deployed with the rain standard zoltu deployer. This can be used to - /// verify that the deployed contract has the expected bytecode, which - /// provides stronger guarantees than just checking the address. - bytes32 constant EXPRESSION_DEPLOYER_DEPLOYED_CODEHASH = EXPRESSION_DEPLOYER_HASH; - - /// The address of the `Rainlang` contract when deployed with the rain - /// standard zoltu deployer. - address constant RAINLANG_DEPLOYED_ADDRESS = RAINLANG_ADDR; - - /// The code hash of the `Rainlang` contract when deployed with the rain - /// standard zoltu deployer. This can be used to verify that the deployed - /// contract has the expected bytecode, which provides stronger guarantees - /// than just checking the address. - bytes32 constant RAINLANG_DEPLOYED_CODEHASH = RAINLANG_HASH; - - /// @notice Etches the runtime bytecode of the parser, store, interpreter, - /// expression deployer, and Rainlang at their expected - /// deterministic addresses. Skips any contract whose codehash already - /// matches. - /// @param vm The Forge `Vm` cheatcode interface. - function etchRainlang(Vm vm) internal { - if (PARSER_DEPLOYED_CODEHASH != PARSER_DEPLOYED_ADDRESS.codehash) { - vm.etch(PARSER_DEPLOYED_ADDRESS, PARSER_RUNTIME_CODE); - } - if (STORE_DEPLOYED_CODEHASH != STORE_DEPLOYED_ADDRESS.codehash) { - vm.etch(STORE_DEPLOYED_ADDRESS, STORE_RUNTIME_CODE); - } - if (INTERPRETER_DEPLOYED_CODEHASH != INTERPRETER_DEPLOYED_ADDRESS.codehash) { - vm.etch(INTERPRETER_DEPLOYED_ADDRESS, INTERPRETER_RUNTIME_CODE); - } - if (EXPRESSION_DEPLOYER_DEPLOYED_CODEHASH != EXPRESSION_DEPLOYER_DEPLOYED_ADDRESS.codehash) { - vm.etch(EXPRESSION_DEPLOYER_DEPLOYED_ADDRESS, EXPRESSION_DEPLOYER_RUNTIME_CODE); - } - if (RAINLANG_DEPLOYED_CODEHASH != RAINLANG_DEPLOYED_ADDRESS.codehash) { - vm.etch(RAINLANG_DEPLOYED_ADDRESS, RAINLANG_RUNTIME_CODE); - } - } -} diff --git a/src/lib/eval/LibEval.sol b/src/lib/eval/LibEval.sol index 668b41671..405d6848d 100644 --- a/src/lib/eval/LibEval.sol +++ b/src/lib/eval/LibEval.sol @@ -4,11 +4,11 @@ pragma solidity ^0.8.25; import {LibInterpreterState, InterpreterState} from "../state/LibInterpreterState.sol"; -import {LibMemCpy} from "rain-solmem-0.1.3/src/lib/LibMemCpy.sol"; +import {LibMemCpy} from "rain-solmem-0.1.28/src/lib/LibMemCpy.sol"; import {LibMemoryKV, MemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; -import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {LibBytecode} from "rainlang-interface-0.2.8/src/lib/bytecode/LibBytecode.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InputsLengthMismatch} from "../../error/ErrEval.sol"; diff --git a/src/lib/extern/LibExtern.sol b/src/lib/extern/LibExtern.sol index 15bb92ee8..892451393 100644 --- a/src/lib/extern/LibExtern.sol +++ b/src/lib/extern/LibExtern.sol @@ -6,10 +6,10 @@ import { IInterpreterExternV4, ExternDispatchV2, EncodedExternDispatchV2 -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterExternV4.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterExternV4.sol"; // StackItem exported for convenience. //forge-lint: disable-next-line(unused-import) -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; /// @title LibExtern /// @notice Defines and implements an encoding and decoding scheme for the data that diff --git a/src/lib/extern/reference/op/LibExternOpContextCallingContract.sol b/src/lib/extern/reference/op/LibExternOpContextCallingContract.sol index 706dddb58..f651ca8e7 100644 --- a/src/lib/extern/reference/op/LibExternOpContextCallingContract.sol +++ b/src/lib/extern/reference/op/LibExternOpContextCallingContract.sol @@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibSubParse} from "../../../parse/LibSubParse.sol"; import { CONTEXT_BASE_COLUMN, CONTEXT_BASE_ROW_CALLING_CONTRACT -} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; +} from "rainlang-interface-0.2.8/src/lib/caller/LibContext.sol"; /// @title LibExternOpContextCallingContract /// @notice This op is a simple reference to the contract that called the interpreter. diff --git a/src/lib/extern/reference/op/LibExternOpContextRainlen.sol b/src/lib/extern/reference/op/LibExternOpContextRainlen.sol index e9d307e14..7f4a867d1 100644 --- a/src/lib/extern/reference/op/LibExternOpContextRainlen.sol +++ b/src/lib/extern/reference/op/LibExternOpContextRainlen.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibSubParse} from "../../../parse/LibSubParse.sol"; /// @dev Column index for caller-provided context. Column 0 is the base diff --git a/src/lib/extern/reference/op/LibExternOpContextSender.sol b/src/lib/extern/reference/op/LibExternOpContextSender.sol index 9a6629941..cc6a74584 100644 --- a/src/lib/extern/reference/op/LibExternOpContextSender.sol +++ b/src/lib/extern/reference/op/LibExternOpContextSender.sol @@ -2,12 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibSubParse} from "../../../parse/LibSubParse.sol"; -import { - CONTEXT_BASE_COLUMN, - CONTEXT_BASE_ROW_SENDER -} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; +import {CONTEXT_BASE_COLUMN, CONTEXT_BASE_ROW_SENDER} from "rainlang-interface-0.2.8/src/lib/caller/LibContext.sol"; /// @title LibExternOpContextSender /// @notice This op is a simple reference to the sender of the transaction that called diff --git a/src/lib/extern/reference/op/LibExternOpIntInc.sol b/src/lib/extern/reference/op/LibExternOpIntInc.sol index a7ae69db6..902c3c3a8 100644 --- a/src/lib/extern/reference/op/LibExternOpIntInc.sol +++ b/src/lib/extern/reference/op/LibExternOpIntInc.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibSubParse} from "../../../parse/LibSubParse.sol"; -import {IInterpreterExternV4, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterExternV4.sol"; +import {IInterpreterExternV4, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterExternV4.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @dev Opcode index of the extern increment opcode. Needs to be manually kept diff --git a/src/lib/extern/reference/op/LibExternOpStackOperand.sol b/src/lib/extern/reference/op/LibExternOpStackOperand.sol index c5106421c..a5930e3ae 100644 --- a/src/lib/extern/reference/op/LibExternOpStackOperand.sol +++ b/src/lib/extern/reference/op/LibExternOpStackOperand.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibSubParse} from "../../../parse/LibSubParse.sol"; /// @title LibExternOpStackOperand diff --git a/src/lib/integrity/LibIntegrityCheck.sol b/src/lib/integrity/LibIntegrityCheck.sol index c7651fb2e..d5792394c 100644 --- a/src/lib/integrity/LibIntegrityCheck.sol +++ b/src/lib/integrity/LibIntegrityCheck.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import { OpcodeOutOfRange, @@ -11,9 +11,9 @@ import { StackUnderflow, StackUnderflowHighwater } from "../../error/ErrIntegrity.sol"; -import {BadOpInputsLength, BadOpOutputsLength} from "rain-interpreter-interface-0.1.0/src/error/ErrIntegrity.sol"; -import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {BadOpInputsLength, BadOpOutputsLength} from "rainlang-interface-0.2.8/src/error/ErrIntegrity.sol"; +import {LibBytecode} from "rainlang-interface-0.2.8/src/lib/bytecode/LibBytecode.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {OPCODE_FUNCTION_POINTER_SHIFT} from "../eval/LibEval.sol"; /// @notice Tracks the state of the integrity check walk over a single source. diff --git a/src/lib/op/00/LibOpConstant.sol b/src/lib/op/00/LibOpConstant.sol index b9f4341ca..8511112d4 100644 --- a/src/lib/op/00/LibOpConstant.sol +++ b/src/lib/op/00/LibOpConstant.sol @@ -4,9 +4,9 @@ pragma solidity ^0.8.25; import {OutOfBoundsConstantRead} from "../../../error/ErrIntegrity.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; /// @title LibOpConstant /// @notice Implementation of copying a constant from the constants array to the stack. diff --git a/src/lib/op/00/LibOpContext.sol b/src/lib/op/00/LibOpContext.sol index e6b73dde9..9c5a9652f 100644 --- a/src/lib/op/00/LibOpContext.sol +++ b/src/lib/op/00/LibOpContext.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; diff --git a/src/lib/op/00/LibOpExtern.sol b/src/lib/op/00/LibOpExtern.sol index f3a721a5c..ceb9c8522 100644 --- a/src/lib/op/00/LibOpExtern.sol +++ b/src/lib/op/00/LibOpExtern.sol @@ -9,17 +9,17 @@ import { } from "../../../error/ErrExtern.sol"; import {OutOfBoundsConstantRead} from "../../../error/ErrIntegrity.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import { IInterpreterExternV4, ExternDispatchV2, EncodedExternDispatchV2, StackItem -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterExternV4.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterExternV4.sol"; import {LibExtern} from "../../extern/LibExtern.sol"; -import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.28/src/lib/LibBytes32Array.sol"; import {ERC165Checker} from "@openzeppelin-contracts-5.6.1/utils/introspection/ERC165Checker.sol"; import {BadOutputsLength} from "../../../error/ErrExtern.sol"; diff --git a/src/lib/op/00/LibOpStack.sol b/src/lib/op/00/LibOpStack.sol index 8913174fa..54afff790 100644 --- a/src/lib/op/00/LibOpStack.sol +++ b/src/lib/op/00/LibOpStack.sol @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {OutOfBoundsStackRead} from "../../../error/ErrIntegrity.sol"; /// @title LibOpStack diff --git a/src/lib/op/LibAllStandardOps.sol b/src/lib/op/LibAllStandardOps.sol index ac28d0865..49cbeee54 100644 --- a/src/lib/op/LibAllStandardOps.sol +++ b/src/lib/op/LibAllStandardOps.sol @@ -4,9 +4,9 @@ pragma solidity ^0.8.25; import {BadDynamicLength} from "../../error/ErrOpList.sol"; import {LibConvert} from "rain-lib-typecast-0.1.0/src/LibConvert.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {AuthoringMetaV2} from "rain-interpreter-interface-0.1.0/src/interface/IParserV2.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {AuthoringMetaV2} from "rainlang-interface-0.2.8/src/interface/IParserV2.sol"; import {IntegrityCheckState} from "../integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../state/LibInterpreterState.sol"; import {LibParseOperand} from "../parse/LibParseOperand.sol"; diff --git a/src/lib/op/bitwise/LibOpBitwiseAnd.sol b/src/lib/op/bitwise/LibOpBitwiseAnd.sol index 6d4fc1d31..ef87ca6d7 100644 --- a/src/lib/op/bitwise/LibOpBitwiseAnd.sol +++ b/src/lib/op/bitwise/LibOpBitwiseAnd.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; /// @title LibOpBitwiseAnd /// @notice Opcode for computing bitwise AND from the top two items on the stack. diff --git a/src/lib/op/bitwise/LibOpBitwiseCountOnes.sol b/src/lib/op/bitwise/LibOpBitwiseCountOnes.sol index 278cf88eb..391595e30 100644 --- a/src/lib/op/bitwise/LibOpBitwiseCountOnes.sol +++ b/src/lib/op/bitwise/LibOpBitwiseCountOnes.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {LibCtPop} from "rain-math-binary-0.1.1/src/lib/LibCtPop.sol"; +import {LibCtPop} from "rain-math-binary-0.1.4/src/lib/LibCtPop.sol"; /// @title LibOpBitwiseCountOnes /// @notice An opcode that counts the number of bits set in a word. Also known diff --git a/src/lib/op/bitwise/LibOpBitwiseDecode.sol b/src/lib/op/bitwise/LibOpBitwiseDecode.sol index 3be383749..42492aa60 100644 --- a/src/lib/op/bitwise/LibOpBitwiseDecode.sol +++ b/src/lib/op/bitwise/LibOpBitwiseDecode.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {LibOpBitwiseEncode} from "./LibOpBitwiseEncode.sol"; /// @title LibOpBitwiseDecode diff --git a/src/lib/op/bitwise/LibOpBitwiseEncode.sol b/src/lib/op/bitwise/LibOpBitwiseEncode.sol index 18eaa0a32..2a89aa63e 100644 --- a/src/lib/op/bitwise/LibOpBitwiseEncode.sol +++ b/src/lib/op/bitwise/LibOpBitwiseEncode.sol @@ -4,9 +4,9 @@ pragma solidity ^0.8.25; import {ZeroLengthBitwiseEncoding, TruncatedBitwiseEncoding} from "../../../error/ErrBitwise.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; /// @title LibOpBitwiseEncode /// @notice Opcode for encoding binary data into a 256 bit value. diff --git a/src/lib/op/bitwise/LibOpBitwiseOr.sol b/src/lib/op/bitwise/LibOpBitwiseOr.sol index 248ccb9ea..6fee86600 100644 --- a/src/lib/op/bitwise/LibOpBitwiseOr.sol +++ b/src/lib/op/bitwise/LibOpBitwiseOr.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; /// @title LibOpBitwiseOr /// @notice Opcode for computing bitwise OR from the top two items on the stack. diff --git a/src/lib/op/bitwise/LibOpBitwiseShiftLeft.sol b/src/lib/op/bitwise/LibOpBitwiseShiftLeft.sol index 1a3ee2703..c4a105abd 100644 --- a/src/lib/op/bitwise/LibOpBitwiseShiftLeft.sol +++ b/src/lib/op/bitwise/LibOpBitwiseShiftLeft.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {UnsupportedBitwiseShiftAmount} from "../../../error/ErrBitwise.sol"; /// @title LibOpBitwiseShiftLeft diff --git a/src/lib/op/bitwise/LibOpBitwiseShiftRight.sol b/src/lib/op/bitwise/LibOpBitwiseShiftRight.sol index 2c9670350..8fab22535 100644 --- a/src/lib/op/bitwise/LibOpBitwiseShiftRight.sol +++ b/src/lib/op/bitwise/LibOpBitwiseShiftRight.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {UnsupportedBitwiseShiftAmount} from "../../../error/ErrBitwise.sol"; /// @title LibOpBitwiseShiftRight diff --git a/src/lib/op/call/LibOpCall.sol b/src/lib/op/call/LibOpCall.sol index e8158aa0c..8bca6de0b 100644 --- a/src/lib/op/call/LibOpCall.sol +++ b/src/lib/op/call/LibOpCall.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; -import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; +import {LibBytecode} from "rainlang-interface-0.2.8/src/lib/bytecode/LibBytecode.sol"; import {LibEval} from "../../eval/LibEval.sol"; import {CallOutputsExceedSource, CallInputsMismatchSource} from "../../../error/ErrIntegrity.sol"; diff --git a/src/lib/op/crypto/LibOpHash.sol b/src/lib/op/crypto/LibOpHash.sol index be2567b67..77698d8b5 100644 --- a/src/lib/op/crypto/LibOpHash.sol +++ b/src/lib/op/crypto/LibOpHash.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; diff --git a/src/lib/op/erc20/LibOpERC20Allowance.sol b/src/lib/op/erc20/LibOpERC20Allowance.sol index af4ffec4c..0d918683b 100644 --- a/src/lib/op/erc20/LibOpERC20Allowance.sol +++ b/src/lib/op/erc20/LibOpERC20Allowance.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IERC20} from "@openzeppelin-contracts-5.6.1/token/ERC20/IERC20.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; import {LibTOFUTokenDecimals} from "rain-tofu-erc20-decimals-0.1.1/src/lib/LibTOFUTokenDecimals.sol"; diff --git a/src/lib/op/erc20/LibOpERC20BalanceOf.sol b/src/lib/op/erc20/LibOpERC20BalanceOf.sol index 1448fb3bf..f71e368f5 100644 --- a/src/lib/op/erc20/LibOpERC20BalanceOf.sol +++ b/src/lib/op/erc20/LibOpERC20BalanceOf.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IERC20} from "@openzeppelin-contracts-5.6.1/token/ERC20/IERC20.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; import {LibTOFUTokenDecimals} from "rain-tofu-erc20-decimals-0.1.1/src/lib/LibTOFUTokenDecimals.sol"; diff --git a/src/lib/op/erc20/LibOpERC20TotalSupply.sol b/src/lib/op/erc20/LibOpERC20TotalSupply.sol index 971b71ebe..2eba42450 100644 --- a/src/lib/op/erc20/LibOpERC20TotalSupply.sol +++ b/src/lib/op/erc20/LibOpERC20TotalSupply.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IERC20} from "@openzeppelin-contracts-5.6.1/token/ERC20/IERC20.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; import {LibTOFUTokenDecimals} from "rain-tofu-erc20-decimals-0.1.1/src/lib/LibTOFUTokenDecimals.sol"; diff --git a/src/lib/op/erc20/uint256/LibOpUint256ERC20Allowance.sol b/src/lib/op/erc20/uint256/LibOpUint256ERC20Allowance.sol index df8e22e38..55c03f47d 100644 --- a/src/lib/op/erc20/uint256/LibOpUint256ERC20Allowance.sol +++ b/src/lib/op/erc20/uint256/LibOpUint256ERC20Allowance.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IERC20} from "@openzeppelin-contracts-5.6.1/token/ERC20/IERC20.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; import {NotAnAddress} from "../../../../error/ErrRainType.sol"; diff --git a/src/lib/op/erc20/uint256/LibOpUint256ERC20BalanceOf.sol b/src/lib/op/erc20/uint256/LibOpUint256ERC20BalanceOf.sol index 67613b946..a88dfa1c7 100644 --- a/src/lib/op/erc20/uint256/LibOpUint256ERC20BalanceOf.sol +++ b/src/lib/op/erc20/uint256/LibOpUint256ERC20BalanceOf.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IERC20} from "@openzeppelin-contracts-5.6.1/token/ERC20/IERC20.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; import {NotAnAddress} from "../../../../error/ErrRainType.sol"; diff --git a/src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.sol b/src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.sol index ed31db00a..d73c9aa96 100644 --- a/src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.sol +++ b/src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IERC20} from "@openzeppelin-contracts-5.6.1/token/ERC20/IERC20.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; import {NotAnAddress} from "../../../../error/ErrRainType.sol"; diff --git a/src/lib/op/erc5313/LibOpERC5313Owner.sol b/src/lib/op/erc5313/LibOpERC5313Owner.sol index e4e0571b9..1e2b77879 100644 --- a/src/lib/op/erc5313/LibOpERC5313Owner.sol +++ b/src/lib/op/erc5313/LibOpERC5313Owner.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IERC5313} from "@openzeppelin-contracts-5.6.1/interfaces/IERC5313.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {NotAnAddress} from "../../../error/ErrRainType.sol"; diff --git a/src/lib/op/erc721/LibOpERC721BalanceOf.sol b/src/lib/op/erc721/LibOpERC721BalanceOf.sol index a428dc2ae..2c6a9a250 100644 --- a/src/lib/op/erc721/LibOpERC721BalanceOf.sol +++ b/src/lib/op/erc721/LibOpERC721BalanceOf.sol @@ -3,8 +3,8 @@ pragma solidity ^0.8.25; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {IERC721} from "@openzeppelin-contracts-5.6.1/token/ERC721/IERC721.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; diff --git a/src/lib/op/erc721/LibOpERC721OwnerOf.sol b/src/lib/op/erc721/LibOpERC721OwnerOf.sol index 7bf0b83c0..08d6f3b13 100644 --- a/src/lib/op/erc721/LibOpERC721OwnerOf.sol +++ b/src/lib/op/erc721/LibOpERC721OwnerOf.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IERC721} from "@openzeppelin-contracts-5.6.1/token/ERC721/IERC721.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {NotAnAddress} from "../../../error/ErrRainType.sol"; diff --git a/src/lib/op/erc721/uint256/LibOpUint256ERC721BalanceOf.sol b/src/lib/op/erc721/uint256/LibOpUint256ERC721BalanceOf.sol index 9bfad1c36..533ea75eb 100644 --- a/src/lib/op/erc721/uint256/LibOpUint256ERC721BalanceOf.sol +++ b/src/lib/op/erc721/uint256/LibOpUint256ERC721BalanceOf.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IERC721} from "@openzeppelin-contracts-5.6.1/token/ERC721/IERC721.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; import {NotAnAddress} from "../../../../error/ErrRainType.sol"; diff --git a/src/lib/op/evm/LibOpBlockNumber.sol b/src/lib/op/evm/LibOpBlockNumber.sol index 37ef1f477..90f3a361b 100644 --- a/src/lib/op/evm/LibOpBlockNumber.sol +++ b/src/lib/op/evm/LibOpBlockNumber.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/evm/LibOpBlockTimestamp.sol b/src/lib/op/evm/LibOpBlockTimestamp.sol index 7d408c2bd..523e298bd 100644 --- a/src/lib/op/evm/LibOpBlockTimestamp.sol +++ b/src/lib/op/evm/LibOpBlockTimestamp.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpBlockTimestamp diff --git a/src/lib/op/evm/LibOpChainId.sol b/src/lib/op/evm/LibOpChainId.sol index 82d96ba76..1482986b1 100644 --- a/src/lib/op/evm/LibOpChainId.sol +++ b/src/lib/op/evm/LibOpChainId.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/logic/LibOpAny.sol b/src/lib/op/logic/LibOpAny.sol index 1dc6b1ac0..430b8a47d 100644 --- a/src/lib/op/logic/LibOpAny.sol +++ b/src/lib/op/logic/LibOpAny.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/logic/LibOpBinaryEqualTo.sol b/src/lib/op/logic/LibOpBinaryEqualTo.sol index 925ea5ec3..3abf6f105 100644 --- a/src/lib/op/logic/LibOpBinaryEqualTo.sol +++ b/src/lib/op/logic/LibOpBinaryEqualTo.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; diff --git a/src/lib/op/logic/LibOpConditions.sol b/src/lib/op/logic/LibOpConditions.sol index de0a08fc8..7e46fc3f1 100644 --- a/src/lib/op/logic/LibOpConditions.sol +++ b/src/lib/op/logic/LibOpConditions.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {LibIntOrAString, IntOrAString} from "rain-intorastring-0.1.0/src/lib/LibIntOrAString.sol"; diff --git a/src/lib/op/logic/LibOpEnsure.sol b/src/lib/op/logic/LibOpEnsure.sol index 7296b986c..ed4dee4ff 100644 --- a/src/lib/op/logic/LibOpEnsure.sol +++ b/src/lib/op/logic/LibOpEnsure.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {LibIntOrAString, IntOrAString} from "rain-intorastring-0.1.0/src/lib/LibIntOrAString.sol"; diff --git a/src/lib/op/logic/LibOpEqualTo.sol b/src/lib/op/logic/LibOpEqualTo.sol index 15ee5a7bd..b629aab90 100644 --- a/src/lib/op/logic/LibOpEqualTo.sol +++ b/src/lib/op/logic/LibOpEqualTo.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/logic/LibOpEvery.sol b/src/lib/op/logic/LibOpEvery.sol index bad2bbddf..c3ca9a86b 100644 --- a/src/lib/op/logic/LibOpEvery.sol +++ b/src/lib/op/logic/LibOpEvery.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/logic/LibOpGreaterThan.sol b/src/lib/op/logic/LibOpGreaterThan.sol index 0ea0afdd8..f28ef2d5f 100644 --- a/src/lib/op/logic/LibOpGreaterThan.sol +++ b/src/lib/op/logic/LibOpGreaterThan.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/logic/LibOpGreaterThanOrEqualTo.sol b/src/lib/op/logic/LibOpGreaterThanOrEqualTo.sol index 0f846fe70..ba4373995 100644 --- a/src/lib/op/logic/LibOpGreaterThanOrEqualTo.sol +++ b/src/lib/op/logic/LibOpGreaterThanOrEqualTo.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/logic/LibOpIf.sol b/src/lib/op/logic/LibOpIf.sol index 9f9f69c02..ede9c7593 100644 --- a/src/lib/op/logic/LibOpIf.sol +++ b/src/lib/op/logic/LibOpIf.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/logic/LibOpIsZero.sol b/src/lib/op/logic/LibOpIsZero.sol index 6abe2caa2..9bfda461a 100644 --- a/src/lib/op/logic/LibOpIsZero.sol +++ b/src/lib/op/logic/LibOpIsZero.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/logic/LibOpLessThan.sol b/src/lib/op/logic/LibOpLessThan.sol index 1c13a834e..d10ce79c2 100644 --- a/src/lib/op/logic/LibOpLessThan.sol +++ b/src/lib/op/logic/LibOpLessThan.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/logic/LibOpLessThanOrEqualTo.sol b/src/lib/op/logic/LibOpLessThanOrEqualTo.sol index 2f22a1e3c..1392dd243 100644 --- a/src/lib/op/logic/LibOpLessThanOrEqualTo.sol +++ b/src/lib/op/logic/LibOpLessThanOrEqualTo.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/math/LibOpAbs.sol b/src/lib/op/math/LibOpAbs.sol index fbba8ab0d..d01b01e5d 100644 --- a/src/lib/op/math/LibOpAbs.sol +++ b/src/lib/op/math/LibOpAbs.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/math/LibOpAdd.sol b/src/lib/op/math/LibOpAdd.sol index 0f5f3a15d..3b296c558 100644 --- a/src/lib/op/math/LibOpAdd.sol +++ b/src/lib/op/math/LibOpAdd.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; diff --git a/src/lib/op/math/LibOpAvg.sol b/src/lib/op/math/LibOpAvg.sol index 90fff09aa..a3b5fe3af 100644 --- a/src/lib/op/math/LibOpAvg.sol +++ b/src/lib/op/math/LibOpAvg.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/math/LibOpCeil.sol b/src/lib/op/math/LibOpCeil.sol index 7938fda5c..958dde2ef 100644 --- a/src/lib/op/math/LibOpCeil.sol +++ b/src/lib/op/math/LibOpCeil.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/math/LibOpDiv.sol b/src/lib/op/math/LibOpDiv.sol index 4be5c5ce2..f3a007567 100644 --- a/src/lib/op/math/LibOpDiv.sol +++ b/src/lib/op/math/LibOpDiv.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/math/LibOpE.sol b/src/lib/op/math/LibOpE.sol index 62ca64404..9308031f9 100644 --- a/src/lib/op/math/LibOpE.sol +++ b/src/lib/op/math/LibOpE.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/math/LibOpExp.sol b/src/lib/op/math/LibOpExp.sol index c18c0f804..3b7def9fe 100644 --- a/src/lib/op/math/LibOpExp.sol +++ b/src/lib/op/math/LibOpExp.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/math/LibOpExp2.sol b/src/lib/op/math/LibOpExp2.sol index f737493b2..e58560503 100644 --- a/src/lib/op/math/LibOpExp2.sol +++ b/src/lib/op/math/LibOpExp2.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/math/LibOpFloor.sol b/src/lib/op/math/LibOpFloor.sol index 3ff85a113..802375904 100644 --- a/src/lib/op/math/LibOpFloor.sol +++ b/src/lib/op/math/LibOpFloor.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/math/LibOpFrac.sol b/src/lib/op/math/LibOpFrac.sol index 932d83319..1e8e03adb 100644 --- a/src/lib/op/math/LibOpFrac.sol +++ b/src/lib/op/math/LibOpFrac.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/math/LibOpGm.sol b/src/lib/op/math/LibOpGm.sol index be6846ce3..51fac7e04 100644 --- a/src/lib/op/math/LibOpGm.sol +++ b/src/lib/op/math/LibOpGm.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/math/LibOpHeadroom.sol b/src/lib/op/math/LibOpHeadroom.sol index 718140fbb..b9fadf19b 100644 --- a/src/lib/op/math/LibOpHeadroom.sol +++ b/src/lib/op/math/LibOpHeadroom.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/math/LibOpInv.sol b/src/lib/op/math/LibOpInv.sol index 9923ed7ee..750d65f0f 100644 --- a/src/lib/op/math/LibOpInv.sol +++ b/src/lib/op/math/LibOpInv.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/math/LibOpMax.sol b/src/lib/op/math/LibOpMax.sol index 102239f84..75cbe9289 100644 --- a/src/lib/op/math/LibOpMax.sol +++ b/src/lib/op/math/LibOpMax.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/math/LibOpMaxNegativeValue.sol b/src/lib/op/math/LibOpMaxNegativeValue.sol index de7c0014b..4bb6f68ca 100644 --- a/src/lib/op/math/LibOpMaxNegativeValue.sol +++ b/src/lib/op/math/LibOpMaxNegativeValue.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpMaxNegativeValue diff --git a/src/lib/op/math/LibOpMaxPositiveValue.sol b/src/lib/op/math/LibOpMaxPositiveValue.sol index 592380aa2..fad7cf62d 100644 --- a/src/lib/op/math/LibOpMaxPositiveValue.sol +++ b/src/lib/op/math/LibOpMaxPositiveValue.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpMaxPositiveValue diff --git a/src/lib/op/math/LibOpMin.sol b/src/lib/op/math/LibOpMin.sol index cb7fbe3aa..b727cc01e 100644 --- a/src/lib/op/math/LibOpMin.sol +++ b/src/lib/op/math/LibOpMin.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/math/LibOpMinNegativeValue.sol b/src/lib/op/math/LibOpMinNegativeValue.sol index 955c3c999..804669b73 100644 --- a/src/lib/op/math/LibOpMinNegativeValue.sol +++ b/src/lib/op/math/LibOpMinNegativeValue.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpMinNegativeValue diff --git a/src/lib/op/math/LibOpMinPositiveValue.sol b/src/lib/op/math/LibOpMinPositiveValue.sol index fa65b66a6..0e73324d7 100644 --- a/src/lib/op/math/LibOpMinPositiveValue.sol +++ b/src/lib/op/math/LibOpMinPositiveValue.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpMinPositiveValue diff --git a/src/lib/op/math/LibOpMul.sol b/src/lib/op/math/LibOpMul.sol index 89a3aaa56..ff71e040a 100644 --- a/src/lib/op/math/LibOpMul.sol +++ b/src/lib/op/math/LibOpMul.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/math/LibOpPower.sol b/src/lib/op/math/LibOpPower.sol index e3eaeb88b..707fcdcdf 100644 --- a/src/lib/op/math/LibOpPower.sol +++ b/src/lib/op/math/LibOpPower.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/math/LibOpSqrt.sol b/src/lib/op/math/LibOpSqrt.sol index b164c04ec..043f7a00b 100644 --- a/src/lib/op/math/LibOpSqrt.sol +++ b/src/lib/op/math/LibOpSqrt.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/math/LibOpSub.sol b/src/lib/op/math/LibOpSub.sol index 3a273412d..832c955f6 100644 --- a/src/lib/op/math/LibOpSub.sol +++ b/src/lib/op/math/LibOpSub.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/math/growth/LibOpExponentialGrowth.sol b/src/lib/op/math/growth/LibOpExponentialGrowth.sol index 19aa4e13e..22a71c630 100644 --- a/src/lib/op/math/growth/LibOpExponentialGrowth.sol +++ b/src/lib/op/math/growth/LibOpExponentialGrowth.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/math/growth/LibOpLinearGrowth.sol b/src/lib/op/math/growth/LibOpLinearGrowth.sol index cef359af0..76459f9e6 100644 --- a/src/lib/op/math/growth/LibOpLinearGrowth.sol +++ b/src/lib/op/math/growth/LibOpLinearGrowth.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/src/lib/op/math/uint256/LibOpUint256Add.sol b/src/lib/op/math/uint256/LibOpUint256Add.sol index f983943d3..5505e3628 100644 --- a/src/lib/op/math/uint256/LibOpUint256Add.sol +++ b/src/lib/op/math/uint256/LibOpUint256Add.sol @@ -4,8 +4,8 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; /// @title LibOpUint256Add /// @notice Opcode to add N integers. Errors on overflow. diff --git a/src/lib/op/math/uint256/LibOpUint256Div.sol b/src/lib/op/math/uint256/LibOpUint256Div.sol index 1fe8784ac..3385bf0b3 100644 --- a/src/lib/op/math/uint256/LibOpUint256Div.sol +++ b/src/lib/op/math/uint256/LibOpUint256Div.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; diff --git a/src/lib/op/math/uint256/LibOpUint256MaxValue.sol b/src/lib/op/math/uint256/LibOpUint256MaxValue.sol index 597bca8f9..2b07f0a06 100644 --- a/src/lib/op/math/uint256/LibOpUint256MaxValue.sol +++ b/src/lib/op/math/uint256/LibOpUint256MaxValue.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; /// @title LibOpUint256MaxValue /// @notice Exposes `type(uint256).max` as a Rainlang opcode. diff --git a/src/lib/op/math/uint256/LibOpUint256Mul.sol b/src/lib/op/math/uint256/LibOpUint256Mul.sol index 1906dfc8d..a7adfca5b 100644 --- a/src/lib/op/math/uint256/LibOpUint256Mul.sol +++ b/src/lib/op/math/uint256/LibOpUint256Mul.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; diff --git a/src/lib/op/math/uint256/LibOpUint256Power.sol b/src/lib/op/math/uint256/LibOpUint256Power.sol index 4dc4e3fb3..32acb55a3 100644 --- a/src/lib/op/math/uint256/LibOpUint256Power.sol +++ b/src/lib/op/math/uint256/LibOpUint256Power.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; diff --git a/src/lib/op/math/uint256/LibOpUint256Sub.sol b/src/lib/op/math/uint256/LibOpUint256Sub.sol index 5324dcacc..b986dc817 100644 --- a/src/lib/op/math/uint256/LibOpUint256Sub.sol +++ b/src/lib/op/math/uint256/LibOpUint256Sub.sol @@ -4,8 +4,8 @@ pragma solidity ^0.8.25; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; /// @title LibOpUint256Sub /// @notice Opcode to sub N integers. Errors on underflow. diff --git a/src/lib/op/store/LibOpGet.sol b/src/lib/op/store/LibOpGet.sol index ee9f09cff..57b4968ff 100644 --- a/src/lib/op/store/LibOpGet.sol +++ b/src/lib/op/store/LibOpGet.sol @@ -3,8 +3,8 @@ pragma solidity ^0.8.25; import {MemoryKVKey, MemoryKVVal, MemoryKV, LibMemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; diff --git a/src/lib/op/store/LibOpSet.sol b/src/lib/op/store/LibOpSet.sol index cc411459d..9f60dc40c 100644 --- a/src/lib/op/store/LibOpSet.sol +++ b/src/lib/op/store/LibOpSet.sol @@ -4,9 +4,9 @@ pragma solidity ^0.8.25; import {MemoryKV, MemoryKVKey, MemoryKVVal, LibMemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; /// @title LibOpSet /// @notice Opcode for recording k/v state changes to be set in storage. diff --git a/src/lib/parse/LibParse.sol b/src/lib/parse/LibParse.sol index b600ca82a..56f1fcac8 100644 --- a/src/lib/parse/LibParse.sol +++ b/src/lib/parse/LibParse.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {LibPointer, Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; -import {LibMemCpy} from "rain-solmem-0.1.3/src/lib/LibMemCpy.sol"; +import {LibPointer, Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; +import {LibMemCpy} from "rain-solmem-0.1.28/src/lib/LibMemCpy.sol"; import { CMASK_COMMENT_HEAD, CMASK_EOS, @@ -20,13 +20,9 @@ import { CMASK_IDENTIFIER_HEAD } from "rain-string-0.2.0/src/lib/parse/LibParseCMask.sol"; import {LibParseChar} from "rain-string-0.2.0/src/lib/parse/LibParseChar.sol"; -import {LibParseMeta} from "rain-interpreter-interface-0.1.0/src/lib/parse/LibParseMeta.sol"; +import {LibParseMeta} from "rainlang-interface-0.2.8/src/lib/parse/LibParseMeta.sol"; import {LibParseOperand} from "./LibParseOperand.sol"; -import { - OperandV2, - OPCODE_STACK, - OPCODE_UNKNOWN -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, OPCODE_STACK, OPCODE_UNKNOWN} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibParseStackName} from "./LibParseStackName.sol"; import { UnexpectedRHSChar, @@ -55,8 +51,8 @@ import {LibParsePragma} from "./LibParsePragma.sol"; import {LibParseInterstitial} from "./LibParseInterstitial.sol"; import {LibParseError} from "./LibParseError.sol"; import {LibSubParse} from "./LibSubParse.sol"; -import {LibBytes} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; -import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; +import {LibBytes} from "rain-solmem-0.1.28/src/lib/LibBytes.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.28/src/lib/LibBytes32Array.sol"; /// @dev Size in bytes of the fixed header prepended to sub-parser bytecode. /// Comprises the operand values tail pointer (2 bytes), the literal parsers diff --git a/src/lib/parse/LibParseOperand.sol b/src/lib/parse/LibParseOperand.sol index d4312b61c..6a5d46b43 100644 --- a/src/lib/parse/LibParseOperand.sol +++ b/src/lib/parse/LibParseOperand.sol @@ -10,7 +10,7 @@ import { UnexpectedOperandValue, OperandOverflow } from "../../error/ErrParse.sol"; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibParseLiteral} from "./literal/LibParseLiteral.sol"; import { CMASK_OPERAND_END, diff --git a/src/lib/parse/LibParseState.sol b/src/lib/parse/LibParseState.sol index fb631388b..6817b3bb3 100644 --- a/src/lib/parse/LibParseState.sol +++ b/src/lib/parse/LibParseState.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {OperandV2, OPCODE_CONSTANT} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, OPCODE_CONSTANT} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibParseStackTracker, ParseStackTracker} from "./LibParseStackTracker.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; -import {LibMemCpy} from "rain-solmem-0.1.3/src/lib/LibMemCpy.sol"; -import {LibUint256Array} from "rain-solmem-0.1.3/src/lib/LibUint256Array.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; +import {LibMemCpy} from "rain-solmem-0.1.28/src/lib/LibMemCpy.sol"; +import {LibUint256Array} from "rain-solmem-0.1.28/src/lib/LibUint256Array.sol"; import { DanglingSource, MaxSources, diff --git a/src/lib/parse/LibSubParse.sol b/src/lib/parse/LibSubParse.sol index 4f81874a6..5c5c45a3c 100644 --- a/src/lib/parse/LibSubParse.sol +++ b/src/lib/parse/LibSubParse.sol @@ -9,9 +9,9 @@ import { OPCODE_CONSTANT, OPCODE_CONTEXT, OperandV2 -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {LibBytecode, Pointer} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; -import {ISubParserV4} from "rain-interpreter-interface-0.1.0/src/interface/ISubParserV4.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {LibBytecode, Pointer} from "rainlang-interface-0.2.8/src/lib/bytecode/LibBytecode.sol"; +import {ISubParserV4} from "rainlang-interface-0.2.8/src/interface/ISubParserV4.sol"; import {BadSubParserResult, UnknownWord, UnsupportedLiteralType} from "../../error/ErrParse.sol"; import {IInterpreterExternV4, LibExtern, EncodedExternDispatchV2} from "../extern/LibExtern.sol"; import { @@ -20,7 +20,7 @@ import { ContextGridOverflow, SubParseLiteralDispatchLengthOverflow } from "../../error/ErrSubParse.sol"; -import {LibMemCpy} from "rain-solmem-0.1.3/src/lib/LibMemCpy.sol"; +import {LibMemCpy} from "rain-solmem-0.1.28/src/lib/LibMemCpy.sol"; import {LibParseError} from "./LibParseError.sol"; /// @title LibSubParse diff --git a/src/lib/state/LibInterpreterState.sol b/src/lib/state/LibInterpreterState.sol index 1fe8ecec7..9f755cb77 100644 --- a/src/lib/state/LibInterpreterState.sol +++ b/src/lib/state/LibInterpreterState.sol @@ -2,13 +2,13 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {MemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; import { FullyQualifiedNamespace, IInterpreterStoreV3 -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterStoreV3.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; /// @dev Deterministic address used as the `staticcall` target for stack trace /// emissions. Derived from a domain-specific keccak hash so it cannot collide diff --git a/src/lib/state/LibInterpreterStateDataContract.sol b/src/lib/state/LibInterpreterStateDataContract.sol index 1ce8a2931..598e262d8 100644 --- a/src/lib/state/LibInterpreterStateDataContract.sol +++ b/src/lib/state/LibInterpreterStateDataContract.sol @@ -3,11 +3,11 @@ pragma solidity ^0.8.25; import {MemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; -import {LibMemCpy} from "rain-solmem-0.1.3/src/lib/LibMemCpy.sol"; -import {LibBytes} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; -import {FullyQualifiedNamespace} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {IInterpreterStoreV3} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; +import {LibMemCpy} from "rain-solmem-0.1.28/src/lib/LibMemCpy.sol"; +import {LibBytes} from "rain-solmem-0.1.28/src/lib/LibBytes.sol"; +import {FullyQualifiedNamespace} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {IInterpreterStoreV3} from "rainlang-interface-0.2.8/src/interface/IInterpreterStoreV3.sol"; import {InterpreterState} from "./LibInterpreterState.sol"; import {SOURCE_OFFSET_SHIFT} from "../eval/LibEval.sol"; diff --git a/test/abstract/OpTest.sol b/test/abstract/OpTest.sol index 4b90cd262..37d8c7180 100644 --- a/test/abstract/OpTest.sol +++ b/test/abstract/OpTest.sol @@ -4,18 +4,18 @@ pragma solidity =0.8.25; // Exported for convenience in op tests. //forge-lint: disable-next-line(unused-import) -import {Test, stdError} from "forge-std-1.16.1/src/Test.sol"; -import {LibMemCpy} from "rain-solmem-0.1.3/src/lib/LibMemCpy.sol"; +import {Test, stdError} from "forge-std-1.16.2/src/Test.sol"; +import {LibMemCpy} from "rain-solmem-0.1.28/src/lib/LibMemCpy.sol"; import {MemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; -import {LibUint256Array} from "rain-solmem-0.1.3/src/lib/LibUint256Array.sol"; -import {LibPointer, Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {LibUint256Array} from "rain-solmem-0.1.28/src/lib/LibUint256Array.sol"; +import {LibPointer, Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {RainlangExpressionDeployerDeploymentTest} from "./RainlangExpressionDeployerDeploymentTest.sol"; import {LibInterpreterState, InterpreterState} from "../../src/lib/state/LibInterpreterState.sol"; import {LibInterpreterStateFingerprint} from "../lib/state/LibInterpreterStateFingerprint.sol"; import {IntegrityCheckState, LibIntegrityCheck} from "../../src/lib/integrity/LibIntegrityCheck.sol"; -import {LibContext} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; +import {LibContext} from "rainlang-interface-0.2.8/src/lib/caller/LibContext.sol"; import {UnexpectedOperand} from "../../src/error/ErrParse.sol"; import {BadOpInputsLength, BadOpOutputsLength} from "../../src/lib/integrity/LibIntegrityCheck.sol"; import { @@ -24,17 +24,14 @@ import { IInterpreterStoreV3, EvalV4, StackItem -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import { - FullyQualifiedNamespace, - StateNamespace -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; -import {SignedContextV1} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterCallerV4.sol"; -import {LibNamespace} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {FullyQualifiedNamespace, StateNamespace} from "rainlang-interface-0.2.8/src/interface/IInterpreterStoreV3.sol"; +import {SignedContextV1} from "rainlang-interface-0.2.8/src/interface/IInterpreterCallerV4.sol"; +import {LibNamespace} from "rainlang-interface-0.2.8/src/lib/ns/LibNamespace.sol"; import {ExponentOverflow, CoefficientOverflow} from "rain-math-float-0.1.1/src/error/ErrDecimalFloat.sol"; import {LibTOFUTokenDecimals} from "rain-tofu-erc20-decimals-0.1.1/src/lib/LibTOFUTokenDecimals.sol"; -import {console2} from "forge-std-1.16.1/src/console2.sol"; +import {console2} from "forge-std-1.16.2/src/console2.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; bytes32 constant PRE = keccak256(abi.encodePacked("pre")); diff --git a/test/abstract/OperandTest.sol b/test/abstract/OperandTest.sol index 80e88ecfb..6f27a0f99 100644 --- a/test/abstract/OperandTest.sol +++ b/test/abstract/OperandTest.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParse} from "../../src/lib/parse/LibParse.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {ParseState} from "../../src/lib/parse/LibParseState.sol"; diff --git a/test/abstract/ParseLiteralTest.sol b/test/abstract/ParseLiteralTest.sol index 5dd91b0b9..cd5164452 100644 --- a/test/abstract/ParseLiteralTest.sol +++ b/test/abstract/ParseLiteralTest.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.28/src/lib/LibBytes.sol"; import {LibParseState, ParseState} from "../../src/lib/parse/LibParseState.sol"; import {LibParseLiteral, UnsupportedLiteralType} from "../../src/lib/parse/literal/LibParseLiteral.sol"; import {LibAllStandardOps} from "../../src/lib/op/LibAllStandardOps.sol"; diff --git a/test/abstract/ParseTest.sol b/test/abstract/ParseTest.sol index eb488af6d..6ef3956f9 100644 --- a/test/abstract/ParseTest.sol +++ b/test/abstract/ParseTest.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {LibParse} from "../../src/lib/parse/LibParse.sol"; import {ParseState} from "../../src/lib/parse/LibParseState.sol"; diff --git a/test/abstract/RainlangExpressionDeployerDeploymentTest.sol b/test/abstract/RainlangExpressionDeployerDeploymentTest.sol index c9c88050f..9bffca40d 100644 --- a/test/abstract/RainlangExpressionDeployerDeploymentTest.sol +++ b/test/abstract/RainlangExpressionDeployerDeploymentTest.sol @@ -2,35 +2,60 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; - -import {RainlangStore} from "../../src/concrete/RainlangStore.sol"; -import {RainlangParser} from "../../src/concrete/RainlangParser.sol"; -import {RainlangInterpreter} from "../../src/concrete/RainlangInterpreter.sol"; -import {RainlangExpressionDeployer} from "../../src/concrete/RainlangExpressionDeployer.sol"; -import {LibRainDeploy} from "rain-deploy-0.1.3/src/lib/LibRainDeploy.sol"; -import {LibInterpreterDeploy} from "../../src/lib/deploy/LibInterpreterDeploy.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {BaseRainlangStore} from "../../src/abstract/BaseRainlangStore.sol"; +import {BaseRainlangParser} from "../../src/abstract/BaseRainlangParser.sol"; +import {BaseRainlangInterpreter} from "../../src/abstract/BaseRainlangInterpreter.sol"; +import {BaseRainlangExpressionDeployer} from "../../src/abstract/BaseRainlangExpressionDeployer.sol"; +import {LibRainDeploy} from "rain-deploy-0.1.7/src/lib/LibRainDeploy.sol"; +import { + LibTestInterpreterDeploy, + TEST_PARSER_ADDRESS, + TEST_STORE_ADDRESS, + TEST_INTERPRETER_ADDRESS, + TEST_EXPRESSION_DEPLOYER_ADDRESS +} from "../lib/deploy/LibTestInterpreterDeploy.sol"; import {LibTOFUTokenDecimals} from "rain-tofu-erc20-decimals-0.1.1/src/lib/LibTOFUTokenDecimals.sol"; /// @title RainlangExpressionDeployerDeploymentTest -/// @notice Tests that the RainlangExpressionDeployer meta is correct. Also -/// tests basic functionality of the `IParserV1View` interface implementation. +/// @notice Binds a parser, store, interpreter and expression deployer for the +/// tests that need a whole Rainlang to parse and eval against. By default they +/// are the test concretes built from this repo's source; `deployRainlang` is +/// the one place to bind a deployed set instead. abstract contract RainlangExpressionDeployerDeploymentTest is Test { //solhint-disable-next-line private-vars-leading-underscore - RainlangExpressionDeployer internal immutable I_DEPLOYER; + BaseRainlangExpressionDeployer internal immutable I_DEPLOYER; //solhint-disable-next-line private-vars-leading-underscore - RainlangInterpreter internal immutable I_INTERPRETER; + BaseRainlangInterpreter internal immutable I_INTERPRETER; //solhint-disable-next-line private-vars-leading-underscore - RainlangStore internal immutable I_STORE; + BaseRainlangStore internal immutable I_STORE; //solhint-disable-next-line private-vars-leading-underscore - RainlangParser internal immutable I_PARSER; + BaseRainlangParser internal immutable I_PARSER; function beforeOpTestConstructor() internal virtual {} + /// Places the Rainlang under test and returns its four components. + /// @return The parser. + /// @return The store. + /// @return The interpreter. + /// @return The expression deployer. + function deployRainlang() + internal + virtual + returns (BaseRainlangParser, BaseRainlangStore, BaseRainlangInterpreter, BaseRainlangExpressionDeployer) + { + LibTestInterpreterDeploy.etchTestRainlang(vm); + return ( + BaseRainlangParser(TEST_PARSER_ADDRESS), + BaseRainlangStore(TEST_STORE_ADDRESS), + BaseRainlangInterpreter(TEST_INTERPRETER_ADDRESS), + BaseRainlangExpressionDeployer(TEST_EXPRESSION_DEPLOYER_ADDRESS) + ); + } + constructor() { beforeOpTestConstructor(); - - LibInterpreterDeploy.etchRainlang(vm); + (I_PARSER, I_STORE, I_INTERPRETER, I_DEPLOYER) = deployRainlang(); if ( address(LibTOFUTokenDecimals.TOFU_DECIMALS_DEPLOYMENT).codehash @@ -39,10 +64,5 @@ abstract contract RainlangExpressionDeployerDeploymentTest is Test { LibRainDeploy.etchZoltuFactory(vm); LibRainDeploy.deployZoltu(LibTOFUTokenDecimals.TOFU_DECIMALS_EXPECTED_CREATION_CODE); } - - I_PARSER = RainlangParser(LibInterpreterDeploy.PARSER_DEPLOYED_ADDRESS); - I_INTERPRETER = RainlangInterpreter(LibInterpreterDeploy.INTERPRETER_DEPLOYED_ADDRESS); - I_STORE = RainlangStore(LibInterpreterDeploy.STORE_DEPLOYED_ADDRESS); - I_DEPLOYER = RainlangExpressionDeployer(LibInterpreterDeploy.EXPRESSION_DEPLOYER_DEPLOYED_ADDRESS); } } diff --git a/test/concrete/TestRainlang.sol b/test/concrete/TestRainlang.sol new file mode 100644 index 000000000..c5e1e8489 --- /dev/null +++ b/test/concrete/TestRainlang.sol @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: LicenseRef-DCL-1.0 +// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd +pragma solidity =0.8.25; + +import {BaseRainlang} from "../../src/abstract/BaseRainlang.sol"; +import { + TEST_PARSER_ADDRESS, + TEST_STORE_ADDRESS, + TEST_INTERPRETER_ADDRESS, + TEST_EXPRESSION_DEPLOYER_ADDRESS +} from "../lib/deploy/LibTestInterpreterDeploy.sol"; +// Referenced by NatSpec only. +//forge-lint: disable-next-line(unused-import) +import {IRainlang} from "../../src/interface/IRainlang.sol"; + +/// @title TestRainlang +/// @notice `BaseRainlang` bound to the addresses `LibTestInterpreterDeploy` +/// places the test concretes at. +contract TestRainlang is BaseRainlang { + /// @inheritdoc IRainlang + function expressionDeployerAddress() external pure virtual override returns (address) { + return TEST_EXPRESSION_DEPLOYER_ADDRESS; + } + + /// @inheritdoc IRainlang + function interpreterAddress() external pure virtual override returns (address) { + return TEST_INTERPRETER_ADDRESS; + } + + /// @inheritdoc IRainlang + function storeAddress() external pure virtual override returns (address) { + return TEST_STORE_ADDRESS; + } + + /// @inheritdoc IRainlang + function parserAddress() external pure virtual override returns (address) { + return TEST_PARSER_ADDRESS; + } +} diff --git a/test/concrete/TestRainlangExpressionDeployer.sol b/test/concrete/TestRainlangExpressionDeployer.sol new file mode 100644 index 000000000..2534d7a76 --- /dev/null +++ b/test/concrete/TestRainlangExpressionDeployer.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: LicenseRef-DCL-1.0 +// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd +pragma solidity =0.8.25; + +import {BaseRainlangExpressionDeployer} from "../../src/abstract/BaseRainlangExpressionDeployer.sol"; +import {BaseRainlangParser} from "../../src/abstract/BaseRainlangParser.sol"; +import {LibAllStandardOps} from "../../src/lib/op/LibAllStandardOps.sol"; +import {TEST_PARSER_ADDRESS} from "../lib/deploy/LibTestInterpreterDeploy.sol"; +// Referenced by NatSpec only. +//forge-lint: disable-next-line(unused-import) +import {IDescribedByMetaV1} from "rain-metadata-0.1.0/src/interface/IDescribedByMetaV1.sol"; + +/// @dev Stands in for the meta hash a deployed expression deployer describes +/// itself by; the test concrete has no meta. +bytes32 constant TEST_DESCRIBED_BY_META_HASH = keccak256("TestRainlangExpressionDeployer"); + +/// @title TestRainlangExpressionDeployer +/// @notice `BaseRainlangExpressionDeployer` over the current source: the +/// integrity function pointers are read from `LibAllStandardOps` at runtime +/// and the parser is the one `LibTestInterpreterDeploy` places at +/// `TEST_PARSER_ADDRESS`. +contract TestRainlangExpressionDeployer is BaseRainlangExpressionDeployer { + /// @inheritdoc BaseRainlangExpressionDeployer + function parser() internal pure virtual override returns (BaseRainlangParser) { + return BaseRainlangParser(TEST_PARSER_ADDRESS); + } + + /// @inheritdoc BaseRainlangExpressionDeployer + function integrityFunctionPointers() internal pure virtual override returns (bytes memory) { + return LibAllStandardOps.integrityFunctionPointers(); + } + + /// @inheritdoc IDescribedByMetaV1 + function describedByMetaV1() external pure virtual override returns (bytes32) { + return TEST_DESCRIBED_BY_META_HASH; + } +} diff --git a/test/concrete/TestRainlangInterpreter.sol b/test/concrete/TestRainlangInterpreter.sol new file mode 100644 index 000000000..39c969daa --- /dev/null +++ b/test/concrete/TestRainlangInterpreter.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: LicenseRef-DCL-1.0 +// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd +pragma solidity =0.8.25; + +import {BaseRainlangInterpreter} from "../../src/abstract/BaseRainlangInterpreter.sol"; +import {LibAllStandardOps} from "../../src/lib/op/LibAllStandardOps.sol"; + +/// @title TestRainlangInterpreter +/// @notice `BaseRainlangInterpreter` over the current source: the opcode +/// function pointer table is read from `LibAllStandardOps` at runtime rather +/// than a generated file. +contract TestRainlangInterpreter is BaseRainlangInterpreter { + /// @inheritdoc BaseRainlangInterpreter + function opcodeFunctionPointers() internal pure virtual override returns (bytes memory) { + return LibAllStandardOps.opcodeFunctionPointers(); + } +} diff --git a/test/concrete/TestRainlangParser.sol b/test/concrete/TestRainlangParser.sol new file mode 100644 index 000000000..ea73b4a8b --- /dev/null +++ b/test/concrete/TestRainlangParser.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: LicenseRef-DCL-1.0 +// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd +pragma solidity =0.8.25; + +import {BaseRainlangParser, PARSE_META_BUILD_DEPTH} from "../../src/abstract/BaseRainlangParser.sol"; +import {LibAllStandardOps, AuthoringMetaV2} from "../../src/lib/op/LibAllStandardOps.sol"; +import {LibGenParseMeta} from "rainlang-interface-0.2.8/src/lib/codegen/LibGenParseMeta.sol"; + +/// @title TestRainlangParser +/// @notice `BaseRainlangParser` over the current source: the parse meta is +/// built from `LibAllStandardOps` at construction and the function pointer +/// tables are read from it at runtime, so nothing here comes from a generated +/// file. +contract TestRainlangParser is BaseRainlangParser { + bytes internal sParseMeta; + + constructor() { + sParseMeta = LibGenParseMeta.buildParseMetaV2( + abi.decode(LibAllStandardOps.authoringMetaV2(), (AuthoringMetaV2[])), PARSE_META_BUILD_DEPTH + ); + } + + /// @inheritdoc BaseRainlangParser + function parseMeta() internal view virtual override returns (bytes memory) { + return sParseMeta; + } + + /// @inheritdoc BaseRainlangParser + function operandHandlerFunctionPointers() internal pure virtual override returns (bytes memory) { + return LibAllStandardOps.operandHandlerFunctionPointers(); + } + + /// @inheritdoc BaseRainlangParser + function literalParserFunctionPointers() internal pure virtual override returns (bytes memory) { + return LibAllStandardOps.literalParserFunctionPointers(); + } +} diff --git a/test/concrete/TestRainlangStore.sol b/test/concrete/TestRainlangStore.sol new file mode 100644 index 000000000..d97bc7387 --- /dev/null +++ b/test/concrete/TestRainlangStore.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: LicenseRef-DCL-1.0 +// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd +pragma solidity =0.8.25; + +import {BaseRainlangStore} from "../../src/abstract/BaseRainlangStore.sol"; + +/// @title TestRainlangStore +/// @notice `BaseRainlangStore` over the current source. The store binds no +/// tables, so this is the base as-is. +contract TestRainlangStore is BaseRainlangStore {} diff --git a/test/lib/deploy/LibTestInterpreterDeploy.sol b/test/lib/deploy/LibTestInterpreterDeploy.sol new file mode 100644 index 000000000..f721e9462 --- /dev/null +++ b/test/lib/deploy/LibTestInterpreterDeploy.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: LicenseRef-DCL-1.0 +// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd +pragma solidity =0.8.25; + +import {Vm} from "forge-std-1.16.2/src/Vm.sol"; +import {TestRainlangParser} from "../../concrete/TestRainlangParser.sol"; +import {TestRainlangStore} from "../../concrete/TestRainlangStore.sol"; +import {TestRainlangInterpreter} from "../../concrete/TestRainlangInterpreter.sol"; +import {TestRainlangExpressionDeployer} from "../../concrete/TestRainlangExpressionDeployer.sol"; +import {TestRainlang} from "../../concrete/TestRainlang.sol"; + +/// @dev Where `LibTestInterpreterDeploy.etchTestRainlang` places the parser. +address constant TEST_PARSER_ADDRESS = address(uint160(uint256(keccak256("rainlang.test.parser")))); +/// @dev Where `LibTestInterpreterDeploy.etchTestRainlang` places the store. +address constant TEST_STORE_ADDRESS = address(uint160(uint256(keccak256("rainlang.test.store")))); +/// @dev Where `LibTestInterpreterDeploy.etchTestRainlang` places the +/// interpreter. +address constant TEST_INTERPRETER_ADDRESS = address(uint160(uint256(keccak256("rainlang.test.interpreter")))); +/// @dev Where `LibTestInterpreterDeploy.etchTestRainlang` places the expression +/// deployer. +address constant TEST_EXPRESSION_DEPLOYER_ADDRESS = + address(uint160(uint256(keccak256("rainlang.test.expression-deployer")))); +/// @dev Where `LibTestInterpreterDeploy.etchTestRainlang` places `TestRainlang`. +address constant TEST_RAINLANG_ADDRESS = address(uint160(uint256(keccak256("rainlang.test.rainlang")))); + +/// Thrown when a test contract's constructor reverts while being etched. +/// @param target The address the contract was being placed at. +error TestDeployFailed(address target); + +/// @title LibTestInterpreterDeploy +/// @notice Places the test concretes, built from this repo's source with no +/// generated tables, at fixed addresses so tests of the library logic run +/// against the current source rather than a deploy record. +library LibTestInterpreterDeploy { + /// Runs `creationCode` as `target` so its constructor's storage writes + /// land there, then leaves the runtime code it returned. + function deployTo(Vm vm, address target, bytes memory creationCode) internal { + vm.etch(target, creationCode); + //slither-disable-next-line low-level-calls + (bool success, bytes memory runtimeCode) = target.call(""); + if (!success) revert TestDeployFailed(target); + vm.etch(target, runtimeCode); + } + + /// Places all five test concretes at their `TEST_*_ADDRESS`. + function etchTestRainlang(Vm vm) internal { + deployTo(vm, TEST_PARSER_ADDRESS, type(TestRainlangParser).creationCode); + deployTo(vm, TEST_STORE_ADDRESS, type(TestRainlangStore).creationCode); + deployTo(vm, TEST_INTERPRETER_ADDRESS, type(TestRainlangInterpreter).creationCode); + deployTo(vm, TEST_EXPRESSION_DEPLOYER_ADDRESS, type(TestRainlangExpressionDeployer).creationCode); + deployTo(vm, TEST_RAINLANG_ADDRESS, type(TestRainlang).creationCode); + } +} diff --git a/test/lib/operand/LibOperand.sol b/test/lib/operand/LibOperand.sol index 73fe32b3e..4758c38ef 100644 --- a/test/lib/operand/LibOperand.sol +++ b/test/lib/operand/LibOperand.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.18; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; library LibOperand { function build(uint8 inputs, uint8 outputs, uint16 operandData) internal pure returns (OperandV2) { diff --git a/test/lib/parse/LibMetaFixture.sol b/test/lib/parse/LibMetaFixture.sol index 709ecd4c1..09610492a 100644 --- a/test/lib/parse/LibMetaFixture.sol +++ b/test/lib/parse/LibMetaFixture.sol @@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.18; -import {AuthoringMetaV2} from "rain-interpreter-interface-0.1.0/src/interface/IParserV2.sol"; +import {AuthoringMetaV2} from "rainlang-interface-0.2.8/src/interface/IParserV2.sol"; import {OperandV2, LibParseOperand} from "../../../src/lib/parse/LibParseOperand.sol"; import {LibParseState, ParseState} from "../../../src/lib/parse/LibParseState.sol"; import {LibConvert} from "rain-lib-typecast-0.1.0/src/LibConvert.sol"; import {LibAllStandardOps} from "../../../src/lib/op/LibAllStandardOps.sol"; -import {LibGenParseMeta} from "rain-interpreter-interface-0.1.0/src/lib/codegen/LibGenParseMeta.sol"; +import {LibGenParseMeta} from "rainlang-interface-0.2.8/src/lib/codegen/LibGenParseMeta.sol"; uint256 constant FIXTURE_OPS_LENGTH = 18; diff --git a/test/lib/string/LibCamelToKebab.t.sol b/test/lib/string/LibCamelToKebab.t.sol index 433c1ceb2..37343245f 100644 --- a/test/lib/string/LibCamelToKebab.t.sol +++ b/test/lib/string/LibCamelToKebab.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibCamelToKebab} from "./LibCamelToKebab.sol"; contract LibCamelToKebabTest is Test { diff --git a/test/lib/typecast/LibTestCast.sol b/test/lib/typecast/LibTestCast.sol index bec9b60f5..d8437e743 100644 --- a/test/lib/typecast/LibTestCast.sol +++ b/test/lib/typecast/LibTestCast.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; /// @title LibTestCast /// @notice Type casts for test code. These are zero-cost reinterpretations diff --git a/test/src/abstract/BaseRainlangExtern.construction.t.sol b/test/src/abstract/BaseRainlangExtern.construction.t.sol index 76ac4850a..4b565981b 100644 --- a/test/src/abstract/BaseRainlangExtern.construction.t.sol +++ b/test/src/abstract/BaseRainlangExtern.construction.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {ExternPointersMismatch, ExternOpcodePointersEmpty} from "../../../src/error/ErrExtern.sol"; import {EmptyPointersExtern} from "./EmptyPointersExtern.sol"; import {MismatchedExternMoreOpcodes} from "./MismatchedExternMoreOpcodes.sol"; diff --git a/test/src/abstract/BaseRainlangExtern.ierc165.t.sol b/test/src/abstract/BaseRainlangExtern.ierc165.t.sol index 921793dc8..dc0c7931a 100644 --- a/test/src/abstract/BaseRainlangExtern.ierc165.t.sol +++ b/test/src/abstract/BaseRainlangExtern.ierc165.t.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; -import {IInterpreterExternV4} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterExternV4.sol"; -import {IIntegrityToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IIntegrityToolingV1.sol"; -import {IOpcodeToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IOpcodeToolingV1.sol"; +import {IInterpreterExternV4} from "rainlang-interface-0.2.8/src/interface/IInterpreterExternV4.sol"; +import {IIntegrityToolingV1} from "rain-sol-codegen-0.1.36/src/interface/IIntegrityToolingV1.sol"; +import {IOpcodeToolingV1} from "rain-sol-codegen-0.1.36/src/interface/IOpcodeToolingV1.sol"; import {ChildRainlangExtern} from "./ChildRainlangExtern.sol"; /// @title BaseRainlangExternTest diff --git a/test/src/abstract/BaseRainlangExtern.integrityOpcodeRange.t.sol b/test/src/abstract/BaseRainlangExtern.integrityOpcodeRange.t.sol index 41fb685b6..66a575424 100644 --- a/test/src/abstract/BaseRainlangExtern.integrityOpcodeRange.t.sol +++ b/test/src/abstract/BaseRainlangExtern.integrityOpcodeRange.t.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {ExternDispatchV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterExternV4.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {ExternDispatchV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterExternV4.sol"; import {ExternOpcodeOutOfRange} from "../../../src/error/ErrExtern.sol"; import {TwoOpExtern} from "./TwoOpExtern.sol"; diff --git a/test/src/abstract/BaseRainlangSubParser.ierc165.t.sol b/test/src/abstract/BaseRainlangSubParser.ierc165.t.sol index 2cfc3f9a3..65bef1589 100644 --- a/test/src/abstract/BaseRainlangSubParser.ierc165.t.sol +++ b/test/src/abstract/BaseRainlangSubParser.ierc165.t.sol @@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; -import {ISubParserV4} from "rain-interpreter-interface-0.1.0/src/interface/ISubParserV4.sol"; +import {ISubParserV4} from "rainlang-interface-0.2.8/src/interface/ISubParserV4.sol"; import {IDescribedByMetaV1} from "rain-metadata-0.1.0/src/interface/IDescribedByMetaV1.sol"; -import {IParserToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IParserToolingV1.sol"; -import {ISubParserToolingV1} from "rain-sol-codegen-0.1.0/src/interface/ISubParserToolingV1.sol"; +import {IParserToolingV1} from "rain-sol-codegen-0.1.36/src/interface/IParserToolingV1.sol"; +import {ISubParserToolingV1} from "rain-sol-codegen-0.1.36/src/interface/ISubParserToolingV1.sol"; import {ChildRainlangSubParser} from "./ChildRainlangSubParser.sol"; /// @title BaseRainlangSubParserTest diff --git a/test/src/abstract/BaseRainlangSubParser.subParseLiteral2.t.sol b/test/src/abstract/BaseRainlangSubParser.subParseLiteral2.t.sol index 4ebc4419d..bf9604f3a 100644 --- a/test/src/abstract/BaseRainlangSubParser.subParseLiteral2.t.sol +++ b/test/src/abstract/BaseRainlangSubParser.subParseLiteral2.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {SubParserIndexOutOfBounds} from "../../../src/abstract/BaseRainlangSubParser.sol"; /// @dev Simple literal parser that returns the dispatch value unchanged. diff --git a/test/src/abstract/BaseRainlangSubParser.subParseWord2.t.sol b/test/src/abstract/BaseRainlangSubParser.subParseWord2.t.sol index 7d0e46d08..bce461e79 100644 --- a/test/src/abstract/BaseRainlangSubParser.subParseWord2.t.sol +++ b/test/src/abstract/BaseRainlangSubParser.subParseWord2.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {SubParserIndexOutOfBounds} from "../../../src/abstract/BaseRainlangSubParser.sol"; import {MismatchedWordSubParser} from "./MismatchedWordSubParser.sol"; import {EmptyWordParsersSubParser} from "./EmptyWordParsersSubParser.sol"; diff --git a/test/src/abstract/EmptyWordParsersSubParser.sol b/test/src/abstract/EmptyWordParsersSubParser.sol index 0f63dcd90..9da2b8dba 100644 --- a/test/src/abstract/EmptyWordParsersSubParser.sol +++ b/test/src/abstract/EmptyWordParsersSubParser.sol @@ -3,10 +3,10 @@ pragma solidity =0.8.25; import {BaseRainlangSubParser, AuthoringMetaV2} from "../../../src/abstract/BaseRainlangSubParser.sol"; -import {LibGenParseMeta} from "rain-interpreter-interface-0.1.0/src/lib/codegen/LibGenParseMeta.sol"; +import {LibGenParseMeta} from "rainlang-interface-0.2.8/src/lib/codegen/LibGenParseMeta.sol"; import {LibParseOperand} from "../../../src/lib/parse/LibParseOperand.sol"; import {LibConvert} from "rain-lib-typecast-0.1.0/src/LibConvert.sol"; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; /// @dev Sub parser with 1 word in meta but zero word parser pointers. /// Looking up the word at index 0 triggers SubParserIndexOutOfBounds(0, 0). diff --git a/test/src/abstract/MismatchedWordSubParser.sol b/test/src/abstract/MismatchedWordSubParser.sol index 4b2f36d79..37dfb6161 100644 --- a/test/src/abstract/MismatchedWordSubParser.sol +++ b/test/src/abstract/MismatchedWordSubParser.sol @@ -3,10 +3,10 @@ pragma solidity =0.8.25; import {BaseRainlangSubParser, AuthoringMetaV2} from "../../../src/abstract/BaseRainlangSubParser.sol"; -import {LibGenParseMeta} from "rain-interpreter-interface-0.1.0/src/lib/codegen/LibGenParseMeta.sol"; +import {LibGenParseMeta} from "rainlang-interface-0.2.8/src/lib/codegen/LibGenParseMeta.sol"; import {LibParseOperand} from "../../../src/lib/parse/LibParseOperand.sol"; import {LibConvert} from "rain-lib-typecast-0.1.0/src/LibConvert.sol"; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; /// @dev Sub parser with 2 words in meta but only 1 word parser pointer. /// Looking up the word at index 1 triggers SubParserIndexOutOfBounds. diff --git a/test/src/concrete/ModifierTestParser.sol b/test/src/concrete/ModifierTestParser.sol index dc178853f..dc4db7247 100644 --- a/test/src/concrete/ModifierTestParser.sol +++ b/test/src/concrete/ModifierTestParser.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {RainlangParser} from "../../../src/concrete/RainlangParser.sol"; +import {TestRainlangParser} from "test/concrete/TestRainlangParser.sol"; /// Exposes the checkParseMemoryOverflow modifier on a trivial function so it /// can be tested in isolation without running the real parser. -contract ModifierTestParser is RainlangParser { +contract ModifierTestParser is TestRainlangParser { /// Sets the free memory pointer to exactly 0x10000. The modifier should /// revert after this function body completes. function overflowMemory() external pure checkParseMemoryOverflow { diff --git a/test/src/concrete/Rainlang.ierc165.t.sol b/test/src/concrete/Rainlang.ierc165.t.sol index ad17856dc..223a9865c 100644 --- a/test/src/concrete/Rainlang.ierc165.t.sol +++ b/test/src/concrete/Rainlang.ierc165.t.sol @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; -import {Rainlang} from "../../../src/concrete/Rainlang.sol"; +import {TestRainlang} from "test/concrete/TestRainlang.sol"; import {IRainlang} from "../../../src/interface/IRainlang.sol"; /// @title RainlangIERC165Test @@ -16,7 +16,7 @@ contract RainlangIERC165Test is Test { vm.assume(badInterfaceId != type(IERC165).interfaceId); vm.assume(badInterfaceId != type(IRainlang).interfaceId); - Rainlang rainlang = new Rainlang(); + TestRainlang rainlang = new TestRainlang(); assertTrue(rainlang.supportsInterface(type(IERC165).interfaceId)); assertTrue(rainlang.supportsInterface(type(IRainlang).interfaceId)); diff --git a/test/src/concrete/Rainlang.t.sol b/test/src/concrete/Rainlang.t.sol deleted file mode 100644 index 5c63a35fc..000000000 --- a/test/src/concrete/Rainlang.t.sol +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: LicenseRef-DCL-1.0 -// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity =0.8.25; - -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {Rainlang} from "../../../src/concrete/Rainlang.sol"; -import {LibInterpreterDeploy} from "../../../src/lib/deploy/LibInterpreterDeploy.sol"; - -contract RainlangTest is Test { - function testExpressionDeployerAddress() external { - Rainlang rainlang = new Rainlang(); - assertEq(rainlang.expressionDeployerAddress(), LibInterpreterDeploy.EXPRESSION_DEPLOYER_DEPLOYED_ADDRESS); - assertTrue(rainlang.expressionDeployerAddress() != address(0)); - } - - function testInterpreterAddress() external { - Rainlang rainlang = new Rainlang(); - assertEq(rainlang.interpreterAddress(), LibInterpreterDeploy.INTERPRETER_DEPLOYED_ADDRESS); - assertTrue(rainlang.interpreterAddress() != address(0)); - } - - function testStoreAddress() external { - Rainlang rainlang = new Rainlang(); - assertEq(rainlang.storeAddress(), LibInterpreterDeploy.STORE_DEPLOYED_ADDRESS); - assertTrue(rainlang.storeAddress() != address(0)); - } - - function testParserAddress() external { - Rainlang rainlang = new Rainlang(); - assertEq(rainlang.parserAddress(), LibInterpreterDeploy.PARSER_DEPLOYED_ADDRESS); - assertTrue(rainlang.parserAddress() != address(0)); - } -} diff --git a/test/src/concrete/RainlangExpressionDeployer.deployCheck.t.sol b/test/src/concrete/RainlangExpressionDeployer.deployCheck.t.sol deleted file mode 100644 index 7b4b408e4..000000000 --- a/test/src/concrete/RainlangExpressionDeployer.deployCheck.t.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: LicenseRef-DCL-1.0 -// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity =0.8.25; - -import {Test} from "forge-std-1.16.1/src/Test.sol"; - -import {RainlangExpressionDeployer} from "../../../src/concrete/RainlangExpressionDeployer.sol"; -import {RainlangStore} from "../../../src/concrete/RainlangStore.sol"; -import {RainlangParser} from "../../../src/concrete/RainlangParser.sol"; -import {RainlangInterpreter} from "../../../src/concrete/RainlangInterpreter.sol"; - -/// @title RainlangExpressionDeployerDeployCheckTest -/// @notice Test that the RainlangExpressionDeployer deploy check reverts if the -/// passed config does not match expectations. -contract RainlangExpressionDeployerDeployCheckTest is Test { - /// Test the deployer can deploy if everything is valid. - function testRainlangExpressionDeployerDeployNoEIP1820() external { - new RainlangExpressionDeployer(); - } -} diff --git a/test/src/concrete/RainlangExpressionDeployer.describedByMetaV1.t.sol b/test/src/concrete/RainlangExpressionDeployer.describedByMetaV1.t.sol deleted file mode 100644 index cc3760f63..000000000 --- a/test/src/concrete/RainlangExpressionDeployer.describedByMetaV1.t.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: LicenseRef-DCL-1.0 -// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity =0.8.25; - -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {RainlangExpressionDeployer} from "../../../src/concrete/RainlangExpressionDeployer.sol"; -import {RainlangInterpreter} from "../../../src/concrete/RainlangInterpreter.sol"; -import {RainlangStore} from "../../../src/concrete/RainlangStore.sol"; -import {RainlangParser} from "../../../src/concrete/RainlangParser.sol"; -string constant EXPRESSION_DEPLOYER_META_PATH = "meta/RainlangExpressionDeployer.rain.meta"; - -contract RainlangExpressionDeployerDescribedByMetaV1Test is Test { - function testRainlangExpressionDeployerDescribedByMetaV1Happy() external { - bytes memory describedByMeta = vm.readFileBinary(EXPRESSION_DEPLOYER_META_PATH); - RainlangExpressionDeployer deployer = new RainlangExpressionDeployer(); - - assertEq(keccak256(describedByMeta), deployer.describedByMetaV1()); - } -} diff --git a/test/src/concrete/RainlangExpressionDeployer.ierc165.t.sol b/test/src/concrete/RainlangExpressionDeployer.ierc165.t.sol index 5fa7b75ba..17203438e 100644 --- a/test/src/concrete/RainlangExpressionDeployer.ierc165.t.sol +++ b/test/src/concrete/RainlangExpressionDeployer.ierc165.t.sol @@ -2,14 +2,14 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; -import {RainlangExpressionDeployer} from "../../../src/concrete/RainlangExpressionDeployer.sol"; -import {IParserPragmaV1} from "rain-interpreter-interface-0.1.0/src/interface/IParserPragmaV1.sol"; -import {IParserV2} from "rain-interpreter-interface-0.1.0/src/interface/IParserV2.sol"; +import {TestRainlangExpressionDeployer} from "test/concrete/TestRainlangExpressionDeployer.sol"; +import {IParserPragmaV1} from "rainlang-interface-0.2.8/src/interface/IParserPragmaV1.sol"; +import {IParserV2} from "rainlang-interface-0.2.8/src/interface/IParserV2.sol"; import {IDescribedByMetaV1} from "rain-metadata-0.1.0/src/interface/IDescribedByMetaV1.sol"; -import {IIntegrityToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IIntegrityToolingV1.sol"; +import {IIntegrityToolingV1} from "rain-sol-codegen-0.1.36/src/interface/IIntegrityToolingV1.sol"; contract RainlangExpressionDeployerIERC165Test is Test { /// Test that ERC165 is implemented for all interfaces. @@ -20,7 +20,7 @@ contract RainlangExpressionDeployerIERC165Test is Test { vm.assume(badInterfaceId != type(IParserPragmaV1).interfaceId); vm.assume(badInterfaceId != type(IIntegrityToolingV1).interfaceId); - RainlangExpressionDeployer deployer = new RainlangExpressionDeployer(); + TestRainlangExpressionDeployer deployer = new TestRainlangExpressionDeployer(); assertTrue(deployer.supportsInterface(type(IERC165).interfaceId)); assertTrue(deployer.supportsInterface(type(IDescribedByMetaV1).interfaceId)); assertTrue(deployer.supportsInterface(type(IParserV2).interfaceId)); diff --git a/test/src/concrete/RainlangExpressionDeployer.meta.t.sol b/test/src/concrete/RainlangExpressionDeployer.meta.t.sol deleted file mode 100644 index 4509b3aba..000000000 --- a/test/src/concrete/RainlangExpressionDeployer.meta.t.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: LicenseRef-DCL-1.0 -// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity =0.8.25; - -import {RainlangExpressionDeployerDeploymentTest} from "test/abstract/RainlangExpressionDeployerDeploymentTest.sol"; -import {DESCRIBED_BY_META_HASH} from "../../../src/concrete/RainlangExpressionDeployer.sol"; - -/// @title RainlangExpressionDeployerMetaTest -/// @notice Tests that the RainlangExpressionDeployer meta is correct. Also -/// tests basic functionality of the `IParserV1View` interface implementation, except -/// parsing which is tested more extensively elsewhere. -contract RainlangExpressionDeployerMetaTest is RainlangExpressionDeployerDeploymentTest { - /// Test that the expected construction meta hash can be read from the - /// deployer. - function testRainlangExpressionDeployerExpectedConstructionMetaHash() external view { - bytes32 actualConstructionMetaHash = I_DEPLOYER.describedByMetaV1(); - assertEq(actualConstructionMetaHash, DESCRIBED_BY_META_HASH); - } -} diff --git a/test/src/concrete/RainlangExpressionDeployer.parse2.t.sol b/test/src/concrete/RainlangExpressionDeployer.parse2.t.sol index b70a5de03..eff0311f7 100644 --- a/test/src/concrete/RainlangExpressionDeployer.parse2.t.sol +++ b/test/src/concrete/RainlangExpressionDeployer.parse2.t.sol @@ -4,7 +4,7 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {MissingFinalSemi} from "../../../src/error/ErrParse.sol"; -import {BadOpInputsLength} from "rain-interpreter-interface-0.1.0/src/error/ErrIntegrity.sol"; +import {BadOpInputsLength} from "rainlang-interface-0.2.8/src/error/ErrIntegrity.sol"; import {LibParseError} from "../../../src/lib/parse/LibParseError.sol"; contract RainlangExpressionDeployerParse2Test is OpTest { diff --git a/test/src/concrete/RainlangExpressionDeployer.parsePragma1.t.sol b/test/src/concrete/RainlangExpressionDeployer.parsePragma1.t.sol index 01da5fd65..1417dc2ed 100644 --- a/test/src/concrete/RainlangExpressionDeployer.parsePragma1.t.sol +++ b/test/src/concrete/RainlangExpressionDeployer.parsePragma1.t.sol @@ -3,7 +3,7 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; -import {PragmaV1} from "rain-interpreter-interface-0.1.0/src/interface/IParserPragmaV1.sol"; +import {PragmaV1} from "rainlang-interface-0.2.8/src/interface/IParserPragmaV1.sol"; import {NoWhitespaceAfterUsingWordsFrom} from "../../../src/error/ErrParse.sol"; import {LibParseError} from "../../../src/lib/parse/LibParseError.sol"; diff --git a/test/src/concrete/RainlangExpressionDeployer.pointers.t.sol b/test/src/concrete/RainlangExpressionDeployer.pointers.t.sol deleted file mode 100644 index 6620b1f78..000000000 --- a/test/src/concrete/RainlangExpressionDeployer.pointers.t.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: LicenseRef-DCL-1.0 -// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity =0.8.25; - -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import { - RainlangExpressionDeployer, - INTEGRITY_FUNCTION_POINTERS -} from "../../../src/concrete/RainlangExpressionDeployer.sol"; - -contract RainlangExpressionDeployerPointersTest is Test { - function testIntegrityFunctionPointers() external { - RainlangExpressionDeployer deployer = new RainlangExpressionDeployer(); - bytes memory expected = deployer.buildIntegrityFunctionPointers(); - bytes memory actual = INTEGRITY_FUNCTION_POINTERS; - assertEq(actual, expected); - } -} diff --git a/test/src/concrete/RainlangInterpreter.eval.nonZeroSourceIndex.t.sol b/test/src/concrete/RainlangInterpreter.eval.nonZeroSourceIndex.t.sol index 4c98a30ca..e3ea2d212 100644 --- a/test/src/concrete/RainlangInterpreter.eval.nonZeroSourceIndex.t.sol +++ b/test/src/concrete/RainlangInterpreter.eval.nonZeroSourceIndex.t.sol @@ -3,9 +3,9 @@ pragma solidity =0.8.25; import {RainlangExpressionDeployerDeploymentTest} from "test/abstract/RainlangExpressionDeployerDeploymentTest.sol"; -import {StateNamespace} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; -import {EvalV4, SourceIndexV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {LibNamespace} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; +import {StateNamespace} from "rainlang-interface-0.2.8/src/interface/IInterpreterStoreV3.sol"; +import {EvalV4, SourceIndexV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {LibNamespace} from "rainlang-interface-0.2.8/src/lib/ns/LibNamespace.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title RainlangInterpreterEvalNonZeroSourceIndexTest diff --git a/test/src/concrete/RainlangInterpreter.eval.t.sol b/test/src/concrete/RainlangInterpreter.eval.t.sol index 0decb5b9a..f1753b8a5 100644 --- a/test/src/concrete/RainlangInterpreter.eval.t.sol +++ b/test/src/concrete/RainlangInterpreter.eval.t.sol @@ -3,9 +3,9 @@ pragma solidity =0.8.25; import {RainlangExpressionDeployerDeploymentTest} from "test/abstract/RainlangExpressionDeployerDeploymentTest.sol"; -import {StateNamespace} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; -import {EvalV4, SourceIndexV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {LibNamespace} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; +import {StateNamespace} from "rainlang-interface-0.2.8/src/interface/IInterpreterStoreV3.sol"; +import {EvalV4, SourceIndexV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {LibNamespace} from "rainlang-interface-0.2.8/src/lib/ns/LibNamespace.sol"; import {InputsLengthMismatch} from "../../../src/error/ErrEval.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/test/src/concrete/RainlangInterpreter.extrospect.t.sol b/test/src/concrete/RainlangInterpreter.extrospect.t.sol deleted file mode 100644 index 89c3dde06..000000000 --- a/test/src/concrete/RainlangInterpreter.extrospect.t.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: LicenseRef-DCL-1.0 -// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity =0.8.25; - -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {RainlangInterpreter} from "../../../src/concrete/RainlangInterpreter.sol"; -import {LibExtrospectBytecode} from "rain-extrospection-0.1.1/src/lib/LibExtrospectBytecode.sol"; -import {INTERPRETER_DISALLOWED_OPS} from "rain-extrospection-0.1.1/src/lib/EVMOpcodes.sol"; - -contract RainlangInterpreterExtrospectTest is Test { - /// The interpreter bytecode MUST NOT contain any reachable state-changing - /// EVM opcodes. This ensures eval cannot mutate state even if the caller - /// uses CALL instead of STATICCALL. - function testInterpreterNoDisallowedOpcodes() external { - RainlangInterpreter interpreter = new RainlangInterpreter(); - bytes memory bytecode = address(interpreter).code; - uint256 reachable = LibExtrospectBytecode.scanEVMOpcodesReachableInBytecode(bytecode); - assertEq(reachable & INTERPRETER_DISALLOWED_OPS, 0, "Interpreter has disallowed reachable opcodes"); - } -} diff --git a/test/src/concrete/RainlangInterpreter.ierc165.t.sol b/test/src/concrete/RainlangInterpreter.ierc165.t.sol index 8e4090cc6..fea069994 100644 --- a/test/src/concrete/RainlangInterpreter.ierc165.t.sol +++ b/test/src/concrete/RainlangInterpreter.ierc165.t.sol @@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; -import {RainlangInterpreter} from "../../../src/concrete/RainlangInterpreter.sol"; -import {IInterpreterV4} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {IOpcodeToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IOpcodeToolingV1.sol"; +import {TestRainlangInterpreter} from "test/concrete/TestRainlangInterpreter.sol"; +import {IInterpreterV4} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {IOpcodeToolingV1} from "rain-sol-codegen-0.1.36/src/interface/IOpcodeToolingV1.sol"; contract RainlangInterpreterIERC165Test is Test { /// Test that ERC165 is implemented for all interfaces. @@ -16,7 +16,7 @@ contract RainlangInterpreterIERC165Test is Test { vm.assume(badInterfaceId != type(IInterpreterV4).interfaceId); vm.assume(badInterfaceId != type(IOpcodeToolingV1).interfaceId); - RainlangInterpreter interpreter = new RainlangInterpreter(); + TestRainlangInterpreter interpreter = new TestRainlangInterpreter(); assertTrue(interpreter.supportsInterface(type(IERC165).interfaceId)); assertTrue(interpreter.supportsInterface(type(IInterpreterV4).interfaceId)); assertTrue(interpreter.supportsInterface(type(IOpcodeToolingV1).interfaceId)); diff --git a/test/src/concrete/RainlangInterpreter.pointers.t.sol b/test/src/concrete/RainlangInterpreter.pointers.t.sol deleted file mode 100644 index 095cdb4c7..000000000 --- a/test/src/concrete/RainlangInterpreter.pointers.t.sol +++ /dev/null @@ -1,15 +0,0 @@ -// SPDX-License-Identifier: LicenseRef-DCL-1.0 -// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity =0.8.25; - -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {RainlangInterpreter, OPCODE_FUNCTION_POINTERS} from "../../../src/concrete/RainlangInterpreter.sol"; - -contract RainlangInterpreterPointersTest is Test { - function testOpcodeFunctionPointers() external { - RainlangInterpreter interpreter = new RainlangInterpreter(); - bytes memory expected = interpreter.buildOpcodeFunctionPointers(); - bytes memory actual = OPCODE_FUNCTION_POINTERS; - assertEq(actual, expected); - } -} diff --git a/test/src/concrete/RainlangInterpreter.stateOverlay.t.sol b/test/src/concrete/RainlangInterpreter.stateOverlay.t.sol index 9cf91d2f0..7571cca02 100644 --- a/test/src/concrete/RainlangInterpreter.stateOverlay.t.sol +++ b/test/src/concrete/RainlangInterpreter.stateOverlay.t.sol @@ -3,9 +3,9 @@ pragma solidity =0.8.25; import {RainlangExpressionDeployerDeploymentTest} from "test/abstract/RainlangExpressionDeployerDeploymentTest.sol"; -import {StateNamespace} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; -import {EvalV4, SourceIndexV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {LibNamespace} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; +import {StateNamespace} from "rainlang-interface-0.2.8/src/interface/IInterpreterStoreV3.sol"; +import {EvalV4, SourceIndexV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {LibNamespace} from "rainlang-interface-0.2.8/src/lib/ns/LibNamespace.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; import {OddSetLength} from "../../../src/error/ErrStore.sol"; diff --git a/test/src/concrete/RainlangInterpreter.t.sol b/test/src/concrete/RainlangInterpreter.t.sol index b51565faa..63d5d471c 100644 --- a/test/src/concrete/RainlangInterpreter.t.sol +++ b/test/src/concrete/RainlangInterpreter.t.sol @@ -2,16 +2,17 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; -import {OPCODE_FUNCTION_POINTERS} from "../../../src/concrete/RainlangInterpreter.sol"; +import {LibAllStandardOps} from "../../../src/lib/op/LibAllStandardOps.sol"; /// @title RainlangInterpreterTest -/// @notice Test suite for RainlangInterpreter. +/// @notice Test suite for the interpreter's opcode function pointer table. contract RainlangInterpreterTest is Test { /// The function pointers of the interpreter must be even non-zero length. function testRainlangInterpreterOddFunctionPointersLength() external pure { - assertTrue(OPCODE_FUNCTION_POINTERS.length % 2 == 0); - assertTrue(OPCODE_FUNCTION_POINTERS.length > 0); + bytes memory pointers = LibAllStandardOps.opcodeFunctionPointers(); + assertTrue(pointers.length % 2 == 0); + assertTrue(pointers.length > 0); } } diff --git a/test/src/concrete/RainlangInterpreter.zeroFunctionPointers.t.sol b/test/src/concrete/RainlangInterpreter.zeroFunctionPointers.t.sol index 5f8b838bd..498f7d078 100644 --- a/test/src/concrete/RainlangInterpreter.zeroFunctionPointers.t.sol +++ b/test/src/concrete/RainlangInterpreter.zeroFunctionPointers.t.sol @@ -2,21 +2,21 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; -import {RainlangInterpreter} from "../../../src/concrete/RainlangInterpreter.sol"; +import {TestRainlangInterpreter} from "test/concrete/TestRainlangInterpreter.sol"; import {ZeroFunctionPointers} from "../../../src/error/ErrEval.sol"; import {ZeroFPRainlangInterpreter} from "./ZeroFPRainlangInterpreter.sol"; contract RainlangInterpreterZeroFunctionPointersTest is Test { - /// Deploying a RainlangInterpreter with empty function pointers must revert. + /// Deploying a TestRainlangInterpreter with empty function pointers must revert. function testZeroFunctionPointersReverts() external { vm.expectRevert(abi.encodeWithSelector(ZeroFunctionPointers.selector)); new ZeroFPRainlangInterpreter(); } - /// The standard RainlangInterpreter must deploy successfully. + /// The standard TestRainlangInterpreter must deploy successfully. function testStandardRainlangInterpreterDeploys() external { - new RainlangInterpreter(); + new TestRainlangInterpreter(); } } diff --git a/test/src/concrete/RainlangParser.ierc165.t.sol b/test/src/concrete/RainlangParser.ierc165.t.sol index 45a42a12e..ff9fa74b2 100644 --- a/test/src/concrete/RainlangParser.ierc165.t.sol +++ b/test/src/concrete/RainlangParser.ierc165.t.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; -import {RainlangParser} from "../../../src/concrete/RainlangParser.sol"; -import {IParserToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IParserToolingV1.sol"; +import {TestRainlangParser} from "test/concrete/TestRainlangParser.sol"; +import {IParserToolingV1} from "rain-sol-codegen-0.1.36/src/interface/IParserToolingV1.sol"; contract RainlangParserIERC165Test is Test { /// Test that ERC165 is implemented for all interfaces. @@ -14,7 +14,7 @@ contract RainlangParserIERC165Test is Test { vm.assume(badInterfaceId != type(IERC165).interfaceId); vm.assume(badInterfaceId != type(IParserToolingV1).interfaceId); - RainlangParser parser = new RainlangParser(); + TestRainlangParser parser = new TestRainlangParser(); assertTrue(parser.supportsInterface(type(IERC165).interfaceId)); assertTrue(parser.supportsInterface(type(IParserToolingV1).interfaceId)); diff --git a/test/src/concrete/RainlangParser.parseMemoryOverflow.t.sol b/test/src/concrete/RainlangParser.parseMemoryOverflow.t.sol index a41efb055..e7d218e80 100644 --- a/test/src/concrete/RainlangParser.parseMemoryOverflow.t.sol +++ b/test/src/concrete/RainlangParser.parseMemoryOverflow.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {ParseMemoryOverflow} from "../../../src/error/ErrParse.sol"; import {ModifierTestParser} from "./ModifierTestParser.sol"; diff --git a/test/src/concrete/RainlangParser.parsePragmaEmpty.t.sol b/test/src/concrete/RainlangParser.parsePragmaEmpty.t.sol index 4063ce9d7..cf0c3810f 100644 --- a/test/src/concrete/RainlangParser.parsePragmaEmpty.t.sol +++ b/test/src/concrete/RainlangParser.parsePragmaEmpty.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {RainlangParser} from "../../../src/concrete/RainlangParser.sol"; -import {PragmaV1} from "rain-interpreter-interface-0.1.0/src/interface/IParserPragmaV1.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {TestRainlangParser} from "test/concrete/TestRainlangParser.sol"; +import {PragmaV1} from "rainlang-interface-0.2.8/src/interface/IParserPragmaV1.sol"; /// @title RainlangParserParsePragmaEmptyInputTest /// @notice Test that `parsePragma1` handles empty input correctly. @@ -12,7 +12,7 @@ contract RainlangParserParsePragmaEmptyInputTest is Test { /// @notice parsePragma1 with empty bytes should return a PragmaV1 with an /// empty usingWordsFrom array. function testParsePragma1EmptyInput() external { - RainlangParser parser = new RainlangParser(); + TestRainlangParser parser = new TestRainlangParser(); PragmaV1 memory pragma_ = parser.parsePragma1(bytes("")); assertEq(pragma_.usingWordsFrom.length, 0, "empty input should produce zero sub-parsers"); } @@ -20,7 +20,7 @@ contract RainlangParserParsePragmaEmptyInputTest is Test { /// @notice parsePragma1 with a single null byte should also not revert and /// should produce zero sub-parsers. function testParsePragma1SingleNullByte() external { - RainlangParser parser = new RainlangParser(); + TestRainlangParser parser = new TestRainlangParser(); PragmaV1 memory pragma_ = parser.parsePragma1(bytes(hex"00")); assertEq(pragma_.usingWordsFrom.length, 0, "null byte should produce zero sub-parsers"); } diff --git a/test/src/concrete/RainlangParser.parserPragma.t.sol b/test/src/concrete/RainlangParser.parserPragma.t.sol index 85fa82c1d..0ff27b007 100644 --- a/test/src/concrete/RainlangParser.parserPragma.t.sol +++ b/test/src/concrete/RainlangParser.parserPragma.t.sol @@ -2,15 +2,15 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {RainlangParser} from "../../../src/concrete/RainlangParser.sol"; -import {PragmaV1} from "rain-interpreter-interface-0.1.0/src/interface/IParserPragmaV1.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {TestRainlangParser} from "test/concrete/TestRainlangParser.sol"; +import {PragmaV1} from "rainlang-interface-0.2.8/src/interface/IParserPragmaV1.sol"; import {NoWhitespaceAfterUsingWordsFrom} from "../../../src/error/ErrParse.sol"; import {LibParseError} from "../../../src/lib/parse/LibParseError.sol"; contract RainlangParserParserPragma is Test { function checkPragma(bytes memory source, address[] memory expectedAddresses) internal { - RainlangParser parser = new RainlangParser(); + TestRainlangParser parser = new TestRainlangParser(); PragmaV1 memory pragmaV2 = parser.parsePragma1(source); assert(pragmaV2.usingWordsFrom.length == expectedAddresses.length); for (uint256 i = 0; i < expectedAddresses.length; i++) { @@ -44,7 +44,7 @@ contract RainlangParserParserPragma is Test { /// Input ending exactly at the pragma keyword with no trailing whitespace /// must revert. function testParsePragmaNoWhitespaceAfterKeyword() external { - RainlangParser parser = new RainlangParser(); + TestRainlangParser parser = new TestRainlangParser(); vm.expectRevert( abi.encodeWithSelector(NoWhitespaceAfterUsingWordsFrom.selector, LibParseError.tagErrorOffset(16)) ); diff --git a/test/src/concrete/RainlangParser.pointers.t.sol b/test/src/concrete/RainlangParser.pointers.t.sol deleted file mode 100644 index 6e1476405..000000000 --- a/test/src/concrete/RainlangParser.pointers.t.sol +++ /dev/null @@ -1,38 +0,0 @@ -// SPDX-License-Identifier: LicenseRef-DCL-1.0 -// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity =0.8.25; - -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import { - RainlangParser, - OPERAND_HANDLER_FUNCTION_POINTERS, - LITERAL_PARSER_FUNCTION_POINTERS, - PARSE_META, - PARSE_META_BUILD_DEPTH -} from "../../../src/concrete/RainlangParser.sol"; -import {LibAllStandardOps, AuthoringMetaV2} from "../../../src/lib/op/LibAllStandardOps.sol"; -import {LibGenParseMeta} from "rain-interpreter-interface-0.1.0/src/lib/codegen/LibGenParseMeta.sol"; - -contract RainlangParserPointersTest is Test { - function testOperandHandlerFunctionPointers() external { - RainlangParser parser = new RainlangParser(); - bytes memory expected = parser.buildOperandHandlerFunctionPointers(); - bytes memory actual = OPERAND_HANDLER_FUNCTION_POINTERS; - assertEq(actual, expected); - } - - function testLiteralParserFunctionPointers() external { - RainlangParser parser = new RainlangParser(); - bytes memory expected = parser.buildLiteralParserFunctionPointers(); - bytes memory actual = LITERAL_PARSER_FUNCTION_POINTERS; - assertEq(actual, expected); - } - - function testParserParseMeta() external pure { - bytes memory authoringMetaBytes = LibAllStandardOps.authoringMetaV2(); - AuthoringMetaV2[] memory authoringMeta = abi.decode(authoringMetaBytes, (AuthoringMetaV2[])); - bytes memory expected = LibGenParseMeta.buildParseMetaV2(authoringMeta, PARSE_META_BUILD_DEPTH); - bytes memory actual = PARSE_META; - assertEq(actual, expected); - } -} diff --git a/test/src/concrete/RainlangParser.unsafeParse.t.sol b/test/src/concrete/RainlangParser.unsafeParse.t.sol index 8e8311160..212360abd 100644 --- a/test/src/concrete/RainlangParser.unsafeParse.t.sol +++ b/test/src/concrete/RainlangParser.unsafeParse.t.sol @@ -3,7 +3,7 @@ pragma solidity =0.8.25; import {RainlangExpressionDeployerDeploymentTest} from "test/abstract/RainlangExpressionDeployerDeploymentTest.sol"; -import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rainlang-interface-0.2.8/src/lib/bytecode/LibBytecode.sol"; contract RainlangParserUnsafeParseTest is RainlangExpressionDeployerDeploymentTest { /// Parsing a simple hex literal expression returns correct bytecode diff --git a/test/src/concrete/RainlangReferenceExtern.bytecode.t.sol b/test/src/concrete/RainlangReferenceExtern.bytecode.t.sol new file mode 100644 index 000000000..700e51a67 --- /dev/null +++ b/test/src/concrete/RainlangReferenceExtern.bytecode.t.sol @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: LicenseRef-DCL-1.0 +// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd +pragma solidity =0.8.25; + +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {RainlangReferenceExtern} from "../../../src/concrete/extern/RainlangReferenceExtern.sol"; +import {LibExtrospectBytecode} from "rain-extrospection-0.1.14/src/lib/LibExtrospectBytecode.sol"; +import {LibExtrospectMetamorphic} from "rain-extrospection-0.1.14/src/lib/LibExtrospectMetamorphic.sol"; +import { + BYTECODE_HASH as REFERENCE_EXTERN_BYTECODE_HASH +} from "../../../src/generated/RainlangReferenceExternPointers.sol"; + +/// @title RainlangReferenceExternBytecodeTest +/// @notice The bytecode properties of the reference extern that the generated +/// pointers file is keyed to. Nothing here is a deploy record: the extern is a +/// reference implementation, never a deploy candidate, so its generated +/// `BYTECODE_HASH` is the only thing that makes its pointers file +/// stale-detectable. +contract RainlangReferenceExternBytecodeTest is Test { + /// ReferenceExtern bytecode MUST NOT contain Solidity CBOR metadata. + function testNoCborMetadataReferenceExtern() external { + RainlangReferenceExtern extern = new RainlangReferenceExtern(); + assertFalse( + LibExtrospectBytecode.tryTrimSolidityCBORMetadata(address(extern).code), + "ReferenceExtern bytecode contains CBOR metadata" + ); + } + + /// ReferenceExtern bytecode MUST NOT contain reachable metamorphic risk + /// opcodes. + function testNotMetamorphicReferenceExtern() external { + RainlangReferenceExtern extern = new RainlangReferenceExtern(); + LibExtrospectMetamorphic.checkNotMetamorphic(address(extern).code); + } + + /// The reference extern's generated bytecode hash MUST be the hash of the + /// bytecode current source produces. + function testReferenceExternBytecodeHash() external { + RainlangReferenceExtern extern = new RainlangReferenceExtern(); + assertEq(keccak256(address(extern).code), REFERENCE_EXTERN_BYTECODE_HASH); + } +} diff --git a/test/src/concrete/RainlangReferenceExtern.contextRainlen.t.sol b/test/src/concrete/RainlangReferenceExtern.contextRainlen.t.sol index 0c4dd6d11..8a4b1053d 100644 --- a/test/src/concrete/RainlangReferenceExtern.contextRainlen.t.sol +++ b/test/src/concrete/RainlangReferenceExtern.contextRainlen.t.sol @@ -5,8 +5,8 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; import {RainlangReferenceExtern, StackItem} from "../../../src/concrete/extern/RainlangReferenceExtern.sol"; -import {SignedContextV1} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterCallerV4.sol"; -import {LibContext} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; +import {SignedContextV1} from "rainlang-interface-0.2.8/src/interface/IInterpreterCallerV4.sol"; +import {LibContext} from "rainlang-interface-0.2.8/src/lib/caller/LibContext.sol"; contract RainlangReferenceExternContextRainlenTest is OpTest { using Strings for address; diff --git a/test/src/concrete/RainlangReferenceExtern.describedByMetaV1.t.sol b/test/src/concrete/RainlangReferenceExtern.describedByMetaV1.t.sol index 3370cb547..3489674e0 100644 --- a/test/src/concrete/RainlangReferenceExtern.describedByMetaV1.t.sol +++ b/test/src/concrete/RainlangReferenceExtern.describedByMetaV1.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {RainlangReferenceExtern} from "../../../src/concrete/extern/RainlangReferenceExtern.sol"; contract RainlangReferenceExternDescribedByMetaV1 is Test { diff --git a/test/src/concrete/RainlangReferenceExtern.ierc165.t.sol b/test/src/concrete/RainlangReferenceExtern.ierc165.t.sol index d36412942..f79ba3a00 100644 --- a/test/src/concrete/RainlangReferenceExtern.ierc165.t.sol +++ b/test/src/concrete/RainlangReferenceExtern.ierc165.t.sol @@ -2,17 +2,17 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; -import {IInterpreterExternV4} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterExternV4.sol"; -import {ISubParserV4} from "rain-interpreter-interface-0.1.0/src/interface/ISubParserV4.sol"; +import {IInterpreterExternV4} from "rainlang-interface-0.2.8/src/interface/IInterpreterExternV4.sol"; +import {ISubParserV4} from "rainlang-interface-0.2.8/src/interface/ISubParserV4.sol"; import {RainlangReferenceExtern} from "../../../src/concrete/extern/RainlangReferenceExtern.sol"; import {IDescribedByMetaV1} from "rain-metadata-0.1.0/src/interface/IDescribedByMetaV1.sol"; -import {ISubParserToolingV1} from "rain-sol-codegen-0.1.0/src/interface/ISubParserToolingV1.sol"; -import {IParserToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IParserToolingV1.sol"; -import {IIntegrityToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IIntegrityToolingV1.sol"; -import {IOpcodeToolingV1} from "rain-sol-codegen-0.1.0/src/interface/IOpcodeToolingV1.sol"; +import {ISubParserToolingV1} from "rain-sol-codegen-0.1.36/src/interface/ISubParserToolingV1.sol"; +import {IParserToolingV1} from "rain-sol-codegen-0.1.36/src/interface/IParserToolingV1.sol"; +import {IIntegrityToolingV1} from "rain-sol-codegen-0.1.36/src/interface/IIntegrityToolingV1.sol"; +import {IOpcodeToolingV1} from "rain-sol-codegen-0.1.36/src/interface/IOpcodeToolingV1.sol"; contract RainlangReferenceExternIERC165Test is Test { /// Test that ERC165 is implemented for the reference extern contract. diff --git a/test/src/concrete/RainlangReferenceExtern.intInc.t.sol b/test/src/concrete/RainlangReferenceExtern.intInc.t.sol index 7deab654f..13cf7a736 100644 --- a/test/src/concrete/RainlangReferenceExtern.intInc.t.sol +++ b/test/src/concrete/RainlangReferenceExtern.intInc.t.sol @@ -13,8 +13,8 @@ import { EncodedExternDispatchV2, IInterpreterExternV4, StackItem -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterExternV4.sol"; -import {OperandV2, OPCODE_EXTERN} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterExternV4.sol"; +import {OperandV2, OPCODE_EXTERN} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibExtern} from "../../../src/lib/extern/LibExtern.sol"; import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/test/src/concrete/RainlangReferenceExtern.pointers.t.sol b/test/src/concrete/RainlangReferenceExtern.pointers.t.sol index 194d7073f..3a261b80e 100644 --- a/test/src/concrete/RainlangReferenceExtern.pointers.t.sol +++ b/test/src/concrete/RainlangReferenceExtern.pointers.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import { RainlangReferenceExtern, OPCODE_FUNCTION_POINTERS, @@ -14,7 +14,7 @@ import { LITERAL_PARSER_FUNCTION_POINTERS, OPERAND_HANDLER_FUNCTION_POINTERS } from "../../../src/concrete/extern/RainlangReferenceExtern.sol"; -import {LibGenParseMeta} from "rain-interpreter-interface-0.1.0/src/lib/codegen/LibGenParseMeta.sol"; +import {LibGenParseMeta} from "rainlang-interface-0.2.8/src/lib/codegen/LibGenParseMeta.sol"; contract RainlangReferenceExternPointersTest is Test { function testOpcodeFunctionPointers() external { diff --git a/test/src/concrete/RainlangReferenceExtern.subParserIndexOutOfBounds.t.sol b/test/src/concrete/RainlangReferenceExtern.subParserIndexOutOfBounds.t.sol index f524febc0..16556d99b 100644 --- a/test/src/concrete/RainlangReferenceExtern.subParserIndexOutOfBounds.t.sol +++ b/test/src/concrete/RainlangReferenceExtern.subParserIndexOutOfBounds.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {SubParserIndexOutOfBounds} from "../../../src/error/ErrSubParse.sol"; import {MockExternBadLiteralIndex} from "./MockExternBadLiteralIndex.sol"; diff --git a/test/src/concrete/RainlangStore.getUninitialized.t.sol b/test/src/concrete/RainlangStore.getUninitialized.t.sol index 89e5ae0b1..95943593f 100644 --- a/test/src/concrete/RainlangStore.getUninitialized.t.sol +++ b/test/src/concrete/RainlangStore.getUninitialized.t.sol @@ -2,13 +2,13 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {RainlangStore} from "../../../src/concrete/RainlangStore.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {TestRainlangStore} from "test/concrete/TestRainlangStore.sol"; import { LibNamespace, FullyQualifiedNamespace, StateNamespace -} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; +} from "rainlang-interface-0.2.8/src/lib/ns/LibNamespace.sol"; /// @title RainlangStoreGetUninitializedTest /// @notice Test that `get()` returns `bytes32(0)` for a key that has @@ -18,7 +18,7 @@ contract RainlangStoreGetUninitializedTest is Test { /// @notice get() on a key that was never set must return bytes32(0). function testGetUninitializedKey() external { - RainlangStore store = new RainlangStore(); + TestRainlangStore store = new TestRainlangStore(); StateNamespace namespace = StateNamespace.wrap(1); FullyQualifiedNamespace fqn = namespace.qualifyNamespace(address(this)); @@ -29,7 +29,7 @@ contract RainlangStoreGetUninitializedTest is Test { /// @notice Fuzz: get() on any never-set namespace+key must return 0. function testGetUninitializedKeyFuzz(StateNamespace namespace, bytes32 key) external { - RainlangStore store = new RainlangStore(); + TestRainlangStore store = new TestRainlangStore(); FullyQualifiedNamespace fqn = namespace.qualifyNamespace(address(this)); bytes32 value = store.get(fqn, key); @@ -39,7 +39,7 @@ contract RainlangStoreGetUninitializedTest is Test { /// @notice After setting a different key, the original uninitialized key /// must still return 0. function testGetUninitializedAfterSetDifferentKey() external { - RainlangStore store = new RainlangStore(); + TestRainlangStore store = new TestRainlangStore(); StateNamespace namespace = StateNamespace.wrap(1); FullyQualifiedNamespace fqn = namespace.qualifyNamespace(address(this)); diff --git a/test/src/concrete/RainlangStore.ierc165.t.sol b/test/src/concrete/RainlangStore.ierc165.t.sol index 1bc5dfde6..f04931093 100644 --- a/test/src/concrete/RainlangStore.ierc165.t.sol +++ b/test/src/concrete/RainlangStore.ierc165.t.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; -import {RainlangStore} from "../../../src/concrete/RainlangStore.sol"; -import {IInterpreterStoreV3} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; +import {TestRainlangStore} from "test/concrete/TestRainlangStore.sol"; +import {IInterpreterStoreV3} from "rainlang-interface-0.2.8/src/interface/IInterpreterStoreV3.sol"; contract RainlangStoreIERC165Test is Test { /// Store should introspect support for `IERC165` and `IInterpreterStoreV3`. @@ -15,7 +15,7 @@ contract RainlangStoreIERC165Test is Test { vm.assume(badInterfaceId != type(IERC165).interfaceId); vm.assume(badInterfaceId != type(IInterpreterStoreV3).interfaceId); - RainlangStore store = new RainlangStore(); + TestRainlangStore store = new TestRainlangStore(); assertTrue(store.supportsInterface(type(IERC165).interfaceId)); assertTrue(store.supportsInterface(type(IInterpreterStoreV3).interfaceId)); diff --git a/test/src/concrete/RainlangStore.namespaceIsolation.t.sol b/test/src/concrete/RainlangStore.namespaceIsolation.t.sol index c55016a61..2358fa5ba 100644 --- a/test/src/concrete/RainlangStore.namespaceIsolation.t.sol +++ b/test/src/concrete/RainlangStore.namespaceIsolation.t.sol @@ -2,13 +2,13 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {RainlangStore} from "../../../src/concrete/RainlangStore.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {TestRainlangStore} from "test/concrete/TestRainlangStore.sol"; import { LibNamespace, StateNamespace, FullyQualifiedNamespace -} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; +} from "rainlang-interface-0.2.8/src/lib/ns/LibNamespace.sol"; contract RainlangStoreNamespaceIsolationTest is Test { using LibNamespace for StateNamespace; @@ -28,7 +28,7 @@ contract RainlangStoreNamespaceIsolationTest is Test { vm.assume(value != bytes32(0)); StateNamespace ns = StateNamespace.wrap(nsSeed); - RainlangStore store = new RainlangStore(); + TestRainlangStore store = new TestRainlangStore(); // Set from address A. bytes32[] memory kvs = new bytes32[](2); @@ -61,7 +61,7 @@ contract RainlangStoreNamespaceIsolationTest is Test { StateNamespace nsA = StateNamespace.wrap(nsSeedA); StateNamespace nsB = StateNamespace.wrap(nsSeedB); - RainlangStore store = new RainlangStore(); + TestRainlangStore store = new TestRainlangStore(); bytes32[] memory kvs = new bytes32[](2); kvs[0] = key; @@ -97,7 +97,7 @@ contract RainlangStoreNamespaceIsolationTest is Test { vm.assume(valueA != valueB); StateNamespace ns = StateNamespace.wrap(nsSeed); - RainlangStore store = new RainlangStore(); + TestRainlangStore store = new TestRainlangStore(); bytes32[] memory kvs = new bytes32[](2); kvs[0] = key; diff --git a/test/src/concrete/RainlangStore.overwriteKey.t.sol b/test/src/concrete/RainlangStore.overwriteKey.t.sol index f2567b288..1d152af7a 100644 --- a/test/src/concrete/RainlangStore.overwriteKey.t.sol +++ b/test/src/concrete/RainlangStore.overwriteKey.t.sol @@ -2,13 +2,13 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {RainlangStore} from "../../../src/concrete/RainlangStore.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {TestRainlangStore} from "test/concrete/TestRainlangStore.sol"; import { LibNamespace, FullyQualifiedNamespace, StateNamespace -} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; +} from "rainlang-interface-0.2.8/src/lib/ns/LibNamespace.sol"; /// @title RainlangStoreOverwriteKeyTest /// @notice Test that a key appearing twice in a single `kvs` array @@ -19,7 +19,7 @@ contract RainlangStoreOverwriteKeyTest is Test { /// @notice A key appearing twice in a single set call must result in the /// last value being stored (last-write-wins). function testOverwriteKeyLastValueWins() external { - RainlangStore store = new RainlangStore(); + TestRainlangStore store = new TestRainlangStore(); StateNamespace namespace = StateNamespace.wrap(1); FullyQualifiedNamespace fqn = namespace.qualifyNamespace(address(this)); @@ -41,7 +41,7 @@ contract RainlangStoreOverwriteKeyTest is Test { /// @notice A key appearing three times — the last value must persist. function testOverwriteKeyTriple() external { - RainlangStore store = new RainlangStore(); + TestRainlangStore store = new TestRainlangStore(); StateNamespace namespace = StateNamespace.wrap(2); FullyQualifiedNamespace fqn = namespace.qualifyNamespace(address(this)); @@ -61,7 +61,7 @@ contract RainlangStoreOverwriteKeyTest is Test { /// @notice Overwriting a key among other unique keys in the same array. function testOverwriteKeyAmongOtherKeys() external { - RainlangStore store = new RainlangStore(); + TestRainlangStore store = new TestRainlangStore(); StateNamespace namespace = StateNamespace.wrap(3); FullyQualifiedNamespace fqn = namespace.qualifyNamespace(address(this)); diff --git a/test/src/concrete/RainlangStore.setEmpty.t.sol b/test/src/concrete/RainlangStore.setEmpty.t.sol index 61af83805..a273a591c 100644 --- a/test/src/concrete/RainlangStore.setEmpty.t.sol +++ b/test/src/concrete/RainlangStore.setEmpty.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {RainlangStore} from "../../../src/concrete/RainlangStore.sol"; -import {StateNamespace} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {TestRainlangStore} from "test/concrete/TestRainlangStore.sol"; +import {StateNamespace} from "rainlang-interface-0.2.8/src/lib/ns/LibNamespace.sol"; /// @title RainlangStoreSetEmptyArrayTest /// @notice Test that `set()` with an empty (zero-length) `kvs` array @@ -12,7 +12,7 @@ import {StateNamespace} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNam contract RainlangStoreSetEmptyArrayTest is Test { /// @notice set() with a zero-length kvs array must not revert. function testSetEmptyArray() external { - RainlangStore store = new RainlangStore(); + TestRainlangStore store = new TestRainlangStore(); StateNamespace namespace = StateNamespace.wrap(1); bytes32[] memory kvs = new bytes32[](0); @@ -22,7 +22,7 @@ contract RainlangStoreSetEmptyArrayTest is Test { /// @notice set() with a zero-length kvs array should not emit any Set /// events. function testSetEmptyArrayNoEvents() external { - RainlangStore store = new RainlangStore(); + TestRainlangStore store = new TestRainlangStore(); StateNamespace namespace = StateNamespace.wrap(1); bytes32[] memory kvs = new bytes32[](0); @@ -36,7 +36,7 @@ contract RainlangStoreSetEmptyArrayTest is Test { /// @notice Fuzz variant: set() with empty array and any namespace must not /// revert. function testSetEmptyArrayFuzz(StateNamespace namespace) external { - RainlangStore store = new RainlangStore(); + TestRainlangStore store = new TestRainlangStore(); bytes32[] memory kvs = new bytes32[](0); store.set(namespace, kvs); } diff --git a/test/src/concrete/RainlangStore.setEvent.t.sol b/test/src/concrete/RainlangStore.setEvent.t.sol index f17b13bac..db8dc9698 100644 --- a/test/src/concrete/RainlangStore.setEvent.t.sol +++ b/test/src/concrete/RainlangStore.setEvent.t.sol @@ -2,14 +2,14 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {RainlangStore} from "../../../src/concrete/RainlangStore.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {TestRainlangStore} from "test/concrete/TestRainlangStore.sol"; import { LibNamespace, FullyQualifiedNamespace, StateNamespace -} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; -import {IInterpreterStoreV3} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; +} from "rainlang-interface-0.2.8/src/lib/ns/LibNamespace.sol"; +import {IInterpreterStoreV3} from "rainlang-interface-0.2.8/src/interface/IInterpreterStoreV3.sol"; /// @title RainlangStoreSetEventTest /// @notice Test that the `Set` event is emitted correctly for every @@ -20,7 +20,7 @@ contract RainlangStoreSetEventTest is Test { /// @notice A single key-value pair should emit exactly one Set event with /// the correct fullyQualifiedNamespace, key, and value. function testSetEventSinglePair() external { - RainlangStore store = new RainlangStore(); + TestRainlangStore store = new TestRainlangStore(); StateNamespace namespace = StateNamespace.wrap(42); FullyQualifiedNamespace fqn = namespace.qualifyNamespace(address(this)); @@ -38,7 +38,7 @@ contract RainlangStoreSetEventTest is Test { /// @notice Multiple key-value pairs should emit one Set event per pair. function testSetEventMultiplePairs() external { - RainlangStore store = new RainlangStore(); + TestRainlangStore store = new TestRainlangStore(); StateNamespace namespace = StateNamespace.wrap(7); FullyQualifiedNamespace fqn = namespace.qualifyNamespace(address(this)); @@ -59,7 +59,7 @@ contract RainlangStoreSetEventTest is Test { /// @notice The fullyQualifiedNamespace in the event must match what /// qualifyNamespace produces for the msg.sender. function testSetEventFQNMatchesQualifyNamespace(StateNamespace namespace, bytes32 key, bytes32 value) external { - RainlangStore store = new RainlangStore(); + TestRainlangStore store = new TestRainlangStore(); FullyQualifiedNamespace fqn = namespace.qualifyNamespace(address(this)); bytes32[] memory kvs = new bytes32[](2); diff --git a/test/src/concrete/RainlangStore.t.sol b/test/src/concrete/RainlangStore.t.sol index c469d8f5a..662697f69 100644 --- a/test/src/concrete/RainlangStore.t.sol +++ b/test/src/concrete/RainlangStore.t.sol @@ -2,17 +2,17 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {Address} from "@openzeppelin-contracts-5.6.1/utils/Address.sol"; -import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; -import {LibUint256Array} from "rain-solmem-0.1.3/src/lib/LibUint256Array.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.28/src/lib/LibBytes32Array.sol"; +import {LibUint256Array} from "rain-solmem-0.1.28/src/lib/LibUint256Array.sol"; import {LibMemoryKV, MemoryKV, MemoryKVVal, MemoryKVKey} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; -import {LibNamespace, StateNamespace} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; -import {RainlangStore} from "../../../src/concrete/RainlangStore.sol"; +import {LibNamespace, StateNamespace} from "rainlang-interface-0.2.8/src/lib/ns/LibNamespace.sol"; +import {TestRainlangStore} from "test/concrete/TestRainlangStore.sol"; import {OddSetLength} from "../../../src/error/ErrStore.sol"; /// @title RainlangStoreTest -/// @notice Test suite for RainlangStore. +/// @notice Test suite for TestRainlangStore. contract RainlangStoreTest is Test { using LibNamespace for StateNamespace; using LibMemoryKV for MemoryKV; @@ -24,7 +24,7 @@ contract RainlangStoreTest is Test { function testRainlangStoreSetOddLength(StateNamespace namespace, bytes32[] memory kvs) external { vm.assume(kvs.length % 2 != 0); - RainlangStore store = new RainlangStore(); + TestRainlangStore store = new TestRainlangStore(); vm.expectRevert(abi.encodeWithSelector(OddSetLength.selector, kvs.length)); store.set(namespace, kvs); } @@ -40,7 +40,7 @@ contract RainlangStoreTest is Test { for (uint256 i = 0; i < kvs.length; i += 2) { kvs[i] = keccak256(abi.encodePacked(i, kvs[i])); } - RainlangStore store = new RainlangStore(); + TestRainlangStore store = new TestRainlangStore(); store.set(namespace, kvs); for (uint256 i = 0; i < kvs.length; i += 2) { @@ -79,7 +79,7 @@ contract RainlangStoreTest is Test { } } - RainlangStore store = new RainlangStore(); + TestRainlangStore store = new TestRainlangStore(); for (uint256 i = 0; i < sets.length; i++) { store.set(sets[i].namespace, sets[i].kvs); for (uint256 j = 0; j < sets[i].kvs.length; j += 2) { @@ -108,7 +108,7 @@ contract RainlangStoreTest is Test { function testRainlangStoreSetGetDupes(Set11[] memory sets) external { vm.assume(sets.length < 20); - RainlangStore store = new RainlangStore(); + TestRainlangStore store = new TestRainlangStore(); for (uint256 i = 0; i < sets.length; i++) { bytes32[11] memory kvsFixed = sets[i].kvs; bytes32[] memory kvs; diff --git a/test/src/concrete/ZeroFPRainlangInterpreter.sol b/test/src/concrete/ZeroFPRainlangInterpreter.sol index 17dea0f43..3b83954fd 100644 --- a/test/src/concrete/ZeroFPRainlangInterpreter.sol +++ b/test/src/concrete/ZeroFPRainlangInterpreter.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {RainlangInterpreter} from "../../../src/concrete/RainlangInterpreter.sol"; +import {TestRainlangInterpreter} from "test/concrete/TestRainlangInterpreter.sol"; -contract ZeroFPRainlangInterpreter is RainlangInterpreter { +contract ZeroFPRainlangInterpreter is TestRainlangInterpreter { function opcodeFunctionPointers() internal pure override returns (bytes memory) { return hex""; } diff --git a/test/src/lib/deploy/LibInterpreterDeploy.t.sol b/test/src/lib/deploy/LibInterpreterDeploy.t.sol deleted file mode 100644 index bf903362c..000000000 --- a/test/src/lib/deploy/LibInterpreterDeploy.t.sol +++ /dev/null @@ -1,356 +0,0 @@ -// SPDX-License-Identifier: LicenseRef-DCL-1.0 -// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity =0.8.25; - -import {Test, console2} from "forge-std-1.16.1/src/Test.sol"; -import {LibRainDeploy} from "rain-deploy-0.1.3/src/lib/LibRainDeploy.sol"; -import {LibInterpreterDeploy} from "../../../../src/lib/deploy/LibInterpreterDeploy.sol"; -import {RainlangParser} from "../../../../src/concrete/RainlangParser.sol"; -import {RainlangStore} from "../../../../src/concrete/RainlangStore.sol"; -import {RainlangInterpreter} from "../../../../src/concrete/RainlangInterpreter.sol"; -import {RainlangExpressionDeployer} from "../../../../src/concrete/RainlangExpressionDeployer.sol"; -import {Rainlang} from "../../../../src/concrete/Rainlang.sol"; -import {LibExtrospectBytecode} from "rain-extrospection-0.1.1/src/lib/LibExtrospectBytecode.sol"; -import {LibExtrospectMetamorphic} from "rain-extrospection-0.1.1/src/lib/LibExtrospectMetamorphic.sol"; -import {RainlangReferenceExtern} from "../../../../src/concrete/extern/RainlangReferenceExtern.sol"; -import { - CREATION_CODE as PARSER_CREATION_CODE, - RUNTIME_CODE as PARSER_RUNTIME_CODE, - DEPLOYED_ADDRESS as PARSER_GENERATED_ADDRESS -} from "../../../../src/generated/RainlangParser.pointers.sol"; -import { - CREATION_CODE as STORE_CREATION_CODE, - RUNTIME_CODE as STORE_RUNTIME_CODE, - DEPLOYED_ADDRESS as STORE_GENERATED_ADDRESS -} from "../../../../src/generated/RainlangStore.pointers.sol"; -import { - CREATION_CODE as INTERPRETER_CREATION_CODE, - RUNTIME_CODE as INTERPRETER_RUNTIME_CODE, - DEPLOYED_ADDRESS as INTERPRETER_GENERATED_ADDRESS -} from "../../../../src/generated/RainlangInterpreter.pointers.sol"; -import { - CREATION_CODE as EXPRESSION_DEPLOYER_CREATION_CODE, - RUNTIME_CODE as EXPRESSION_DEPLOYER_RUNTIME_CODE, - DEPLOYED_ADDRESS as EXPRESSION_DEPLOYER_GENERATED_ADDRESS -} from "../../../../src/generated/RainlangExpressionDeployer.pointers.sol"; -import { - CREATION_CODE as RAINLANG_CREATION_CODE, - RUNTIME_CODE as RAINLANG_RUNTIME_CODE, - DEPLOYED_ADDRESS as RAINLANG_GENERATED_ADDRESS -} from "../../../../src/generated/Rainlang.pointers.sol"; -import { - CREATION_CODE as REFERENCE_EXTERN_CREATION_CODE, - RUNTIME_CODE as REFERENCE_EXTERN_RUNTIME_CODE -} from "../../../../src/generated/RainlangReferenceExtern.pointers.sol"; - -contract LibInterpreterDeployTest is Test { - function testDeployAddressParser() external { - vm.createSelectFork(vm.envString("ARBITRUM_RPC_URL")); - address expected = LibInterpreterDeploy.PARSER_DEPLOYED_ADDRESS; - if (expected.code.length == 0) { - address deployedAddress = LibRainDeploy.deployZoltu(type(RainlangParser).creationCode); - assertEq(deployedAddress, expected); - } - assertTrue(expected.code.length > 0, "Deployed address has no code"); - assertEq(expected.codehash, LibInterpreterDeploy.PARSER_DEPLOYED_CODEHASH); - } - - function testExpectedCodeHashParser() external { - RainlangParser parser = new RainlangParser(); - - assertEq(address(parser).codehash, LibInterpreterDeploy.PARSER_DEPLOYED_CODEHASH); - } - - function testDeployAddressStore() external { - vm.createSelectFork(vm.envString("ARBITRUM_RPC_URL")); - address expected = LibInterpreterDeploy.STORE_DEPLOYED_ADDRESS; - if (expected.code.length == 0) { - address deployedAddress = LibRainDeploy.deployZoltu(type(RainlangStore).creationCode); - assertEq(deployedAddress, expected); - } - assertTrue(expected.code.length > 0, "Deployed address has no code"); - assertEq(expected.codehash, LibInterpreterDeploy.STORE_DEPLOYED_CODEHASH); - } - - function testExpectedCodeHashStore() external { - RainlangStore store = new RainlangStore(); - - assertEq(address(store).codehash, LibInterpreterDeploy.STORE_DEPLOYED_CODEHASH); - } - - function testDeployAddressInterpreter() external { - vm.createSelectFork(vm.envString("ARBITRUM_RPC_URL")); - address expected = LibInterpreterDeploy.INTERPRETER_DEPLOYED_ADDRESS; - if (expected.code.length == 0) { - address deployedAddress = LibRainDeploy.deployZoltu(type(RainlangInterpreter).creationCode); - assertEq(deployedAddress, expected); - } - assertTrue(expected.code.length > 0, "Deployed address has no code"); - assertEq(expected.codehash, LibInterpreterDeploy.INTERPRETER_DEPLOYED_CODEHASH); - } - - function testExpectedCodeHashInterpreter() external { - RainlangInterpreter interpreter = new RainlangInterpreter(); - - assertEq(address(interpreter).codehash, LibInterpreterDeploy.INTERPRETER_DEPLOYED_CODEHASH); - } - - function testDeployAddressExpressionDeployer() external { - vm.createSelectFork(vm.envString("ARBITRUM_RPC_URL")); - address expected = LibInterpreterDeploy.EXPRESSION_DEPLOYER_DEPLOYED_ADDRESS; - if (expected.code.length == 0) { - address deployedAddress = LibRainDeploy.deployZoltu(type(RainlangExpressionDeployer).creationCode); - assertEq(deployedAddress, expected); - } - assertTrue(expected.code.length > 0, "Deployed address has no code"); - assertEq(expected.codehash, LibInterpreterDeploy.EXPRESSION_DEPLOYER_DEPLOYED_CODEHASH); - } - - function testExpectedCodeHashExpressionDeployer() external { - RainlangExpressionDeployer expressionDeployer = new RainlangExpressionDeployer(); - - assertEq(address(expressionDeployer).codehash, LibInterpreterDeploy.EXPRESSION_DEPLOYER_DEPLOYED_CODEHASH); - } - - function testDeployAddressRainlang() external { - vm.createSelectFork(vm.envString("ARBITRUM_RPC_URL")); - address expected = LibInterpreterDeploy.RAINLANG_DEPLOYED_ADDRESS; - if (expected.code.length == 0) { - address deployedAddress = LibRainDeploy.deployZoltu(type(Rainlang).creationCode); - assertEq(deployedAddress, expected); - } - assertTrue(expected.code.length > 0, "Deployed address has no code"); - assertEq(expected.codehash, LibInterpreterDeploy.RAINLANG_DEPLOYED_CODEHASH); - } - - function testExpectedCodeHashRainlang() external { - Rainlang rainlang = new Rainlang(); - - assertEq(address(rainlang).codehash, LibInterpreterDeploy.RAINLANG_DEPLOYED_CODEHASH); - } - - /// Parser bytecode MUST NOT contain Solidity CBOR metadata. - function testNoCborMetadataParser() external { - RainlangParser parser = new RainlangParser(); - assertFalse( - LibExtrospectBytecode.tryTrimSolidityCBORMetadata(address(parser).code), - "Parser bytecode contains CBOR metadata" - ); - } - - /// Store bytecode MUST NOT contain Solidity CBOR metadata. - function testNoCborMetadataStore() external { - RainlangStore store = new RainlangStore(); - assertFalse( - LibExtrospectBytecode.tryTrimSolidityCBORMetadata(address(store).code), - "Store bytecode contains CBOR metadata" - ); - } - - /// Interpreter bytecode MUST NOT contain Solidity CBOR metadata. - function testNoCborMetadataInterpreter() external { - RainlangInterpreter interpreter = new RainlangInterpreter(); - assertFalse( - LibExtrospectBytecode.tryTrimSolidityCBORMetadata(address(interpreter).code), - "Interpreter bytecode contains CBOR metadata" - ); - } - - /// ExpressionDeployer bytecode MUST NOT contain Solidity CBOR metadata. - function testNoCborMetadataExpressionDeployer() external { - RainlangExpressionDeployer expressionDeployer = new RainlangExpressionDeployer(); - assertFalse( - LibExtrospectBytecode.tryTrimSolidityCBORMetadata(address(expressionDeployer).code), - "ExpressionDeployer bytecode contains CBOR metadata" - ); - } - - /// Rainlang bytecode MUST NOT contain Solidity CBOR metadata. - function testNoCborMetadataRainlang() external { - Rainlang rainlang = new Rainlang(); - assertFalse( - LibExtrospectBytecode.tryTrimSolidityCBORMetadata(address(rainlang).code), - "Rainlang bytecode contains CBOR metadata" - ); - } - - /// Parser bytecode MUST NOT contain reachable metamorphic risk opcodes. - function testNotMetamorphicParser() external { - RainlangParser parser = new RainlangParser(); - LibExtrospectMetamorphic.checkNotMetamorphic(address(parser).code); - } - - /// Store bytecode MUST NOT contain reachable metamorphic risk opcodes. - function testNotMetamorphicStore() external { - RainlangStore store = new RainlangStore(); - LibExtrospectMetamorphic.checkNotMetamorphic(address(store).code); - } - - /// Interpreter bytecode MUST NOT contain reachable metamorphic risk opcodes. - function testNotMetamorphicInterpreter() external { - RainlangInterpreter interpreter = new RainlangInterpreter(); - LibExtrospectMetamorphic.checkNotMetamorphic(address(interpreter).code); - } - - /// ExpressionDeployer bytecode MUST NOT contain reachable metamorphic risk - /// opcodes. - function testNotMetamorphicExpressionDeployer() external { - RainlangExpressionDeployer expressionDeployer = new RainlangExpressionDeployer(); - LibExtrospectMetamorphic.checkNotMetamorphic(address(expressionDeployer).code); - } - - /// Rainlang bytecode MUST NOT contain reachable metamorphic risk opcodes. - function testNotMetamorphicRainlang() external { - Rainlang rainlang = new Rainlang(); - LibExtrospectMetamorphic.checkNotMetamorphic(address(rainlang).code); - } - - /// The precompiled creation code constant for the parser MUST match the - /// compiler's creation code. - function testCreationCodeParser() external pure { - assertEq(keccak256(PARSER_CREATION_CODE), keccak256(type(RainlangParser).creationCode)); - } - - /// The precompiled creation code constant for the store MUST match the - /// compiler's creation code. - function testCreationCodeStore() external pure { - assertEq(keccak256(STORE_CREATION_CODE), keccak256(type(RainlangStore).creationCode)); - } - - /// The precompiled creation code constant for the interpreter MUST match - /// the compiler's creation code. - function testCreationCodeInterpreter() external pure { - assertEq(keccak256(INTERPRETER_CREATION_CODE), keccak256(type(RainlangInterpreter).creationCode)); - } - - /// The precompiled creation code constant for the expression deployer MUST - /// match the compiler's creation code. - function testCreationCodeExpressionDeployer() external pure { - assertEq(keccak256(EXPRESSION_DEPLOYER_CREATION_CODE), keccak256(type(RainlangExpressionDeployer).creationCode)); - } - - /// The precompiled creation code constant for Rainlang MUST match the - /// compiler's creation code. - function testCreationCodeRainlang() external pure { - assertEq(keccak256(RAINLANG_CREATION_CODE), keccak256(type(Rainlang).creationCode)); - } - - /// The precompiled creation code constant for the reference extern MUST - /// match the compiler's creation code. - function testCreationCodeReferenceExtern() external pure { - assertEq(keccak256(REFERENCE_EXTERN_CREATION_CODE), keccak256(type(RainlangReferenceExtern).creationCode)); - } - - /// The precompiled runtime code constant for the parser MUST match the - /// deployed runtime bytecode. - function testRuntimeCodeParser() external { - RainlangParser parser = new RainlangParser(); - assertEq(keccak256(PARSER_RUNTIME_CODE), keccak256(address(parser).code)); - } - - /// The precompiled runtime code constant for the store MUST match the - /// deployed runtime bytecode. - function testRuntimeCodeStore() external { - RainlangStore store = new RainlangStore(); - assertEq(keccak256(STORE_RUNTIME_CODE), keccak256(address(store).code)); - } - - /// The precompiled runtime code constant for the interpreter MUST match - /// the deployed runtime bytecode. - function testRuntimeCodeInterpreter() external { - RainlangInterpreter interpreter = new RainlangInterpreter(); - assertEq(keccak256(INTERPRETER_RUNTIME_CODE), keccak256(address(interpreter).code)); - } - - /// The precompiled runtime code constant for the expression deployer MUST - /// match the deployed runtime bytecode. - function testRuntimeCodeExpressionDeployer() external { - RainlangExpressionDeployer deployer = new RainlangExpressionDeployer(); - assertEq(keccak256(EXPRESSION_DEPLOYER_RUNTIME_CODE), keccak256(address(deployer).code)); - } - - /// The precompiled runtime code constant for Rainlang MUST match the - /// deployed runtime bytecode. - function testRuntimeCodeRainlang() external { - Rainlang rainlang = new Rainlang(); - assertEq(keccak256(RAINLANG_RUNTIME_CODE), keccak256(address(rainlang).code)); - } - - /// The precompiled runtime code constant for the reference extern MUST - /// match the deployed runtime bytecode. - function testRuntimeCodeReferenceExtern() external { - RainlangReferenceExtern extern = new RainlangReferenceExtern(); - assertEq(keccak256(REFERENCE_EXTERN_RUNTIME_CODE), keccak256(address(extern).code)); - } - - /// The generated deployed address for the parser MUST match the deploy - /// library constant. - function testGeneratedDeployedAddressParser() external pure { - assertEq(PARSER_GENERATED_ADDRESS, LibInterpreterDeploy.PARSER_DEPLOYED_ADDRESS); - } - - /// The generated deployed address for the store MUST match the deploy - /// library constant. - function testGeneratedDeployedAddressStore() external pure { - assertEq(STORE_GENERATED_ADDRESS, LibInterpreterDeploy.STORE_DEPLOYED_ADDRESS); - } - - /// The generated deployed address for the interpreter MUST match the - /// deploy library constant. - function testGeneratedDeployedAddressInterpreter() external pure { - assertEq(INTERPRETER_GENERATED_ADDRESS, LibInterpreterDeploy.INTERPRETER_DEPLOYED_ADDRESS); - } - - /// The generated deployed address for the expression deployer MUST match - /// the deploy library constant. - function testGeneratedDeployedAddressExpressionDeployer() external pure { - assertEq(EXPRESSION_DEPLOYER_GENERATED_ADDRESS, LibInterpreterDeploy.EXPRESSION_DEPLOYER_DEPLOYED_ADDRESS); - } - - /// The generated deployed address for Rainlang MUST match the deploy - /// library constant. - function testGeneratedDeployedAddressRainlang() external pure { - assertEq(RAINLANG_GENERATED_ADDRESS, LibInterpreterDeploy.RAINLANG_DEPLOYED_ADDRESS); - } - - /// After calling etchRainlang, all five contracts MUST have the expected - /// codehash at their expected addresses. - function testEtchRainlang() external { - LibInterpreterDeploy.etchRainlang(vm); - - assertEq(LibInterpreterDeploy.PARSER_DEPLOYED_ADDRESS.codehash, LibInterpreterDeploy.PARSER_DEPLOYED_CODEHASH); - assertEq(LibInterpreterDeploy.STORE_DEPLOYED_ADDRESS.codehash, LibInterpreterDeploy.STORE_DEPLOYED_CODEHASH); - assertEq( - LibInterpreterDeploy.INTERPRETER_DEPLOYED_ADDRESS.codehash, - LibInterpreterDeploy.INTERPRETER_DEPLOYED_CODEHASH - ); - assertEq( - LibInterpreterDeploy.EXPRESSION_DEPLOYER_DEPLOYED_ADDRESS.codehash, - LibInterpreterDeploy.EXPRESSION_DEPLOYER_DEPLOYED_CODEHASH - ); - assertEq( - LibInterpreterDeploy.RAINLANG_DEPLOYED_ADDRESS.codehash, LibInterpreterDeploy.RAINLANG_DEPLOYED_CODEHASH - ); - } - - /// Calling etchRainlang twice MUST be idempotent — codehashes remain - /// correct on the second call. - function testEtchRainlangIdempotent() external { - LibInterpreterDeploy.etchRainlang(vm); - LibInterpreterDeploy.etchRainlang(vm); - - assertEq(LibInterpreterDeploy.PARSER_DEPLOYED_ADDRESS.codehash, LibInterpreterDeploy.PARSER_DEPLOYED_CODEHASH); - assertEq(LibInterpreterDeploy.STORE_DEPLOYED_ADDRESS.codehash, LibInterpreterDeploy.STORE_DEPLOYED_CODEHASH); - assertEq( - LibInterpreterDeploy.INTERPRETER_DEPLOYED_ADDRESS.codehash, - LibInterpreterDeploy.INTERPRETER_DEPLOYED_CODEHASH - ); - assertEq( - LibInterpreterDeploy.EXPRESSION_DEPLOYER_DEPLOYED_ADDRESS.codehash, - LibInterpreterDeploy.EXPRESSION_DEPLOYER_DEPLOYED_CODEHASH - ); - assertEq( - LibInterpreterDeploy.RAINLANG_DEPLOYED_ADDRESS.codehash, LibInterpreterDeploy.RAINLANG_DEPLOYED_CODEHASH - ); - } -} diff --git a/test/src/lib/deploy/LibInterpreterDeployProd.t.sol b/test/src/lib/deploy/LibInterpreterDeployProd.t.sol deleted file mode 100644 index e1daa6066..000000000 --- a/test/src/lib/deploy/LibInterpreterDeployProd.t.sol +++ /dev/null @@ -1,69 +0,0 @@ -// SPDX-License-Identifier: LicenseRef-DCL-1.0 -// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity =0.8.25; - -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {LibRainDeploy} from "rain-deploy-0.1.3/src/lib/LibRainDeploy.sol"; -import {LibInterpreterDeploy} from "../../../../src/lib/deploy/LibInterpreterDeploy.sol"; - -/// @title LibInterpreterDeployProdTest -/// @notice Forks each supported network and verifies that all five interpreter -/// contracts are deployed at the expected addresses with the expected codehash. -contract LibInterpreterDeployProdTest is Test { - function _checkAllContracts() internal view { - assertTrue(LibInterpreterDeploy.PARSER_DEPLOYED_ADDRESS.code.length > 0, "Parser not deployed"); - assertEq(LibInterpreterDeploy.PARSER_DEPLOYED_ADDRESS.codehash, LibInterpreterDeploy.PARSER_DEPLOYED_CODEHASH); - - assertTrue(LibInterpreterDeploy.STORE_DEPLOYED_ADDRESS.code.length > 0, "Store not deployed"); - assertEq(LibInterpreterDeploy.STORE_DEPLOYED_ADDRESS.codehash, LibInterpreterDeploy.STORE_DEPLOYED_CODEHASH); - - assertTrue(LibInterpreterDeploy.INTERPRETER_DEPLOYED_ADDRESS.code.length > 0, "Interpreter not deployed"); - assertEq( - LibInterpreterDeploy.INTERPRETER_DEPLOYED_ADDRESS.codehash, - LibInterpreterDeploy.INTERPRETER_DEPLOYED_CODEHASH - ); - - assertTrue( - LibInterpreterDeploy.EXPRESSION_DEPLOYER_DEPLOYED_ADDRESS.code.length > 0, "ExpressionDeployer not deployed" - ); - assertEq( - LibInterpreterDeploy.EXPRESSION_DEPLOYER_DEPLOYED_ADDRESS.codehash, - LibInterpreterDeploy.EXPRESSION_DEPLOYER_DEPLOYED_CODEHASH - ); - - assertTrue(LibInterpreterDeploy.RAINLANG_DEPLOYED_ADDRESS.code.length > 0, "Rainlang not deployed"); - assertEq( - LibInterpreterDeploy.RAINLANG_DEPLOYED_ADDRESS.codehash, LibInterpreterDeploy.RAINLANG_DEPLOYED_CODEHASH - ); - } - - /// All five contracts MUST be deployed on Arbitrum. - function testProdDeployArbitrum() external { - vm.createSelectFork(LibRainDeploy.ARBITRUM_ONE); - _checkAllContracts(); - } - - /// All five contracts MUST be deployed on Base. - function testProdDeployBase() external { - vm.createSelectFork(LibRainDeploy.BASE); - _checkAllContracts(); - } - - /// All five contracts MUST be deployed on Base Sepolia. - function testProdDeployBaseSepolia() external { - vm.createSelectFork(LibRainDeploy.BASE_SEPOLIA); - _checkAllContracts(); - } - - /// All five contracts MUST be deployed on Flare. - function testProdDeployFlare() external { - vm.createSelectFork(LibRainDeploy.FLARE); - _checkAllContracts(); - } - - /// All five contracts MUST be deployed on Polygon. - function testProdDeployPolygon() external { - vm.createSelectFork(LibRainDeploy.POLYGON); - _checkAllContracts(); - } -} diff --git a/test/src/lib/eval/LibEval.fBounds.t.sol b/test/src/lib/eval/LibEval.fBounds.t.sol index 3bcb23ca4..fd5cc2567 100644 --- a/test/src/lib/eval/LibEval.fBounds.t.sol +++ b/test/src/lib/eval/LibEval.fBounds.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibInterpreterState, InterpreterState} from "../../../../src/lib/state/LibInterpreterState.sol"; import {LibAllStandardOps} from "../../../../src/lib/op/LibAllStandardOps.sol"; @@ -11,8 +11,8 @@ import {MemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; import { IInterpreterStoreV3, FullyQualifiedNamespace -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterStoreV3.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; contract LibEvalFBoundsTest is Test { /// Due to the mod of indexes to function pointers the indexes wrap at the diff --git a/test/src/lib/eval/LibEval.inputsLengthMismatch.t.sol b/test/src/lib/eval/LibEval.inputsLengthMismatch.t.sol index b2030239c..e9cc7e598 100644 --- a/test/src/lib/eval/LibEval.inputsLengthMismatch.t.sol +++ b/test/src/lib/eval/LibEval.inputsLengthMismatch.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibInterpreterState, InterpreterState} from "../../../../src/lib/state/LibInterpreterState.sol"; import {LibAllStandardOps} from "../../../../src/lib/op/LibAllStandardOps.sol"; @@ -11,8 +11,8 @@ import {MemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; import { IInterpreterStoreV3, FullyQualifiedNamespace -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterStoreV3.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InputsLengthMismatch} from "../../../../src/error/ErrEval.sol"; /// @title LibEvalInputsLengthMismatchTest diff --git a/test/src/lib/eval/LibEval.maxOutputs.t.sol b/test/src/lib/eval/LibEval.maxOutputs.t.sol index a1b88530e..35e1327d2 100644 --- a/test/src/lib/eval/LibEval.maxOutputs.t.sol +++ b/test/src/lib/eval/LibEval.maxOutputs.t.sol @@ -10,8 +10,8 @@ import {MemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; import { IInterpreterStoreV3, FullyQualifiedNamespace -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterStoreV3.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; /// @title LibEvalMaxOutputsTest /// @notice Tests that eval4 truncates outputs when maxOutputs < sourceOutputs. diff --git a/test/src/lib/eval/LibEval.multipleSource.t.sol b/test/src/lib/eval/LibEval.multipleSource.t.sol index e9c54d19c..4fd53f919 100644 --- a/test/src/lib/eval/LibEval.multipleSource.t.sol +++ b/test/src/lib/eval/LibEval.multipleSource.t.sol @@ -3,9 +3,9 @@ pragma solidity =0.8.25; import {RainlangExpressionDeployerDeploymentTest} from "test/abstract/RainlangExpressionDeployerDeploymentTest.sol"; -import {StateNamespace} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; -import {EvalV4, SourceIndexV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {LibNamespace} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; +import {StateNamespace} from "rainlang-interface-0.2.8/src/interface/IInterpreterStoreV3.sol"; +import {EvalV4, SourceIndexV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {LibNamespace} from "rainlang-interface-0.2.8/src/lib/ns/LibNamespace.sol"; contract LibEvalMultipleSourceTest is RainlangExpressionDeployerDeploymentTest { /// Evaluating sourceIndex 1 of a two-source expression must use the diff --git a/test/src/lib/eval/LibEval.opcodeCountEdgeCases.t.sol b/test/src/lib/eval/LibEval.opcodeCountEdgeCases.t.sol index aa85aeeb2..298d6864d 100644 --- a/test/src/lib/eval/LibEval.opcodeCountEdgeCases.t.sol +++ b/test/src/lib/eval/LibEval.opcodeCountEdgeCases.t.sol @@ -3,9 +3,9 @@ pragma solidity =0.8.25; import {RainlangExpressionDeployerDeploymentTest} from "test/abstract/RainlangExpressionDeployerDeploymentTest.sol"; -import {StateNamespace} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; -import {EvalV4, SourceIndexV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {LibNamespace} from "rain-interpreter-interface-0.1.0/src/lib/ns/LibNamespace.sol"; +import {StateNamespace} from "rainlang-interface-0.2.8/src/interface/IInterpreterStoreV3.sol"; +import {EvalV4, SourceIndexV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {LibNamespace} from "rainlang-interface-0.2.8/src/lib/ns/LibNamespace.sol"; /// evalLoop processes opcodes in batches of 8 via an unrolled loop that reads /// one 32-byte word (8 x 4-byte opcodes) per iteration. Leftover opcodes diff --git a/test/src/lib/eval/LibEval.remainderOnly.t.sol b/test/src/lib/eval/LibEval.remainderOnly.t.sol index 553d4cbc9..882830656 100644 --- a/test/src/lib/eval/LibEval.remainderOnly.t.sol +++ b/test/src/lib/eval/LibEval.remainderOnly.t.sol @@ -10,8 +10,8 @@ import {MemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; import { IInterpreterStoreV3, FullyQualifiedNamespace -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterStoreV3.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; /// @title LibEvalRemainderOnlyTest /// @notice Tests that the evalLoop remainder path correctly dispatches diff --git a/test/src/lib/extern/LibExtern.codec.t.sol b/test/src/lib/extern/LibExtern.codec.t.sol index 0eb17f299..7a9517a88 100644 --- a/test/src/lib/extern/LibExtern.codec.t.sol +++ b/test/src/lib/extern/LibExtern.codec.t.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import { LibExtern, EncodedExternDispatchV2, diff --git a/test/src/lib/extern/reference/literal/LibParseLiteralRepeat.t.sol b/test/src/lib/extern/reference/literal/LibParseLiteralRepeat.t.sol index 67e02e561..8506480cd 100644 --- a/test/src/lib/extern/reference/literal/LibParseLiteralRepeat.t.sol +++ b/test/src/lib/extern/reference/literal/LibParseLiteralRepeat.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import { LibParseLiteralRepeat, diff --git a/test/src/lib/extern/reference/op/LibExternOpContextCallingContract.subParser.t.sol b/test/src/lib/extern/reference/op/LibExternOpContextCallingContract.subParser.t.sol index 0d1bf06fb..d4d71d286 100644 --- a/test/src/lib/extern/reference/op/LibExternOpContextCallingContract.subParser.t.sol +++ b/test/src/lib/extern/reference/op/LibExternOpContextCallingContract.subParser.t.sol @@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {OPCODE_CONTEXT, OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {OPCODE_CONTEXT, OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import { CONTEXT_BASE_COLUMN, CONTEXT_BASE_ROW_CALLING_CONTRACT -} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; +} from "rainlang-interface-0.2.8/src/lib/caller/LibContext.sol"; import { LibExternOpContextCallingContract } from "../../../../../../src/lib/extern/reference/op/LibExternOpContextCallingContract.sol"; diff --git a/test/src/lib/extern/reference/op/LibExternOpContextRainlen.subParser.t.sol b/test/src/lib/extern/reference/op/LibExternOpContextRainlen.subParser.t.sol index 39079e03a..e06fb92a0 100644 --- a/test/src/lib/extern/reference/op/LibExternOpContextRainlen.subParser.t.sol +++ b/test/src/lib/extern/reference/op/LibExternOpContextRainlen.subParser.t.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {OPCODE_CONTEXT, OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {OPCODE_CONTEXT, OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import { LibExternOpContextRainlen, CONTEXT_CALLER_CONTEXT_COLUMN, diff --git a/test/src/lib/extern/reference/op/LibExternOpContextSender.subParser.t.sol b/test/src/lib/extern/reference/op/LibExternOpContextSender.subParser.t.sol index 1bbcf5289..98277da60 100644 --- a/test/src/lib/extern/reference/op/LibExternOpContextSender.subParser.t.sol +++ b/test/src/lib/extern/reference/op/LibExternOpContextSender.subParser.t.sol @@ -2,12 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {OPCODE_CONTEXT, OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import { - CONTEXT_BASE_COLUMN, - CONTEXT_BASE_ROW_SENDER -} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {OPCODE_CONTEXT, OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {CONTEXT_BASE_COLUMN, CONTEXT_BASE_ROW_SENDER} from "rainlang-interface-0.2.8/src/lib/caller/LibContext.sol"; import {LibExternOpContextSender} from "../../../../../../src/lib/extern/reference/op/LibExternOpContextSender.sol"; contract LibExternOpContextSenderSubParserTest is Test { diff --git a/test/src/lib/extern/reference/op/LibExternOpStackOperand.subParser.t.sol b/test/src/lib/extern/reference/op/LibExternOpStackOperand.subParser.t.sol index d8cc1d7a7..808a05684 100644 --- a/test/src/lib/extern/reference/op/LibExternOpStackOperand.subParser.t.sol +++ b/test/src/lib/extern/reference/op/LibExternOpStackOperand.subParser.t.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {OPCODE_CONSTANT, OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {OPCODE_CONSTANT, OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibExternOpStackOperand} from "../../../../../../src/lib/extern/reference/op/LibExternOpStackOperand.sol"; contract LibExternOpStackOperandSubParserTest is Test { diff --git a/test/src/lib/integrity/IntegrityHighwater.sol b/test/src/lib/integrity/IntegrityHighwater.sol index 6f5839fdb..3e26fe094 100644 --- a/test/src/lib/integrity/IntegrityHighwater.sol +++ b/test/src/lib/integrity/IntegrityHighwater.sol @@ -4,7 +4,7 @@ pragma solidity =0.8.25; import {LibIntegrityCheck, IntegrityCheckState} from "../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibConvert} from "rain-lib-typecast-0.1.0/src/LibConvert.sol"; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; /// @dev Contract with 2 opcodes for testing StackUnderflowHighwater. /// Opcode 0: 0 inputs, 2 outputs (advances highwater). diff --git a/test/src/lib/integrity/IntegritySingleOp.sol b/test/src/lib/integrity/IntegritySingleOp.sol index db760d560..b9e2264a2 100644 --- a/test/src/lib/integrity/IntegritySingleOp.sol +++ b/test/src/lib/integrity/IntegritySingleOp.sol @@ -4,7 +4,7 @@ pragma solidity =0.8.25; import {LibIntegrityCheck, IntegrityCheckState} from "../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibConvert} from "rain-lib-typecast-0.1.0/src/LibConvert.sol"; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; /// @dev Contract whose integrity function pointers are valid for its own /// bytecode. Has a single opcode (index 0) that always returns (1, 1). diff --git a/test/src/lib/integrity/LibIntegrityCheck.badOpIO.t.sol b/test/src/lib/integrity/LibIntegrityCheck.badOpIO.t.sol index c8b128290..96ee69c0a 100644 --- a/test/src/lib/integrity/LibIntegrityCheck.badOpIO.t.sol +++ b/test/src/lib/integrity/LibIntegrityCheck.badOpIO.t.sol @@ -5,9 +5,9 @@ pragma solidity =0.8.25; import {RainlangExpressionDeployerDeploymentTest} from "test/abstract/RainlangExpressionDeployerDeploymentTest.sol"; import {LibIntegrityCheck} from "../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibAllStandardOps} from "../../../../src/lib/op/LibAllStandardOps.sol"; -import {BadOpInputsLength, BadOpOutputsLength} from "rain-interpreter-interface-0.1.0/src/error/ErrIntegrity.sol"; -import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {BadOpInputsLength, BadOpOutputsLength} from "rainlang-interface-0.2.8/src/error/ErrIntegrity.sol"; +import {LibBytecode} from "rainlang-interface-0.2.8/src/lib/bytecode/LibBytecode.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; /// @title LibIntegrityCheckBadOpIOTest /// @notice Verifies that integrityCheck2 reverts with BadOpInputsLength and diff --git a/test/src/lib/integrity/LibIntegrityCheck.multiSource.t.sol b/test/src/lib/integrity/LibIntegrityCheck.multiSource.t.sol index d32dc5838..0ab7999d0 100644 --- a/test/src/lib/integrity/LibIntegrityCheck.multiSource.t.sol +++ b/test/src/lib/integrity/LibIntegrityCheck.multiSource.t.sol @@ -3,16 +3,13 @@ pragma solidity =0.8.25; import {RainlangExpressionDeployerDeploymentTest} from "test/abstract/RainlangExpressionDeployerDeploymentTest.sol"; -import {RainlangParser} from "../../../../src/concrete/RainlangParser.sol"; -import {LibInterpreterDeploy} from "../../../../src/lib/deploy/LibInterpreterDeploy.sol"; -import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rainlang-interface-0.2.8/src/lib/bytecode/LibBytecode.sol"; contract LibIntegrityCheckMultiSourceTest is RainlangExpressionDeployerDeploymentTest { /// Two-source expression must pass integrity and produce correct /// per-source metadata. function testIntegrityTwoSources() external view { - (bytes memory bytecode,) = - RainlangParser(LibInterpreterDeploy.PARSER_DEPLOYED_ADDRESS).unsafeParse("_: 1;_: 2, _: 3;"); + (bytes memory bytecode,) = I_PARSER.unsafeParse("_: 1;_: 2, _: 3;"); assertEq(LibBytecode.sourceCount(bytecode), 2); // Source 0: 1 op (constant), 1 output. @@ -28,8 +25,7 @@ contract LibIntegrityCheckMultiSourceTest is RainlangExpressionDeployerDeploymen /// Three-source expression with different shapes must pass integrity. function testIntegrityThreeSources() external view { - (bytes memory bytecode,) = RainlangParser(LibInterpreterDeploy.PARSER_DEPLOYED_ADDRESS) - .unsafeParse("_: 1;_: add(1 2);_: 3, _: 4, _: 5;"); + (bytes memory bytecode,) = I_PARSER.unsafeParse("_: 1;_: add(1 2);_: 3, _: 4, _: 5;"); assertEq(LibBytecode.sourceCount(bytecode), 3); // Source 0: 1 op, 1 output. diff --git a/test/src/lib/integrity/LibIntegrityCheck.newState.t.sol b/test/src/lib/integrity/LibIntegrityCheck.newState.t.sol index 45ca3038f..848d8d998 100644 --- a/test/src/lib/integrity/LibIntegrityCheck.newState.t.sol +++ b/test/src/lib/integrity/LibIntegrityCheck.newState.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibIntegrityCheck, IntegrityCheckState} from "../../../../src/lib/integrity/LibIntegrityCheck.sol"; /// @title LibIntegrityCheckNewStateTest diff --git a/test/src/lib/integrity/LibIntegrityCheck.stackMaxIndex.t.sol b/test/src/lib/integrity/LibIntegrityCheck.stackMaxIndex.t.sol index 62f9b2dd9..340643e1a 100644 --- a/test/src/lib/integrity/LibIntegrityCheck.stackMaxIndex.t.sol +++ b/test/src/lib/integrity/LibIntegrityCheck.stackMaxIndex.t.sol @@ -3,9 +3,7 @@ pragma solidity =0.8.25; import {RainlangExpressionDeployerDeploymentTest} from "test/abstract/RainlangExpressionDeployerDeploymentTest.sol"; -import {RainlangParser} from "../../../../src/concrete/RainlangParser.sol"; -import {LibInterpreterDeploy} from "../../../../src/lib/deploy/LibInterpreterDeploy.sol"; -import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rainlang-interface-0.2.8/src/lib/bytecode/LibBytecode.sol"; contract LibIntegrityCheckStackMaxIndexTest is RainlangExpressionDeployerDeploymentTest { /// stackMaxIndex must track the peak stack height, not the final height. @@ -13,8 +11,7 @@ contract LibIntegrityCheckStackMaxIndexTest is RainlangExpressionDeployerDeploym /// both and produces one result (final = 1). The stackAllocation in the /// bytecode must equal the peak (2), not the final output count (1). function testStackMaxIndexTracksPeak() external view { - (bytes memory bytecode,) = - RainlangParser(LibInterpreterDeploy.PARSER_DEPLOYED_ADDRESS).unsafeParse("_: add(1 2);"); + (bytes memory bytecode,) = I_PARSER.unsafeParse("_: add(1 2);"); uint256 allocation = LibBytecode.sourceStackAllocation(bytecode, 0); (, uint256 outputs) = LibBytecode.sourceInputsOutputsLength(bytecode, 0); diff --git a/test/src/lib/integrity/LibIntegrityCheck.t.sol b/test/src/lib/integrity/LibIntegrityCheck.t.sol index b4cae7c08..b39ebc8e5 100644 --- a/test/src/lib/integrity/LibIntegrityCheck.t.sol +++ b/test/src/lib/integrity/LibIntegrityCheck.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibIntegrityCheck} from "../../../../src/lib/integrity/LibIntegrityCheck.sol"; import { OpcodeOutOfRange, @@ -11,7 +11,7 @@ import { StackAllocationMismatch, StackOutputsMismatch } from "../../../../src/error/ErrIntegrity.sol"; -import {INTEGRITY_FUNCTION_POINTERS} from "../../../../src/generated/RainlangExpressionDeployer.pointers.sol"; +import {LibAllStandardOps} from "../../../../src/lib/op/LibAllStandardOps.sol"; import {ALL_STANDARD_OPS_LENGTH} from "../../../../src/lib/op/LibAllStandardOps.sol"; import {IntegritySingleOp} from "./IntegritySingleOp.sol"; import {IntegrityHighwater} from "./IntegrityHighwater.sol"; @@ -65,7 +65,7 @@ contract LibIntegrityCheckTest is Test { bytes32[] memory constants = new bytes32[](0); vm.expectRevert(abi.encodeWithSelector(OpcodeOutOfRange.selector, 0, opcodeIndex, ALL_STANDARD_OPS_LENGTH)); - this.integrityCheck2External(INTEGRITY_FUNCTION_POINTERS, bytecode, constants); + this.integrityCheck2External(LibAllStandardOps.integrityFunctionPointers(), bytecode, constants); } /// An opcode index just below the boundary must NOT revert with @@ -82,7 +82,7 @@ contract LibIntegrityCheckTest is Test { // We just verify the revert is NOT OpcodeOutOfRange. // The actual revert depends on what opcode maxValidIndex is, but // it should never be OpcodeOutOfRange. - try this.integrityCheck2External(INTEGRITY_FUNCTION_POINTERS, bytecode, constants) { + try this.integrityCheck2External(LibAllStandardOps.integrityFunctionPointers(), bytecode, constants) { // If it doesn't revert, that's fine too — the opcode is in range. } catch (bytes memory reason) { diff --git a/test/src/lib/integrity/LibIntegrityCheck.zeroSource.t.sol b/test/src/lib/integrity/LibIntegrityCheck.zeroSource.t.sol index 0a4c65c1a..b6c1fc2b2 100644 --- a/test/src/lib/integrity/LibIntegrityCheck.zeroSource.t.sol +++ b/test/src/lib/integrity/LibIntegrityCheck.zeroSource.t.sol @@ -3,24 +3,21 @@ pragma solidity =0.8.25; import {RainlangExpressionDeployerDeploymentTest} from "test/abstract/RainlangExpressionDeployerDeploymentTest.sol"; -import {RainlangParser} from "../../../../src/concrete/RainlangParser.sol"; -import {LibInterpreterDeploy} from "../../../../src/lib/deploy/LibInterpreterDeploy.sol"; -import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rainlang-interface-0.2.8/src/lib/bytecode/LibBytecode.sol"; contract LibIntegrityCheckZeroSourceTest is RainlangExpressionDeployerDeploymentTest { /// Empty input produces zero-source bytecode. The parser emits a single /// byte (sourceCount = 0), and the integrity check (run inside parse2) /// must handle this without reverting. function testZeroSourceEmptyInput() external view { - (bytes memory bytecode,) = RainlangParser(LibInterpreterDeploy.PARSER_DEPLOYED_ADDRESS).unsafeParse(""); + (bytes memory bytecode,) = I_PARSER.unsafeParse(""); assertEq(LibBytecode.sourceCount(bytecode), 0); assertEq(bytecode.length, 1); } /// Comment-only input also produces zero-source bytecode. function testZeroSourceCommentOnly() external view { - (bytes memory bytecode,) = - RainlangParser(LibInterpreterDeploy.PARSER_DEPLOYED_ADDRESS).unsafeParse("/* comment */"); + (bytes memory bytecode,) = I_PARSER.unsafeParse("/* comment */"); assertEq(LibBytecode.sourceCount(bytecode), 0); assertEq(bytecode.length, 1); } diff --git a/test/src/lib/op/00/LibOpConstant.t.sol b/test/src/lib/op/00/LibOpConstant.t.sol index 1fe5c8fad..8a0f48e68 100644 --- a/test/src/lib/op/00/LibOpConstant.t.sol +++ b/test/src/lib/op/00/LibOpConstant.t.sol @@ -4,7 +4,7 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; -import {LibContext} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; +import {LibContext} from "rainlang-interface-0.2.8/src/lib/caller/LibContext.sol"; import {LibOpConstant} from "../../../../../src/lib/op/00/LibOpConstant.sol"; import {OutOfBoundsConstantRead} from "../../../../../src/error/ErrIntegrity.sol"; import {LibInterpreterState, InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; @@ -15,10 +15,10 @@ import { FullyQualifiedNamespace, EvalV4, StackItem -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {SignedContextV1} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterCallerV4.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {SignedContextV1} from "rainlang-interface-0.2.8/src/interface/IInterpreterCallerV4.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {BadOpOutputsLength} from "rain-interpreter-interface-0.1.0/src/error/ErrIntegrity.sol"; +import {BadOpOutputsLength} from "rainlang-interface-0.2.8/src/error/ErrIntegrity.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpConstantTest diff --git a/test/src/lib/op/00/LibOpContext.t.sol b/test/src/lib/op/00/LibOpContext.t.sol index ec6b6187c..c77c2009f 100644 --- a/test/src/lib/op/00/LibOpContext.t.sol +++ b/test/src/lib/op/00/LibOpContext.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {stdError} from "forge-std-1.16.1/src/Test.sol"; +import {stdError} from "forge-std-1.16.2/src/Test.sol"; import {LibOpContext} from "../../../../../src/lib/op/00/LibOpContext.sol"; import {OpTest} from "test/abstract/OpTest.sol"; @@ -13,7 +13,7 @@ import { FullyQualifiedNamespace, EvalV4, StackItem -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; diff --git a/test/src/lib/op/00/LibOpExtern.t.sol b/test/src/lib/op/00/LibOpExtern.t.sol index fa71fd2ee..fcc7c1fe1 100644 --- a/test/src/lib/op/00/LibOpExtern.t.sol +++ b/test/src/lib/op/00/LibOpExtern.t.sol @@ -13,8 +13,8 @@ import { import {OutOfBoundsConstantRead} from "../../../../../src/error/ErrIntegrity.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {LibOpExtern} from "../../../../../src/lib/op/00/LibOpExtern.sol"; import {LibExtern} from "../../../../../src/lib/extern/LibExtern.sol"; import { @@ -22,10 +22,10 @@ import { IInterpreterExternV4, ExternDispatchV2, StackItem -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterExternV4.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterExternV4.sol"; import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {LibUint256Array} from "rain-solmem-0.1.3/src/lib/LibUint256Array.sol"; +import {LibUint256Array} from "rain-solmem-0.1.28/src/lib/LibUint256Array.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpExternTest diff --git a/test/src/lib/op/00/LibOpStack.t.sol b/test/src/lib/op/00/LibOpStack.t.sol index 2006e7151..7596c4cbd 100644 --- a/test/src/lib/op/00/LibOpStack.t.sol +++ b/test/src/lib/op/00/LibOpStack.t.sol @@ -2,25 +2,20 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; - -import { - OperandV2, - SourceIndexV2, - EvalV4, - StackItem -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {LibContext} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; + +import {OperandV2, SourceIndexV2, EvalV4, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {LibContext} from "rainlang-interface-0.2.8/src/lib/caller/LibContext.sol"; import {LibOpStack} from "../../../../../src/lib/op/00/LibOpStack.sol"; import {OutOfBoundsStackRead} from "../../../../../src/error/ErrIntegrity.sol"; import {LibIntegrityCheck, IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibInterpreterState, InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibInterpreterStateFingerprint} from "test/lib/state/LibInterpreterStateFingerprint.sol"; -import {FullyQualifiedNamespace} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; +import {FullyQualifiedNamespace} from "rainlang-interface-0.2.8/src/interface/IInterpreterStoreV3.sol"; import {OpTest, PRE, POST} from "test/abstract/OpTest.sol"; -import {SignedContextV1} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterCallerV4.sol"; +import {SignedContextV1} from "rainlang-interface-0.2.8/src/interface/IInterpreterCallerV4.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {BadOpOutputsLength} from "rain-interpreter-interface-0.1.0/src/error/ErrIntegrity.sol"; +import {BadOpOutputsLength} from "rainlang-interface-0.2.8/src/error/ErrIntegrity.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpStackTest diff --git a/test/src/lib/op/LibAllStandardOps.filesystemOrdering.t.sol b/test/src/lib/op/LibAllStandardOps.filesystemOrdering.t.sol index 766089675..d62a08261 100644 --- a/test/src/lib/op/LibAllStandardOps.filesystemOrdering.t.sol +++ b/test/src/lib/op/LibAllStandardOps.filesystemOrdering.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibAllStandardOps, ALL_STANDARD_OPS_LENGTH} from "../../../../src/lib/op/LibAllStandardOps.sol"; -import {AuthoringMetaV2} from "rain-interpreter-interface-0.1.0/src/interface/IParserV2.sol"; +import {AuthoringMetaV2} from "rainlang-interface-0.2.8/src/interface/IParserV2.sol"; import {LibCamelToKebab} from "test/lib/string/LibCamelToKebab.sol"; /// @title LibAllStandardOpsFilesystemOrderingTest diff --git a/test/src/lib/op/LibAllStandardOps.t.sol b/test/src/lib/op/LibAllStandardOps.t.sol index 3d669c338..7eb9782bc 100644 --- a/test/src/lib/op/LibAllStandardOps.t.sol +++ b/test/src/lib/op/LibAllStandardOps.t.sol @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibAllStandardOps, ALL_STANDARD_OPS_LENGTH} from "../../../../src/lib/op/LibAllStandardOps.sol"; -import {AuthoringMetaV2} from "rain-interpreter-interface-0.1.0/src/interface/IParserV2.sol"; +import {AuthoringMetaV2} from "rainlang-interface-0.2.8/src/interface/IParserV2.sol"; import {LITERAL_PARSERS_LENGTH} from "../../../../src/lib/parse/literal/LibParseLiteral.sol"; /// @title LibAllStandardOpsTest diff --git a/test/src/lib/op/bitwise/LibOpBitwiseAnd.t.sol b/test/src/lib/op/bitwise/LibOpBitwiseAnd.t.sol index 3b21897af..fda25d250 100644 --- a/test/src/lib/op/bitwise/LibOpBitwiseAnd.t.sol +++ b/test/src/lib/op/bitwise/LibOpBitwiseAnd.t.sol @@ -4,7 +4,7 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibOpBitwiseAnd} from "../../../../../src/lib/op/bitwise/LibOpBitwiseAnd.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {UnexpectedOperand} from "../../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/op/bitwise/LibOpBitwiseCountOnes.t.sol b/test/src/lib/op/bitwise/LibOpBitwiseCountOnes.t.sol index 8bcac8883..ef8fdf322 100644 --- a/test/src/lib/op/bitwise/LibOpBitwiseCountOnes.t.sol +++ b/test/src/lib/op/bitwise/LibOpBitwiseCountOnes.t.sol @@ -6,8 +6,8 @@ import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibOpBitwiseCountOnes} from "../../../../../src/lib/op/bitwise/LibOpBitwiseCountOnes.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {LibCtPop} from "rain-math-binary-0.1.1/src/lib/LibCtPop.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {LibCtPop} from "rain-math-binary-0.1.4/src/lib/LibCtPop.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {UnexpectedOperand} from "../../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/op/bitwise/LibOpBitwiseDecode.t.sol b/test/src/lib/op/bitwise/LibOpBitwiseDecode.t.sol index ab8bc78e2..d9604155f 100644 --- a/test/src/lib/op/bitwise/LibOpBitwiseDecode.t.sol +++ b/test/src/lib/op/bitwise/LibOpBitwiseDecode.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {TruncatedBitwiseEncoding, ZeroLengthBitwiseEncoding} from "../../../../../src/error/ErrBitwise.sol"; import {LibOpBitwiseDecode} from "../../../../../src/lib/op/bitwise/LibOpBitwiseDecode.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; diff --git a/test/src/lib/op/bitwise/LibOpBitwiseEncode.t.sol b/test/src/lib/op/bitwise/LibOpBitwiseEncode.t.sol index d9a47fa5d..12f65bc42 100644 --- a/test/src/lib/op/bitwise/LibOpBitwiseEncode.t.sol +++ b/test/src/lib/op/bitwise/LibOpBitwiseEncode.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {TruncatedBitwiseEncoding, ZeroLengthBitwiseEncoding} from "../../../../../src/error/ErrBitwise.sol"; import {LibOpBitwiseEncode} from "../../../../../src/lib/op/bitwise/LibOpBitwiseEncode.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; diff --git a/test/src/lib/op/bitwise/LibOpBitwiseOr.t.sol b/test/src/lib/op/bitwise/LibOpBitwiseOr.t.sol index 6a1a04fa0..8424e3edd 100644 --- a/test/src/lib/op/bitwise/LibOpBitwiseOr.t.sol +++ b/test/src/lib/op/bitwise/LibOpBitwiseOr.t.sol @@ -4,7 +4,7 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibOpBitwiseOr} from "../../../../../src/lib/op/bitwise/LibOpBitwiseOr.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {UnexpectedOperand} from "../../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/op/bitwise/LibOpBitwiseShiftLeft.t.sol b/test/src/lib/op/bitwise/LibOpBitwiseShiftLeft.t.sol index d6a4887d6..fb2b37372 100644 --- a/test/src/lib/op/bitwise/LibOpBitwiseShiftLeft.t.sol +++ b/test/src/lib/op/bitwise/LibOpBitwiseShiftLeft.t.sol @@ -6,7 +6,7 @@ import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibOpBitwiseShiftLeft} from "../../../../../src/lib/op/bitwise/LibOpBitwiseShiftLeft.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {UnsupportedBitwiseShiftAmount} from "../../../../../src/error/ErrBitwise.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {OperandOverflow} from "../../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/op/bitwise/LibOpBitwiseShiftRight.t.sol b/test/src/lib/op/bitwise/LibOpBitwiseShiftRight.t.sol index 984e71487..094e48513 100644 --- a/test/src/lib/op/bitwise/LibOpBitwiseShiftRight.t.sol +++ b/test/src/lib/op/bitwise/LibOpBitwiseShiftRight.t.sol @@ -6,7 +6,7 @@ import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibOpBitwiseShiftRight} from "../../../../../src/lib/op/bitwise/LibOpBitwiseShiftRight.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {UnsupportedBitwiseShiftAmount} from "../../../../../src/error/ErrBitwise.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {OperandOverflow} from "../../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/op/call/LibOpCall.t.sol b/test/src/lib/op/call/LibOpCall.t.sol index 44c25352b..d79ca8120 100644 --- a/test/src/lib/op/call/LibOpCall.t.sol +++ b/test/src/lib/op/call/LibOpCall.t.sol @@ -8,13 +8,13 @@ import { SourceIndexV2, EvalV4, StackItem -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {OpTest} from "test/abstract/OpTest.sol"; -import {BytecodeTest} from "rain-interpreter-interface-0.1.0/src/../test/abstract/BytecodeTest.sol"; +import {BytecodeTest} from "rainlang-interface-0.2.8/src/../test/abstract/BytecodeTest.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibOpCall} from "../../../../../src/lib/op/call/LibOpCall.sol"; import {CallOutputsExceedSource, CallInputsMismatchSource} from "../../../../../src/error/ErrIntegrity.sol"; -import {LibBytecode, SourceIndexOutOfBounds} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; +import {LibBytecode, SourceIndexOutOfBounds} from "rainlang-interface-0.2.8/src/lib/bytecode/LibBytecode.sol"; import {BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {STACK_TRACER} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; diff --git a/test/src/lib/op/crypto/LibOpHash.t.sol b/test/src/lib/op/crypto/LibOpHash.t.sol index 44277df9a..1cdfe0760 100644 --- a/test/src/lib/op/crypto/LibOpHash.t.sol +++ b/test/src/lib/op/crypto/LibOpHash.t.sol @@ -5,19 +5,14 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpHash} from "../../../../../src/lib/op/crypto/LibOpHash.sol"; -import {LibContext} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; - -import {LibPointer, Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; -import {LibUint256Array} from "rain-solmem-0.1.3/src/lib/LibUint256Array.sol"; - -import { - OperandV2, - SourceIndexV2, - EvalV4, - StackItem -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {FullyQualifiedNamespace} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; -import {SignedContextV1} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterCallerV4.sol"; +import {LibContext} from "rainlang-interface-0.2.8/src/lib/caller/LibContext.sol"; + +import {LibPointer, Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; +import {LibUint256Array} from "rain-solmem-0.1.28/src/lib/LibUint256Array.sol"; + +import {OperandV2, SourceIndexV2, EvalV4, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {FullyQualifiedNamespace} from "rainlang-interface-0.2.8/src/interface/IInterpreterStoreV3.sol"; +import {SignedContextV1} from "rainlang-interface-0.2.8/src/interface/IInterpreterCallerV4.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {InterpreterState, LibInterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; diff --git a/test/src/lib/op/erc20/LibOpERC20Allowance.t.sol b/test/src/lib/op/erc20/LibOpERC20Allowance.t.sol index aa25e7309..4515ad077 100644 --- a/test/src/lib/op/erc20/LibOpERC20Allowance.t.sol +++ b/test/src/lib/op/erc20/LibOpERC20Allowance.t.sol @@ -4,7 +4,7 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibOpERC20Allowance} from "../../../../../src/lib/op/erc20/LibOpERC20Allowance.sol"; import {IERC20} from "@openzeppelin-contracts-5.6.1/token/ERC20/IERC20.sol"; import {UnexpectedOperand} from "../../../../../src/error/ErrParse.sol"; @@ -14,7 +14,7 @@ import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFl import {TOFUOutcome, ITOFUTokenDecimals} from "rain-tofu-erc20-decimals-0.1.1/src/interface/ITOFUTokenDecimals.sol"; import {NotAnAddress} from "../../../../../src/error/ErrRainType.sol"; import {LibTestCast} from "test/lib/typecast/LibTestCast.sol"; -import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.28/src/lib/LibBytes32Array.sol"; /// @title LibOpERC20AllowanceTest /// @notice Test the opcode for getting the allowance of an erc20 token. diff --git a/test/src/lib/op/erc20/LibOpERC20BalanceOf.t.sol b/test/src/lib/op/erc20/LibOpERC20BalanceOf.t.sol index 4c62c95b3..009581516 100644 --- a/test/src/lib/op/erc20/LibOpERC20BalanceOf.t.sol +++ b/test/src/lib/op/erc20/LibOpERC20BalanceOf.t.sol @@ -4,7 +4,7 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibOpERC20BalanceOf} from "../../../../../src/lib/op/erc20/LibOpERC20BalanceOf.sol"; import {IERC20} from "@openzeppelin-contracts-5.6.1/token/ERC20/IERC20.sol"; import {UnexpectedOperand} from "../../../../../src/error/ErrParse.sol"; @@ -14,7 +14,7 @@ import {LibDecimalFloat, Float, LossyConversionToFloat} from "rain-math-float-0. import {TOFUOutcome, ITOFUTokenDecimals} from "rain-tofu-erc20-decimals-0.1.1/src/interface/ITOFUTokenDecimals.sol"; import {NotAnAddress} from "../../../../../src/error/ErrRainType.sol"; import {LibTestCast} from "test/lib/typecast/LibTestCast.sol"; -import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.28/src/lib/LibBytes32Array.sol"; /// @title LibOpERC20BalanceOfTest /// @notice Test the opcode for getting the balance of an erc20 token. diff --git a/test/src/lib/op/erc20/LibOpERC20TotalSupply.t.sol b/test/src/lib/op/erc20/LibOpERC20TotalSupply.t.sol index 6dab96c47..693f7b826 100644 --- a/test/src/lib/op/erc20/LibOpERC20TotalSupply.t.sol +++ b/test/src/lib/op/erc20/LibOpERC20TotalSupply.t.sol @@ -4,7 +4,7 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibOpERC20TotalSupply} from "../../../../../src/lib/op/erc20/LibOpERC20TotalSupply.sol"; import {IERC20} from "@openzeppelin-contracts-5.6.1/interfaces/IERC20.sol"; import {UnexpectedOperand} from "../../../../../src/error/ErrParse.sol"; @@ -14,7 +14,7 @@ import {LibDecimalFloat, Float, LossyConversionToFloat} from "rain-math-float-0. import {TOFUOutcome, ITOFUTokenDecimals} from "rain-tofu-erc20-decimals-0.1.1/src/interface/ITOFUTokenDecimals.sol"; import {NotAnAddress} from "../../../../../src/error/ErrRainType.sol"; import {LibTestCast} from "test/lib/typecast/LibTestCast.sol"; -import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.28/src/lib/LibBytes32Array.sol"; /// @title LibOpERC20TotalSupplyTest /// @notice Test the opcode for getting the total supply of an erc20 contract. diff --git a/test/src/lib/op/erc20/uint256/LibOpUint256ERC20Allowance.t.sol b/test/src/lib/op/erc20/uint256/LibOpUint256ERC20Allowance.t.sol index 6c6d7e6b3..782ba2d60 100644 --- a/test/src/lib/op/erc20/uint256/LibOpUint256ERC20Allowance.t.sol +++ b/test/src/lib/op/erc20/uint256/LibOpUint256ERC20Allowance.t.sol @@ -4,14 +4,14 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibOpUint256ERC20Allowance} from "../../../../../../src/lib/op/erc20/uint256/LibOpUint256ERC20Allowance.sol"; import {IERC20} from "@openzeppelin-contracts-5.6.1/token/ERC20/IERC20.sol"; import {UnexpectedOperand} from "../../../../../../src/error/ErrParse.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {NotAnAddress} from "../../../../../../src/error/ErrRainType.sol"; import {LibTestCast} from "test/lib/typecast/LibTestCast.sol"; -import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.28/src/lib/LibBytes32Array.sol"; /// @title LibOpUint256ERC20AllowanceTest /// @notice Test the opcode for getting the allowance of an erc20 token. diff --git a/test/src/lib/op/erc20/uint256/LibOpUint256ERC20BalanceOf.t.sol b/test/src/lib/op/erc20/uint256/LibOpUint256ERC20BalanceOf.t.sol index 080aa17d5..5ca4ef206 100644 --- a/test/src/lib/op/erc20/uint256/LibOpUint256ERC20BalanceOf.t.sol +++ b/test/src/lib/op/erc20/uint256/LibOpUint256ERC20BalanceOf.t.sol @@ -4,14 +4,14 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibOpUint256ERC20BalanceOf} from "../../../../../../src/lib/op/erc20/uint256/LibOpUint256ERC20BalanceOf.sol"; import {IERC20} from "@openzeppelin-contracts-5.6.1/token/ERC20/IERC20.sol"; import {UnexpectedOperand} from "../../../../../../src/error/ErrParse.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {NotAnAddress} from "../../../../../../src/error/ErrRainType.sol"; import {LibTestCast} from "test/lib/typecast/LibTestCast.sol"; -import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.28/src/lib/LibBytes32Array.sol"; /// @title LibOpUint256ERC20BalanceOfTest /// @notice Test the opcode for getting the balance of an erc20 token. diff --git a/test/src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.t.sol b/test/src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.t.sol index 311dd19f6..8a0576575 100644 --- a/test/src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.t.sol +++ b/test/src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.t.sol @@ -4,7 +4,7 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import { LibOpUint256ERC20TotalSupply } from "../../../../../../src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.sol"; @@ -13,7 +13,7 @@ import {UnexpectedOperand} from "../../../../../../src/error/ErrParse.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {NotAnAddress} from "../../../../../../src/error/ErrRainType.sol"; import {LibTestCast} from "test/lib/typecast/LibTestCast.sol"; -import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.28/src/lib/LibBytes32Array.sol"; /// @title LibOpUint256ERC20TotalSupplyTest /// @notice Test the opcode for getting the total supply of an erc20 contract. diff --git a/test/src/lib/op/erc5313/LibOpERC5313Owner.t.sol b/test/src/lib/op/erc5313/LibOpERC5313Owner.t.sol index 6f14aa513..e204afa31 100644 --- a/test/src/lib/op/erc5313/LibOpERC5313Owner.t.sol +++ b/test/src/lib/op/erc5313/LibOpERC5313Owner.t.sol @@ -4,14 +4,14 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibOpERC5313Owner} from "../../../../../src/lib/op/erc5313/LibOpERC5313Owner.sol"; import {IERC5313} from "@openzeppelin-contracts-5.6.1/interfaces/IERC5313.sol"; import {UnexpectedOperand} from "../../../../../src/error/ErrParse.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {NotAnAddress} from "../../../../../src/error/ErrRainType.sol"; import {LibTestCast} from "test/lib/typecast/LibTestCast.sol"; -import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.28/src/lib/LibBytes32Array.sol"; /// @title LibOpERC5313OwnerTest /// @notice Test the opcode for getting the owner of an erc5313 contract. diff --git a/test/src/lib/op/erc721/LibOpERC721BalanceOf.t.sol b/test/src/lib/op/erc721/LibOpERC721BalanceOf.t.sol index 61ae077d1..46bede47e 100644 --- a/test/src/lib/op/erc721/LibOpERC721BalanceOf.t.sol +++ b/test/src/lib/op/erc721/LibOpERC721BalanceOf.t.sol @@ -12,16 +12,16 @@ import { SourceIndexV2, EvalV4, StackItem -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {LibContext} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; -import {SignedContextV1} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterCallerV4.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {LibContext} from "rainlang-interface-0.2.8/src/lib/caller/LibContext.sol"; +import {SignedContextV1} from "rainlang-interface-0.2.8/src/interface/IInterpreterCallerV4.sol"; import {UnexpectedOperand} from "../../../../../src/error/ErrParse.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; import {LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; import {NotAnAddress} from "../../../../../src/error/ErrRainType.sol"; import {LibTestCast} from "test/lib/typecast/LibTestCast.sol"; -import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.28/src/lib/LibBytes32Array.sol"; /// @title LibOpERC721BalanceOfTest /// @notice Test the opcode for getting the balance of an erc721 token. diff --git a/test/src/lib/op/erc721/LibOpERC721OwnerOf.t.sol b/test/src/lib/op/erc721/LibOpERC721OwnerOf.t.sol index d2d108117..ae4d32fc8 100644 --- a/test/src/lib/op/erc721/LibOpERC721OwnerOf.t.sol +++ b/test/src/lib/op/erc721/LibOpERC721OwnerOf.t.sol @@ -12,16 +12,16 @@ import { OperandV2, EvalV4, StackItem -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {LibContext} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; -import {SignedContextV1} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterCallerV4.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {LibContext} from "rainlang-interface-0.2.8/src/lib/caller/LibContext.sol"; +import {SignedContextV1} from "rainlang-interface-0.2.8/src/interface/IInterpreterCallerV4.sol"; import {UnexpectedOperand} from "../../../../../src/error/ErrParse.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; import {NotAnAddress} from "../../../../../src/error/ErrRainType.sol"; import {LibTestCast} from "test/lib/typecast/LibTestCast.sol"; -import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.28/src/lib/LibBytes32Array.sol"; /// @title LibOpERC721OwnerOfTest /// @notice Test the opcode for getting the owner of an erc721 token. diff --git a/test/src/lib/op/erc721/uint256/LibOpUint256ERC721BalanceOf.t.sol b/test/src/lib/op/erc721/uint256/LibOpUint256ERC721BalanceOf.t.sol index ff6f78a5a..1e05f6a25 100644 --- a/test/src/lib/op/erc721/uint256/LibOpUint256ERC721BalanceOf.t.sol +++ b/test/src/lib/op/erc721/uint256/LibOpUint256ERC721BalanceOf.t.sol @@ -12,14 +12,14 @@ import { SourceIndexV2, EvalV4, StackItem -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {LibContext} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; -import {SignedContextV1} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterCallerV4.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {LibContext} from "rainlang-interface-0.2.8/src/lib/caller/LibContext.sol"; +import {SignedContextV1} from "rainlang-interface-0.2.8/src/interface/IInterpreterCallerV4.sol"; import {UnexpectedOperand} from "../../../../../../src/error/ErrParse.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; import {NotAnAddress} from "../../../../../../src/error/ErrRainType.sol"; -import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.28/src/lib/LibBytes32Array.sol"; import {LibTestCast} from "test/lib/typecast/LibTestCast.sol"; /// @title LibOpUint256ERC721BalanceOfTest diff --git a/test/src/lib/op/evm/LibOpBlockNumber.t.sol b/test/src/lib/op/evm/LibOpBlockNumber.t.sol index dcbc750f6..e6b242ccf 100644 --- a/test/src/lib/op/evm/LibOpBlockNumber.t.sol +++ b/test/src/lib/op/evm/LibOpBlockNumber.t.sol @@ -4,9 +4,8 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; -import {LibPointer, Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {LibStackPointer} from "rain-solmem-0.1.3/src/lib/LibStackPointer.sol"; +import {LibPointer, Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibInterpreterState, InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibOpBlockNumber} from "../../../../../src/lib/op/evm/LibOpBlockNumber.sol"; @@ -16,7 +15,6 @@ import {LibOperand} from "test/lib/operand/LibOperand.sol"; /// @notice Test the runtime and integrity time logic of LibOpBlockNumber. contract LibOpBlockNumberTest is OpTest { using LibPointer for Pointer; - using LibStackPointer for Pointer; using LibInterpreterState for InterpreterState; /// Directly test the integrity logic of LibOpBlockNumber. diff --git a/test/src/lib/op/evm/LibOpBlockTimestamp.t.sol b/test/src/lib/op/evm/LibOpBlockTimestamp.t.sol index de867f70c..3e6ba9546 100644 --- a/test/src/lib/op/evm/LibOpBlockTimestamp.t.sol +++ b/test/src/lib/op/evm/LibOpBlockTimestamp.t.sol @@ -3,20 +3,14 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; -import {Pointer, LibPointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; -import {LibStackPointer} from "rain-solmem-0.1.3/src/lib/LibStackPointer.sol"; +import {Pointer, LibPointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {LibInterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import { - OperandV2, - SourceIndexV2, - EvalV4, - StackItem -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, SourceIndexV2, EvalV4, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {FullyQualifiedNamespace} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; -import {SignedContextV1} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterCallerV4.sol"; -import {LibContext} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; +import {FullyQualifiedNamespace} from "rainlang-interface-0.2.8/src/interface/IInterpreterStoreV3.sol"; +import {SignedContextV1} from "rainlang-interface-0.2.8/src/interface/IInterpreterCallerV4.sol"; +import {LibContext} from "rainlang-interface-0.2.8/src/lib/caller/LibContext.sol"; import {LibOpBlockTimestamp} from "../../../../../src/lib/op/evm/LibOpBlockTimestamp.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; @@ -25,7 +19,6 @@ import {LibOperand} from "test/lib/operand/LibOperand.sol"; /// @notice Test the runtime and integrity time logic of LibOpBlockTimestamp. contract LibOpBlockTimestampTest is OpTest { using LibPointer for Pointer; - using LibStackPointer for Pointer; using LibInterpreterState for InterpreterState; function timestampWords() internal pure returns (string[] memory) { diff --git a/test/src/lib/op/evm/LibOpChainId.t.sol b/test/src/lib/op/evm/LibOpChainId.t.sol index a61f42af4..ed77b6519 100644 --- a/test/src/lib/op/evm/LibOpChainId.t.sol +++ b/test/src/lib/op/evm/LibOpChainId.t.sol @@ -8,7 +8,7 @@ import {LibInterpreterState, InterpreterState} from "../../../../../src/lib/stat import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibOpChainId} from "../../../../../src/lib/op/evm/LibOpChainId.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; /// @title LibOpChainIdTest diff --git a/test/src/lib/op/logic/LibOpAny.t.sol b/test/src/lib/op/logic/LibOpAny.t.sol index c9515ed8c..4f79863cc 100644 --- a/test/src/lib/op/logic/LibOpAny.t.sol +++ b/test/src/lib/op/logic/LibOpAny.t.sol @@ -2,17 +2,17 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; -import {LibUint256Array} from "rain-solmem-0.1.3/src/lib/LibUint256Array.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; +import {LibUint256Array} from "rain-solmem-0.1.28/src/lib/LibUint256Array.sol"; import {MemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpAny} from "../../../../../src/lib/op/logic/LibOpAny.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import { IInterpreterStoreV3, FullyQualifiedNamespace -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterStoreV3.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibInterpreterState, InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; diff --git a/test/src/lib/op/logic/LibOpBinaryEqualTo.t.sol b/test/src/lib/op/logic/LibOpBinaryEqualTo.t.sol index ee2b5377b..7cda84d48 100644 --- a/test/src/lib/op/logic/LibOpBinaryEqualTo.t.sol +++ b/test/src/lib/op/logic/LibOpBinaryEqualTo.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpBinaryEqualTo} from "../../../../../src/lib/op/logic/LibOpBinaryEqualTo.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; diff --git a/test/src/lib/op/logic/LibOpConditions.t.sol b/test/src/lib/op/logic/LibOpConditions.t.sol index 59c95787c..391db8385 100644 --- a/test/src/lib/op/logic/LibOpConditions.t.sol +++ b/test/src/lib/op/logic/LibOpConditions.t.sol @@ -2,13 +2,15 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {LibUint256Array} from "rain-solmem-0.1.3/src/lib/LibUint256Array.sol"; +import {LibUint256Array} from "rain-solmem-0.1.28/src/lib/LibUint256Array.sol"; + +import {LibPointer, Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpConditions} from "../../../../../src/lib/op/logic/LibOpConditions.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibIntOrAString, IntOrAString} from "rain-intorastring-0.1.0/src/lib/LibIntOrAString.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; @@ -16,6 +18,7 @@ import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFl contract LibOpConditionsTest is OpTest { using LibUint256Array for uint256[]; using LibDecimalFloat for Float; + using LibPointer for Pointer; /// Directly test the integrity logic of LibOpConditions. This tests the happy /// path where the operand is valid. @@ -72,6 +75,31 @@ contract LibOpConditionsTest is OpTest { ); } + /// External wrapper that invokes ONLY `LibOpConditions.run`. Unlike + /// `opReferenceCheck`, no reference implementation is called, so a revert + /// here can only originate from `run` itself. This isolates the + /// "no condition met" revert from the reference implementation's own revert. + /// Returns both the value left at the resulting stack top and the number of + /// words the stack top advanced (i.e. inputs consumed below the output), so + /// callers can assert exactly where `run` placed its single output. + function runExternal(OperandV2 operand, StackItem[] memory inputs) + external + view + returns (StackItem value, uint256 stackTopWordsConsumed) + { + InterpreterState memory state = opTestDefaultInterpreterState(); + // The inputs array's data region is a contiguous run of words, which is + // exactly the stack layout `run` expects. The first input is at the top + // of the stack. + Pointer stackTop; + assembly ("memory-safe") { + stackTop := add(inputs, 0x20) + } + Pointer stackTopAfter = LibOpConditions.run(state, operand, stackTop); + stackTopWordsConsumed = (Pointer.unwrap(stackTopAfter) - Pointer.unwrap(stackTop)) / 0x20; + value = StackItem.wrap(stackTopAfter.unsafeReadWord()); + } + /// Test the error case where no conditions are met. function testOpConditionsRunNoConditionsMet(StackItem[] memory inputs, string memory reason) external { vm.assume(bytes(reason).length <= 31); @@ -124,6 +152,36 @@ contract LibOpConditionsTest is OpTest { checkUnhappy("_: conditions(0x00 0x00 0x00 0x00 \"fail\");", "fail"); } + /// Directly test that `run` itself reverts when no condition is met, with an + /// even number of inputs (no reason input), so the revert reason is empty. + /// This calls `run` in isolation (via `runExternal`) so the revert can only + /// come from `run`, not from a reference implementation. + function testOpConditionsRunRevertsNoMatchEven() external { + StackItem[] memory inputs = new StackItem[](2); + // Condition is zero so no condition is met. + inputs[0] = StackItem.wrap(0); + inputs[1] = StackItem.wrap(Float.unwrap(LibDecimalFloat.packLossless(6, 0))); + OperandV2 operand = LibOperand.build(2, 1, 0); + vm.expectRevert(bytes("")); + this.runExternal(operand, inputs); + } + + /// Directly test that `run` itself reverts when no condition is met, with an + /// odd number of inputs, so the revert reason is the trailing reason input. + /// This calls `run` in isolation (via `runExternal`) so the revert can only + /// come from `run`, not from a reference implementation. + function testOpConditionsRunRevertsNoMatchOddReason() external { + StackItem[] memory inputs = new StackItem[](3); + // Both conditions zero so no condition is met. + inputs[0] = StackItem.wrap(0); + inputs[1] = StackItem.wrap(Float.unwrap(LibDecimalFloat.packLossless(6, 0))); + // The trailing reason input. + inputs[2] = StackItem.wrap(bytes32(IntOrAString.unwrap(LibIntOrAString.fromStringV3("boom")))); + OperandV2 operand = LibOperand.build(3, 1, 0); + vm.expectRevert(bytes("boom")); + this.runExternal(operand, inputs); + } + /// Test the eval of conditions opcode parsed from a string. Tests 1 zero /// then 1 nonzero condition. function testOpConditionsEval1FalseInput1TrueInput() external view { @@ -142,6 +200,44 @@ contract LibOpConditionsTest is OpTest { checkHappy("_: conditions(5 6 0 9);", Float.unwrap(LibDecimalFloat.packLossless(6, 0)), ""); } + /// Test the eval of conditions opcode parsed from a string with an ODD number + /// of inputs (the trailing input is the error reason) where the first + /// condition is met. The matched value must be returned and the trailing + /// reason input must be ignored. This exercises the odd-input success path + /// where the result is written into the slot occupied by the reason input. + function testOpConditionsEval3InputsTrueOddReason() external view { + checkHappy("_: conditions(1 6 \"ignored\");", Float.unwrap(LibDecimalFloat.packLossless(6, 0)), ""); + } + + /// Test the eval of conditions opcode parsed from a string with an ODD number + /// of inputs (the trailing input is the error reason) where the first pair is + /// false and the second pair is true. The second value must be returned and + /// the trailing reason input must be ignored. + function testOpConditionsEval5InputsSecondTrueOddReason() external view { + checkHappy("_: conditions(0 9 1 7 \"ignored\");", Float.unwrap(LibDecimalFloat.packLossless(7, 0)), ""); + } + + /// Directly test where `run` places its output for an ODD number of inputs + /// when a condition is met. With 3 inputs (one condition/value pair plus a + /// trailing reason input) the output must be written into the slot above the + /// pair (the slot occupied by the reason input), so the stack top advances by + /// 2 words (the condition and value are consumed) and the output value is the + /// matched value. This asserts the resulting stack top pointer, not just the + /// value, so a mutation that placed the output one slot lower is caught. + function testOpConditionsRunOddMatchStackTopPlacement() external view { + StackItem[] memory inputs = new StackItem[](3); + // First condition is nonzero (met) with value 6. + inputs[0] = StackItem.wrap(Float.unwrap(LibDecimalFloat.packLossless(1, 0))); + inputs[1] = StackItem.wrap(Float.unwrap(LibDecimalFloat.packLossless(6, 0))); + // Trailing reason input, which must be ignored on the success path. + inputs[2] = StackItem.wrap(bytes32(IntOrAString.unwrap(LibIntOrAString.fromStringV3("ignored")))); + OperandV2 operand = LibOperand.build(3, 1, 0); + (StackItem value, uint256 stackTopWordsConsumed) = this.runExternal(operand, inputs); + // The condition and value words are consumed below the single output. + assertEq(stackTopWordsConsumed, 2, "stack top placement"); + assertEq(StackItem.unwrap(value), Float.unwrap(LibDecimalFloat.packLossless(6, 0)), "matched value"); + } + /// Test that conditions without inputs fails integrity check. function testOpConditionsEvalFail0Inputs() public { vm.expectRevert(abi.encodeWithSelector(BadOpInputsLength.selector, 0, 2, 0)); diff --git a/test/src/lib/op/logic/LibOpEnsure.t.sol b/test/src/lib/op/logic/LibOpEnsure.t.sol index d3c9e691e..8c3c297a3 100644 --- a/test/src/lib/op/logic/LibOpEnsure.t.sol +++ b/test/src/lib/op/logic/LibOpEnsure.t.sol @@ -7,7 +7,7 @@ import {ExcessRHSItems} from "../../../../../src/error/ErrParse.sol"; import {LibParseError} from "../../../../../src/lib/parse/LibParseError.sol"; import {LibOpEnsure} from "../../../../../src/lib/op/logic/LibOpEnsure.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibIntOrAString, IntOrAString} from "rain-intorastring-0.1.0/src/lib/LibIntOrAString.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; diff --git a/test/src/lib/op/logic/LibOpEqualTo.t.sol b/test/src/lib/op/logic/LibOpEqualTo.t.sol index f978ece70..cb1eee6ab 100644 --- a/test/src/lib/op/logic/LibOpEqualTo.t.sol +++ b/test/src/lib/op/logic/LibOpEqualTo.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpEqualTo} from "../../../../../src/lib/op/logic/LibOpEqualTo.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; diff --git a/test/src/lib/op/logic/LibOpEvery.t.sol b/test/src/lib/op/logic/LibOpEvery.t.sol index 357b7a083..8d79ce5d4 100644 --- a/test/src/lib/op/logic/LibOpEvery.t.sol +++ b/test/src/lib/op/logic/LibOpEvery.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpEvery} from "../../../../../src/lib/op/logic/LibOpEvery.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/test/src/lib/op/logic/LibOpGreaterThan.t.sol b/test/src/lib/op/logic/LibOpGreaterThan.t.sol index d15189223..49eb5eab4 100644 --- a/test/src/lib/op/logic/LibOpGreaterThan.t.sol +++ b/test/src/lib/op/logic/LibOpGreaterThan.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpGreaterThan} from "../../../../../src/lib/op/logic/LibOpGreaterThan.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; diff --git a/test/src/lib/op/logic/LibOpGreaterThanOrEqualTo.t.sol b/test/src/lib/op/logic/LibOpGreaterThanOrEqualTo.t.sol index cc5b7b909..e1bd21465 100644 --- a/test/src/lib/op/logic/LibOpGreaterThanOrEqualTo.t.sol +++ b/test/src/lib/op/logic/LibOpGreaterThanOrEqualTo.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpGreaterThanOrEqualTo} from "../../../../../src/lib/op/logic/LibOpGreaterThanOrEqualTo.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; diff --git a/test/src/lib/op/logic/LibOpIf.t.sol b/test/src/lib/op/logic/LibOpIf.t.sol index d80314202..98df2a33a 100644 --- a/test/src/lib/op/logic/LibOpIf.t.sol +++ b/test/src/lib/op/logic/LibOpIf.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpIf} from "../../../../../src/lib/op/logic/LibOpIf.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/test/src/lib/op/logic/LibOpIsZero.t.sol b/test/src/lib/op/logic/LibOpIsZero.t.sol index 4cfe3a66e..2dc52b26e 100644 --- a/test/src/lib/op/logic/LibOpIsZero.t.sol +++ b/test/src/lib/op/logic/LibOpIsZero.t.sol @@ -6,7 +6,7 @@ import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibOpIsZero} from "../../../../../src/lib/op/logic/LibOpIsZero.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; contract LibOpIsZeroTest is OpTest { diff --git a/test/src/lib/op/logic/LibOpLessThan.t.sol b/test/src/lib/op/logic/LibOpLessThan.t.sol index ca123377b..3bacf38df 100644 --- a/test/src/lib/op/logic/LibOpLessThan.t.sol +++ b/test/src/lib/op/logic/LibOpLessThan.t.sol @@ -4,7 +4,7 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpLessThan} from "../../../../../src/lib/op/logic/LibOpLessThan.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; diff --git a/test/src/lib/op/logic/LibOpLessThanOrEqualTo.t.sol b/test/src/lib/op/logic/LibOpLessThanOrEqualTo.t.sol index 891b35069..7e9ea16f7 100644 --- a/test/src/lib/op/logic/LibOpLessThanOrEqualTo.t.sol +++ b/test/src/lib/op/logic/LibOpLessThanOrEqualTo.t.sol @@ -11,10 +11,10 @@ import { FullyQualifiedNamespace, EvalV4, StackItem -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import {SignedContextV1} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterCallerV4.sol"; -import {LibContext} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; +import {SignedContextV1} from "rainlang-interface-0.2.8/src/interface/IInterpreterCallerV4.sol"; +import {LibContext} from "rainlang-interface-0.2.8/src/lib/caller/LibContext.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; contract LibOpLessThanOrEqualToTest is OpTest { diff --git a/test/src/lib/op/math/LibOpAbs.t.sol b/test/src/lib/op/math/LibOpAbs.t.sol index 6597e00ae..6a44dbda9 100644 --- a/test/src/lib/op/math/LibOpAbs.t.sol +++ b/test/src/lib/op/math/LibOpAbs.t.sol @@ -6,7 +6,7 @@ import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOper import {LibOpAbs} from "../../../../../src/lib/op/math/LibOpAbs.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; contract LibOpAbsTest is OpTest { /// Directly test the integrity logic of LibOpAbs. diff --git a/test/src/lib/op/math/LibOpAdd.t.sol b/test/src/lib/op/math/LibOpAdd.t.sol index d44644162..970019a94 100644 --- a/test/src/lib/op/math/LibOpAdd.t.sol +++ b/test/src/lib/op/math/LibOpAdd.t.sol @@ -6,7 +6,7 @@ import {OpTest, IntegrityCheckState, OperandV2} from "test/abstract/OpTest.sol"; import {LibOpAdd} from "../../../../../src/lib/op/math/LibOpAdd.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; contract LibOpAddTest is OpTest { /// Directly test the integrity logic of LibOpAdd. This tests the happy diff --git a/test/src/lib/op/math/LibOpAvg.t.sol b/test/src/lib/op/math/LibOpAvg.t.sol index 6d94e016a..9404b5a1c 100644 --- a/test/src/lib/op/math/LibOpAvg.t.sol +++ b/test/src/lib/op/math/LibOpAvg.t.sol @@ -6,7 +6,7 @@ import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOper import {LibOpAvg} from "../../../../../src/lib/op/math/LibOpAvg.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; contract LibOpAvgTest is OpTest { /// Directly test the integrity logic of LibOpAvg. diff --git a/test/src/lib/op/math/LibOpCeil.t.sol b/test/src/lib/op/math/LibOpCeil.t.sol index 771f4ebd3..f086aa2ab 100644 --- a/test/src/lib/op/math/LibOpCeil.t.sol +++ b/test/src/lib/op/math/LibOpCeil.t.sol @@ -6,7 +6,7 @@ import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOper import {LibOpCeil} from "../../../../../src/lib/op/math/LibOpCeil.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; contract LibOpCeilTest is OpTest { /// Directly test the integrity logic of LibOpCeil. diff --git a/test/src/lib/op/math/LibOpDiv.t.sol b/test/src/lib/op/math/LibOpDiv.t.sol index b6616593f..8c861a3d9 100644 --- a/test/src/lib/op/math/LibOpDiv.t.sol +++ b/test/src/lib/op/math/LibOpDiv.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, InterpreterState, OperandV2} from "test/abstract/OpTest.sol"; import {LibOpDiv} from "../../../../../src/lib/op/math/LibOpDiv.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; import { LibDecimalFloatImplementation, diff --git a/test/src/lib/op/math/LibOpE.t.sol b/test/src/lib/op/math/LibOpE.t.sol index 5d46d1150..cf16c08be 100644 --- a/test/src/lib/op/math/LibOpE.t.sol +++ b/test/src/lib/op/math/LibOpE.t.sol @@ -12,9 +12,9 @@ import { StackItem, FullyQualifiedNamespace, SourceIndexV2 -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {SignedContextV1} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterCallerV4.sol"; -import {LibContext} from "rain-interpreter-interface-0.1.0/src/lib/caller/LibContext.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {SignedContextV1} from "rainlang-interface-0.2.8/src/interface/IInterpreterCallerV4.sol"; +import {LibContext} from "rainlang-interface-0.2.8/src/lib/caller/LibContext.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibOpETest diff --git a/test/src/lib/op/math/LibOpExp.t.sol b/test/src/lib/op/math/LibOpExp.t.sol index cf8e7684f..922e7db64 100644 --- a/test/src/lib/op/math/LibOpExp.t.sol +++ b/test/src/lib/op/math/LibOpExp.t.sol @@ -6,7 +6,7 @@ import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOper import {LibOpExp} from "../../../../../src/lib/op/math/LibOpExp.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; contract LibOpExpTest is OpTest { function beforeOpTestConstructor() internal virtual override { diff --git a/test/src/lib/op/math/LibOpExp2.t.sol b/test/src/lib/op/math/LibOpExp2.t.sol index eb4064b70..082cc56aa 100644 --- a/test/src/lib/op/math/LibOpExp2.t.sol +++ b/test/src/lib/op/math/LibOpExp2.t.sol @@ -6,7 +6,7 @@ import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOper import {LibOpExp2} from "../../../../../src/lib/op/math/LibOpExp2.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; contract LibOpExp2Test is OpTest { function beforeOpTestConstructor() internal virtual override { diff --git a/test/src/lib/op/math/LibOpFloor.t.sol b/test/src/lib/op/math/LibOpFloor.t.sol index ebe8b725e..3036a0e36 100644 --- a/test/src/lib/op/math/LibOpFloor.t.sol +++ b/test/src/lib/op/math/LibOpFloor.t.sol @@ -6,7 +6,7 @@ import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOper import {LibOpFloor} from "../../../../../src/lib/op/math/LibOpFloor.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; contract LibOpFloorTest is OpTest { using LibDecimalFloat for Float; diff --git a/test/src/lib/op/math/LibOpFrac.t.sol b/test/src/lib/op/math/LibOpFrac.t.sol index 6dfa33c5b..d9700b3bf 100644 --- a/test/src/lib/op/math/LibOpFrac.t.sol +++ b/test/src/lib/op/math/LibOpFrac.t.sol @@ -6,7 +6,7 @@ import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOper import {LibOpFrac} from "../../../../../src/lib/op/math/LibOpFrac.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; contract LibOpFracTest is OpTest { /// Directly test the integrity logic of LibOpFrac. diff --git a/test/src/lib/op/math/LibOpGm.t.sol b/test/src/lib/op/math/LibOpGm.t.sol index ac481103f..37245b34d 100644 --- a/test/src/lib/op/math/LibOpGm.t.sol +++ b/test/src/lib/op/math/LibOpGm.t.sol @@ -6,7 +6,7 @@ import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOper import {LibOpGm} from "../../../../../src/lib/op/math/LibOpGm.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; contract LibOpGmTest is OpTest { function beforeOpTestConstructor() internal virtual override { diff --git a/test/src/lib/op/math/LibOpHeadroom.t.sol b/test/src/lib/op/math/LibOpHeadroom.t.sol index 81379e013..789b50ebf 100644 --- a/test/src/lib/op/math/LibOpHeadroom.t.sol +++ b/test/src/lib/op/math/LibOpHeadroom.t.sol @@ -6,7 +6,7 @@ import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOper import {LibOpHeadroom} from "../../../../../src/lib/op/math/LibOpHeadroom.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; contract LibOpHeadroomTest is OpTest { /// Directly test the integrity logic of LibOpHeadroom. diff --git a/test/src/lib/op/math/LibOpInv.t.sol b/test/src/lib/op/math/LibOpInv.t.sol index cdc5a9068..fe90b454a 100644 --- a/test/src/lib/op/math/LibOpInv.t.sol +++ b/test/src/lib/op/math/LibOpInv.t.sol @@ -7,7 +7,7 @@ import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFl import {DivisionByZero} from "rain-math-float-0.1.1/src/error/ErrDecimalFloat.sol"; import {LibOpInv} from "../../../../../src/lib/op/math/LibOpInv.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; contract LibOpInvTest is OpTest { /// Directly test the integrity logic of LibOpInv. diff --git a/test/src/lib/op/math/LibOpMax.t.sol b/test/src/lib/op/math/LibOpMax.t.sol index 51f97916c..6acddf63a 100644 --- a/test/src/lib/op/math/LibOpMax.t.sol +++ b/test/src/lib/op/math/LibOpMax.t.sol @@ -6,7 +6,7 @@ import {OpTest} from "test/abstract/OpTest.sol"; import {LibOpMax} from "../../../../../src/lib/op/math/LibOpMax.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/test/src/lib/op/math/LibOpMaxNegativeValue.t.sol b/test/src/lib/op/math/LibOpMaxNegativeValue.t.sol index 934dd6ae6..7c34ac7b6 100644 --- a/test/src/lib/op/math/LibOpMaxNegativeValue.t.sol +++ b/test/src/lib/op/math/LibOpMaxNegativeValue.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpMaxNegativeValue} from "../../../../../src/lib/op/math/LibOpMaxNegativeValue.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState, LibInterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/test/src/lib/op/math/LibOpMaxPositiveValue.t.sol b/test/src/lib/op/math/LibOpMaxPositiveValue.t.sol index e39265ad4..31e0ae43a 100644 --- a/test/src/lib/op/math/LibOpMaxPositiveValue.t.sol +++ b/test/src/lib/op/math/LibOpMaxPositiveValue.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpMaxPositiveValue} from "../../../../../src/lib/op/math/LibOpMaxPositiveValue.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState, LibInterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/test/src/lib/op/math/LibOpMin.t.sol b/test/src/lib/op/math/LibOpMin.t.sol index 324b8c4f7..507d65eed 100644 --- a/test/src/lib/op/math/LibOpMin.t.sol +++ b/test/src/lib/op/math/LibOpMin.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, InterpreterState} from "test/abstract/OpTest.sol"; import {LibOpMin} from "../../../../../src/lib/op/math/LibOpMin.sol"; import {LibOperand, OperandV2} from "test/lib/operand/LibOperand.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; contract LibOpMinTest is OpTest { diff --git a/test/src/lib/op/math/LibOpMinNegativeValue.t.sol b/test/src/lib/op/math/LibOpMinNegativeValue.t.sol index 1227286a4..07239ea79 100644 --- a/test/src/lib/op/math/LibOpMinNegativeValue.t.sol +++ b/test/src/lib/op/math/LibOpMinNegativeValue.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpMinNegativeValue} from "../../../../../src/lib/op/math/LibOpMinNegativeValue.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState, LibInterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/test/src/lib/op/math/LibOpMinPositiveValue.t.sol b/test/src/lib/op/math/LibOpMinPositiveValue.t.sol index 03a0266a1..39d81b0f0 100644 --- a/test/src/lib/op/math/LibOpMinPositiveValue.t.sol +++ b/test/src/lib/op/math/LibOpMinPositiveValue.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpMinPositiveValue} from "../../../../../src/lib/op/math/LibOpMinPositiveValue.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState, LibInterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; diff --git a/test/src/lib/op/math/LibOpMul.t.sol b/test/src/lib/op/math/LibOpMul.t.sol index 754377abf..c97aa0646 100644 --- a/test/src/lib/op/math/LibOpMul.t.sol +++ b/test/src/lib/op/math/LibOpMul.t.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {console2} from "forge-std-1.16.1/src/Test.sol"; +import {console2} from "forge-std-1.16.2/src/Test.sol"; import {LibOpMul} from "../../../../../src/lib/op/math/LibOpMul.sol"; import {OpTest, IntegrityCheckState, OperandV2} from "test/abstract/OpTest.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; import {ExponentOverflow, CoefficientOverflow} from "rain-math-float-0.1.1/src/error/ErrDecimalFloat.sol"; diff --git a/test/src/lib/op/math/LibOpPower.t.sol b/test/src/lib/op/math/LibOpPower.t.sol index c8591627a..bf341a169 100644 --- a/test/src/lib/op/math/LibOpPower.t.sol +++ b/test/src/lib/op/math/LibOpPower.t.sol @@ -6,7 +6,7 @@ import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOper import {LibOpPower} from "../../../../../src/lib/op/math/LibOpPower.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {PowNegativeBase} from "rain-math-float-0.1.1/src/error/ErrDecimalFloat.sol"; contract LibOpPowerTest is OpTest { diff --git a/test/src/lib/op/math/LibOpSqrt.t.sol b/test/src/lib/op/math/LibOpSqrt.t.sol index 38c9ff2aa..c53642f22 100644 --- a/test/src/lib/op/math/LibOpSqrt.t.sol +++ b/test/src/lib/op/math/LibOpSqrt.t.sol @@ -7,7 +7,7 @@ import {PowNegativeBase} from "rain-math-float-0.1.1/src/error/ErrDecimalFloat.s import {LibOpSqrt} from "../../../../../src/lib/op/math/LibOpSqrt.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; contract LibOpSqrtTest is OpTest { using LibDecimalFloat for Float; diff --git a/test/src/lib/op/math/LibOpSub.t.sol b/test/src/lib/op/math/LibOpSub.t.sol index 2d7741167..86fc5eca5 100644 --- a/test/src/lib/op/math/LibOpSub.t.sol +++ b/test/src/lib/op/math/LibOpSub.t.sol @@ -6,7 +6,7 @@ import {OpTest, IntegrityCheckState, OperandV2} from "test/abstract/OpTest.sol"; import {UnexpectedOperandValue, UnexpectedOperand} from "../../../../../src/error/ErrParse.sol"; import {LibOpSub} from "../../../../../src/lib/op/math/LibOpSub.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; contract LibOpSubTest is OpTest { diff --git a/test/src/lib/op/math/growth/LibOpExponentialGrowth.t.sol b/test/src/lib/op/math/growth/LibOpExponentialGrowth.t.sol index a3de68559..941e85c0d 100644 --- a/test/src/lib/op/math/growth/LibOpExponentialGrowth.t.sol +++ b/test/src/lib/op/math/growth/LibOpExponentialGrowth.t.sol @@ -6,7 +6,7 @@ import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOper import {LibOpExponentialGrowth} from "../../../../../../src/lib/op/math/growth/LibOpExponentialGrowth.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; contract LibOpExponentialGrowthTest is OpTest { function beforeOpTestConstructor() internal virtual override { diff --git a/test/src/lib/op/math/growth/LibOpLinearGrowth.t.sol b/test/src/lib/op/math/growth/LibOpLinearGrowth.t.sol index 06c8e3943..739cba3b0 100644 --- a/test/src/lib/op/math/growth/LibOpLinearGrowth.t.sol +++ b/test/src/lib/op/math/growth/LibOpLinearGrowth.t.sol @@ -6,7 +6,7 @@ import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOper import {LibOpLinearGrowth} from "../../../../../../src/lib/op/math/growth/LibOpLinearGrowth.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {Float, LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; contract LibOpLinearGrowthTest is OpTest { /// Directly test the integrity logic of LibOpLinearGrowth. diff --git a/test/src/lib/op/math/uint256/LibOpUint256Add.t.sol b/test/src/lib/op/math/uint256/LibOpUint256Add.t.sol index 822acc341..6afe49dc6 100644 --- a/test/src/lib/op/math/uint256/LibOpUint256Add.t.sol +++ b/test/src/lib/op/math/uint256/LibOpUint256Add.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, stdError} from "test/abstract/OpTest.sol"; import {LibOpUint256Add} from "../../../../../../src/lib/op/math/uint256/LibOpUint256Add.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; contract LibOpUint256AddTest is OpTest { /// Directly test the integrity logic of LibOpUint256Add. This tests the happy diff --git a/test/src/lib/op/math/uint256/LibOpUint256Div.t.sol b/test/src/lib/op/math/uint256/LibOpUint256Div.t.sol index 3bd47cfb0..03cae4689 100644 --- a/test/src/lib/op/math/uint256/LibOpUint256Div.t.sol +++ b/test/src/lib/op/math/uint256/LibOpUint256Div.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, stdError} from "test/abstract/OpTest.sol"; import {LibOpUint256Div} from "../../../../../../src/lib/op/math/uint256/LibOpUint256Div.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; contract LibOpUint256DivTest is OpTest { /// Directly test the integrity logic of LibOpUint256Div. This tests the happy diff --git a/test/src/lib/op/math/uint256/LibOpUint256MaxValue.t.sol b/test/src/lib/op/math/uint256/LibOpUint256MaxValue.t.sol index bdd32ebbd..7cb38315d 100644 --- a/test/src/lib/op/math/uint256/LibOpUint256MaxValue.t.sol +++ b/test/src/lib/op/math/uint256/LibOpUint256MaxValue.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, UnexpectedOperand} from "test/abstract/OpTest.sol"; import {LibOpUint256MaxValue} from "../../../../../../src/lib/op/math/uint256/LibOpUint256MaxValue.sol"; import {IntegrityCheckState, BadOpInputsLength} from "../../../../../../src/lib/integrity/LibIntegrityCheck.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {InterpreterState, LibInterpreterState} from "../../../../../../src/lib/state/LibInterpreterState.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; diff --git a/test/src/lib/op/math/uint256/LibOpUint256Mul.t.sol b/test/src/lib/op/math/uint256/LibOpUint256Mul.t.sol index bc52d7ae5..6a8ee14c6 100644 --- a/test/src/lib/op/math/uint256/LibOpUint256Mul.t.sol +++ b/test/src/lib/op/math/uint256/LibOpUint256Mul.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, stdError} from "test/abstract/OpTest.sol"; import {LibOpUint256Mul} from "../../../../../../src/lib/op/math/uint256/LibOpUint256Mul.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; contract LibOpUint256MulTest is OpTest { /// Directly test the integrity logic of LibOpUint256Mul. This tests the happy diff --git a/test/src/lib/op/math/uint256/LibOpUint256Power.t.sol b/test/src/lib/op/math/uint256/LibOpUint256Power.t.sol index 50405e30d..daae0225b 100644 --- a/test/src/lib/op/math/uint256/LibOpUint256Power.t.sol +++ b/test/src/lib/op/math/uint256/LibOpUint256Power.t.sol @@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {stdError} from "forge-std-1.16.1/src/Test.sol"; +import {stdError} from "forge-std-1.16.2/src/Test.sol"; import {OpTest} from "test/abstract/OpTest.sol"; import {LibOpUint256Power} from "../../../../../../src/lib/op/math/uint256/LibOpUint256Power.sol"; import {IntegrityCheckState} from "../../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../../../../../src/lib/state/LibInterpreterState.sol"; -import {StackItem, OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem, OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; contract LibOpUint256PowerTest is OpTest { diff --git a/test/src/lib/op/math/uint256/LibOpUint256Sub.t.sol b/test/src/lib/op/math/uint256/LibOpUint256Sub.t.sol index 3adfdc119..bb365876c 100644 --- a/test/src/lib/op/math/uint256/LibOpUint256Sub.t.sol +++ b/test/src/lib/op/math/uint256/LibOpUint256Sub.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, stdError} from "test/abstract/OpTest.sol"; import {LibOpUint256Sub} from "../../../../../../src/lib/op/math/uint256/LibOpUint256Sub.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; contract LibOpUint256SubTest is OpTest { /// Directly test the integrity logic of LibOpUint256Sub. This tests the happy diff --git a/test/src/lib/op/store/LibOpGet.t.sol b/test/src/lib/op/store/LibOpGet.t.sol index 3b0b1407e..59e7b9f1e 100644 --- a/test/src/lib/op/store/LibOpGet.t.sol +++ b/test/src/lib/op/store/LibOpGet.t.sol @@ -3,15 +3,15 @@ pragma solidity =0.8.25; import {LibMemoryKV, MemoryKV, MemoryKVVal, MemoryKVKey} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; -import {LibPointer, Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; -import {LibBytes32Array} from "rain-solmem-0.1.3/src/lib/LibBytes32Array.sol"; +import {LibPointer, Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; +import {LibBytes32Array} from "rain-solmem-0.1.28/src/lib/LibBytes32Array.sol"; import {OpTest} from "test/abstract/OpTest.sol"; import {LibOpGet} from "../../../../../src/lib/op/store/LibOpGet.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {StateNamespace} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {StateNamespace} from "rainlang-interface-0.2.8/src/interface/IInterpreterStoreV3.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; contract LibOpGetTest is OpTest { diff --git a/test/src/lib/op/store/LibOpSet.t.sol b/test/src/lib/op/store/LibOpSet.t.sol index 72d0ed50c..5b0886cef 100644 --- a/test/src/lib/op/store/LibOpSet.t.sol +++ b/test/src/lib/op/store/LibOpSet.t.sol @@ -8,7 +8,7 @@ import {OpTest} from "test/abstract/OpTest.sol"; import {LibOpSet} from "../../../../../src/lib/op/store/LibOpSet.sol"; import {IntegrityCheckState} from "../../../../../src/lib/integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../../../../src/lib/state/LibInterpreterState.sol"; -import {OperandV2, StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2, StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibOperand} from "test/lib/operand/LibOperand.sol"; contract LibOpSetTest is OpTest { diff --git a/test/src/lib/parse/BadLengthSubParser.sol b/test/src/lib/parse/BadLengthSubParser.sol index 5f5c52f61..47f1d41d3 100644 --- a/test/src/lib/parse/BadLengthSubParser.sol +++ b/test/src/lib/parse/BadLengthSubParser.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {ISubParserV4} from "rain-interpreter-interface-0.1.0/src/interface/ISubParserV4.sol"; +import {ISubParserV4} from "rainlang-interface-0.2.8/src/interface/ISubParserV4.sol"; import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; /// A bad sub parser that claims to know every word but returns bytecode of diff --git a/test/src/lib/parse/ConstantReturningSubParser.sol b/test/src/lib/parse/ConstantReturningSubParser.sol index 139cb8c15..f58a2c07f 100644 --- a/test/src/lib/parse/ConstantReturningSubParser.sol +++ b/test/src/lib/parse/ConstantReturningSubParser.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {ISubParserV4} from "rain-interpreter-interface-0.1.0/src/interface/ISubParserV4.sol"; +import {ISubParserV4} from "rainlang-interface-0.2.8/src/interface/ISubParserV4.sol"; import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; -import {OPCODE_CONSTANT} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OPCODE_CONSTANT} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; /// @dev A sub parser that resolves any word by returning a constant opcode /// with a known constant value. Each call returns exactly one constant. diff --git a/test/src/lib/parse/ContextReturningSubParser.sol b/test/src/lib/parse/ContextReturningSubParser.sol index 0822e7997..bc9a7fa8e 100644 --- a/test/src/lib/parse/ContextReturningSubParser.sol +++ b/test/src/lib/parse/ContextReturningSubParser.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {ISubParserV4} from "rain-interpreter-interface-0.1.0/src/interface/ISubParserV4.sol"; +import {ISubParserV4} from "rainlang-interface-0.2.8/src/interface/ISubParserV4.sol"; import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; -import {OPCODE_CONTEXT} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OPCODE_CONTEXT} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; /// @dev A sub parser that resolves any word by returning a context opcode with /// no constants. Used to verify that subParseWords iterates multiple sources. diff --git a/test/src/lib/parse/LibParse.comments.t.sol b/test/src/lib/parse/LibParse.comments.t.sol index 28cdd0bc0..196dba1bd 100644 --- a/test/src/lib/parse/LibParse.comments.t.sol +++ b/test/src/lib/parse/LibParse.comments.t.sol @@ -6,7 +6,7 @@ import {OperandTest} from "test/abstract/OperandTest.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; -import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rainlang-interface-0.2.8/src/lib/bytecode/LibBytecode.sol"; import {UnclosedComment, UnexpectedComment, UnexpectedLHSChar} from "../../../../src/error/ErrParse.sol"; import {ParseState} from "../../../../src/lib/parse/LibParseState.sol"; diff --git a/test/src/lib/parse/LibParse.empty.gas.t.sol b/test/src/lib/parse/LibParse.empty.gas.t.sol index 9a244fa1a..61ea3077f 100644 --- a/test/src/lib/parse/LibParse.empty.gas.t.sol +++ b/test/src/lib/parse/LibParse.empty.gas.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; diff --git a/test/src/lib/parse/LibParse.empty.t.sol b/test/src/lib/parse/LibParse.empty.t.sol index d3ee485e2..1b93286a1 100644 --- a/test/src/lib/parse/LibParse.empty.t.sol +++ b/test/src/lib/parse/LibParse.empty.t.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.25; import {OperandTest} from "test/abstract/OperandTest.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; -import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rainlang-interface-0.2.8/src/lib/bytecode/LibBytecode.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {MaxSources} from "../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParse.ignoredLHS.t.sol b/test/src/lib/parse/LibParse.ignoredLHS.t.sol index 1612befa9..1e7cb7fa8 100644 --- a/test/src/lib/parse/LibParse.ignoredLHS.t.sol +++ b/test/src/lib/parse/LibParse.ignoredLHS.t.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; -import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rainlang-interface-0.2.8/src/lib/bytecode/LibBytecode.sol"; import {ParseState} from "../../../../src/lib/parse/LibParseState.sol"; /// @title LibParseIgnoredLHSTest diff --git a/test/src/lib/parse/LibParse.inputsOnly.gas.t.sol b/test/src/lib/parse/LibParse.inputsOnly.gas.t.sol index b7a6afd23..bebe08c4d 100644 --- a/test/src/lib/parse/LibParse.inputsOnly.gas.t.sol +++ b/test/src/lib/parse/LibParse.inputsOnly.gas.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; diff --git a/test/src/lib/parse/LibParse.inputsOnly.t.sol b/test/src/lib/parse/LibParse.inputsOnly.t.sol index 5b291d115..059194a8d 100644 --- a/test/src/lib/parse/LibParse.inputsOnly.t.sol +++ b/test/src/lib/parse/LibParse.inputsOnly.t.sol @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; -import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rainlang-interface-0.2.8/src/lib/bytecode/LibBytecode.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {ParseState} from "../../../../src/lib/parse/LibParseState.sol"; diff --git a/test/src/lib/parse/LibParse.lhsOverflow.t.sol b/test/src/lib/parse/LibParse.lhsOverflow.t.sol index dea388c21..ca704b3b6 100644 --- a/test/src/lib/parse/LibParse.lhsOverflow.t.sol +++ b/test/src/lib/parse/LibParse.lhsOverflow.t.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {RainlangParser} from "../../../../src/concrete/RainlangParser.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {TestRainlangParser} from "test/concrete/TestRainlangParser.sol"; import {LHSItemCountOverflow} from "../../../../src/error/ErrParse.sol"; /// @title LibParseLHSOverflowTest @@ -12,10 +12,10 @@ import {LHSItemCountOverflow} from "../../../../src/error/ErrParse.sol"; /// adjacent byte, silently corrupting parser state. This test verifies that /// the parser reverts before the carry-over can occur. contract LibParseLHSOverflowTest is Test { - RainlangParser internal parser; + TestRainlangParser internal parser; function setUp() external { - parser = new RainlangParser(); + parser = new TestRainlangParser(); } /// External wrapper so vm.expectRevert works. diff --git a/test/src/lib/parse/LibParse.literalIntegerDecimal.t.sol b/test/src/lib/parse/LibParse.literalIntegerDecimal.t.sol index 2158b23cc..9cce73f05 100644 --- a/test/src/lib/parse/LibParse.literalIntegerDecimal.t.sol +++ b/test/src/lib/parse/LibParse.literalIntegerDecimal.t.sol @@ -6,7 +6,7 @@ import {ParseTest} from "test/abstract/ParseTest.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {LibParse, UnexpectedRHSChar, UnexpectedRightParen} from "../../../../src/lib/parse/LibParse.sol"; -import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rainlang-interface-0.2.8/src/lib/bytecode/LibBytecode.sol"; import {ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; import {ParseDecimalOverflow} from "rain-string-0.2.0/src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParse.literalIntegerHex.t.sol b/test/src/lib/parse/LibParse.literalIntegerHex.t.sol index 94e462339..6402acd50 100644 --- a/test/src/lib/parse/LibParse.literalIntegerHex.t.sol +++ b/test/src/lib/parse/LibParse.literalIntegerHex.t.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; -import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rainlang-interface-0.2.8/src/lib/bytecode/LibBytecode.sol"; import {ParseState} from "../../../../src/lib/parse/LibParseState.sol"; /// @title LibParseLiteralIntegerHexTest diff --git a/test/src/lib/parse/LibParse.literalString.t.sol b/test/src/lib/parse/LibParse.literalString.t.sol index 7592c52ac..8a3a26a1a 100644 --- a/test/src/lib/parse/LibParse.literalString.t.sol +++ b/test/src/lib/parse/LibParse.literalString.t.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {LibBytecode} from "rainlang-interface-0.2.8/src/lib/bytecode/LibBytecode.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {IntOrAString, LibIntOrAString} from "rain-intorastring-0.1.0/src/lib/LibIntOrAString.sol"; diff --git a/test/src/lib/parse/LibParse.nOutput.t.sol b/test/src/lib/parse/LibParse.nOutput.t.sol index 116441515..77c664aef 100644 --- a/test/src/lib/parse/LibParse.nOutput.t.sol +++ b/test/src/lib/parse/LibParse.nOutput.t.sol @@ -6,7 +6,7 @@ import {ParseTest} from "test/abstract/ParseTest.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; -import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rainlang-interface-0.2.8/src/lib/bytecode/LibBytecode.sol"; import {ExcessLHSItems, ExcessRHSItems} from "../../../../src/error/ErrParse.sol"; import {ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibParseError} from "../../../../src/lib/parse/LibParseError.sol"; diff --git a/test/src/lib/parse/LibParse.namedLHS.t.sol b/test/src/lib/parse/LibParse.namedLHS.t.sol index 00578f169..954a69642 100644 --- a/test/src/lib/parse/LibParse.namedLHS.t.sol +++ b/test/src/lib/parse/LibParse.namedLHS.t.sol @@ -4,16 +4,16 @@ pragma solidity =0.8.25; import {ParseTest} from "test/abstract/ParseTest.sol"; -import {AuthoringMetaV2} from "rain-interpreter-interface-0.1.0/src/interface/IParserV2.sol"; +import {AuthoringMetaV2} from "rainlang-interface-0.2.8/src/interface/IParserV2.sol"; import {LibParse, DuplicateLHSItem, WordSize} from "../../../../src/lib/parse/LibParse.sol"; -import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rainlang-interface-0.2.8/src/lib/bytecode/LibBytecode.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {OperandV2, LibParseOperand} from "../../../../src/lib/parse/LibParseOperand.sol"; import {LibConvert} from "rain-lib-typecast-0.1.0/src/LibConvert.sol"; import {LibAllStandardOps} from "../../../../src/lib/op/LibAllStandardOps.sol"; import {LibParseError} from "../../../../src/lib/parse/LibParseError.sol"; -import {LibGenParseMeta} from "rain-interpreter-interface-0.1.0/src/lib/codegen/LibGenParseMeta.sol"; +import {LibGenParseMeta} from "rainlang-interface-0.2.8/src/lib/codegen/LibGenParseMeta.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; /// @title LibParseNamedLHSTest diff --git a/test/src/lib/parse/LibParse.parseMemoryOverflow.t.sol b/test/src/lib/parse/LibParse.parseMemoryOverflow.t.sol index fd07fbee5..2832f1a1b 100644 --- a/test/src/lib/parse/LibParse.parseMemoryOverflow.t.sol +++ b/test/src/lib/parse/LibParse.parseMemoryOverflow.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; import {ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; diff --git a/test/src/lib/parse/LibParse.parseWord.t.sol b/test/src/lib/parse/LibParse.parseWord.t.sol index 456975a91..df50549db 100644 --- a/test/src/lib/parse/LibParse.parseWord.t.sol +++ b/test/src/lib/parse/LibParse.parseWord.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; -import {Pointer, LibBytes} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; +import {Pointer, LibBytes} from "rain-solmem-0.1.28/src/lib/LibBytes.sol"; import {LibParseSlow} from "./LibParseSlow.sol"; import {CMASK_NUMERIC_0_9} from "rain-string-0.2.0/src/lib/parse/LibParseCMask.sol"; import {WordSize} from "../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParse.singleIgnored.gas.t.sol b/test/src/lib/parse/LibParse.singleIgnored.gas.t.sol index b083c0604..9601f1628 100644 --- a/test/src/lib/parse/LibParse.singleIgnored.gas.t.sol +++ b/test/src/lib/parse/LibParse.singleIgnored.gas.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; diff --git a/test/src/lib/parse/LibParse.singleLHSNamed.gas.t.sol b/test/src/lib/parse/LibParse.singleLHSNamed.gas.t.sol index 15fd48b17..7837a59ce 100644 --- a/test/src/lib/parse/LibParse.singleLHSNamed.gas.t.sol +++ b/test/src/lib/parse/LibParse.singleLHSNamed.gas.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; diff --git a/test/src/lib/parse/LibParse.singleRHSNamed.gas.t.sol b/test/src/lib/parse/LibParse.singleRHSNamed.gas.t.sol index ecd206282..92640db67 100644 --- a/test/src/lib/parse/LibParse.singleRHSNamed.gas.t.sol +++ b/test/src/lib/parse/LibParse.singleRHSNamed.gas.t.sol @@ -2,14 +2,14 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {AuthoringMetaV2} from "rain-interpreter-interface-0.1.0/src/interface/IParserV2.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {AuthoringMetaV2} from "rainlang-interface-0.2.8/src/interface/IParserV2.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; import {OperandV2, LibParseOperand} from "../../../../src/lib/parse/LibParseOperand.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibConvert} from "rain-lib-typecast-0.1.0/src/LibConvert.sol"; import {LibAllStandardOps} from "../../../../src/lib/op/LibAllStandardOps.sol"; -import {LibGenParseMeta} from "rain-interpreter-interface-0.1.0/src/lib/codegen/LibGenParseMeta.sol"; +import {LibGenParseMeta} from "rainlang-interface-0.2.8/src/lib/codegen/LibGenParseMeta.sol"; /// @title LibParseSingleRHSNamedGasTest /// @notice Parse a single RHS name for many different sized RHS names just to include diff --git a/test/src/lib/parse/LibParse.sourceInputs.t.sol b/test/src/lib/parse/LibParse.sourceInputs.t.sol index d7c0b70fb..eb5675602 100644 --- a/test/src/lib/parse/LibParse.sourceInputs.t.sol +++ b/test/src/lib/parse/LibParse.sourceInputs.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; diff --git a/test/src/lib/parse/LibParse.unexpectedRightParen.t.sol b/test/src/lib/parse/LibParse.unexpectedRightParen.t.sol index ad13d9fdb..ddef1850d 100644 --- a/test/src/lib/parse/LibParse.unexpectedRightParen.t.sol +++ b/test/src/lib/parse/LibParse.unexpectedRightParen.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; diff --git a/test/src/lib/parse/LibParse.wordsRHS.t.sol b/test/src/lib/parse/LibParse.wordsRHS.t.sol index 26597f280..89523a67f 100644 --- a/test/src/lib/parse/LibParse.wordsRHS.t.sol +++ b/test/src/lib/parse/LibParse.wordsRHS.t.sol @@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; -import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; +import {LibBytecode} from "rainlang-interface-0.2.8/src/lib/bytecode/LibBytecode.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {LibAllStandardOps} from "../../../../src/lib/op/LibAllStandardOps.sol"; diff --git a/test/src/lib/parse/LibParseError.t.sol b/test/src/lib/parse/LibParseError.t.sol index be955702a..f3773171d 100644 --- a/test/src/lib/parse/LibParseError.t.sol +++ b/test/src/lib/parse/LibParseError.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibParseError, MAGIC_NUMBER_RAIN_PARSE_ERROR_V1} from "../../../../src/lib/parse/LibParseError.sol"; import {LibAllStandardOps} from "../../../../src/lib/op/LibAllStandardOps.sol"; diff --git a/test/src/lib/parse/LibParseInterstitial.t.sol b/test/src/lib/parse/LibParseInterstitial.t.sol index a5d334ad0..f6ee18540 100644 --- a/test/src/lib/parse/LibParseInterstitial.t.sol +++ b/test/src/lib/parse/LibParseInterstitial.t.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.28/src/lib/LibBytes.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibParseInterstitial} from "../../../../src/lib/parse/LibParseInterstitial.sol"; import {FSM_YANG_MASK} from "../../../../src/lib/parse/LibParseState.sol"; diff --git a/test/src/lib/parse/LibParseOperand.handleOperand.t.sol b/test/src/lib/parse/LibParseOperand.handleOperand.t.sol index 099693516..3753a9497 100644 --- a/test/src/lib/parse/LibParseOperand.handleOperand.t.sol +++ b/test/src/lib/parse/LibParseOperand.handleOperand.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseOperand, OperandV2} from "../../../../src/lib/parse/LibParseOperand.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibAllStandardOps} from "../../../../src/lib/op/LibAllStandardOps.sol"; diff --git a/test/src/lib/parse/LibParseOperand.handleOperand8M1M1.t.sol b/test/src/lib/parse/LibParseOperand.handleOperand8M1M1.t.sol index 940e48172..09134e669 100644 --- a/test/src/lib/parse/LibParseOperand.handleOperand8M1M1.t.sol +++ b/test/src/lib/parse/LibParseOperand.handleOperand8M1M1.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseOperand, OperandV2} from "../../../../src/lib/parse/LibParseOperand.sol"; import {ExpectedOperand, UnexpectedOperandValue} from "../../../../src/error/ErrParse.sol"; import {OperandOverflow} from "../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParseOperand.handleOperandDisallowed.t.sol b/test/src/lib/parse/LibParseOperand.handleOperandDisallowed.t.sol index a19218fa3..f65d7fbc4 100644 --- a/test/src/lib/parse/LibParseOperand.handleOperandDisallowed.t.sol +++ b/test/src/lib/parse/LibParseOperand.handleOperandDisallowed.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseOperand, OperandV2} from "../../../../src/lib/parse/LibParseOperand.sol"; import {UnexpectedOperand} from "../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParseOperand.handleOperandDisallowedAlwaysOne.t.sol b/test/src/lib/parse/LibParseOperand.handleOperandDisallowedAlwaysOne.t.sol index d1e0a3b0b..dbac6a452 100644 --- a/test/src/lib/parse/LibParseOperand.handleOperandDisallowedAlwaysOne.t.sol +++ b/test/src/lib/parse/LibParseOperand.handleOperandDisallowedAlwaysOne.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseOperand, OperandV2} from "../../../../src/lib/parse/LibParseOperand.sol"; import {UnexpectedOperand} from "../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParseOperand.handleOperandDoublePerByteNoDefault.t.sol b/test/src/lib/parse/LibParseOperand.handleOperandDoublePerByteNoDefault.t.sol index e0971c3aa..bd938ce30 100644 --- a/test/src/lib/parse/LibParseOperand.handleOperandDoublePerByteNoDefault.t.sol +++ b/test/src/lib/parse/LibParseOperand.handleOperandDoublePerByteNoDefault.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseOperand, OperandV2} from "../../../../src/lib/parse/LibParseOperand.sol"; import {ExpectedOperand, UnexpectedOperandValue} from "../../../../src/error/ErrParse.sol"; import {OperandOverflow} from "../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParseOperand.handleOperandM1M1.t.sol b/test/src/lib/parse/LibParseOperand.handleOperandM1M1.t.sol index 1320d696f..01c05acc3 100644 --- a/test/src/lib/parse/LibParseOperand.handleOperandM1M1.t.sol +++ b/test/src/lib/parse/LibParseOperand.handleOperandM1M1.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseOperand, OperandV2} from "../../../../src/lib/parse/LibParseOperand.sol"; import {UnexpectedOperandValue} from "../../../../src/error/ErrParse.sol"; import {OperandOverflow} from "../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParseOperand.handleOperandSingleFull.t.sol b/test/src/lib/parse/LibParseOperand.handleOperandSingleFull.t.sol index cb04e9b65..1c7f94fb9 100644 --- a/test/src/lib/parse/LibParseOperand.handleOperandSingleFull.t.sol +++ b/test/src/lib/parse/LibParseOperand.handleOperandSingleFull.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseOperand, OperandV2} from "../../../../src/lib/parse/LibParseOperand.sol"; import {UnexpectedOperandValue} from "../../../../src/error/ErrParse.sol"; import {OperandOverflow} from "../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParseOperand.handleOperandSingleFullNoDefault.t.sol b/test/src/lib/parse/LibParseOperand.handleOperandSingleFullNoDefault.t.sol index 55d2f8430..a67bd6d8a 100644 --- a/test/src/lib/parse/LibParseOperand.handleOperandSingleFullNoDefault.t.sol +++ b/test/src/lib/parse/LibParseOperand.handleOperandSingleFullNoDefault.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseOperand, OperandV2} from "../../../../src/lib/parse/LibParseOperand.sol"; import {UnexpectedOperandValue, ExpectedOperand} from "../../../../src/error/ErrParse.sol"; import {OperandOverflow} from "../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParseOperand.parseOperand.t.sol b/test/src/lib/parse/LibParseOperand.parseOperand.t.sol index 95b13ea69..4697beadf 100644 --- a/test/src/lib/parse/LibParseOperand.parseOperand.t.sol +++ b/test/src/lib/parse/LibParseOperand.parseOperand.t.sol @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseOperand} from "../../../../src/lib/parse/LibParseOperand.sol"; import {ParseState} from "../../../../src/lib/parse/LibParseState.sol"; -import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.28/src/lib/LibBytes.sol"; import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {LibConformString} from "rain-string-0.2.0/src/lib/mut/LibConformString.sol"; diff --git a/test/src/lib/parse/LibParsePragma.keyword.t.sol b/test/src/lib/parse/LibParsePragma.keyword.t.sol index 69983f28a..6c504bd85 100644 --- a/test/src/lib/parse/LibParsePragma.keyword.t.sol +++ b/test/src/lib/parse/LibParsePragma.keyword.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseState, ParseState, SUB_PARSER_POINTER_SHIFT} from "../../../../src/lib/parse/LibParseState.sol"; import { @@ -10,7 +10,7 @@ import { PRAGMA_KEYWORD_BYTES_LENGTH, PRAGMA_KEYWORD_BYTES } from "../../../../src/lib/parse/LibParsePragma.sol"; -import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.28/src/lib/LibBytes.sol"; import { CMASK_WHITESPACE, CMASK_LITERAL_HEX_DISPATCH_START, diff --git a/test/src/lib/parse/LibParseStackName.t.sol b/test/src/lib/parse/LibParseStackName.t.sol index 488a93d9e..8c4f4948e 100644 --- a/test/src/lib/parse/LibParseStackName.t.sol +++ b/test/src/lib/parse/LibParseStackName.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {ParseState, LibParseStackName} from "../../../../src/lib/parse/LibParse.sol"; diff --git a/test/src/lib/parse/LibParseStackTracker.t.sol b/test/src/lib/parse/LibParseStackTracker.t.sol index 53d3f75ce..0a4ad7841 100644 --- a/test/src/lib/parse/LibParseStackTracker.t.sol +++ b/test/src/lib/parse/LibParseStackTracker.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseStackTracker, ParseStackTracker} from "../../../../src/lib/parse/LibParseStackTracker.sol"; import {ParseStackOverflow, ParseStackUnderflow} from "../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParseState.buildBytecode.t.sol b/test/src/lib/parse/LibParseState.buildBytecode.t.sol index 397050d9a..c68bb1438 100644 --- a/test/src/lib/parse/LibParseState.buildBytecode.t.sol +++ b/test/src/lib/parse/LibParseState.buildBytecode.t.sol @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseState, ParseState, EMPTY_ACTIVE_SOURCE} from "../../../../src/lib/parse/LibParseState.sol"; -import {LibBytecode} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {LibBytecode} from "rainlang-interface-0.2.8/src/lib/bytecode/LibBytecode.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; contract LibParseStateBuildBytecodeTest is Test { using LibParseState for ParseState; diff --git a/test/src/lib/parse/LibParseState.buildConstants.t.sol b/test/src/lib/parse/LibParseState.buildConstants.t.sol index 2acfa3f72..572cc58d9 100644 --- a/test/src/lib/parse/LibParseState.buildConstants.t.sol +++ b/test/src/lib/parse/LibParseState.buildConstants.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; /// @title LibParseStateBuildConstantsTest diff --git a/test/src/lib/parse/LibParseState.checkParseMemoryOverflow.t.sol b/test/src/lib/parse/LibParseState.checkParseMemoryOverflow.t.sol index 0f8e76c3e..2a254f245 100644 --- a/test/src/lib/parse/LibParseState.checkParseMemoryOverflow.t.sol +++ b/test/src/lib/parse/LibParseState.checkParseMemoryOverflow.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {ParseMemoryOverflow} from "../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParseState.constantValueBloom.t.sol b/test/src/lib/parse/LibParseState.constantValueBloom.t.sol index 55b686559..c3837aa56 100644 --- a/test/src/lib/parse/LibParseState.constantValueBloom.t.sol +++ b/test/src/lib/parse/LibParseState.constantValueBloom.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.18; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseState} from "../../../../src/lib/parse/LibParseState.sol"; -import {LibCtPop} from "rain-math-binary-0.1.1/src/lib/LibCtPop.sol"; +import {LibCtPop} from "rain-math-binary-0.1.4/src/lib/LibCtPop.sol"; /// @title LibParseStateConstantValueBloomTest /// @notice Tests for the constant value bloom filter in LibParseState. diff --git a/test/src/lib/parse/LibParseState.danglingSource.t.sol b/test/src/lib/parse/LibParseState.danglingSource.t.sol index 828817198..380a696b3 100644 --- a/test/src/lib/parse/LibParseState.danglingSource.t.sol +++ b/test/src/lib/parse/LibParseState.danglingSource.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {DanglingSource} from "../../../../src/error/ErrParse.sol"; contract LibParseStateDanglingSourceTest is Test { diff --git a/test/src/lib/parse/LibParseState.endLine.unboundedLHS.t.sol b/test/src/lib/parse/LibParseState.endLine.unboundedLHS.t.sol index 3e43e5b55..13885d6ae 100644 --- a/test/src/lib/parse/LibParseState.endLine.unboundedLHS.t.sol +++ b/test/src/lib/parse/LibParseState.endLine.unboundedLHS.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; import {ParseState} from "../../../../src/lib/parse/LibParseState.sol"; diff --git a/test/src/lib/parse/LibParseState.endSource.t.sol b/test/src/lib/parse/LibParseState.endSource.t.sol index 44418280b..dfb54fc06 100644 --- a/test/src/lib/parse/LibParseState.endSource.t.sol +++ b/test/src/lib/parse/LibParseState.endSource.t.sol @@ -2,14 +2,14 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import { LibParseState, ParseState, EMPTY_ACTIVE_SOURCE, FSM_ACTIVE_SOURCE_MASK } from "../../../../src/lib/parse/LibParseState.sol"; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {MaxSources} from "../../../../src/error/ErrParse.sol"; contract LibParseStateEndSourceTest is Test { diff --git a/test/src/lib/parse/LibParseState.exportSubParsers.t.sol b/test/src/lib/parse/LibParseState.exportSubParsers.t.sol index ef037896f..314d1807b 100644 --- a/test/src/lib/parse/LibParseState.exportSubParsers.t.sol +++ b/test/src/lib/parse/LibParseState.exportSubParsers.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.18; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; -import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.28/src/lib/LibBytes.sol"; /// @title LibParseStateExportSubParsersTest /// @notice Tests for exporting sub parsers from LibParseState. diff --git a/test/src/lib/parse/LibParseState.highwaterOverflow.t.sol b/test/src/lib/parse/LibParseState.highwaterOverflow.t.sol index 0136caa48..b706a42bf 100644 --- a/test/src/lib/parse/LibParseState.highwaterOverflow.t.sol +++ b/test/src/lib/parse/LibParseState.highwaterOverflow.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {ParseStackOverflow} from "../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/LibParseState.newActiveSourcePointer.t.sol b/test/src/lib/parse/LibParseState.newActiveSourcePointer.t.sol index 4a8d3f831..18a81c811 100644 --- a/test/src/lib/parse/LibParseState.newActiveSourcePointer.t.sol +++ b/test/src/lib/parse/LibParseState.newActiveSourcePointer.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {EMPTY_ACTIVE_SOURCE, LibParseState} from "../../../../src/lib/parse/LibParseState.sol"; contract LibParseStateNewActiveSourcePointerTest is Test { diff --git a/test/src/lib/parse/LibParseState.offsets.t.sol b/test/src/lib/parse/LibParseState.offsets.t.sol index f8b3a6a2e..5cd13cc46 100644 --- a/test/src/lib/parse/LibParseState.offsets.t.sol +++ b/test/src/lib/parse/LibParseState.offsets.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import { ParseState, PARSE_STATE_TOP_LEVEL0_OFFSET, diff --git a/test/src/lib/parse/LibParseState.parenInputOverflow.t.sol b/test/src/lib/parse/LibParseState.parenInputOverflow.t.sol index e567336be..9d3511581 100644 --- a/test/src/lib/parse/LibParseState.parenInputOverflow.t.sol +++ b/test/src/lib/parse/LibParseState.parenInputOverflow.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {ParenInputOverflow} from "../../../../src/error/ErrParse.sol"; contract LibParseStateParenInputOverflowTest is Test { diff --git a/test/src/lib/parse/LibParseState.pushConstantValue.t.sol b/test/src/lib/parse/LibParseState.pushConstantValue.t.sol index 3e84b49ab..822739ce2 100644 --- a/test/src/lib/parse/LibParseState.pushConstantValue.t.sol +++ b/test/src/lib/parse/LibParseState.pushConstantValue.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.18; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; /// @title LibParseStatePushConstantValueTest diff --git a/test/src/lib/parse/LibParseState.pushLiteral.t.sol b/test/src/lib/parse/LibParseState.pushLiteral.t.sol index 92f643ce6..f10dd6f26 100644 --- a/test/src/lib/parse/LibParseState.pushLiteral.t.sol +++ b/test/src/lib/parse/LibParseState.pushLiteral.t.sol @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibAllStandardOps} from "../../../../src/lib/op/LibAllStandardOps.sol"; -import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.28/src/lib/LibBytes.sol"; import {UnsupportedLiteralType} from "../../../../src/error/ErrParse.sol"; import {LibParseError} from "../../../../src/lib/parse/LibParseError.sol"; diff --git a/test/src/lib/parse/LibParseState.pushOpToSource.LHSCorruption.t.sol b/test/src/lib/parse/LibParseState.pushOpToSource.LHSCorruption.t.sol index d3785e73c..f0cb372a7 100644 --- a/test/src/lib/parse/LibParseState.pushOpToSource.LHSCorruption.t.sol +++ b/test/src/lib/parse/LibParseState.pushOpToSource.LHSCorruption.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; /// @title LibParseStatePushOpToSourceLHSCorruptionTest /// @notice Tests the boundary between the per-word ops counters in diff --git a/test/src/lib/parse/LibParseState.pushOpToSource.t.sol b/test/src/lib/parse/LibParseState.pushOpToSource.t.sol index d8846310d..0659aa72c 100644 --- a/test/src/lib/parse/LibParseState.pushOpToSource.t.sol +++ b/test/src/lib/parse/LibParseState.pushOpToSource.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import { LibParseState, ParseState, @@ -10,7 +10,7 @@ import { FSM_ACTIVE_SOURCE_MASK, FSM_ACCEPTING_INPUTS_MASK } from "../../../../src/lib/parse/LibParseState.sol"; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {SourceItemOpsOverflow} from "../../../../src/error/ErrParse.sol"; contract LibParseStatePushOpToSourceTest is Test { diff --git a/test/src/lib/parse/LibParseState.pushOpToSourceLHSCorruption.t.sol b/test/src/lib/parse/LibParseState.pushOpToSourceLHSCorruption.t.sol index 059323753..934082fe3 100644 --- a/test/src/lib/parse/LibParseState.pushOpToSourceLHSCorruption.t.sol +++ b/test/src/lib/parse/LibParseState.pushOpToSourceLHSCorruption.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseState, ParseState, MAX_STACK_RHS_OFFSET} from "../../../../src/lib/parse/LibParseState.sol"; -import {OperandV2} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OperandV2} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; /// @title LibParseStatePushOpToSourceLHSCorruptionTest /// @notice The LHS counter byte at `state + 0x5F` (the last byte of diff --git a/test/src/lib/parse/LibParseState.pushSubParser.largeMemory.t.sol b/test/src/lib/parse/LibParseState.pushSubParser.largeMemory.t.sol index 65e7916f8..01a7f11b5 100644 --- a/test/src/lib/parse/LibParseState.pushSubParser.largeMemory.t.sol +++ b/test/src/lib/parse/LibParseState.pushSubParser.largeMemory.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; -import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.28/src/lib/LibBytes.sol"; /// @title LibParseStatePushSubParserLargeMemoryTest /// @notice Regression test for the 16-bit pointer truncation bug in diff --git a/test/src/lib/parse/LibParseState.pushSubParser.t.sol b/test/src/lib/parse/LibParseState.pushSubParser.t.sol index 52268fd4b..5ca495300 100644 --- a/test/src/lib/parse/LibParseState.pushSubParser.t.sol +++ b/test/src/lib/parse/LibParseState.pushSubParser.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseState, ParseState, SUB_PARSER_POINTER_SHIFT} from "../../../../src/lib/parse/LibParseState.sol"; -import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.28/src/lib/LibBytes.sol"; import {InvalidSubParser} from "../../../../src/error/ErrParse.sol"; import {LibParseError} from "../../../../src/lib/parse/LibParseError.sol"; diff --git a/test/src/lib/parse/LibSubParse.constantAccumulation.t.sol b/test/src/lib/parse/LibSubParse.constantAccumulation.t.sol index 3a887a221..a5cb9e67c 100644 --- a/test/src/lib/parse/LibSubParse.constantAccumulation.t.sol +++ b/test/src/lib/parse/LibSubParse.constantAccumulation.t.sol @@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; -import {OPCODE_CONSTANT} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {LibBytecode, Pointer} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; +import {OPCODE_CONSTANT} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {LibBytecode, Pointer} from "rainlang-interface-0.2.8/src/lib/bytecode/LibBytecode.sol"; import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; import {ConstantReturningSubParser} from "./ConstantReturningSubParser.sol"; import {MultiConstantSubParser} from "./MultiConstantSubParser.sol"; diff --git a/test/src/lib/parse/LibSubParse.consumeSubParseLiteralInputData.t.sol b/test/src/lib/parse/LibSubParse.consumeSubParseLiteralInputData.t.sol index 21870065e..07ada717b 100644 --- a/test/src/lib/parse/LibSubParse.consumeSubParseLiteralInputData.t.sol +++ b/test/src/lib/parse/LibSubParse.consumeSubParseLiteralInputData.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibSubParse} from "../../../../src/lib/parse/LibSubParse.sol"; /// @title LibSubParseConsumeSubParseLiteralInputDataTest diff --git a/test/src/lib/parse/LibSubParse.consumeSubParseWordInputData.t.sol b/test/src/lib/parse/LibSubParse.consumeSubParseWordInputData.t.sol index ff73f4919..acb2378f2 100644 --- a/test/src/lib/parse/LibSubParse.consumeSubParseWordInputData.t.sol +++ b/test/src/lib/parse/LibSubParse.consumeSubParseWordInputData.t.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibSubParse} from "../../../../src/lib/parse/LibSubParse.sol"; import {ParseState} from "../../../../src/lib/parse/LibParseState.sol"; diff --git a/test/src/lib/parse/LibSubParse.subParseLiteral.t.sol b/test/src/lib/parse/LibSubParse.subParseLiteral.t.sol index 05cd614cc..10298043e 100644 --- a/test/src/lib/parse/LibSubParse.subParseLiteral.t.sol +++ b/test/src/lib/parse/LibSubParse.subParseLiteral.t.sol @@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibSubParse} from "../../../../src/lib/parse/LibSubParse.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; -import {LibBytes} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; -import {ISubParserV4} from "rain-interpreter-interface-0.1.0/src/interface/ISubParserV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; +import {LibBytes} from "rain-solmem-0.1.28/src/lib/LibBytes.sol"; +import {ISubParserV4} from "rainlang-interface-0.2.8/src/interface/ISubParserV4.sol"; import {UnsupportedLiteralType} from "../../../../src/error/ErrParse.sol"; import {SubParseLiteralDispatchLengthOverflow} from "../../../../src/error/ErrSubParse.sol"; import {LibParseError} from "../../../../src/lib/parse/LibParseError.sol"; diff --git a/test/src/lib/parse/LibSubParse.subParseWords.t.sol b/test/src/lib/parse/LibSubParse.subParseWords.t.sol index 7d2f24512..dfca5e3c2 100644 --- a/test/src/lib/parse/LibSubParse.subParseWords.t.sol +++ b/test/src/lib/parse/LibSubParse.subParseWords.t.sol @@ -2,18 +2,18 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibSubParse} from "../../../../src/lib/parse/LibSubParse.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; import {LibMetaFixture} from "test/lib/parse/LibMetaFixture.sol"; -import {LibBytecode, Pointer} from "rain-interpreter-interface-0.1.0/src/lib/bytecode/LibBytecode.sol"; -import {ISubParserV4} from "rain-interpreter-interface-0.1.0/src/interface/ISubParserV4.sol"; +import {LibBytecode, Pointer} from "rainlang-interface-0.2.8/src/lib/bytecode/LibBytecode.sol"; +import {ISubParserV4} from "rainlang-interface-0.2.8/src/interface/ISubParserV4.sol"; import { OPCODE_UNKNOWN, OPCODE_CONSTANT, OPCODE_CONTEXT -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; import {UnknownWord} from "../../../../src/error/ErrParse.sol"; import {ContextReturningSubParser} from "./ContextReturningSubParser.sol"; diff --git a/test/src/lib/parse/LibSubParse.subParserConstant.t.sol b/test/src/lib/parse/LibSubParse.subParserConstant.t.sol index be6fab1f4..fff21d166 100644 --- a/test/src/lib/parse/LibSubParse.subParserConstant.t.sol +++ b/test/src/lib/parse/LibSubParse.subParserConstant.t.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {OPCODE_CONSTANT} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {OPCODE_CONSTANT} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibSubParse} from "../../../../src/lib/parse/LibSubParse.sol"; import {ConstantOpcodeConstantsHeightOverflow} from "../../../../src/error/ErrSubParse.sol"; diff --git a/test/src/lib/parse/LibSubParse.subParserContext.t.sol b/test/src/lib/parse/LibSubParse.subParserContext.t.sol index ffa8c2fa6..d93c96875 100644 --- a/test/src/lib/parse/LibSubParse.subParserContext.t.sol +++ b/test/src/lib/parse/LibSubParse.subParserContext.t.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {OPCODE_CONTEXT} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {OPCODE_CONTEXT} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import {LibSubParse} from "../../../../src/lib/parse/LibSubParse.sol"; import {ContextGridOverflow} from "../../../../src/error/ErrSubParse.sol"; diff --git a/test/src/lib/parse/LibSubParse.subParserExtern.t.sol b/test/src/lib/parse/LibSubParse.subParserExtern.t.sol index a051fd670..494a4185a 100644 --- a/test/src/lib/parse/LibSubParse.subParserExtern.t.sol +++ b/test/src/lib/parse/LibSubParse.subParserExtern.t.sol @@ -2,13 +2,13 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {OperandV2, OPCODE_EXTERN} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {OperandV2, OPCODE_EXTERN} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; import { IInterpreterExternV4, ExternDispatchV2, EncodedExternDispatchV2 -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterExternV4.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterExternV4.sol"; import {LibSubParse} from "../../../../src/lib/parse/LibSubParse.sol"; import {LibExtern} from "../../../../src/lib/extern/LibExtern.sol"; import {ExternDispatchConstantsHeightOverflow} from "../../../../src/error/ErrSubParse.sol"; diff --git a/test/src/lib/parse/LibSubParse.unknownWord.t.sol b/test/src/lib/parse/LibSubParse.unknownWord.t.sol index 2e26178a3..b8ffe26a0 100644 --- a/test/src/lib/parse/LibSubParse.unknownWord.t.sol +++ b/test/src/lib/parse/LibSubParse.unknownWord.t.sol @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; import {LibParse} from "../../../../src/lib/parse/LibParse.sol"; import {UnknownWord} from "../../../../src/error/ErrParse.sol"; -import {ISubParserV4} from "rain-interpreter-interface-0.1.0/src/interface/ISubParserV4.sol"; +import {ISubParserV4} from "rainlang-interface-0.2.8/src/interface/ISubParserV4.sol"; import {LibAllStandardOps} from "../../../../src/lib/op/LibAllStandardOps.sol"; contract LibSubParseUnknownWordTest is Test { diff --git a/test/src/lib/parse/MultiConstantSubParser.sol b/test/src/lib/parse/MultiConstantSubParser.sol index 27cfbb3cf..fd8fb9c29 100644 --- a/test/src/lib/parse/MultiConstantSubParser.sol +++ b/test/src/lib/parse/MultiConstantSubParser.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {ISubParserV4} from "rain-interpreter-interface-0.1.0/src/interface/ISubParserV4.sol"; +import {ISubParserV4} from "rainlang-interface-0.2.8/src/interface/ISubParserV4.sol"; import {IERC165} from "@openzeppelin-contracts-5.6.1/utils/introspection/IERC165.sol"; -import {OPCODE_CONSTANT} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {OPCODE_CONSTANT} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; /// @dev A sub parser that returns multiple constants per word resolution. contract MultiConstantSubParser is ISubParserV4, IERC165 { diff --git a/test/src/lib/parse/literal/LibParseLiteral.dispatch.t.sol b/test/src/lib/parse/literal/LibParseLiteral.dispatch.t.sol index edbd6c4e8..6055ccac7 100644 --- a/test/src/lib/parse/literal/LibParseLiteral.dispatch.t.sol +++ b/test/src/lib/parse/literal/LibParseLiteral.dispatch.t.sol @@ -2,15 +2,15 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.28/src/lib/LibBytes.sol"; import {LibParseState, ParseState} from "../../../../../src/lib/parse/LibParseState.sol"; import {LibParseLiteral, UnsupportedLiteralType} from "../../../../../src/lib/parse/literal/LibParseLiteral.sol"; import {UppercaseHexPrefix} from "../../../../../src/error/ErrParse.sol"; import {LibParseError} from "../../../../../src/lib/parse/LibParseError.sol"; import {LibAllStandardOps} from "../../../../../src/lib/op/LibAllStandardOps.sol"; import {LibDecimalFloat, Float} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; -import {ISubParserV4} from "rain-interpreter-interface-0.1.0/src/interface/ISubParserV4.sol"; +import {ISubParserV4} from "rainlang-interface-0.2.8/src/interface/ISubParserV4.sol"; import {LibIntOrAString, IntOrAString} from "rain-intorastring-0.1.0/src/lib/LibIntOrAString.sol"; /// @title LibParseLiteralDispatchTest diff --git a/test/src/lib/parse/literal/LibParseLiteral.selectByIndex.t.sol b/test/src/lib/parse/literal/LibParseLiteral.selectByIndex.t.sol index 8608216ec..f8e289081 100644 --- a/test/src/lib/parse/literal/LibParseLiteral.selectByIndex.t.sol +++ b/test/src/lib/parse/literal/LibParseLiteral.selectByIndex.t.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.28/src/lib/LibBytes.sol"; import {LibParseState, ParseState} from "../../../../../src/lib/parse/LibParseState.sol"; import {LibParseLiteral} from "../../../../../src/lib/parse/literal/LibParseLiteral.sol"; import {LibAllStandardOps} from "../../../../../src/lib/op/LibAllStandardOps.sol"; diff --git a/test/src/lib/parse/literal/LibParseLiteralDecimal.parseDecimalFloat.t.sol b/test/src/lib/parse/literal/LibParseLiteralDecimal.parseDecimalFloat.t.sol index 9b0eccad7..1607dbd1f 100644 --- a/test/src/lib/parse/literal/LibParseLiteralDecimal.parseDecimalFloat.t.sol +++ b/test/src/lib/parse/literal/LibParseLiteralDecimal.parseDecimalFloat.t.sol @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseState, ParseState} from "../../../../../src/lib/parse/LibParseState.sol"; -import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.28/src/lib/LibBytes.sol"; import {LibParseLiteralDecimal} from "../../../../../src/lib/parse/literal/LibParseLiteralDecimal.sol"; import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; import {ParseEmptyDecimalString} from "rain-string-0.2.0/src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/literal/LibParseLiteralHex.parseHex.t.sol b/test/src/lib/parse/literal/LibParseLiteralHex.parseHex.t.sol index 2450dbb33..04b500c02 100644 --- a/test/src/lib/parse/literal/LibParseLiteralHex.parseHex.t.sol +++ b/test/src/lib/parse/literal/LibParseLiteralHex.parseHex.t.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.28/src/lib/LibBytes.sol"; import {Strings} from "@openzeppelin-contracts-5.6.1/utils/Strings.sol"; import {LibParseState, ParseState} from "../../../../../src/lib/parse/LibParseState.sol"; import {LibParseLiteralHex} from "../../../../../src/lib/parse/literal/LibParseLiteralHex.sol"; diff --git a/test/src/lib/parse/literal/LibParseLiteralString.boundString.t.sol b/test/src/lib/parse/literal/LibParseLiteralString.boundString.t.sol index 432ef48d2..d47a73d83 100644 --- a/test/src/lib/parse/literal/LibParseLiteralString.boundString.t.sol +++ b/test/src/lib/parse/literal/LibParseLiteralString.boundString.t.sol @@ -2,8 +2,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; -import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.28/src/lib/LibBytes.sol"; import {LibParseLiteralString} from "../../../../../src/lib/parse/literal/LibParseLiteralString.sol"; import {LibConformString} from "rain-string-0.2.0/src/lib/mut/LibConformString.sol"; import {StringTooLong, UnclosedStringLiteral} from "../../../../../src/error/ErrParse.sol"; diff --git a/test/src/lib/parse/literal/LibParseLiteralString.parseString.t.sol b/test/src/lib/parse/literal/LibParseLiteralString.parseString.t.sol index 1c60eb1a5..aa1b1d100 100644 --- a/test/src/lib/parse/literal/LibParseLiteralString.parseString.t.sol +++ b/test/src/lib/parse/literal/LibParseLiteralString.parseString.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibParseLiteralString} from "../../../../../src/lib/parse/literal/LibParseLiteralString.sol"; -import {LibBytes, Pointer} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; +import {LibBytes, Pointer} from "rain-solmem-0.1.28/src/lib/LibBytes.sol"; import {IntOrAString, LibIntOrAString} from "rain-intorastring-0.1.0/src/lib/LibIntOrAString.sol"; import {LibParseState, ParseState} from "../../../../../src/lib/parse/LibParseState.sol"; import {CMASK_STRING_LITERAL_TAIL} from "rain-string-0.2.0/src/lib/parse/LibParseCMask.sol"; diff --git a/test/src/lib/parse/literal/LibParseLiteralSubParseable.parseSubParseable.t.sol b/test/src/lib/parse/literal/LibParseLiteralSubParseable.parseSubParseable.t.sol index 2b4314245..e6cf1c92e 100644 --- a/test/src/lib/parse/literal/LibParseLiteralSubParseable.parseSubParseable.t.sol +++ b/test/src/lib/parse/literal/LibParseLiteralSubParseable.parseSubParseable.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test, console2} from "forge-std-1.16.1/src/Test.sol"; +import {Test, console2} from "forge-std-1.16.2/src/Test.sol"; import {ParseState, Pointer, LibParseState} from "../../../../../src/lib/parse/LibParseState.sol"; -import {LibBytes} from "rain-solmem-0.1.3/src/lib/LibBytes.sol"; +import {LibBytes} from "rain-solmem-0.1.28/src/lib/LibBytes.sol"; import {LibParseLiteralSubParseable} from "../../../../../src/lib/parse/literal/LibParseLiteralSubParseable.sol"; import { UnclosedSubParseableLiteral, @@ -12,7 +12,7 @@ import { UnsupportedLiteralType } from "../../../../../src/error/ErrParse.sol"; import {LibParseError} from "../../../../../src/lib/parse/LibParseError.sol"; -import {ISubParserV4} from "rain-interpreter-interface-0.1.0/src/interface/ISubParserV4.sol"; +import {ISubParserV4} from "rainlang-interface-0.2.8/src/interface/ISubParserV4.sol"; import {LibConformString} from "rain-string-0.2.0/src/lib/mut/LibConformString.sol"; import {CMASK_WHITESPACE, CMASK_SUB_PARSEABLE_LITERAL_END} from "rain-string-0.2.0/src/lib/parse/LibParseCMask.sol"; import {LibParseChar} from "rain-string-0.2.0/src/lib/parse/LibParseChar.sol"; diff --git a/test/src/lib/state/LibInterpreterState.fingerprint.t.sol b/test/src/lib/state/LibInterpreterState.fingerprint.t.sol index 03c226db9..e926d0762 100644 --- a/test/src/lib/state/LibInterpreterState.fingerprint.t.sol +++ b/test/src/lib/state/LibInterpreterState.fingerprint.t.sol @@ -2,16 +2,16 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {InterpreterState} from "../../../../src/lib/state/LibInterpreterState.sol"; import {LibInterpreterStateFingerprint} from "test/lib/state/LibInterpreterStateFingerprint.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; import {MemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; import { FullyQualifiedNamespace, IInterpreterStoreV3 -} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +} from "rainlang-interface-0.2.8/src/interface/IInterpreterStoreV3.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; contract LibInterpreterStateFingerprintTest is Test { /// Two identically constructed states must produce the same fingerprint. diff --git a/test/src/lib/state/LibInterpreterState.stackBottoms.t.sol b/test/src/lib/state/LibInterpreterState.stackBottoms.t.sol index 6339f77a4..44755b0b8 100644 --- a/test/src/lib/state/LibInterpreterState.stackBottoms.t.sol +++ b/test/src/lib/state/LibInterpreterState.stackBottoms.t.sol @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibInterpreterState} from "../../../../src/lib/state/LibInterpreterState.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; -import {StackItem} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; +import {StackItem} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; /// @title LibInterpreterStateStackBottomsTest /// @notice Tests for stackBottoms(), which converts pre-allocated stack arrays diff --git a/test/src/lib/state/LibInterpreterState.stackTrace.t.sol b/test/src/lib/state/LibInterpreterState.stackTrace.t.sol index 88233cf19..6f56adbae 100644 --- a/test/src/lib/state/LibInterpreterState.stackTrace.t.sol +++ b/test/src/lib/state/LibInterpreterState.stackTrace.t.sol @@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {LibUint256Array} from "rain-solmem-0.1.3/src/lib/LibUint256Array.sol"; +import {LibUint256Array} from "rain-solmem-0.1.28/src/lib/LibUint256Array.sol"; import {LibInterpreterState, STACK_TRACER} from "../../../../src/lib/state/LibInterpreterState.sol"; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; contract LibInterpreterStateStackTraceTest is Test { using LibUint256Array for uint256[]; diff --git a/test/src/lib/state/LibInterpreterStateDataContract.t.sol b/test/src/lib/state/LibInterpreterStateDataContract.t.sol index cab4490c8..8cbaa3380 100644 --- a/test/src/lib/state/LibInterpreterStateDataContract.t.sol +++ b/test/src/lib/state/LibInterpreterStateDataContract.t.sol @@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity =0.8.25; -import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {Test} from "forge-std-1.16.2/src/Test.sol"; import {LibInterpreterStateDataContract} from "../../../../src/lib/state/LibInterpreterStateDataContract.sol"; import {InterpreterState} from "../../../../src/lib/state/LibInterpreterState.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; -import {FullyQualifiedNamespace} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {IInterpreterStoreV3} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; +import {FullyQualifiedNamespace} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {IInterpreterStoreV3} from "rainlang-interface-0.2.8/src/interface/IInterpreterStoreV3.sol"; import {MemoryKV} from "rain-lib-memkv-0.1.0/src/lib/LibMemoryKV.sol"; import {LibInterpreterStateDataContractExtern} from "./LibInterpreterStateDataContractExtern.sol"; diff --git a/test/src/lib/state/LibInterpreterStateDataContractExtern.sol b/test/src/lib/state/LibInterpreterStateDataContractExtern.sol index bd5a40b76..96d2695a0 100644 --- a/test/src/lib/state/LibInterpreterStateDataContractExtern.sol +++ b/test/src/lib/state/LibInterpreterStateDataContractExtern.sol @@ -4,9 +4,9 @@ pragma solidity =0.8.25; import {LibInterpreterStateDataContract} from "../../../../src/lib/state/LibInterpreterStateDataContract.sol"; import {InterpreterState} from "../../../../src/lib/state/LibInterpreterState.sol"; -import {Pointer} from "rain-solmem-0.1.3/src/lib/LibPointer.sol"; -import {FullyQualifiedNamespace} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterV4.sol"; -import {IInterpreterStoreV3} from "rain-interpreter-interface-0.1.0/src/interface/IInterpreterStoreV3.sol"; +import {Pointer} from "rain-solmem-0.1.28/src/lib/LibPointer.sol"; +import {FullyQualifiedNamespace} from "rainlang-interface-0.2.8/src/interface/IInterpreterV4.sol"; +import {IInterpreterStoreV3} from "rainlang-interface-0.2.8/src/interface/IInterpreterStoreV3.sol"; /// @dev Wraps unsafeDeserialize as an external call to avoid /// stack-too-deep from inlining the 9-field struct return.