Repository: pcaversaccio/snekmate (language: python)

Issue:
💥 Integrate 🐍 snekmate Contracts With Halmos
[Halmos](https://github.com/a16z/halmos) is a symbolic testing tool for EVM smart contracts. Solidity is currently offered by default, but Vyper support is added incrementally. Since we write all tests in Solidity (and is fully open-source), it integrates well with our test framework. Thus, we should use Halmos to formally verify 🐍 snekmate contracts.

## References

- https://github.com/a16z/halmos
- https://github.com/zobront/vyper-halmos


Discussion / hints:

Fix patch:
diff --git a/.gas-snapshot b/.gas-snapshot
index 47206022..61a988ae 100644
--- a/.gas-snapshot
+++ b/.gas-snapshot
@@ -6,31 +6,31 @@ AccessControlTest:testFuzzGrantRoleNonAdmin(address,address) (runs: 256, μ: 164
 AccessControlTest:testFuzzGrantRoleSuccess(address) (runs: 256, μ: 44148, ~: 44148)
 AccessControlTest:testFuzzRenounceRoleMultipleTimesSuccess(address) (runs: 256, μ: 45995, ~: 45980)
 AccessControlTest:testFuzzRenounceRoleNonMsgSender(address) (runs: 256, μ: 9483, ~: 9483)
-AccessControlTest:testFuzzRenounceRoleSuccess(address) (runs: 256, μ: 41953, ~: 41938)
+AccessControlTest:testFuzzRenounceRoleSuccess(address) (runs: 256, μ: 42042, ~: 42027)
 AccessControlTest:testFuzzRevokeRoleMultipleTimesSuccess(address) (runs: 256, μ: 41759, ~: 41744)
-AccessControlTest:testFuzzRevokeRoleNonAdmin(address,address) (runs: 256, μ: 16425, ~: 16425)
-AccessControlTest:testFuzzRevokeRoleSuccess(address) (runs: 256, μ: 40591, ~: 40576)
+AccessControlTest:testFuzzRevokeRoleNonAdmin(address,address) (runs: 256, μ: 16403, ~: 16403)
+AccessControlTest:testFuzzRevokeRoleSuccess(address) (runs: 256, μ: 40573, ~: 40558)
 AccessControlTest:testFuzzSetRoleAdminPreviousAdminCallsGrantRole(address,address) (runs: 256, μ: 76002, ~: 76002)
 AccessControlTest:testFuzzSetRoleAdminPreviousAdminCallsRevokeRole(address,address) (runs: 256, μ: 101546, ~: 101546)
-AccessControlTest:testFuzzSetRoleAdminSuccess(address,address) (runs: 256, μ: 91046, ~: 91046)
+AccessControlTest:testFuzzSetRoleAdminSuccess(address,address) (runs: 256, μ: 91135, ~: 91135)
 AccessControlTest:testGrantRoleAdminRoleSuccess() (gas: 44827)
-AccessControlTest:testGrantRoleMultipleTimesSuccess() (gas: 50772)
-AccessControlTest:testGrantRoleNonAdmin() (gas: 14696)
+AccessControlTest:testGrantRoleMultipleTimesSuccess() (gas: 50881)
+AccessControlTest:testGrantRoleNonAdmin() (gas: 14702)
 AccessControlTest:testGrantRoleSuccess() (gas: 45046)
-AccessControlTest:testInitialSetup() (gas: 479352)
-AccessControlTest:testRenounceRoleAdminRoleSuccess() (gas: 20935)
+AccessControlTest:testInitialSetup() (gas: 479339)
+AccessControlTest:testRenounceRoleAdminRoleSuccess() (gas: 20913)
 AccessControlTest:testRenounceRoleMultipleTimesSuccess() (gas: 46648)
-AccessControlTest:testRenounceRoleNonMsgSender() (gas: 10342)
+AccessControlTest:testRenounceRoleNonMsgSender() (gas: 10348)
 AccessControlTest:testRenounceRoleSuccess() (gas: 42677)
-AccessControlTest:testRevokeRoleAdminRoleSuccess() (gas: 24912)
+AccessControlTest:testRevokeRoleAdminRoleSuccess() (gas: 24890)
 AccessControlTest:testRevokeRoleMultipleTimesSuccess() (gas: 42447)
-AccessControlTest:testRevokeRoleNonAdmin() (gas: 14784)
+AccessControlTest:testRevokeRoleNonAdmin() (gas: 14790)
 AccessControlTest:testRevokeRoleSuccess() (gas: 41280)
 AccessControlTest:testSetRoleAdminPreviousAdminCallsGrantRole() (gas: 78141)
 AccessControlTest:testSetRoleAdminPreviousAdminCallsRevokeRole() (gas: 103617)
 AccessControlTest:testSetRoleAdminSuccess() (gas: 93014)
-AccessControlTest:testSupportsInterfaceInvalidInterfaceId() (gas: 8378)
-AccessControlTest:testSupportsInterfaceInvalidInterfaceIdGasCost() (gas: 9211)
+AccessControlTest:testSupportsInterfaceInvalidInterfaceId() (gas: 8356)
+AccessControlTest:testSupportsInterfaceInvalidInterfaceIdGasCost() (gas: 9189)
 AccessControlTest:testSupportsInterfaceSuccess() (gas: 9527)
 AccessControlTest:testSupportsInterfaceSuccessGasCost() (gas: 9167)
 Base64Test:testDataLengthMismatch() (gas: 110404)
@@ -48,711 +48,711 @@ Base64Test:testEncodeSingleCharacter() (gas: 173385)
 Base64Test:testEncodeWithDoublePadding() (gas: 178950)
 Base64Test:testEncodeWithNoPadding() (gas: 177937)
 Base64Test:testEncodeWithSinglePadding() (gas: 179053)
-BatchDistributorInvariants:statefulFuzzNoEtherBalance() (runs: 256, calls: 3840, reverts: 3820)
-BatchDistributorInvariants:statefulFuzzNoTokenBalance() (runs: 256, calls: 3840, reverts: 3820)
+BatchDistributorInvariants:statefulFuzzNoEtherBalance() (runs: 256, calls: 3840, reverts: 3830)
+BatchDistributorInvariants:statefulFuzzNoTokenBalance() (runs: 256, calls: 3840, reverts: 3830)
 BatchDistributorTest:testDistributeEtherMultipleAddressesSuccess() (gas: 135524)
-BatchDistributorTest:testDistributeEtherOneAddressSuccess() (gas: 61680)
+BatchDistributorTest:testDistributeEtherOneAddressSuccess() (gas: 61636)
 BatchDistributorTest:testDistributeEtherReentrancy() (gas: 1645541)
 BatchDistributorTest:testDistributeEtherRevertWithInsufficientFunds() (gas: 65209)
-BatchDistributorTest:testDistributeEtherRevertWithNoFallbackFunctionForMsgSender() (gas: 141065)
+BatchDistributorTest:testDistributeEtherRevertWithNoFallbackFunctionForMsgSender() (gas: 141088)
 BatchDistributorTest:testDistributeEtherRevertWithNoFallbackFunctionForReceipt() (gas: 36593)
 BatchDistributorTest:testDistributeEtherSendsBackExcessiveEther() (gas: 170924)
-BatchDistributorTest:testDistributeTokenMultipleAddressesSuccess() (gas: 617059)
-BatchDistributorTest:testDistributeTokenOneAddressSuccess() (gas: 579064)
+BatchDistributorTest:testDistributeTokenMultipleAddressesSuccess() (gas: 617110)
+BatchDistributorTest:testDistributeTokenOneAddressSuccess() (gas: 579078)
 BatchDistributorTest:testDistributeTokenRevertWithInsufficientAllowance() (gas: 573601)
 BatchDistributorTest:testDistributeTokenRevertWithInsufficientBalance() (gas: 574254)
-BatchDistributorTest:testFuzzDistributeEtherMultipleAddressesSuccess(((address,uint256)[]),uint256) (runs: 256, μ: 1764221, ~: 1784454)
-BatchDistributorTest:testFuzzDistributeTokenMultipleAddressesSuccess(((address,uint256)[]),address,uint256) (runs: 256, μ: 1325564, ~: 1251041)
-Create2AddressTest:testComputeAddress() (gas: 532159)
-Create2AddressTest:testComputeAddressSelf() (gas: 540886)
-Create2AddressTest:testFuzzComputeAddress(bytes32,address) (runs: 256, μ: 532754, ~: 532754)
-Create2AddressTest:testFuzzComputeAddressSelf(bytes32) (runs: 256, μ: 540907, ~: 540907)
+BatchDistributorTest:testFuzzDistributeEtherMultipleAddressesSuccess(((address,uint256)[]),uint256) (runs: 256, μ: 1763314, ~: 1784680)
+BatchDistributorTest:testFuzzDistributeTokenMultipleAddressesSuccess(((address,uint256)[]),address,uint256) (runs: 256, μ: 1325891, ~: 1251126)
+Create2AddressTest:testComputeAddress() (gas: 532147)
+Create2AddressTest:testComputeAddressSelf() (gas: 540807)
+Create2AddressTest:testFuzzComputeAddress(bytes32,address) (runs: 256, μ: 532742, ~: 532742)
+Create2AddressTest:testFuzzComputeAddressSelf(bytes32) (runs: 256, μ: 540917, ~: 540917)
 CreateAddressTest:testComputeAddressNonce0x00() (gas: 16315)
 CreateAddressTest:testComputeAddressNonce0x7f() (gas: 530219)
-CreateAddressTest:testComputeAddressNonceUint16() (gas: 530260)
+CreateAddressTest:testComputeAddressNonceUint16() (gas: 530305)
 CreateAddressTest:testComputeAddressNonceUint24() (gas: 530355)
-CreateAddressTest:testComputeAddressNonceUint32() (gas: 530317)
-CreateAddressTest:testComputeAddressNonceUint40() (gas: 530389)
-CreateAddressTest:testComputeAddressNonceUint48() (gas: 530417)
+CreateAddressTest:testComputeAddressNonceUint32() (gas: 530382)
+CreateAddressTest:testComputeAddressNonceUint40() (gas: 530367)
+CreateAddressTest:testComputeAddressNonceUint48() (gas: 530373)
 CreateAddressTest:testComputeAddressNonceUint56() (gas: 530441)
 CreateAddressTest:testComputeAddressNonceUint64() (gas: 530564)
 CreateAddressTest:testComputeAddressNonceUint8() (gas: 530300)
-CreateAddressTest:testComputeAddressRevertTooHighNonce() (gas: 10408)
+CreateAddressTest:testComputeAddressRevertTooHighNonce() (gas: 10402)
 CreateAddressTest:testComputeAddressSelfNonce0x7f() (gas: 534508)
-CreateAddressTest:testComputeAddressSelfNonceUint16() (gas: 534718)
-CreateAddressTest:testComputeAddressSelfNonceUint24() (gas: 534747)
-CreateAddressTest:testComputeAddressSelfNonceUint32() (gas: 534843)
-CreateAddressTest:testComputeAddressSelfNonceUint40() (gas: 534872)
-CreateAddressTest:testComputeAddressSelfNonceUint48() (gas: 534900)
+CreateAddressTest:testComputeAddressSelfNonceUint16() (gas: 534696)
+CreateAddressTest:testComputeAddressSelfNonceUint24() (gas: 534725)
+CreateAddressTest:testComputeAddressSelfNonceUint32() (gas: 534799)
+CreateAddressTest:testComputeAddressSelfNonceUint40() (gas: 534850)
+CreateAddressTest:testComputeAddressSelfNonceUint48() (gas: 534878)
 CreateAddressTest:testComputeAddressSelfNonceUint56() (gas: 534925)
-CreateAddressTest:testComputeAddressSelfNonceUint64() (gas: 535028)
+CreateAddressTest:testComputeAddressSelfNonceUint64() (gas: 535006)
 CreateAddressTest:testComputeAddressSelfNonceUint8() (gas: 534652)
-CreateAddressTest:testComputeAddressSelfRevertTooHighNonce() (gas: 8899)
-CreateAddressTest:testFuzzComputeAddressNonce0x7f(uint64,address) (runs: 256, μ: 533177, ~: 533249)
-CreateAddressTest:testFuzzComputeAddressNonceUint16(uint64,address) (runs: 256, μ: 532597, ~: 532853)
-CreateAddressTest:testFuzzComputeAddressNonceUint24(uint64,address) (runs: 256, μ: 532749, ~: 532833)
-CreateAddressTest:testFuzzComputeAddressNonceUint32(uint64,address) (runs: 256, μ: 532719, ~: 532840)
-CreateAddressTest:testFuzzComputeAddressNonceUint40(uint64,address) (runs: 256, μ: 532869, ~: 532932)
-CreateAddressTest:testFuzzComputeAddressNonceUint48(uint64,address) (runs: 256, μ: 532821, ~: 532916)
-CreateAddressTest:testFuzzComputeAddressNonceUint56(uint64,address) (runs: 256, μ: 532862, ~: 532941)
-CreateAddressTest:testFuzzComputeAddressNonceUint64(uint64,address) (runs: 256, μ: 532936, ~: 533036)
-CreateAddressTest:testFuzzComputeAddressNonceUint8(uint64,address) (runs: 256, μ: 532650, ~: 532707)
-CreateAddressTest:testFuzzComputeAddressRevertTooHighNonce(uint256,address) (runs: 256, μ: 12850, ~: 13145)
-CreateAddressTest:testFuzzComputeAddressSelfNonce0x7f(uint64) (runs: 256, μ: 539426, ~: 539495)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint16(uint64) (runs: 256, μ: 538656, ~: 538928)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint24(uint64) (runs: 256, μ: 538897, ~: 538980)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint32(uint64) (runs: 256, μ: 538974, ~: 539076)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint40(uint64) (runs: 256, μ: 538982, ~: 539060)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint48(uint64) (runs: 256, μ: 539070, ~: 539134)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint56(uint64) (runs: 256, μ: 539141, ~: 539200)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint64(uint64) (runs: 256, μ: 539237, ~: 539321)
-CreateAddressTest:testFuzzComputeAddressSelfNonceUint8(uint64) (runs: 256, μ: 538721, ~: 538771)
-CreateAddressTest:testFuzzComputeAddressSelfRevertTooHighNonce(uint256) (runs: 256, μ: 12707, ~: 13020)
-ECDSATest:testFuzzRecoverWithInvalidSignature(bytes,string) (runs: 256, μ: 15355, ~: 15358)
-ECDSATest:testFuzzRecoverWithTooLongSignature(bytes,string) (runs: 256, μ: 13743, ~: 13746)
+CreateAddressTest:testComputeAddressSelfRevertTooHighNonce() (gas: 8877)
+CreateAddressTest:testFuzzComputeAddressNonce0x7f(uint64,address) (runs: 256, μ: 533175, ~: 533249)
+CreateAddressTest:testFuzzComputeAddressNonceUint16(uint64,address) (runs: 256, μ: 532583, ~: 532851)
+CreateAddressTest:testFuzzComputeAddressNonceUint24(uint64,address) (runs: 256, μ: 532729, ~: 532811)
+CreateAddressTest:testFuzzComputeAddressNonceUint32(uint64,address) (runs: 256, μ: 532734, ~: 532840)
+CreateAddressTest:testFuzzComputeAddressNonceUint40(uint64,address) (runs: 256, μ: 532846, ~: 532910)
+CreateAddressTest:testFuzzComputeAddressNonceUint48(uint64,address) (runs: 256, μ: 532817, ~: 532916)
+CreateAddressTest:testFuzzComputeAddressNonceUint56(uint64,address) (runs: 256, μ: 532884, ~: 532964)
+CreateAddressTest:testFuzzComputeAddressNonceUint64(uint64,address) (runs: 256, μ: 532920, ~: 533014)
+CreateAddressTest:testFuzzComputeAddressNonceUint8(uint64,address) (runs: 256, μ: 532624, ~: 532685)
+CreateAddressTest:testFuzzComputeAddressRevertTooHighNonce(uint256,address) (runs: 256, μ: 12848, ~: 13145)
+CreateAddressTest:testFuzzComputeAddressSelfNonce0x7f(uint64) (runs: 256, μ: 539407, ~: 539473)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint16(uint64) (runs: 256, μ: 538660, ~: 538928)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint24(uint64) (runs: 256, μ: 538986, ~: 539068)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint32(uint64) (runs: 256, μ: 538972, ~: 539076)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint40(uint64) (runs: 256, μ: 539070, ~: 539147)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint48(uint64) (runs: 256, μ: 539067, ~: 539134)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint56(uint64) (runs: 256, μ: 539139, ~: 539200)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint64(uint64) (runs: 256, μ: 539228, ~: 539321)
+CreateAddressTest:testFuzzComputeAddressSelfNonceUint8(uint64) (runs: 256, μ: 538738, ~: 538794)
+CreateAddressTest:testFuzzComputeAddressSelfRevertTooHighNonce(uint256) (runs: 256, μ: 12677, ~: 12998)
+ECDSATest:testFuzzRecoverWithInvalidSignature(bytes,string) (runs: 256, μ: 15349, ~: 15352)
+ECDSATest:testFuzzRecoverWithTooLongSignature(bytes,string) (runs: 256, μ: 13782, ~: 13785)
 ECDSATest:testFuzzRecoverWithValidSignature(string,string) (runs: 256, μ: 21687, ~: 21692)
 ECDSATest:testFuzzRecoverWithWrongMessage(string,string,bytes32) (runs: 256, μ: 21762, ~: 21757)
 ECDSATest:testRecoverWith0x00Value() (gas: 14961)
 ECDSATest:testRecoverWithArbitraryMessage() (gas: 20672)
 ECDSATest:testRecoverWithCorrectVersion() (gas: 21126)
 ECDSATest:testRecoverWithInvalidSignature() (gas: 14694)
-ECDSATest:testRecoverWithTooHighSValue() (gas: 15813)
+ECDSATest:testRecoverWithTooHighSValue() (gas: 15785)
 ECDSATest:testRecoverWithTooLongSignature() (gas: 12565)
-ECDSATest:testRecoverWithTooShortSignature() (gas: 14154)
+ECDSATest:testRecoverWithTooShortSignature() (gas: 14141)
 ECDSATest:testRecoverWithValidSignature() (gas: 20732)
 ECDSATest:testRecoverWithWrongMessage() (gas: 20744)
 ECDSATest:testRecoverWithWrongVersion() (gas: 14967)
-EIP712DomainSeparatorTest:testCachedDomainSeparatorV4() (gas: 10476)
-EIP712DomainSeparatorTest:testDomainSeparatorV4() (gas: 11731)
+EIP712DomainSeparatorTest:testCachedDomainSeparatorV4() (gas: 10564)
+EIP712DomainSeparatorTest:testDomainSeparatorV4() (gas: 11709)
 EIP712DomainSeparatorTest:testEIP712Domain() (gas: 18055)
-EIP712DomainSeparatorTest:testFuzzDomainSeparatorV4(uint8) (runs: 256, μ: 11878, ~: 11906)
-EIP712DomainSeparatorTest:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 21448, ~: 21499)
-EIP712DomainSeparatorTest:testFuzzHashTypedDataV4(address,address,uint256,uint256,uint64) (runs: 256, μ: 10679, ~: 10679)
-EIP712DomainSeparatorTest:testHashTypedDataV4() (gas: 13167)
-ERC1155Invariants:statefulFuzzOwner() (runs: 256, calls: 3840, reverts: 3447)
+EIP712DomainSeparatorTest:testFuzzDomainSeparatorV4(uint8) (runs: 256, μ: 11856, ~: 11884)
+EIP712DomainSeparatorTest:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 21425, ~: 21469)
+EIP712DomainSeparatorTest:testFuzzHashTypedDataV4(address,address,uint256,uint256,uint64) (runs: 256, μ: 10659, ~: 10659)
+EIP712DomainSeparatorTest:testHashTypedDataV4() (gas: 13147)
+ERC1155Invariants:statefulFuzzOwner() (runs: 256, calls: 3840, reverts: 3480)
 ERC1155Test:testBalanceOfBatchCase1() (gas: 254241)
-ERC1155Test:testBalanceOfBatchCase2() (gas: 208833)
-ERC1155Test:testBalanceOfBatchCase3() (gas: 35505)
+ERC1155Test:testBalanceOfBatchCase2() (gas: 208811)
+ERC1155Test:testBalanceOfBatchCase3() (gas: 35514)
 ERC1155Test:testBalanceOfBatchLengthsMismatch() (gas: 23677)
-ERC1155Test:testBalanceOfCase1() (gas: 133975)
-ERC1155Test:testBalanceOfCase2() (gas: 21807)
-ERC1155Test:testBurnAmountExceedsBalance() (gas: 113025)
-ERC1155Test:testBurnBatchAmountExceedsBalance() (gas: 178272)
-ERC1155Test:testBurnBatchByApprovedOperator() (gas: 231893)
-ERC1155Test:testBurnBatchByNotApprovedOperator() (gas: 22104)
-ERC1155Test:testBurnBatchFromZeroAddress() (gas: 18165)
+ERC1155Test:testBalanceOfCase1() (gas: 134042)
+ERC1155Test:testBalanceOfCase2() (gas: 21887)
+ERC1155Test:testBurnAmountExceedsBalance() (gas: 113112)
+ERC1155Test:testBurnBatchAmountExceedsBalance() (gas: 178267)
+ERC1155Test:testBurnBatchByApprovedOperator() (gas: 231876)
+ERC1155Test:testBurnBatchByNotApprovedOperator() (gas: 22082)
+ERC1155Test:testBurnBatchFromZeroAddress() (gas: 18143)
 ERC1155Test:testBurnBatchLengthsMismatch() (gas: 25851)
-ERC1155Test:testBurnBatchNonExistentTokenIds() (gas: 20048)
+ERC1155Test:testBurnBatchNonExistentTokenIds() (gas: 20026)
 ERC1155Test:testBurnBatchSuccess() (gas: 196980)
 ERC1155Test:testBurnByApprovedOperator() (gas: 180817)
 ERC1155Test:testBurnByNotApprovedOperator() (gas: 132582)
-ERC1155Test:testBurnFromZeroAddress() (gas: 14072)
+ERC1155Test:testBurnFromZeroAddress() (gas: 14050)
 ERC1155Test:testBurnNonExistentTokenId() (gas: 16940)
 ERC1155Test:testBurnSuccess() (gas: 125117)
-ERC1155Test:testExistsAfterBatchBurn() (gas: 113342)
-ERC1155Test:testExistsAfterBatchMint() (gas: 128375)
-ERC1155Test:testExistsAfterSingleBurn() (gas: 120481)
-ERC1155Test:testExistsAfterSingleMint() (gas: 107193)
-ERC1155Test:testExistsBeforeMint() (gas: 10481)
-ERC1155Test:testFuzzBurnBatchSuccess(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 114455, ~: 114444)
-ERC1155Test:testFuzzBurnSuccess(address,address,uint256) (runs: 256, μ: 123438, ~: 123448)
-ERC1155Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13962, ~: 13962)
-ERC1155Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48759, ~: 48744)
-ERC1155Test:testFuzzSafeBatchTransferFromByApprovedOperator(address,address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 196064, ~: 196043)
-ERC1155Test:testFuzzSafeBatchTransferFromEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 160584, ~: 160583)
-ERC1155Test:testFuzzSafeBatchTransferFromNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 528710, ~: 528710)
-ERC1155Test:testFuzzSafeBatchTransferFromWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 529098, ~: 529402)
-ERC1155Test:testFuzzSafeMintBatchEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 138145, ~: 138159)
-ERC1155Test:testFuzzSafeMintBatchNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 500143, ~: 500143)
-ERC1155Test:testFuzzSafeMintBatchNonMinter(address) (runs: 256, μ: 26533, ~: 26533)
-ERC1155Test:testFuzzSafeMintBatchWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 500429, ~: 500594)
-ERC1155Test:testFuzzSafeMintEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 140509, ~: 140511)
-ERC1155Test:testFuzzSafeMintNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 503486, ~: 503486)
-ERC1155Test:testFuzzSafeMintNonMinter(address) (runs: 256, μ: 26162, ~: 26162)
-ERC1155Test:testFuzzSafeMintWithData(address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 504640, ~: 504280)
-ERC1155Test:testFuzzSafeTransferFromByApprovedOperator(address,address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 187760, ~: 187729)
-ERC1155Test:testFuzzSafeTransferFromEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 152368, ~: 152356)
-ERC1155Test:testFuzzSafeTransferFromNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 578758, ~: 578758)
-ERC1155Test:testFuzzSafeTransferFromWithData(address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 580823, ~: 580106)
-ERC1155Test:testFuzzSetApprovalForAllRevoke(address,address) (runs: 256, μ: 31971, ~: 31940)
+ERC1155Test:testExistsAfterBatchBurn() (gas: 113320)
+ERC1155Test:testExistsAfterBatchMint() (gas: 128359)
+ERC1155Test:testExistsAfterSingleBurn() (gas: 120554)
+ERC1155Test:testExistsAfterSingleMint() (gas: 107205)
+ERC1155Test:testExistsBeforeMint() (gas: 10459)
+ERC1155Test:testFuzzBurnBatchSuccess(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 114433, ~: 114427)
+ERC1155Test:testFuzzBurnSuccess(address,address,uint256) (runs: 256, μ: 123505, ~: 123515)
+ERC1155Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13940, ~: 13940)
+ERC1155Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48744, ~: 48730)
+ERC1155Test:testFuzzSafeBatchTransferFromByApprovedOperator(address,address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 196054, ~: 196043)
+ERC1155Test:testFuzzSafeBatchTransferFromEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 160604, ~: 160583)
+ERC1155Test:testFuzzSafeBatchTransferFromNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 528707, ~: 528717)
+ERC1155Test:testFuzzSafeBatchTransferFromWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 529117, ~: 529409)
+ERC1155Test:testFuzzSafeMintBatchEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 138142, ~: 138137)
+ERC1155Test:testFuzzSafeMintBatchNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 500140, ~: 500150)
+ERC1155Test:testFuzzSafeMintBatchNonMinter(address) (runs: 256, μ: 26539, ~: 26539)
+ERC1155Test:testFuzzSafeMintBatchWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 500526, ~: 500689)
+ERC1155Test:testFuzzSafeMintEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 140596, ~: 140578)
+ERC1155Test:testFuzzSafeMintNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 503490, ~: 503500)
+ERC1155Test:testFuzzSafeMintNonMinter(address) (runs: 256, μ: 26140, ~: 26140)
+ERC1155Test:testFuzzSafeMintWithData(address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 504642, ~: 504272)
+ERC1155Test:testFuzzSafeTransferFromByApprovedOperator(address,address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 187729, ~: 187707)
+ERC1155Test:testFuzzSafeTransferFromEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 152365, ~: 152334)
+ERC1155Test:testFuzzSafeTransferFromNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 578740, ~: 578750)
+ERC1155Test:testFuzzSafeTransferFromWithData(address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 580847, ~: 580120)
+ERC1155Test:testFuzzSetApprovalForAllRevoke(address,address) (runs: 256, μ: 31972, ~: 31940)
 ERC1155Test:testFuzzSetApprovalForAllSuccess(address,address) (runs: 256, μ: 45350, ~: 45350)
-ERC1155Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15509, ~: 15502)
+ERC1155Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15506, ~: 15499)
 ERC1155Test:testFuzzSetMinterSuccess(string) (runs: 256, μ: 33573, ~: 33584)
 ERC1155Test:testFuzzSetUriNonMinter(address) (runs: 256, μ: 14425, ~: 14425)
-ERC1155Test:testFuzzTotalSupplyAfterBatchBurn(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 108026, ~: 108016)
-ERC1155Test:testFuzzTotalSupplyAfterBatchMint(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 126291, ~: 126323)
-ERC1155Test:testFuzzTotalSupplyAfterSingleBurn(address,uint256,bytes) (runs: 256, μ: 120505, ~: 120471)
-ERC1155Test:testFuzzTotalSupplyAfterSingleMint(uint256,uint256,bytes) (runs: 256, μ: 78182, ~: 107764)
-ERC1155Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14071, ~: 14071)
-ERC1155Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 75747, ~: 75716)
-ERC1155Test:testHasOwner() (gas: 12614)
-ERC1155Test:testInitialSetup() (gas: 2892435)
-ERC1155Test:testRenounceOwnershipNonOwner() (gas: 10903)
-ERC1155Test:testRenounceOwnershipSuccess() (gas: 22923)
+ERC1155Test:testFuzzTotalSupplyAfterBatchBurn(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 108022, ~: 108016)
+ERC1155Test:testFuzzTotalSupplyAfterBatchMint(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 126262, ~: 126301)
+ERC1155Test:testFuzzTotalSupplyAfterSingleBurn(address,uint256,bytes) (runs: 256, μ: 120578, ~: 120544)
+ERC1155Test:testFuzzTotalSupplyAfterSingleMint(uint256,uint256,bytes) (runs: 256, μ: 76650, ~: 48267)
+ERC1155Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14049, ~: 14049)
+ERC1155Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 75704, ~: 75672)
+ERC1155Test:testHasOwner() (gas: 12680)
+ERC1155Test:testInitialSetup() (gas: 2894237)
+ERC1155Test:testRenounceOwnershipNonOwner() (gas: 10881)
+ERC1155Test:testRenounceOwnershipSuccess() (gas: 22906)
 ERC1155Test:testSafeBatchTransferFromByApprovedOperator() (gas: 309682)
-ERC1155Test:testSafeBatchTransferFromByNotApprovedOperator() (gas: 230894)
-ERC1155Test:testSafeBatchTransferFromEOAReceiver() (gas: 272480)
-ERC1155Test:testSafeBatchTransferFromInsufficientBalance() (gas: 237279)
-ERC1155Test:testSafeBatchTransferFromLengthsMismatch() (gas: 34882)
-ERC1155Test:testSafeBatchTransferFromNoData() (gas: 636799)
-ERC1155Test:testSafeBatchTransferFromReceiverFunctionNotImplemented() (gas: 258045)
-ERC1155Test:testSafeBatchTransferFromReceiverInvalidReturnIdentifier() (gas: 612358)
-ERC1155Test:testSafeBatchTransferFromReceiverReverts() (gas: 605601)
-ERC1155Test:testSafeBatchTransferFromReceiverRevertsOnlySingle() (gas: 636862)
-ERC1155Test:testSafeBatchTransferFromToZeroAddress() (gas: 227713)
-ERC1155Test:testSafeBatchTransferFromWithData() (gas: 638012)
-ERC1155Test:testSafeMintBatchEOAReceiver() (gas: 233667)
+ERC1155Test:testSafeBatchTransferFromByNotApprovedOperator() (gas: 230961)
+ERC1155Test:testSafeBatchTransferFromEOAReceiver() (gas: 272463)
+ERC1155Test:testSafeBatchTransferFromInsufficientBalance() (gas: 237263)
+ERC1155Test:testSafeBatchTransferFromLengthsMismatch() (gas: 34860)
+ERC1155Test:testSafeBatchTransferFromNoData() (gas: 636806)
+ERC1155Test:testSafeBatchTransferFromReceiverFunctionNotImplemented() (gas: 258028)
+ERC1155Test:testSafeBatchTransferFromReceiverInvalidReturnIdentifier() (gas: 612343)
+ERC1155Test:testSafeBatchTransferFromReceiverReverts() (gas: 605579)
+ERC1155Test:testSafeBatchTransferFromReceiverRevertsOnlySingle() (gas: 636847)
+ERC1155Test:testSafeBatchTransferFromToZeroAddress() (gas: 227691)
+ERC1155Test:testSafeBatchTransferFromWithData() (gas: 638019)
+ERC1155Test:testSafeMintBatchEOAReceiver() (gas: 233645)
 ERC1155Test:testSafeMintBatchLengthsMismatch() (gas: 38000)
-ERC1155Test:testSafeMintBatchNoData() (gas: 597371)
-ERC1155Test:testSafeMintBatchNonMinter() (gas: 25340)
-ERC1155Test:testSafeMintBatchOverflow() (gas: 234974)
+ERC1155Test:testSafeMintBatchNoData() (gas: 597356)
+ERC1155Test:testSafeMintBatchNonMinter() (gas: 25346)
+ERC1155Test:testSafeMintBatchOverflow() (gas: 234952)
 ERC1155Test:testSafeMintBatchReceiverFunctionNotImplemented() (gas: 213823)
-ERC1155Test:testSafeMintBatchReceiverInvalidReturnIdentifier() (gas: 577983)
-ERC1155Test:testSafeMintBatchReceiverReverts() (gas: 571202)
-ERC1155Test:testSafeMintBatchReceiverRevertsOnlySingle() (gas: 597348)
+ERC1155Test:testSafeMintBatchReceiverInvalidReturnIdentifier() (gas: 577968)
+ERC1155Test:testSafeMintBatchReceiverReverts() (gas: 571180)
+ERC1155Test:testSafeMintBatchReceiverRevertsOnlySingle() (gas: 597333)
 ERC1155Test:testSafeMintBatchToZeroAddress() (gas: 26456)
-ERC1155Test:testSafeMintBatchWithData() (gas: 597931)
-ERC1155Test:testSafeMintEOAReceiver() (gas: 137470)
-ERC1155Test:testSafeMintNoData() (gas: 500056)
-ERC1155Test:testSafeMintNonMinter() (gas: 24927)
+ERC1155Test:testSafeMintBatchWithData() (gas: 598024)
+ERC1155Test:testSafeMintEOAReceiver() (gas: 137448)
+ERC1155Test:testSafeMintNoData() (gas: 500048)
+ERC1155Test:testSafeMintNonMinter() (gas: 24905)
 ERC1155Test:testSafeMintOverflow() (gas: 81139)
 ERC1155Test:testSafeMintReceiverFunctionNotImplemented() (gas: 128928)
-ERC1155Test:testSafeMintReceiverInvalidReturnIdentifier() (gas: 489988)
-ERC1155Test:testSafeMintReceiverReverts() (gas: 483541)
+ERC1155Test:testSafeMintReceiverInvalidReturnIdentifier() (gas: 490002)
+ERC1155Test:testSafeMintReceiverReverts() (gas: 483519)
 ERC1155Test:testSafeMintToZeroAddress() (gas: 25998)
-ERC1155Test:testSafeMintWithData() (gas: 501289)
+ERC1155Test:testSafeMintWithData() (gas: 501303)
 ERC1155Test:testSafeTransferFromByApprovedOperator() (gas: 187564)
-ERC1155Test:testSafeTransferFromByNotApprovedOperator() (gas: 134823)
-ERC1155Test:testSafeTransferFromEOAReceiver() (gas: 151134)
-ERC1155Test:testSafeTransferFromInsufficientBalance() (gas: 78646)
-ERC1155Test:testSafeTransferFromNoData() (gas: 576357)
+ERC1155Test:testSafeTransferFromByNotApprovedOperator() (gas: 134801)
+ERC1155Test:testSafeTransferFromEOAReceiver() (gas: 151112)
+ERC1155Test:testSafeTransferFromInsufficientBalance() (gas: 78630)
+ERC1155Test:testSafeTransferFromNoData() (gas: 576371)
 ERC1155Test:testSafeTransferFromReceiverFunctionNotImplemented() (gas: 186201)
-ERC1155Test:testSafeTransferFromReceiverInvalidReturnIdentifier() (gas: 547318)
+ERC1155Test:testSafeTransferFromReceiverInvalidReturnIdentifier() (gas: 547332)
 ERC1155Test:testSafeTransferFromReceiverReverts() (gas: 540828)
 ERC1155Test:testSafeTransferFromToZeroAddress() (gas: 77670)
-ERC1155Test:testSafeTransferFromWithData() (gas: 578698)
-ERC1155Test:testSetApprovalForAllRevoke() (gas: 33920)
-ERC1155Test:testSetApprovalForAllSuccess() (gas: 47704)
-ERC1155Test:testSetApprovalForAllToSelf() (gas: 10855)
-ERC1155Test:testSetMinterNonOwner() (gas: 12520)
+ERC1155Test:testSafeTransferFromWithData() (gas: 578690)
+ERC1155Test:testSetApprovalForAllRevoke() (gas: 33902)
+ERC1155Test:testSetApprovalForAllSuccess() (gas: 47682)
+ERC1155Test:testSetApprovalForAllToSelf() (gas: 10833)
+ERC1155Test:testSetMinterNonOwner() (gas: 12526)
 ERC1155Test:testSetMinterRemoveOwnerAddress() (gas: 13666)
-ERC1155Test:testSetMinterSuccess() (gas: 33459)
+ERC1155Test:testSetMinterSuccess() (gas: 33441)
 ERC1155Test:testSetMinterToZeroAddress() (gas: 15706)
-ERC1155Test:testSetUri() (gas: 67303)
-ERC1155Test:testSetUriEmpty() (gas: 25893)
-ERC1155Test:testSetUriNonMinter() (gas: 13269)
-ERC1155Test:testSupportsInterfaceInvalidInterfaceId() (gas: 8402)
-ERC1155Test:testSupportsInterfaceInvalidInterfaceIdGasCost() (gas: 9280)
-ERC1155Test:testSupportsInterfaceSuccess() (gas: 10924)
+ERC1155Test:testSetUri() (gas: 67370)
+ERC1155Test:testSetUriEmpty() (gas: 25871)
+ERC1155Test:testSetUriNonMinter() (gas: 13247)
+ERC1155Test:testSupportsInterfaceInvalidInterfaceId() (gas: 8490)
+ERC1155Test:testSupportsInterfaceInvalidInterfaceIdGasCost() (gas: 9347)
+ERC1155Test:testSupportsInterfaceSuccess() (gas: 10902)
 ERC1155Test:testSupportsInterfaceSuccessGasCost() (gas: 9387)
-ERC1155Test:testTotalSupplyAfterBatchBurn() (gas: 113311)
-ERC1155Test:testTotalSupplyAfterBatchMint() (gas: 128336)
-ERC1155Test:testTotalSupplyAfterSingleBurn() (gas: 117284)
-ERC1155Test:testTotalSupplyAfterSingleMint() (gas: 107137)
+ERC1155Test:testTotalSupplyAfterBatchBurn() (gas: 113359)
+ERC1155Test:testTotalSupplyAfterBatchMint() (gas: 128320)
+ERC1155Test:testTotalSupplyAfterSingleBurn() (gas: 117290)
+ERC1155Test:testTotalSupplyAfterSingleMint() (gas: 107149)
 ERC1155Test:testTotalSupplyBeforeMint() (gas: 10460)
-ERC1155Test:testTransferOwnershipNonOwner() (gas: 12455)
-ERC1155Test:testTransferOwnershipSuccess() (gas: 53866)
+ERC1155Test:testTransferOwnershipNonOwner() (gas: 12439)
+ERC1155Test:testTransferOwnershipSuccess() (gas: 53849)
 ERC1155Test:testTransferOwnershipToZeroAddress() (gas: 15610)
-ERC1155Test:testUriBaseAndTokenUriNotSet() (gas: 2851297)
+ERC1155Test:testUriBaseAndTokenUriNotSet() (gas: 2853197)
 ERC1155Test:testUriBaseAndTokenUriSet() (gas: 64196)
-ERC1155Test:testUriNoBaseURI() (gas: 2900701)
-ERC1155Test:testUriNoTokenUri() (gas: 18839)
-ERC20Invariants:statefulFuzzOwner() (runs: 256, calls: 3840, reverts: 3441)
-ERC20Invariants:statefulFuzzTotalSupply() (runs: 256, calls: 3840, reverts: 3441)
-ERC20Test:testApproveExceedingBalanceCase1() (gas: 40805)
+ERC1155Test:testUriNoBaseURI() (gas: 2902603)
+ERC1155Test:testUriNoTokenUri() (gas: 18817)
+ERC20Invariants:statefulFuzzOwner() (runs: 256, calls: 3840, reverts: 3442)
+ERC20Invariants:statefulFuzzTotalSupply() (runs: 256, calls: 3840, reverts: 3442)
+ERC20Test:testApproveExceedingBalanceCase1() (gas: 40827)
 ERC20Test:testApproveExceedingBalanceCase2() (gas: 47826)
-ERC20Test:testApproveFromZeroAddress() (gas: 12969)
+ERC20Test:testApproveFromZeroAddress() (gas: 12975)
 ERC20Test:testApproveSuccessCase1() (gas: 43508)
 ERC20Test:testApproveSuccessCase2() (gas: 50611)
 ERC20Test:testApproveToZeroAddress() (gas: 16440)
-ERC20Test:testBalanceOf() (gas: 18496)
+ERC20Test:testBalanceOf() (gas: 18530)
 ERC20Test:testBurnFromExceedingBalance() (gas: 30963)
-ERC20Test:testBurnFromFromZeroAddress() (gas: 15337)
+ERC20Test:testBurnFromFromZeroAddress() (gas: 15343)
 ERC20Test:testBurnFromInsufficientAllowanceCase1() (gas: 41453)
 ERC20Test:testBurnFromInsufficientAllowanceCase2() (gas: 41484)
-ERC20Test:testBurnFromSuccessCase1() (gas: 40126)
-ERC20Test:testBurnFromSuccessCase2() (gas: 65679)
-ERC20Test:testBurnFromUnlimitedAllowance() (gas: 50485)
+ERC20Test:testBurnFromSuccessCase1() (gas: 40106)
+ERC20Test:testBurnFromSuccessCase2() (gas: 65681)
+ERC20Test:testBurnFromUnlimitedAllowance() (gas: 50465)
 ERC20Test:testBurnFromZeroAddress() (gas: 11251)
 ERC20Test:testBurnInvalidAmount() (gas: 14427)
-ERC20Test:testBurnSuccessCase1() (gas: 25797)
-ERC20Test:testBurnSuccessCase2() (gas: 31362)
+ERC20Test:testBurnSuccessCase1() (gas: 25777)
+ERC20Test:testBurnSuccessCase2() (gas: 31342)
 ERC20Test:testCachedDomainSeparator() (gas: 10601)
 ERC20Test:testDomainSeparator() (gas: 11831)
 ERC20Test:testEIP712Domain() (gas: 18230)
-ERC20Test:testFuzzApproveSuccess(address,uint256) (runs: 256, μ: 41125, ~: 41203)
-ERC20Test:testFuzzBurnFromInsufficientAllowance(address,uint256,uint8) (runs: 256, μ: 206049, ~: 206066)
-ERC20Test:testFuzzBurnFromSuccess(address,uint256) (runs: 256, μ: 339780, ~: 339645)
-ERC20Test:testFuzzBurnInvalidAmount(address,uint256) (runs: 256, μ: 16382, ~: 16382)
-ERC20Test:testFuzzBurnSuccessCase(uint256) (runs: 256, μ: 314354, ~: 314141)
+ERC20Test:testFuzzApproveSuccess(address,uint256) (runs: 256, μ: 41131, ~: 41209)
+ERC20Test:testFuzzBurnFromInsufficientAllowance(address,uint256,uint8) (runs: 256, μ: 205904, ~: 205979)
+ERC20Test:testFuzzBurnFromSuccess(address,uint256) (runs: 256, μ: 339780, ~: 339644)
+ERC20Test:testFuzzBurnInvalidAmount(address,uint256) (runs: 256, μ: 16404, ~: 16404)
+ERC20Test:testFuzzBurnSuccessCase(uint256) (runs: 256, μ: 314349, ~: 314139)
 ERC20Test:testFuzzDomainSeparator(uint8) (runs: 256, μ: 12039, ~: 12067)
 ERC20Test:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 21735, ~: 21785)
-ERC20Test:testFuzzMintNonMinter(string,uint256) (runs: 256, μ: 12915, ~: 12916)
-ERC20Test:testFuzzMintSuccess(string,uint256) (runs: 256, μ: 55732, ~: 55534)
-ERC20Test:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 44592, ~: 44591)
-ERC20Test:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 70585, ~: 70588)
+ERC20Test:testFuzzMintNonMinter(string,uint256) (runs: 256, μ: 12934, ~: 12935)
+ERC20Test:testFuzzMintSuccess(string,uint256) (runs: 256, μ: 55737, ~: 55536)
+ERC20Test:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 44594, ~: 44593)
+ERC20Test:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 70587, ~: 70590)
 ERC20Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13941, ~: 13941)
-ERC20Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48669, ~: 48654)
-ERC20Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15518, ~: 15511)
+ERC20Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48673, ~: 48658)
+ERC20Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15537, ~: 15530)
 ERC20Test:testFuzzSetMinterSuccess(string) (runs: 256, μ: 33594, ~: 33604)
-ERC20Test:testFuzzTransferFromInsufficientAllowance(address,address,uint256,uint8) (runs: 256, μ: 204587, ~: 204576)
-ERC20Test:testFuzzTransferFromSuccess(address,address,uint256) (runs: 256, μ: 233573, ~: 234154)
+ERC20Test:testFuzzTransferFromInsufficientAllowance(address,address,uint256,uint8) (runs: 256, μ: 204544, ~: 204594)
+ERC20Test:testFuzzTransferFromSuccess(address,address,uint256) (runs: 256, μ: 233453, ~: 234154)
 ERC20Test:testFuzzTransferInvalidAmount(address,address,uint256) (runs: 256, μ: 16762, ~: 16762)
 ERC20Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14053, ~: 14053)
-ERC20Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 75694, ~: 75663)
-ERC20Test:testFuzzTransferSuccess(address,uint256) (runs: 256, μ: 205583, ~: 205643)
+ERC20Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 75668, ~: 75636)
+ERC20Test:testFuzzTransferSuccess(address,uint256) (runs: 256, μ: 205511, ~: 205572)
 ERC20Test:testHasOwner() (gas: 12658)
 ERC20Test:testInitialSetup() (gas: 1568383)
-ERC20Test:testMintNonMinter() (gas: 12464)
-ERC20Test:testMintOverflow() (gas: 16790)
+ERC20Test:testMintNonMinter() (gas: 12470)
+ERC20Test:testMintOverflow() (gas: 16796)
 ERC20Test:testMintSuccess() (gas: 51814)
 ERC20Test:testMintToZeroAddress() (gas: 15602)
 ERC20Test:testPermitBadChainId() (gas: 43413)
-ERC20Test:testPermitBadNonce() (gas: 40531)
-ERC20Test:testPermitExpiredDeadline() (gas: 17057)
-ERC20Test:testPermitOtherSignature() (gas: 41495)
-ERC20Test:testPermitReplaySignature() (gas: 73323)
-ERC20Test:testPermitSuccess() (gas: 69682)
+ERC20Test:testPermitBadNonce() (gas: 40511)
+ERC20Test:testPermitExpiredDeadline() (gas: 17059)
+ERC20Test:testPermitOtherSignature() (gas: 41475)
+ERC20Test:testPermitReplaySignature() (gas: 73325)
+ERC20Test:testPermitSuccess() (gas: 69662)
 ERC20Test:testRenounceOwnershipNonOwner() (gas: 10818)
-ERC20Test:testRenounceOwnershipSuccess() (gas: 22921)
-ERC20Test:testSetMinterNonOwner() (gas: 12528)
-ERC20Test:testSetMinterRemoveOwnerAddress() (gas: 13605)
+ERC20Test:testRenounceOwnershipSuccess() (gas: 22926)
+ERC20Test:testSetMinterNonOwner() (gas: 12556)
+ERC20Test:testSetMinterRemoveOwnerAddress() (gas: 13627)
 ERC20Test:testSetMinterSuccess() (gas: 33392)
-ERC20Test:testSetMinterToZeroAddress() (gas: 15644)
-ERC20Test:testTotalSupply() (gas: 11561)
-ERC20Test:testTransferFromExceedingBalance() (gas: 32215)
-ERC20Test:testTransferFromFromZeroAddress() (gas: 17534)
-ERC20Test:testTransferFromInsufficientAllowanceCase1() (gas: 43090)
-ERC20Test:testTransferFromInsufficientAllowanceCase2() (gas: 43099)
+ERC20Test:testSetMinterToZeroAddress() (gas: 15666)
+ERC20Test:testTotalSupply() (gas: 11431)
+ERC20Test:testTransferFromExceedingBalance() (gas: 32220)
+ERC20Test:testTransferFromFromZeroAddress() (gas: 17543)
+ERC20Test:testTransferFromInsufficientAllowanceCase1() (gas: 43096)
+ERC20Test:testTransferFromInsufficientAllowanceCase2() (gas: 43105)
 ERC20Test:testTransferFromSuccess() (gas: 61482)
 ERC20Test:testTransferFromToZeroAddress() (gas: 32432)
 ERC20Test:testTransferFromUnlimitedAllowance() (gas: 71755)
-ERC20Test:testTransferFromZeroAddress() (gas: 19441)
-ERC20Test:testTransferInvalidAmount() (gas: 15208)
-ERC20Test:testTransferOwnershipNonOwner() (gas: 12418)
-ERC20Test:testTransferOwnershipSuccess() (gas: 53868)
+ERC20Test:testTransferFromZeroAddress() (gas: 19447)
+ERC20Test:testTransferInvalidAmount() (gas: 15214)
+ERC20Test:testTransferOwnershipNonOwner() (gas: 12424)
+ERC20Test:testTransferOwnershipSuccess() (gas: 53873)
 ERC20Test:testTransferOwnershipToZeroAddress() (gas: 15524)
 ERC20Test:testTransferSuccess() (gas: 43059)
-ERC20Test:testTransferToZeroAddress() (gas: 16385)
+ERC20Test:testTransferToZeroAddress() (gas: 16407)
 ERC20Test:testTransferZeroTokens() (gas: 25232)
 ERC2981Invariants:statefulFuzzOwner() (runs: 256, calls: 3840, reverts: 3840)
-ERC2981Test:testDeleteDefaultRoyaltyNonOwner() (gas: 10651)
-ERC2981Test:testFuzzDeleteDefaultRoyaltyNonOwner(address) (runs: 256, μ: 13385, ~: 13385)
-ERC2981Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13935, ~: 13935)
-ERC2981Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 25266, ~: 25266)
-ERC2981Test:testFuzzResetTokenRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 97526, ~: 97796)
-ERC2981Test:testFuzzResetTokenRoyaltyNonOwner(address) (runs: 256, μ: 13337, ~: 13337)
-ERC2981Test:testFuzzRoyaltyInfoDefaultRoyalty(address,uint256,uint256,uint96,uint256) (runs: 256, μ: 80702, ~: 81225)
-ERC2981Test:testFuzzRoyaltyInfoDeleteDefaultRoyalty(address,uint256,uint256,uint96,uint256) (runs: 256, μ: 65609, ~: 65977)
-ERC2981Test:testFuzzRoyaltyInfoSetTokenRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 122275, ~: 122711)
-ERC2981Test:testFuzzRoyaltyInfoSetTokenRoyaltyUpdate(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 168817, ~: 169409)
-ERC2981Test:testFuzzRoyaltyInfoUpdateDefaultRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 88666, ~: 88947)
-ERC2981Test:testFuzzSetDefaultRoyaltyNonOwner(address) (runs: 256, μ: 15642, ~: 15642)
-ERC2981Test:testFuzzSetDefaultRoyaltyTooHighFeeNumerator(uint96) (runs: 256, μ: 21122, ~: 20916)
-ERC2981Test:testFuzzSetTokenRoyaltyInvalidReceiver(address) (runs: 256, μ: 18713, ~: 18713)
-ERC2981Test:testFuzzSetTokenRoyaltyNonOwner(address) (runs: 256, μ: 15659, ~: 15659)
-ERC2981Test:testFuzzSetTokenRoyaltyTooHighFeeNumerator(uint96) (runs: 256, μ: 21140, ~: 20934)
-ERC2981Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14002, ~: 14002)
-ERC2981Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 30257, ~: 30257)
-ERC2981Test:testHasOwner() (gas: 12548)
-ERC2981Test:testInitialSetup() (gas: 498110)
-ERC2981Test:testRenounceOwnershipNonOwner() (gas: 10834)
-ERC2981Test:testRenounceOwnershipSuccess() (gas: 18021)
+ERC2981Test:testDeleteDefaultRoyaltyNonOwner() (gas: 10674)
+ERC2981Test:testFuzzDeleteDefaultRoyaltyNonOwner(address) (runs: 256, μ: 13341, ~: 13341)
+ERC2981Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13913, ~: 13913)
+ERC2981Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 25232, ~: 25232)
+ERC2981Test:testFuzzResetTokenRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 97519, ~: 97793)
+ERC2981Test:testFuzzResetTokenRoyaltyNonOwner(address) (runs: 256, μ: 13315, ~: 13315)
+ERC2981Test:testFuzzRoyaltyInfoDefaultRoyalty(address,uint256,uint256,uint96,uint256) (runs: 256, μ: 80675, ~: 81225)
+ERC2981Test:testFuzzRoyaltyInfoDeleteDefaultRoyalty(address,uint256,uint256,uint96,uint256) (runs: 256, μ: 65587, ~: 65965)
+ERC2981Test:testFuzzRoyaltyInfoSetTokenRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 122333, ~: 122777)
+ERC2981Test:testFuzzRoyaltyInfoSetTokenRoyaltyUpdate(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 168787, ~: 169387)
+ERC2981Test:testFuzzRoyaltyInfoUpdateDefaultRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 88724, ~: 89013)
+ERC2981Test:testFuzzSetDefaultRoyaltyNonOwner(address) (runs: 256, μ: 15620, ~: 15620)
+ERC2981Test:testFuzzSetDefaultRoyaltyTooHighFeeNumerator(uint96) (runs: 256, μ: 21095, ~: 20900)
+ERC2981Test:testFuzzSetTokenRoyaltyInvalidReceiver(address) (runs: 256, μ: 18691, ~: 18691)
+ERC2981Test:testFuzzSetTokenRoyaltyNonOwner(address) (runs: 256, μ: 15637, ~: 15637)
+ERC2981Test:testFuzzSetTokenRoyaltyTooHighFeeNumerator(uint96) (runs: 256, μ: 21113, ~: 20918)
+ERC2981Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14066, ~: 14066)
+ERC2981Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 30268, ~: 30268)
+ERC2981Test:testHasOwner() (gas: 12593)
+ERC2981Test:testInitialSetup() (gas: 498155)
+ERC2981Test:testRenounceOwnershipNonOwner() (gas: 10812)
+ERC2981Test:testRenounceOwnershipSuccess() (gas: 18004)
 ERC2981Test:testResetTokenRoyalty() (gas: 94307)
 ERC2981Test:testResetTokenRoyaltyNonOwner() (gas: 10688)
-ERC2981Test:testRoyaltyInfoDefaultRoyalty() (gas: 74866)
-ERC2981Test:testRoyaltyInfoDeleteDefaultRoyalty() (gas: 62799)
-ERC2981Test:testRoyaltyInfoRoyaltyAmountOverflow() (gas: 67498)
-ERC2981Test:testRoyaltyInfoSetTokenRoyalty() (gas: 117928)
+ERC2981Test:testRoyaltyInfoDefaultRoyalty() (gas: 74844)
+ERC2981Test:testRoyaltyInfoDeleteDefaultRoyalty() (gas: 62852)
+ERC2981Test:testRoyaltyInfoRoyaltyAmountOverflow() (gas: 67504)
+ERC2981Test:testRoyaltyInfoSetTokenRoyalty() (gas: 117906)
 ERC2981Test:testRoyaltyInfoSetTokenRoyaltyUpdate() (gas: 164582)
 ERC2981Test:testRoyaltyInfoUpdateDefaultRoyalty() (gas: 83705)
-ERC2981Test:testSetDefaultRoyaltyInvalidReceiver() (gas: 18059)
-ERC2981Test:testSetDefaultRoyaltyNonOwner() (gas: 12995)
-ERC2981Test:testSetDefaultRoyaltyTooHighFeeNumerator() (gas: 17350)
-ERC2981Test:testSetTokenRoyaltyInvalidReceiver() (gas: 18045)
+ERC2981Test:testSetDefaultRoyaltyInvalidReceiver() (gas: 18037)
+ERC2981Test:testSetDefaultRoyaltyNonOwner() (gas: 12973)
+ERC2981Test:testSetDefaultRoyaltyTooHighFeeNumerator() (gas: 17356)
+ERC2981Test:testSetTokenRoyaltyInvalidReceiver() (gas: 18023)
 ERC2981Test:testSetTokenRoyaltyNonOwner() (gas: 12946)
-ERC2981Test:testSetTokenRoyaltyTooHighFeeNumerator() (gas: 17390)
-ERC2981Test:testSupportsInterfaceInvalidInterfaceId() (gas: 8354)
-ERC2981Test:testSupportsInterfaceInvalidInterfaceIdGasCost() (gas: 9241)
-ERC2981Test:testSupportsInterfaceSuccess() (gas: 9501)
-ERC2981Test:testSupportsInterfaceSuccessGasCost() (gas: 9207)
-ERC2981Test:testTransferOwnershipNonOwner() (gas: 12383)
-ERC2981Test:testTransferOwnershipSuccess() (gas: 22202)
-ERC2981Test:testTransferOwnershipToZeroAddress() (gas: 15473)
-ERC4626VaultInvariants:statefulFuzzTotalAssets() (runs: 256, calls: 3840, reverts: 3354)
-ERC4626VaultInvariants:statefulFuzzTotalSupply() (runs: 256, calls: 3840, reverts: 3354)
+ERC2981Test:testSetTokenRoyaltyTooHighFeeNumerator() (gas: 17374)
+ERC2981Test:testSupportsInterfaceInvalidInterfaceId() (gas: 8399)
+ERC2981Test:testSupportsInterfaceInvalidInterfaceIdGasCost() (gas: 9219)
+ERC2981Test:testSupportsInterfaceSuccess() (gas: 9479)
+ERC2981Test:testSupportsInterfaceSuccessGasCost() (gas: 9230)
+ERC2981Test:testTransferOwnershipNonOwner() (gas: 12367)
+ERC2981Test:testTransferOwnershipSuccess() (gas: 22185)
+ERC2981Test:testTransferOwnershipToZeroAddress() (gas: 15496)
+ERC4626VaultInvariants:statefulFuzzTotalAssets() (runs: 256, calls: 3840, reverts: 3291)
+ERC4626VaultInvariants:statefulFuzzTotalSupply() (runs: 256, calls: 3840, reverts: 3291)
 ERC4626VaultTest:testCachedDomainSeparator() (gas: 10578)
-ERC4626VaultTest:testDepositInsufficientAllowance() (gas: 82497)
-ERC4626VaultTest:testDepositWithNoApproval() (gas: 24432)
-ERC4626VaultTest:testDepositZero() (gas: 41097)
+ERC4626VaultTest:testDepositInsufficientAllowance() (gas: 82488)
+ERC4626VaultTest:testDepositWithNoApproval() (gas: 24313)
+ERC4626VaultTest:testDepositZero() (gas: 41104)
 ERC4626VaultTest:testDomainSeparator() (gas: 11921)
-ERC4626VaultTest:testEIP712Domain() (gas: 18322)
-ERC4626VaultTest:testEmptyVaultDeposit() (gas: 567363)
-ERC4626VaultTest:testEmptyVaultMint() (gas: 568248)
-ERC4626VaultTest:testEmptyVaultRedeem() (gas: 202739)
-ERC4626VaultTest:testEmptyVaultwithdraw() (gas: 215472)
-ERC4626VaultTest:testFail_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 553827, ~: 556546)
-ERC4626VaultTest:testFail_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 555617, ~: 558245)
-ERC4626VaultTest:testFuzzDomainSeparator(uint8) (runs: 256, μ: 11931, ~: 11959)
-ERC4626VaultTest:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 21758, ~: 21810)
-ERC4626VaultTest:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 44540, ~: 44539)
-ERC4626VaultTest:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 70475, ~: 70478)
-ERC4626VaultTest:testInitialSetup() (gas: 5967264)
-ERC4626VaultTest:testMintWithNoApproval() (gas: 24478)
-ERC4626VaultTest:testMintZero() (gas: 41220)
-ERC4626VaultTest:testMultipleMintDepositRedeemWithdraw() (gas: 377061)
-ERC4626VaultTest:testPermitBadChainId() (gas: 43449)
+ERC4626VaultTest:testEIP712Domain() (gas: 18234)
+ERC4626VaultTest:testEmptyVaultDeposit() (gas: 567388)
+ERC4626VaultTest:testEmptyVaultMint() (gas: 568273)
+ERC4626VaultTest:testEmptyVaultRedeem() (gas: 202644)
+ERC4626VaultTest:testEmptyVaultwithdraw() (gas: 215488)
+ERC4626VaultTest:testFail_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 553747, ~: 556594)
+ERC4626VaultTest:testFail_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 555557, ~: 558153)
+ERC4626VaultTest:testFuzzDomainSeparator(uint8) (runs: 256, μ: 11932, ~: 11959)
+ERC4626VaultTest:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 21760, ~: 21810)
+ERC4626VaultTest:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 44559, ~: 44558)
+ERC4626VaultTest:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 70491, ~: 70494)
+ERC4626VaultTest:testInitialSetup() (gas: 5973607)
+ERC4626VaultTest:testMintWithNoApproval() (gas: 24358)
+ERC4626VaultTest:testMintZero() (gas: 41205)
+ERC4626VaultTest:testMultipleMintDepositRedeemWithdraw() (gas: 377043)
+ERC4626VaultTest:testPermitBadChainId() (gas: 43446)
 ERC4626VaultTest:testPermitBadNonce() (gas: 40517)
-ERC4626VaultTest:testPermitExpiredDeadline() (gas: 17022)
-ERC4626VaultTest:testPermitOtherSignature() (gas: 41483)
-ERC4626VaultTest:testPermitReplaySignature() (gas: 73280)
-ERC4626VaultTest:testPermitSuccess() (gas: 69639)
-ERC4626VaultTest:testRedeemInsufficientShares() (gas: 131066)
-ERC4626VaultTest:testRedeemWithNoShares() (gas: 13348)
-ERC4626VaultTest:testSingleDepositWithdraw() (gas: 177950)
-ERC4626VaultTest:testSingleMintRedeem() (gas: 176785)
-ERC4626VaultTest:testVaultInteractionsForSomeoneElse() (gas: 224177)
-ERC4626VaultTest:testWithdrawInsufficientAllowance() (gas: 122387)
-ERC4626VaultTest:testWithdrawInsufficientAssets() (gas: 117794)
-ERC4626VaultTest:testWithdrawWithNoAssets() (gas: 21289)
-ERC4626VaultTest:test_RT_deposit_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472390, ~: 473362)
-ERC4626VaultTest:test_RT_deposit_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474377, ~: 474589)
-ERC4626VaultTest:test_RT_mint_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 471961, ~: 473434)
-ERC4626VaultTest:test_RT_mint_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473907, ~: 474659)
-ERC4626VaultTest:test_RT_redeem_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472696, ~: 473524)
-ERC4626VaultTest:test_RT_redeem_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472794, ~: 473607)
-ERC4626VaultTest:test_RT_withdraw_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473753, ~: 474745)
-ERC4626VaultTest:test_RT_withdraw_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474074, ~: 475121)
-ERC4626VaultTest:test_asset((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424384, ~: 426476)
-ERC4626VaultTest:test_convertToAssets((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 429276, ~: 430705)
-ERC4626VaultTest:test_convertToShares((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 429273, ~: 430720)
-ERC4626VaultTest:test_deposit((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 469972, ~: 471294)
-ERC4626VaultTest:test_maxDeposit((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424378, ~: 426471)
-ERC4626VaultTest:test_maxMint((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424403, ~: 426496)
-ERC4626VaultTest:test_maxRedeem((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424518, ~: 426611)
-ERC4626VaultTest:test_maxWithdraw((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 425972, ~: 427864)
-ERC4626VaultTest:test_mint((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 470146, ~: 471417)
-ERC4626VaultTest:test_previewDeposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 464805, ~: 465965)
-ERC4626VaultTest:test_previewMint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 464549, ~: 466146)
-ERC4626VaultTest:test_previewRedeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 467455, ~: 467477)
-ERC4626VaultTest:test_previewWithdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 468344, ~: 468718)
-ERC4626VaultTest:test_redeem((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 473187, ~: 474023)
-ERC4626VaultTest:test_totalAssets((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424967, ~: 427060)
-ERC4626VaultTest:test_withdraw((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 474794, ~: 475212)
-ERC721Invariants:statefulFuzzOwner() (runs: 256, calls: 3840, reverts: 3496)
-ERC721Invariants:statefulFuzzTotalSupply() (runs: 256, calls: 3840, reverts: 3496)
+ERC4626VaultTest:testPermitExpiredDeadline() (gas: 17041)
+ERC4626VaultTest:testPermitOtherSignature() (gas: 41458)
+ERC4626VaultTest:testPermitReplaySignature() (gas: 73299)
+ERC4626VaultTest:testPermitSuccess() (gas: 69633)
+ERC4626VaultTest:testRedeemInsufficientShares() (gas: 131073)
+ERC4626VaultTest:testRedeemWithNoShares() (gas: 13339)
+ERC4626VaultTest:testSingleDepositWithdraw() (gas: 177949)
+ERC4626VaultTest:testSingleMintRedeem() (gas: 176784)
+ERC4626VaultTest:testVaultInteractionsForSomeoneElse() (gas: 224169)
+ERC4626VaultTest:testWithdrawInsufficientAllowance() (gas: 122396)
+ERC4626VaultTest:testWithdrawInsufficientAssets() (gas: 117792)
+ERC4626VaultTest:testWithdrawWithNoAssets() (gas: 21280)
+ERC4626VaultTest:test_RT_deposit_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472493, ~: 473300)
+ERC4626VaultTest:test_RT_deposit_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474288, ~: 474527)
+ERC4626VaultTest:test_RT_mint_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472261, ~: 473389)
+ERC4626VaultTest:test_RT_mint_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474000, ~: 474597)
+ERC4626VaultTest:test_RT_redeem_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472761, ~: 473415)
+ERC4626VaultTest:test_RT_redeem_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 472866, ~: 473545)
+ERC4626VaultTest:test_RT_withdraw_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473935, ~: 474631)
+ERC4626VaultTest:test_RT_withdraw_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474066, ~: 475096)
+ERC4626VaultTest:test_asset((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424297, ~: 426405)
+ERC4626VaultTest:test_convertToAssets((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 429200, ~: 430646)
+ERC4626VaultTest:test_convertToShares((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 429209, ~: 430664)
+ERC4626VaultTest:test_deposit((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 469913, ~: 471244)
+ERC4626VaultTest:test_maxDeposit((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424291, ~: 426400)
+ERC4626VaultTest:test_maxMint((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424333, ~: 426442)
+ERC4626VaultTest:test_maxRedeem((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424431, ~: 426540)
+ERC4626VaultTest:test_maxWithdraw((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 425886, ~: 427791)
+ERC4626VaultTest:test_mint((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 469965, ~: 471260)
+ERC4626VaultTest:test_previewDeposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 464962, ~: 465896)
+ERC4626VaultTest:test_previewMint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 464760, ~: 466077)
+ERC4626VaultTest:test_previewRedeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 467360, ~: 467342)
+ERC4626VaultTest:test_previewWithdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 468287, ~: 468664)
+ERC4626VaultTest:test_redeem((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 472911, ~: 473952)
+ERC4626VaultTest:test_totalAssets((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424880, ~: 426988)
+ERC4626VaultTest:test_withdraw((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 474684, ~: 475143)
+ERC721Invariants:statefulFuzzOwner() (runs: 256, calls: 3840, reverts: 3506)
+ERC721Invariants:statefulFuzzTotalSupply() (runs: 256, calls: 3840, reverts: 3506)
 ERC721Test:testApproveClearingApprovalWithNoPriorApproval() (gas: 177128)
 ERC721Test:testApproveClearingApprovalWithPriorApproval() (gas: 186030)
-ERC721Test:testApproveFromApprovedAddress() (gas: 198746)
-ERC721Test:testApproveFromNonOwner() (gas: 172527)
-ERC721Test:testApproveFromOperatorAddress() (gas: 223712)
-ERC721Test:testApproveInvalidTokenId() (gas: 170745)
-ERC721Test:testApproveToOwner() (gas: 167264)
-ERC721Test:testApproveToZeroAddress() (gas: 186073)
-ERC721Test:testApproveWithNoPriorApproval() (gas: 196351)
-ERC721Test:testApproveWithPriorApprovalToDifferentAddress() (gas: 205369)
-ERC721Test:testApproveWithPriorApprovalToSameAddress() (gas: 203909)
-ERC721Test:testBalanceOfCase1() (gas: 328294)
-ERC721Test:testBalanceOfCase2() (gas: 12078)
+ERC721Test:testApproveFromApprovedAddress() (gas: 198755)
+ERC721Test:testApproveFromNonOwner() (gas: 172514)
+ERC721Test:testApproveFromOperatorAddress() (gas: 223693)
+ERC721Test:testApproveInvalidTokenId() (gas: 170754)
+ERC721Test:testApproveToOwner() (gas: 167267)
+ERC721Test:testApproveToZeroAddress() (gas: 186051)
+ERC721Test:testApproveWithNoPriorApproval() (gas: 196399)
+ERC721Test:testApproveWithPriorApprovalToDifferentAddress() (gas: 205350)
+ERC721Test:testApproveWithPriorApprovalToSameAddress() (gas: 203912)
+ERC721Test:testBalanceOfCase1() (gas: 328366)
+ERC721Test:testBalanceOfCase2() (gas: 12157)
 ERC721Test:testBalanceOfZeroAddress() (gas: 10942)
-ERC721Test:testBurnSuccess() (gas: 305901)
-ERC721Test:testBurnSuccessViaApproveAndSetApprovalForAll() (gas: 371439)
+ERC721Test:testBurnSuccess() (gas: 305906)
+ERC721Test:testBurnSuccessViaApproveAndSetApprovalForAll() (gas: 371444)
 ERC721Test:testCachedDomainSeparator() (gas: 10624)
-ERC721Test:testDomainSeparator() (gas: 11855)
+ERC721Test:testDomainSeparator() (gas: 11921)
 ERC721Test:testEIP712Domain() (gas: 18341)
-ERC721Test:testFuzzApproveClearingApprovalWithNoPriorApproval(address,address) (runs: 256, μ: 196795, ~: 196805)
-ERC721Test:testFuzzApproveClearingApprovalWithPriorApproval(address,address) (runs: 256, μ: 184454, ~: 184464)
-ERC721Test:testFuzzApproveFromNonOwner(address) (runs: 256, μ: 172100, ~: 172100)
-ERC721Test:testFuzzApproveFromOperatorAddress(address,address,address) (runs: 256, μ: 222949, ~: 222949)
-ERC721Test:testFuzzApproveWithNoPriorApproval(address,address) (runs: 256, μ: 196750, ~: 196760)
-ERC721Test:testFuzzApproveWithPriorApproval(address,address) (runs: 256, μ: 204266, ~: 204276)
-ERC721Test:testFuzzBurnSuccess(address) (runs: 256, μ: 305367, ~: 305368)
-ERC721Test:testFuzzDomainSeparator(uint8) (runs: 256, μ: 12041, ~: 12068)
-ERC721Test:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 21843, ~: 21881)
-ERC721Test:testFuzzGetApprovedApprovedTokenId(address,address) (runs: 256, μ: 194381, ~: 194391)
-ERC721Test:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 200620, ~: 200619)
-ERC721Test:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 227068, ~: 227071)
-ERC721Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13923, ~: 13923)
-ERC721Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48681, ~: 48667)
-ERC721Test:testFuzzSafeMintNonMinter(address) (runs: 256, μ: 15709, ~: 15709)
-ERC721Test:testFuzzSafeMintSuccess(address[]) (runs: 256, μ: 21430847, ~: 20965379)
-ERC721Test:testFuzzSafeTransferFromWithData(address,address,address,bytes) (runs: 256, μ: 1434484, ~: 1434588)
-ERC721Test:testFuzzSetApprovalForAllSuccess(address,address) (runs: 256, μ: 189202, ~: 189202)
-ERC721Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15540, ~: 15533)
+ERC721Test:testFuzzApproveClearingApprovalWithNoPriorApproval(address,address) (runs: 256, μ: 196808, ~: 196808)
+ERC721Test:testFuzzApproveClearingApprovalWithPriorApproval(address,address) (runs: 256, μ: 184461, ~: 184461)
+ERC721Test:testFuzzApproveFromNonOwner(address) (runs: 256, μ: 172087, ~: 172087)
+ERC721Test:testFuzzApproveFromOperatorAddress(address,address,address) (runs: 256, μ: 222952, ~: 222952)
+ERC721Test:testFuzzApproveWithNoPriorApproval(address,address) (runs: 256, μ: 196808, ~: 196808)
+ERC721Test:testFuzzApproveWithPriorApproval(address,address) (runs: 256, μ: 204346, ~: 204346)
+ERC721Test:testFuzzBurnSuccess(address) (runs: 256, μ: 305375, ~: 305368)
+ERC721Test:testFuzzDomainSeparator(uint8) (runs: 256, μ: 12040, ~: 12068)
+ERC721Test:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 21822, ~: 21873)
+ERC721Test:testFuzzGetApprovedApprovedTokenId(address,address) (runs: 256, μ: 194372, ~: 194372)
+ERC721Test:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 200603, ~: 200602)
+ERC721Test:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 227051, ~: 227054)
+ERC721Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13986, ~: 13986)
+ERC721Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48667, ~: 48653)
+ERC721Test:testFuzzSafeMintNonMinter(address) (runs: 256, μ: 15693, ~: 15693)
+ERC721Test:testFuzzSafeMintSuccess(address[]) (runs: 256, μ: 20944818, ~: 20615118)
+ERC721Test:testFuzzSafeTransferFromWithData(address,address,address,bytes) (runs: 256, μ: 1434485, ~: 1434589)
+ERC721Test:testFuzzSetApprovalForAllSuccess(address,address) (runs: 256, μ: 189205, ~: 189205)
+ERC721Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15537, ~: 15530)
 ERC721Test:testFuzzSetMinterSuccess(string) (runs: 256, μ: 33649, ~: 33660)
-ERC721Test:testFuzzTokenByIndex(address,string[]) (runs: 256, μ: 22027505, ~: 22030081)
-ERC721Test:testFuzzTotalSupply(address,string[]) (runs: 256, μ: 21845156, ~: 21849409)
-ERC721Test:testFuzzTransferFrom(address,address,address) (runs: 256, μ: 565009, ~: 564986)
-ERC721Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14075, ~: 14075)
-ERC721Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 75810, ~: 75780)
-ERC721Test:testGetApprovedApprovedTokenId() (gas: 193937)
+ERC721Test:testFuzzTokenByIndex(address,string[]) (runs: 256, μ: 22027488, ~: 22030064)
+ERC721Test:testFuzzTotalSupply(address,string[]) (runs: 256, μ: 21845139, ~: 21849392)
+ERC721Test:testFuzzTransferFrom(address,address,address) (runs: 256, μ: 565005, ~: 564981)
+ERC721Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14053, ~: 14053)
+ERC721Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 75765, ~: 75735)
+ERC721Test:testGetApprovedApprovedTokenId() (gas: 193918)
 ERC721Test:testGetApprovedInvalidTokenId() (gas: 11082)
-ERC721Test:testGetApprovedNotApprovedTokenId() (gas: 170341)
-ERC721Test:testHasOwner() (gas: 12584)
-ERC721Test:testInitialSetup() (gas: 2513572)
-ERC721Test:testOwnerOf() (gas: 165982)
-ERC721Test:testOwnerOfInvalidTokenId() (gas: 11037)
-ERC721Test:testPermitBadChainId() (gas: 199386)
-ERC721Test:testPermitBadNonce() (gas: 196546)
-ERC721Test:testPermitExpiredDeadline() (gas: 169961)
-ERC721Test:testPermitOtherSignature() (gas: 197469)
-ERC721Test:testPermitReplaySignature() (gas: 229762)
-ERC721Test:testPermitSuccess() (gas: 226231)
-ERC721Test:testRenounceOwnershipNonOwner() (gas: 10929)
-ERC721Test:testRenounceOwnershipSuccess() (gas: 22918)
-ERC721Test:testSafeMintNonMinter() (gas: 13040)
-ERC721Test:testSafeMintOverflow() (gas: 15309)
-ERC721Test:testSafeMintReceiverContract() (gas: 386270)
-ERC721Test:testSafeMintReceiverContractFunctionNotImplemented() (gas: 118285)
-ERC721Test:testSafeMintReceiverContractInvalidReturnIdentifier() (gas: 337327)
-ERC721Test:testSafeMintReceiverContractRevertsWithMessage() (gas: 334583)
-ERC721Test:testSafeMintReceiverContractRevertsWithPanic() (gas: 334762)
-ERC721Test:testSafeMintReceiverContractRevertsWithoutMessage() (gas: 334318)
-ERC721Test:testSafeMintSuccess() (gas: 524569)
+ERC721Test:testGetApprovedNotApprovedTokenId() (gas: 170344)
+ERC721Test:testHasOwner() (gas: 12629)
+ERC721Test:testInitialSetup() (gas: 2514550)
+ERC721Test:testOwnerOf() (gas: 166052)
+ERC721Test:testOwnerOfInvalidTokenId() (gas: 11015)
+ERC721Test:testPermitBadChainId() (gas: 199389)
+ERC721Test:testPermitBadNonce() (gas: 196595)
+ERC721Test:testPermitExpiredDeadline() (gas: 169944)
+ERC721Test:testPermitOtherSignature() (gas: 197452)
+ERC721Test:testPermitReplaySignature() (gas: 229745)
+ERC721Test:testPermitSuccess() (gas: 226192)
+ERC721Test:testRenounceOwnershipNonOwner() (gas: 10907)
+ERC721Test:testRenounceOwnershipSuccess() (gas: 22904)
+ERC721Test:testSafeMintNonMinter() (gas: 13024)
+ERC721Test:testSafeMintOverflow() (gas: 15315)
+ERC721Test:testSafeMintReceiverContract() (gas: 386258)
+ERC721Test:testSafeMintReceiverContractFunctionNotImplemented() (gas: 118288)
+ERC721Test:testSafeMintReceiverContractInvalidReturnIdentifier() (gas: 337382)
+ERC721Test:testSafeMintReceiverContractRevertsWithMessage() (gas: 334586)
+ERC721Test:testSafeMintReceiverContractRevertsWithPanic() (gas: 334743)
+ERC721Test:testSafeMintReceiverContractRevertsWithoutMessage() (gas: 334299)
+ERC721Test:testSafeMintSuccess() (gas: 524578)
 ERC721Test:testSafeMintToZeroAddress() (gas: 38396)
-ERC721Test:testSafeMintTokenAlreadyMinted() (gas: 362421)
-ERC721Test:testSafeTransferFromNoData() (gas: 1439005)
-ERC721Test:testSafeTransferFromReceiverFunctionNotImplemented() (gas: 182694)
-ERC721Test:testSafeTransferFromReceiverInvalidReturnIdentifier() (gas: 401764)
-ERC721Test:testSafeTransferFromReceiverRevertsWithMessage() (gas: 399000)
-ERC721Test:testSafeTransferFromReceiverRevertsWithPanic() (gas: 399202)
-ERC721Test:testSafeTransferFromReceiverRevertsWithoutMessage() (gas: 398735)
-ERC721Test:testSafeTransferFromWithData() (gas: 1194624)
-ERC721Test:testSetApprovalForAllOperatorIsOwner() (gas: 167061)
-ERC721Test:testSetApprovalForAllSuccessCase1() (gas: 195518)
-ERC721Test:testSetApprovalForAllSuccessCase2() (gas: 188777)
-ERC721Test:testSetApprovalForAllSuccessCase3() (gas: 202066)
-ERC721Test:testSetMinterNonOwner() (gas: 12484)
+ERC721Test:testSafeMintTokenAlreadyMinted() (gas: 362405)
+ERC721Test:testSafeTransferFromNoData() (gas: 1439024)
+ERC721Test:testSafeTransferFromReceiverFunctionNotImplemented() (gas: 182703)
+ERC721Test:testSafeTransferFromReceiverInvalidReturnIdentifier() (gas: 401777)
+ERC721Test:testSafeTransferFromReceiverRevertsWithMessage() (gas: 399006)
+ERC721Test:testSafeTransferFromReceiverRevertsWithPanic() (gas: 399208)
+ERC721Test:testSafeTransferFromReceiverRevertsWithoutMessage() (gas: 398719)
+ERC721Test:testSafeTransferFromWithData() (gas: 1194631)
+ERC721Test:testSetApprovalForAllOperatorIsOwner() (gas: 167042)
+ERC721Test:testSetApprovalForAllSuccessCase1() (gas: 195499)
+ERC721Test:testSetApprovalForAllSuccessCase2() (gas: 188780)
+ERC721Test:testSetApprovalForAllSuccessCase3() (gas: 202134)
+ERC721Test:testSetMinterNonOwner() (gas: 12490)
 ERC721Test:testSetMinterRemoveOwnerAddress() (gas: 13671)
-ERC721Test:testSetMinterSuccess() (gas: 33484)
+ERC721Test:testSetMinterSuccess() (gas: 33536)
 ERC721Test:testSetMinterToZeroAddress() (gas: 15667)
-ERC721Test:testSupportsInterfaceInvalidInterfaceId() (gas: 8567)
-ERC721Test:testSupportsInterfaceInvalidInterfaceIdGasCost() (gas: 9598)
-ERC721Test:testSupportsInterfaceSuccess() (gas: 14714)
+ERC721Test:testSupportsInterfaceInvalidInterfaceId() (gas: 8545)
+ERC721Test:testSupportsInterfaceInvalidInterfaceIdGasCost() (gas: 9576)
+ERC721Test:testSupportsInterfaceSuccess() (gas: 14692)
 ERC721Test:testSupportsInterfaceSuccessGasCost() (gas: 9365)
-ERC721Test:testTokenByIndex() (gas: 555077)
-ERC721Test:testTokenByIndexOutOfBounds() (gas: 329871)
-ERC721Test:testTokenOfOwnerByIndex() (gas: 574732)
-ERC721Test:testTokenOfOwnerByIndexReverts() (gas: 545756)
-ERC721Test:testTokenURIAfterBurning() (gas: 138556)
-ERC721Test:testTokenURIDefault() (gas: 168128)
-ERC721Test:testTokenURIInvalidTokenId() (gas: 13142)
-ERC721Test:testTokenURINoBaseURI() (gas: 2632989)
+ERC721Test:testTokenByIndex() (gas: 555064)
+ERC721Test:testTokenByIndexOutOfBounds() (gas: 329838)
+ERC721Test:testTokenOfOwnerByIndex() (gas: 574651)
+ERC721Test:testTokenOfOwnerByIndexReverts() (gas: 545709)
+ERC721Test:testTokenURIAfterBurning() (gas: 138559)
+ERC721Test:testTokenURIDefault() (gas: 168197)
+ERC721Test:testTokenURIInvalidTokenId() (gas: 13120)
+ERC721Test:testTokenURINoBaseURI() (gas: 2633992)
 ERC721Test:testTokenURINoTokenUri() (gas: 125697)
-ERC721Test:testTotalSupply() (gas: 328205)
-ERC721Test:testTransferFrom() (gas: 574253)
-ERC721Test:testTransferOwnershipNonOwner() (gas: 12419)
-ERC721Test:testTransferOwnershipSuccess() (gas: 53974)
+ERC721Test:testTotalSupply() (gas: 328194)
+ERC721Test:testTransferFrom() (gas: 574236)
+ERC721Test:testTransferOwnershipNonOwner() (gas: 12403)
+ERC721Test:testTransferOwnershipSuccess() (gas: 53957)
 ERC721Test:testTransferOwnershipToZeroAddress() (gas: 15546)
 MathTest:testCbrtRoundDown() (gas: 51656)
 MathTest:testCbrtRoundUp() (gas: 52303)
-MathTest:testCeilDiv() (gas: 14712)
-MathTest:testFuzzCbrt(uint256,bool) (runs: 256, μ: 22381, ~: 22285)
+MathTest:testCeilDiv() (gas: 14734)
+MathTest:testFuzzCbrt(uint256,bool) (runs: 256, μ: 22390, ~: 22323)
 MathTest:testFuzzCeilDiv(uint256,uint256) (runs: 256, μ: 9769, ~: 9770)
-MathTest:testFuzzInt256Average(int256,int256) (runs: 256, μ: 8625, ~: 8625)
-MathTest:testFuzzLog10(uint256,bool) (runs: 256, μ: 10381, ~: 10354)
-MathTest:testFuzzLog2(uint256,bool) (runs: 256, μ: 10094, ~: 10139)
-MathTest:testFuzzLog256(uint256,bool) (runs: 256, μ: 10229, ~: 10146)
-MathTest:testFuzzMulDiv(uint256,uint256,uint256) (runs: 256, μ: 14283, ~: 14078)
+MathTest:testFuzzInt256Average(int256,int256) (runs: 256, μ: 8537, ~: 8537)
+MathTest:testFuzzLog10(uint256,bool) (runs: 256, μ: 10382, ~: 10354)
+MathTest:testFuzzLog2(uint256,bool) (runs: 256, μ: 10141, ~: 10184)
+MathTest:testFuzzLog256(uint256,bool) (runs: 256, μ: 10231, ~: 10146)
+MathTest:testFuzzMulDiv(uint256,uint256,uint256) (runs: 256, μ: 14292, ~: 14078)
 MathTest:testFuzzMulDivDomain(uint256,uint256,uint256) (runs: 256, μ: 10851, ~: 10890)
-MathTest:testFuzzSignum(int256) (runs: 256, μ: 8508, ~: 8500)
-MathTest:testFuzzUint256Average(uint256,uint256) (runs: 256, μ: 8688, ~: 8688)
-MathTest:testFuzzWadCbrt(uint256) (runs: 256, μ: 22278, ~: 22000)
+MathTest:testFuzzSignum(int256) (runs: 256, μ: 8486, ~: 8478)
+MathTest:testFuzzUint256Average(uint256,uint256) (runs: 256, μ: 8666, ~: 8666)
+MathTest:testFuzzWadCbrt(uint256) (runs: 256, μ: 22271, ~: 22005)
 MathTest:testFuzzWadExp(int256) (runs: 256, μ: 14727, ~: 15077)
-MathTest:testFuzzWadLn(int256) (runs: 256, μ: 16389, ~: 16130)
+MathTest:testFuzzWadLn(int256) (runs: 256, μ: 16368, ~: 16116)
 MathTest:testInt256Average() (gas: 18843)
 MathTest:testLog10RoundDown() (gas: 26211)
-MathTest:testLog10RoundUp() (gas: 27392)
+MathTest:testLog10RoundUp() (gas: 27414)
 MathTest:testLog256RoundDown() (gas: 21459)
 MathTest:testLog256RoundUp() (gas: 21592)
-MathTest:testLog2RoundDown() (gas: 23966)
-MathTest:testLog2RoundUp() (gas: 24129)
+MathTest:testLog2RoundDown() (gas: 23988)
+MathTest:testLog2RoundUp() (gas: 24174)
 MathTest:testMulDivDivisionByZero() (gas: 11346)
 MathTest:testMulDivOverflow() (gas: 11702)
 MathTest:testMulDivRoundDownLargeValues() (gas: 17568)
 MathTest:testMulDivRoundDownSmallValues() (gas: 11619)
 MathTest:testMulDivRoundUpLargeValues() (gas: 17901)
-MathTest:testMulDivRoundUpSmallValues() (gas: 11836)
-MathTest:testSignum() (gas: 17752)
+MathTest:testMulDivRoundUpSmallValues() (gas: 11858)
+MathTest:testSignum() (gas: 17774)
 MathTest:testUint256Average() (gas: 12911)
 MathTest:testWadCbrt() (gas: 48690)
 MathTest:testWadExp() (gas: 34590)
 MathTest:testWadExpOverflow() (gas: 11169)
 MathTest:testWadLn() (gas: 31356)
 MathTest:testWadLnNegativeValues() (gas: 11096)
-MerkleProofVerificationTest:testFuzzMultiProofVerifySingleLeaf(bytes32[],uint256) (runs: 256, μ: 262469, ~: 274029)
-MerkleProofVerificationTest:testFuzzVerify(bytes32[],uint256) (runs: 256, μ: 177036, ~: 186805)
-MerkleProofVerificationTest:testFuzzVerifyMultiProofMultipleLeaves(bool,bool,bool) (runs: 256, μ: 45520, ~: 45511)
-MerkleProofVerificationTest:testInvalidMerkleMultiProof() (gas: 46709)
-MerkleProofVerificationTest:testInvalidMerkleProof() (gas: 18776)
-MerkleProofVerificationTest:testInvalidMerkleProofLength() (gas: 20630)
+MerkleProofVerificationTest:testFuzzMultiProofVerifySingleLeaf(bytes32[],uint256) (runs: 256, μ: 262432, ~: 273878)
+MerkleProofVerificationTest:testFuzzVerify(bytes32[],uint256) (runs: 256, μ: 177018, ~: 186673)
+MerkleProofVerificationTest:testFuzzVerifyMultiProofMultipleLeaves(bool,bool,bool) (runs: 256, μ: 45529, ~: 45520)
+MerkleProofVerificationTest:testInvalidMerkleMultiProof() (gas: 46754)
+MerkleProofVerificationTest:testInvalidMerkleProof() (gas: 18798)
+MerkleProofVerificationTest:testInvalidMerkleProofLength() (gas: 20599)
 MerkleProofVerificationTest:testInvalidMultiProof() (gas: 86957)
-MerkleProofVerificationTest:testMaliciousMultiProofVerify() (gas: 36089)
-MerkleProofVerificationTest:testMultiProofEdgeCase1() (gas: 31077)
-MerkleProofVerificationTest:testMultiProofEdgeCase2() (gas: 31229)
+MerkleProofVerificationTest:testMaliciousMultiProofVerify() (gas: 36010)
+MerkleProofVerificationTest:testMultiProofEdgeCase1() (gas: 31025)
+MerkleProofVerificationTest:testMultiProofEdgeCase2() (gas: 31220)
 MerkleProofVerificationTest:testMultiProofVerify() (gas: 50368)
 MerkleProofVerificationTest:testVerify() (gas: 35450)
-MessageHashUtilsTest:testEthSignedMessageHash() (gas: 8614)
-MessageHashUtilsTest:testFuzzEthSignedMessageHash(string) (runs: 256, μ: 9321, ~: 9315)
+MessageHashUtilsTest:testEthSignedMessageHash() (gas: 8636)
+MessageHashUtilsTest:testFuzzEthSignedMessageHash(string) (runs: 256, μ: 9343, ~: 9337)
 MessageHashUtilsTest:testFuzzToDataWithIntendedValidatorHash(address,bytes) (runs: 256, μ: 9906, ~: 9890)
-MessageHashUtilsTest:testFuzzToDataWithIntendedValidatorHashSelf(bytes) (runs: 256, μ: 11891, ~: 11877)
-MessageHashUtilsTest:testFuzzToTypedDataHash(string,string) (runs: 256, μ: 9940, ~: 9941)
+MessageHashUtilsTest:testFuzzToDataWithIntendedValidatorHashSelf(bytes) (runs: 256, μ: 11907, ~: 11893)
+MessageHashUtilsTest:testFuzzToTypedDataHash(string,string) (runs: 256, μ: 9962, ~: 9963)
 MessageHashUtilsTest:testToDataWithIntendedValidatorHash() (gas: 11134)
-MessageHashUtilsTest:testToDataWithIntendedValidatorHashSelf() (gas: 11752)
+MessageHashUtilsTest:testToDataWithIntendedValidatorHashSelf() (gas: 11657)
 MessageHashUtilsTest:testToTypedDataHash() (gas: 8736)
-MulticallTest:testMulticallRevert() (gas: 1150294)
-MulticallTest:testMulticallSelfRevert() (gas: 2212936)
-MulticallTest:testMulticallSelfSuccess() (gas: 3334102)
-MulticallTest:testMulticallSuccess() (gas: 1158761)
-MulticallTest:testMulticallValueRevertCase1() (gas: 1209186)
-MulticallTest:testMulticallValueRevertCase2() (gas: 1210120)
-MulticallTest:testMulticallValueSuccess() (gas: 1237224)
-MulticallTest:testMultistaticcallRevert() (gas: 8937393460516748812)
-MulticallTest:testMultistaticcallSuccess() (gas: 1127930)
+MulticallTest:testMulticallRevert() (gas: 1150311)
+MulticallTest:testMulticallSelfRevert() (gas: 2212951)
+MulticallTest:testMulticallSelfSuccess() (gas: 3335144)
+MulticallTest:testMulticallSuccess() (gas: 1158796)
+MulticallTest:testMulticallValueRevertCase1() (gas: 1209165)
+MulticallTest:testMulticallValueRevertCase2() (gas: 1210139)
+MulticallTest:testMulticallValueSuccess() (gas: 1237243)
+MulticallTest:testMultistaticcallRevert() (gas: 8937393460516748829)
+MulticallTest:testMultistaticcallSuccess() (gas: 1128937)
 Ownable2StepInvariants:statefulFuzzOwner() (runs: 256, calls: 3840, reverts: 3840)
 Ownable2StepInvariants:statefulFuzzPendingOwner() (runs: 256, calls: 3840, reverts: 3840)
-Ownable2StepTest:testAcceptOwnershipNonPendingOwner() (gas: 47364)
-Ownable2StepTest:testAcceptOwnershipSuccess() (gas: 40661)
-Ownable2StepTest:testFuzzAcceptOwnershipNonPendingOwner(address) (runs: 256, μ: 46803, ~: 46803)
-Ownable2StepTest:testFuzzAcceptOwnershipSuccess(address,address) (runs: 256, μ: 67717, ~: 67685)
-Ownable2StepTest:testFuzzPendingOwnerResetAfterRenounceOwnership(address) (runs: 256, μ: 40132, ~: 40117)
+Ownable2StepTest:testAcceptOwnershipNonPendingOwner() (gas: 47330)
+Ownable2StepTest:testAcceptOwnershipSuccess() (gas: 40620)
+Ownable2StepTest:testFuzzAcceptOwnershipNonPendingOwner(address) (runs: 256, μ: 46769, ~: 46769)
+Ownable2StepTest:testFuzzAcceptOwnershipSuccess(address,address) (runs: 256, μ: 67649, ~: 67617)
+Ownable2StepTest:testFuzzPendingOwnerResetAfterRenounceOwnership(address) (runs: 256, μ: 40091, ~: 40076)
 Ownable2StepTest:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13872, ~: 13872)
-Ownable2StepTest:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 45432, ~: 45417)
+Ownable2StepTest:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 45378, ~: 45363)
 Ownable2StepTest:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14024, ~: 14024)
-Ownable2StepTest:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 52221, ~: 52221)
+Ownable2StepTest:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 52170, ~: 52170)
 Ownable2StepTest:testHasOwner() (gas: 12527)
-Ownable2StepTest:testInitialSetup() (gas: 241599)
-Ownable2StepTest:testPendingOwnerResetAfterRenounceOwnership() (gas: 40828)
+Ownable2StepTest:testInitialSetup() (gas: 241608)
+Ownable2StepTest:testPendingOwnerResetAfterRenounceOwnership() (gas: 40805)
 Ownable2StepTest:testRenounceOwnershipNonOwner() (gas: 10859)
-Ownable2StepTest:testRenounceOwnershipSuccess() (gas: 20268)
-Ownable2StepTest:testTransferOwnershipNonOwner() (gas: 12307)
-Ownable2StepTest:testTransferOwnershipSuccess() (gas: 45746)
+Ownable2StepTest:testRenounceOwnershipSuccess() (gas: 20273)
+Ownable2StepTest:testTransferOwnershipNonOwner() (gas: 12313)
+Ownable2StepTest:testTransferOwnershipSuccess() (gas: 45734)
 OwnableInvariants:statefulFuzzOwner() (runs: 256, calls: 3840, reverts: 3840)
-OwnableTest:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13913, ~: 13913)
-OwnableTest:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 25263, ~: 25263)
-OwnableTest:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14066, ~: 14066)
-OwnableTest:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 30299, ~: 30299)
-OwnableTest:testHasOwner() (gas: 12524)
-OwnableTest:testInitialSetup() (gas: 212043)
-OwnableTest:testRenounceOwnershipNonOwner() (gas: 10833)
-OwnableTest:testRenounceOwnershipSuccess() (gas: 17974)
-OwnableTest:testTransferOwnershipNonOwner() (gas: 12316)
-OwnableTest:testTransferOwnershipSuccess() (gas: 22155)
+OwnableTest:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13891, ~: 13891)
+OwnableTest:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 25229, ~: 25229)
+OwnableTest:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14044, ~: 14044)
+OwnableTest:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 30243, ~: 30243)
+OwnableTest:testHasOwner() (gas: 12502)
+OwnableTest:testInitialSetup() (gas: 212030)
+OwnableTest:testRenounceOwnershipNonOwner() (gas: 10811)
+OwnableTest:testRenounceOwnershipSuccess() (gas: 17957)
+OwnableTest:testTransferOwnershipNonOwner() (gas: 12300)
+OwnableTest:testTransferOwnershipSuccess() (gas: 22138)
 OwnableTest:testTransferOwnershipToZeroAddress() (gas: 15450)
-P256Test:testFuzzVerifyWithValidSignature(string,string) (runs: 256, μ: 973698, ~: 733505)
-P256Test:testVerifyWithFlippedValues() (gas: 1106582)
-P256Test:testVerifyWithInvalidSignature() (gas: 551951)
-P256Test:testVerifyWithOutOfBoundsPublicKey() (gas: 16892)
-P256Test:testVerifyWithTooHighSValue() (gas: 9289)
-P256Test:testVerifyWithValidSignature() (gas: 553942)
-P256Test:testVerifyWithZeroInputs() (gas: 8651)
-P256Test:testVerifyWycheproofData() (gas: 230646482)
-SignatureCheckerTest:testEIP1271NoIsValidSignatureFunction() (gas: 18775)
-SignatureCheckerTest:testEIP1271WithInvalidSignature(bytes,string) (runs: 256, μ: 23557, ~: 23550)
-SignatureCheckerTest:testEIP1271WithInvalidSignature1() (gas: 29701)
-SignatureCheckerTest:testEIP1271WithInvalidSignature2() (gas: 31390)
-SignatureCheckerTest:testEIP1271WithInvalidSigner() (gas: 29779)
-SignatureCheckerTest:testEIP1271WithMaliciousWallet() (gas: 19672)
-SignatureCheckerTest:testEIP1271WithValidSignature() (gas: 29688)
-SignatureCheckerTest:testEOAWithInvalidSignature1() (gas: 19374)
-SignatureCheckerTest:testEOAWithInvalidSignature2() (gas: 22969)
-SignatureCheckerTest:testEOAWithInvalidSigner() (gas: 19466)
-SignatureCheckerTest:testEOAWithTooHighSValue() (gas: 19984)
-SignatureCheckerTest:testEOAWithValidSignature() (gas: 19382)
-SignatureCheckerTest:testFuzzEIP1271WithInvalidSigner(string,string) (runs: 256, μ: 31612, ~: 31621)
-SignatureCheckerTest:testFuzzEIP1271WithValidSignature(string) (runs: 256, μ: 30267, ~: 30261)
-SignatureCheckerTest:testFuzzEOAWithInvalidSignature(bytes,string) (runs: 256, μ: 16386, ~: 16385)
-SignatureCheckerTest:testFuzzEOAWithInvalidSigner(string,string) (runs: 256, μ: 20406, ~: 20410)
-SignatureCheckerTest:testFuzzEOAWithValidSignature(string,string) (runs: 256, μ: 20316, ~: 20320)
-SignatureCheckerTest:testInitialSetup() (gas: 8292)
-TimelockControllerInvariants:statefulFuzzExecutedLessThanOrEqualToScheduled() (runs: 256, calls: 3840, reverts: 1264)
-TimelockControllerInvariants:statefulFuzzExecutedProposalCancellation() (runs: 256, calls: 3840, reverts: 1266)
-TimelockControllerInvariants:statefulFuzzExecutingCancelledProposal() (runs: 256, calls: 3840, reverts: 1253)
-TimelockControllerInvariants:statefulFuzzExecutingNotReadyProposal() (runs: 256, calls: 3840, reverts: 1287)
-TimelockControllerInvariants:statefulFuzzOnceProposalExecution() (runs: 256, calls: 3840, reverts: 1254)
-TimelockControllerInvariants:statefulFuzzProposalsExecutedMatchCount() (runs: 256, calls: 3840, reverts: 1264)
+P256Test:testFuzzVerifyWithValidSignature(string,string) (runs: 256, μ: 973792, ~: 733509)
+P256Test:testVerifyWithFlippedValues() (gas: 1106984)
+P256Test:testVerifyWithInvalidSignature() (gas: 552149)
+P256Test:testVerifyWithOutOfBoundsPublicKey() (gas: 16907)
+P256Test:testVerifyWithTooHighSValue() (gas: 9293)
+P256Test:testVerifyWithValidSignature() (gas: 554143)
+P256Test:testVerifyWithZeroInputs() (gas: 8654)
+P256Test:testVerifyWycheproofData() (gas: 230715022)
+SignatureCheckerTest:testEIP1271NoIsValidSignatureFunction() (gas: 18866)
+SignatureCheckerTest:testEIP1271WithInvalidSignature(bytes,string) (runs: 256, μ: 23654, ~: 23647)
+SignatureCheckerTest:testEIP1271WithInvalidSignature1() (gas: 29798)
+SignatureCheckerTest:testEIP1271WithInvalidSignature2() (gas: 31487)
+SignatureCheckerTest:testEIP1271WithInvalidSigner() (gas: 29876)
+SignatureCheckerTest:testEIP1271WithMaliciousWallet() (gas: 19769)
+SignatureCheckerTest:testEIP1271WithValidSignature() (gas: 29785)
+SignatureCheckerTest:testEOAWithInvalidSignature1() (gas: 19424)
+SignatureCheckerTest:testEOAWithInvalidSignature2() (gas: 23085)
+SignatureCheckerTest:testEOAWithInvalidSigner() (gas: 19516)
+SignatureCheckerTest:testEOAWithTooHighSValue() (gas: 20034)
+SignatureCheckerTest:testEOAWithValidSignature() (gas: 19432)
+SignatureCheckerTest:testFuzzEIP1271WithInvalidSigner(string,string) (runs: 256, μ: 31709, ~: 31718)
+SignatureCheckerTest:testFuzzEIP1271WithValidSignature(string) (runs: 256, μ: 30364, ~: 30358)
+SignatureCheckerTest:testFuzzEOAWithInvalidSignature(bytes,string) (runs: 256, μ: 16414, ~: 16413)
+SignatureCheckerTest:testFuzzEOAWithInvalidSigner(string,string) (runs: 256, μ: 20434, ~: 20438)
+SignatureCheckerTest:testFuzzEOAWithValidSignature(string,string) (runs: 256, μ: 20366, ~: 20370)
+SignatureCheckerTest:testInitialSetup() (gas: 8359)
+TimelockControllerInvariants:statefulFuzzExecutedLessThanOrEqualToScheduled() (runs: 256, calls: 3840, reverts: 1258)
+TimelockControllerInvariants:statefulFuzzExecutedProposalCancellation() (runs: 256, calls: 3840, reverts: 1287)
+TimelockControllerInvariants:statefulFuzzExecutingCancelledProposal() (runs: 256, calls: 3840, reverts: 1258)
+TimelockControllerInvariants:statefulFuzzExecutingNotReadyProposal() (runs: 256, calls: 3840, reverts: 1248)
+TimelockControllerInvariants:statefulFuzzOnceProposalExecution() (runs: 256, calls: 3840, reverts: 1286)
+TimelockControllerInvariants:statefulFuzzProposalsExecutedMatchCount() (runs: 256, calls: 3840, reverts: 1258)
 TimelockControllerInvariants:statefulFuzzSumOfProposals() (runs: 256, calls: 3840, reverts: 1258)
-TimelockControllerTest:testAdminCannotBatchExecute() (gas: 750660)
-TimelockControllerTest:testAdminCannotBatchSchedule() (gas: 748447)
+TimelockControllerTest:testAdminCannotBatchExecute() (gas: 750638)
+TimelockControllerTest:testAdminCannotBatchSchedule() (gas: 748425)
 TimelockControllerTest:testAdminCannotCancel() (gas: 13375)
-TimelockControllerTest:testAdminCannotExecute() (gas: 18449)
-TimelockControllerTest:testAdminCannotSchedule() (gas: 16122)
-TimelockControllerTest:testBatchCancelFinished() (gas: 4638367)
-TimelockControllerTest:testBatchEqualAndGreaterMinimumDelay() (gas: 6141734)
-TimelockControllerTest:testBatchHasBeenExecuted() (gas: 4636480)
-TimelockControllerTest:testBatchHasNotBeenExecuted() (gas: 3077116)
-TimelockControllerTest:testBatchInsufficientDelay() (gas: 1532099)
-TimelockControllerTest:testBatchMinimumDelayUpdate() (gas: 3084819)
-TimelockControllerTest:testBatchOperationAlreadyScheduled() (gas: 4590967)
-TimelockControllerTest:testBatchOperationIsNotReady() (gas: 4596283)
-TimelockControllerTest:testBatchPendingIfExecuted() (gas: 4635094)
-TimelockControllerTest:testBatchPendingIfNotYetExecuted() (gas: 3077124)
-TimelockControllerTest:testBatchPredecessorInvalid() (gas: 4598616)
-TimelockControllerTest:testBatchPredecessorMultipleNotExecuted() (gas: 6138775)
-TimelockControllerTest:testBatchPredecessorNotExecuted() (gas: 7658783)
-TimelockControllerTest:testBatchPredecessorNotScheduled() (gas: 6113752)
-TimelockControllerTest:testBatchReadyAfterTheExecutionTime() (gas: 3077669)
-TimelockControllerTest:testBatchReadyBeforeTheExecutionTime() (gas: 3077706)
-TimelockControllerTest:testBatchReadyOnTheExecutionTime() (gas: 3077572)
-TimelockControllerTest:testBatchScheduleAndExecuteWithEmptySalt() (gas: 4644297)
-TimelockControllerTest:testBatchScheduleAndExecuteWithNonEmptySalt() (gas: 4647742)
-TimelockControllerTest:testBatchTargetRevert() (gas: 9182258)
-TimelockControllerTest:testBatchTimestampHasBeenExecuted() (gas: 4634932)
-TimelockControllerTest:testBatchTimestampHasNotBeenExecuted() (gas: 3076931)
-TimelockControllerTest:testCanReceiveEther() (gas: 15016)
-TimelockControllerTest:testCancellerCanCancelOperation() (gas: 3063422)
+TimelockControllerTest:testAdminCannotExecute() (gas: 18440)
+TimelockControllerTest:testAdminCannotSchedule() (gas: 16113)
+TimelockControllerTest:testBatchCancelFinished() (gas: 4638358)
+TimelockControllerTest:testBatchEqualAndGreaterMinimumDelay() (gas: 6141703)
+TimelockControllerTest:testBatchHasBeenExecuted() (gas: 4636471)
+TimelockControllerTest:testBatchHasNotBeenExecuted() (gas: 3077107)
+TimelockControllerTest:testBatchInsufficientDelay() (gas: 1532077)
+TimelockControllerTest:testBatchMinimumDelayUpdate() (gas: 3084830)
+TimelockControllerTest:testBatchOperationAlreadyScheduled() (gas: 4590936)
+TimelockControllerTest:testBatchOperationIsNotReady() (gas: 4596274)
+TimelockControllerTest:testBatchPendingIfExecuted() (gas: 4635196)
+TimelockControllerTest:testBatchPendingIfNotYetExecuted() (gas: 3077115)
+TimelockControllerTest:testBatchPredecessorInvalid() (gas: 4598607)
+TimelockControllerTest:testBatchPredecessorMultipleNotExecuted() (gas: 6138766)
+TimelockControllerTest:testBatchPredecessorNotExecuted() (gas: 7658774)
+TimelockControllerTest:testBatchPredecessorNotScheduled() (gas: 6113743)
+TimelockControllerTest:testBatchReadyAfterTheExecutionTime() (gas: 3077660)
+TimelockControllerTest:testBatchReadyBeforeTheExecutionTime() (gas: 3077675)
+TimelockControllerTest:testBatchReadyOnTheExecutionTime() (gas: 3077563)
+TimelockControllerTest:testBatchScheduleAndExecuteWithEmptySalt() (gas: 4644288)
+TimelockControllerTest:testBatchScheduleAndExecuteWithNonEmptySalt() (gas: 4647733)
+TimelockControllerTest:testBatchTargetRevert() (gas: 9182335)
+TimelockControllerTest:testBatchTimestampHasBeenExecuted() (gas: 4634923)
+TimelockControllerTest:testBatchTimestampHasNotBeenExecuted() (gas: 3077031)
+TimelockControllerTest:testCanReceiveEther() (gas: 14994)
+TimelockControllerTest:testCancellerCanCancelOperation() (gas: 3063369)
 TimelockControllerTest:testCompleteOperationWithAssignExecutorRoleToZeroAddress() (gas: 122899)
-TimelockControllerTest:testCompletePipelineOperationMinimumDelayUpdate() (gas: 71775)
-TimelockControllerTest:testCompletePipelineOperationSetRoleAdmin() (gas: 98725)
+TimelockControllerTest:testCompletePipelineOperationMinimumDelayUpdate() (gas: 71789)
+TimelockControllerTest:testCompletePipelineOperationSetRoleAdmin() (gas: 98703)
 TimelockControllerTest:testExecutorCanBatchExecute() (gas: 3048925)
-TimelockControllerTest:testExecutorCanExecute() (gas: 29514)
-TimelockControllerTest:testExecutorCannotBatchSchedule() (gas: 1485551)
+TimelockControllerTest:testExecutorCanExecute() (gas: 29474)
+TimelockControllerTest:testExecutorCannotBatchSchedule() (gas: 1485529)
 TimelockControllerTest:testExecutorCannotCancel() (gas: 15471)
-TimelockControllerTest:testExecutorCannotSchedule() (gas: 19179)
-TimelockControllerTest:testFuzzBatchValue(uint256) (runs: 256, μ: 4650576, ~: 4650380)
+TimelockControllerTest:testExecutorCannotSchedule() (gas: 19139)
+TimelockControllerTest:testFuzzBatchValue(uint256) (runs: 256, μ: 4650562, ~: 4650371)
 TimelockControllerTest:testFuzzHashOperation(address,uint256,bytes,bytes32,bytes32) (runs: 256, μ: 10606, ~: 10586)
 TimelockControllerTest:testFuzzHashOperationBatch(address[],uint256[],bytes[],bytes32,bytes32) (runs: 256, μ: 1826841, ~: 1817250)
-TimelockControllerTest:testFuzzOperationValue(uint256) (runs: 256, μ: 111649, ~: 111453)
-TimelockControllerTest:testHandleERC1155() (gas: 41559997)
-TimelockControllerTest:testHandleERC721() (gas: 7161276)
+TimelockControllerTest:testFuzzOperationValue(uint256) (runs: 256, μ: 111622, ~: 111431)
+TimelockControllerTest:testHandleERC1155() (gas: 41561916)
+TimelockControllerTest:testHandleERC721() (gas: 7162262)
 TimelockControllerTest:testHashOperation() (gas: 12368)
-TimelockControllerTest:testHashOperationBatch() (gas: 1525351)
-TimelockControllerTest:testInitialSetup() (gas: 4313234)
+TimelockControllerTest:testHashOperationBatch() (gas: 1525342)
+TimelockControllerTest:testInitialSetup() (gas: 4311627)
 TimelockControllerTest:testInvalidOperation() (gas: 10719)
 TimelockControllerTest:testOperationAlreadyScheduled() (gas: 51498)
 TimelockControllerTest:testOperationCancelFinished() (gas: 99525)
 TimelockControllerTest:testOperationEqualAndGreaterMinimumDelay() (gas: 89452)
-TimelockControllerTest:testOperationHasBeenExecuted() (gas: 97671)
+TimelockControllerTest:testOperationHasBeenExecuted() (gas: 97649)
 TimelockControllerTest:testOperationHasNotBeenExecuted() (gas: 51393)
 TimelockControllerTest:testOperationInsufficientDelay() (gas: 19279)
-TimelockControllerTest:testOperationMinimumDelayUpdate() (gas: 61120)
+TimelockControllerTest:testOperationMinimumDelayUpdate() (gas: 61140)
 TimelockControllerTest:testOperationOperationIsNotReady() (gas: 56852)
-TimelockControllerTest:testOperationPendingIfExecuted() (gas: 96241)
+TimelockControllerTest:testOperationPendingIfExecuted() (gas: 96219)
 TimelockControllerTest:testOperationPendingIfNotYetExecuted() (gas: 51457)
-TimelockControllerTest:testOperationPredecessorInvalid() (gas: 61100)
-TimelockControllerTest:testOperationPredecessorMultipleNotExecuted() (gas: 90448)
-TimelockControllerTest:testOperationPredecessorNotExecuted() (gas: 96184)
+TimelockControllerTest:testOperationPredecessorInvalid() (gas: 61078)
+TimelockControllerTest:testOperationPredecessorMultipleNotExecuted() (gas: 90471)
+TimelockControllerTest:testOperationPredecessorNotExecuted() (gas: 96140)
 TimelockControllerTest:testOperationPredecessorNotScheduled() (gas: 64493)
 TimelockControllerTest:testOperationReadyAfterTheExecutionTime() (gas: 51992)
 TimelockControllerTest:testOperationReadyBeforeTheExecutionTime() (gas: 51955)
 TimelockControllerTest:testOperationReadyOnTheExecutionTime() (gas: 51829)
-TimelockControllerTest:testOperationTargetRevert() (gas: 107401)
-TimelockControllerTest:testOperationTimestampHasBeenExecuted() (gas: 96015)
+TimelockControllerTest:testOperationTargetRevert() (gas: 107404)
+TimelockControllerTest:testOperationTimestampHasBeenExecuted() (gas: 95993)
 TimelockControllerTest:testOperationTimestampHasNotBeenExecuted() (gas: 51231)
 TimelockControllerTest:testProposerCanBatchSchedule() (gas: 3088163)
 TimelockControllerTest:testProposerCanCancel() (gas: 20401)
-TimelockControllerTest:testProposerCanSchedule() (gas: 74851)
-TimelockControllerTest:testProposerCannotBatchExecute() (gas: 1489960)
-TimelockControllerTest:testProposerCannotExecute() (gas: 23703)
-TimelockControllerTest:testReturnsLaterMinimumDelayForCalls() (gas: 20803)
+TimelockControllerTest:testProposerCanSchedule() (gas: 74833)
+TimelockControllerTest:testProposerCannotBatchExecute() (gas: 1489983)
+TimelockControllerTest:testProposerCannotExecute() (gas: 23685)
+TimelockControllerTest:testReturnsLaterMinimumDelayForCalls() (gas: 20793)
 TimelockControllerTest:testRevertWhenNotTimelock() (gas: 9150)
 TimelockControllerTest:testScheduleAndExecuteWithEmptySalt() (gas: 105497)
 TimelockControllerTest:testScheduleAndExecuteWithNonEmptySalt() (gas: 108854)
-TimelockControllerTest:testStrangerCannotBatchExecute() (gas: 748679)
-TimelockControllerTest:testStrangerCannotBatchSchedule() (gas: 746487)
-TimelockControllerTest:testStrangerCannotCancel() (gas: 11371)
-TimelockControllerTest:testStrangerCannotExecute() (gas: 16466)
-TimelockControllerTest:testStrangerCannotSchedule() (gas: 14251)
+TimelockControllerTest:testStrangerCannotBatchExecute() (gas: 748657)
+TimelockControllerTest:testStrangerCannotBatchSchedule() (gas: 746465)
+TimelockControllerTest:testStrangerCannotCancel() (gas: 11349)
+TimelockControllerTest:testStrangerCannotExecute() (gas: 16457)
+TimelockControllerTest:testStrangerCannotSchedule() (gas: 14242)
 TimelockControllerTest:testSupportsInterfaceInvalidInterfaceId() (gas: 8490)
 TimelockControllerTest:testSupportsInterfaceInvalidInterfaceIdGasCost() (gas: 9280)
 TimelockControllerTest:testSupportsInterfaceSuccess() (gas: 10814)
diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml
index 1489154e..13db8664 100644
--- a/.github/workflows/checks.yml
+++ b/.github/workflows/checks.yml
@@ -40,8 +40,7 @@ jobs:
         with:
           path: ${{ steps.pnpm-cache-dir-path.outputs.dir }}
           key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
-          restore-keys: |
-            ${{ runner.os }}-pnpm-store-
+          restore-keys: ${{ runner.os }}-pnpm-store-
 
       - name: Use Node.js ${{ matrix.node_version }}
         uses: actions/setup-node@v4
@@ -110,4 +109,4 @@ jobs:
           awesome_bot ./*.md src/snekmate/**/*.vy src/snekmate/**/mocks/*.vy src/snekmate/**/interfaces/*.vyi \
           test/**/*.sol test/**/interfaces/*.sol test/**/mocks/*.sol test/**/scripts/*.js lib/utils/*.sol lib/utils/*.py \
           --allow-dupe --allow-redirect --request-delay 0.4 \
-          --white-list https://www.wagmi.xyz,https://github.com/pcaversaccio/snekmate.git@,https://github.com/pcaversaccio/snekmate/releases/tag/v0.1.0,https://github.com/pcaversaccio/snekmate/blob/v0.1.0,https://github.com/pcaversaccio/snekmate/compare/v0.0.5...v0.1.0,https://github.com/vyperlang/vyper/releases/tag/v0.4.0
+          --white-list https://www.wagmi.xyz,https://github.com/pcaversaccio/snekmate.git@,https://github.com/pcaversaccio/snekmate/releases/tag/v0.1.0,https://github.com/pcaversaccio/snekmate/blob/v0.1.0,https://github.com/pcaversaccio/snekmate/compare/v0.0.5...v0.1.0,https://hyperelliptic.org
diff --git a/.github/workflows/halmos.yml b/.github/workflows/halmos.yml
index b4f944c4..f4a2ff1b 100644
--- a/.github/workflows/halmos.yml
+++ b/.github/workflows/halmos.yml
@@ -33,7 +33,7 @@ jobs:
           architecture: ${{ matrix.architecture }}
 
       - name: Install Vyper
-        run: pip install git+https://github.com/vyperlang/vyper.git@master
+        run: pip install vyper
 
       - name: Show the Vyper version
         run: vyper --version
diff --git a/.github/workflows/publish-npm.yml b/.github/workflows/publish-npm.yml
index 0a3f52db..7ef9316c 100644
--- a/.github/workflows/publish-npm.yml
+++ b/.github/workflows/publish-npm.yml
@@ -38,8 +38,7 @@ jobs:
         with:
           path: ${{ steps.pnpm-cache-dir-path.outputs.dir }}
           key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
-          restore-keys: |
-            ${{ runner.os }}-pnpm-store-
+          restore-keys: ${{ runner.os }}-pnpm-store-
 
       - name: Setup .npmrc file to publish to npm
         uses: actions/setup-node@v4
diff --git a/.github/workflows/publish-pypi.yml b/.github/workflows/publish-pypi.yml
index fc177f3a..82f096fa 100644
--- a/.github/workflows/publish-pypi.yml
+++ b/.github/workflows/publish-pypi.yml
@@ -33,11 +33,7 @@ jobs:
           architecture: ${{ matrix.architecture }}
 
       - name: Install pypa/build
-        run: >-
-          python -m
-          pip install
-          build
-          --user
+        run: python -m pip install build --user
 
       - name: Build a binary wheel and a source tarball
         run: python -m build
diff --git a/ape-config.yaml b/ape-config.yaml
index da1e2cc6..82f11fb1 100644
--- a/ape-config.yaml
+++ b/ape-config.yaml
@@ -5,3 +5,6 @@ plugins:
   - name: vyper
 vyper:
   evm_version: cancun
+compile:
+  exclude:
+    - r"(?!.*_mock\.vy$)"
diff --git a/lib/create-util b/lib/create-util
index 0497e318..9fa0ba3f 160000
--- a/lib/create-util
+++ b/lib/create-util
@@ -1,1 +1,1 @@
-Subproject commit 0497e3180a4e30d1de14cf4ad359b6f5098735a3
+Subproject commit 9fa0ba3f3d52c51c7ba0cccf5a93d921c513a4ca
diff --git a/lib/forge-std b/lib/forge-std
index f4a0353e..19891e6a 160000
--- a/lib/forge-std
+++ b/lib/forge-std
@@ -1,1 +1,1 @@
-Subproject commit f4a0353eaabd14128fe86f4a2b9a07b827f76e46
+Subproject commit 19891e6a0b5474b9ea6827ddb90bb9388f7acfc0
diff --git a/lib/solady b/lib/solady
index 3e8031b1..cfa9a739 160000
--- a/lib/solady
+++ b/lib/solady
@@ -1,1 +1,1 @@
-Subproject commit 3e8031b16417154dc2beae71b7b45f415d29566b
+Subproject commit cfa9a7392bc2d85659788bb99c420fb326dde24e
diff --git a/package.json b/package.json
index 7b4307c8..9a32fa5f 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "snekmate",
-  "version": "0.1.0-rc.1",
+  "version": "0.1.0-rc.2",
   "description": "State-of-the-art, highly opinionated, hyper-optimised, and secure 🐍Vyper smart contract building blocks.",
   "author": "Pascal Marco Caversaccio <pascal.caversaccio@hotmail.ch>",
   "license": "AGPL-3.0-only",
diff --git a/pyproject.toml b/pyproject.toml
index 49faf6ef..4edad2d3 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
 [project]
 name = "snekmate"
-version = "0.1.0rc1"
+version = "0.1.0rc2"
 description = "State-of-the-art, highly opinionated, hyper-optimised, and secure 🐍Vyper smart contract building blocks."
 readme = { file = "README.md", content-type = "text/markdown" }
 requires-python = ">=3.10"
@@ -22,10 +22,13 @@ maintainers = [
 ]
 classifiers = [
   "Development Status :: 5 - Production/Stable",
+  "Intended Audience :: Developers",
   "License :: OSI Approved :: GNU Affero General Public License v3",
-  "Operating System :: POSIX :: Linux",
-  "Operating System :: Microsoft :: Windows",
+  "Natural Language :: English",
   "Operating System :: MacOS",
+  "Operating System :: Microsoft :: Windows",
+  "Operating System :: POSIX :: Linux",
+  "Topic :: Software Development :: Libraries",
 ]
 
 [project.urls]
diff --git a/src/snekmate/auth/access_control.vy b/src/snekmate/auth/access_control.vy
index 754ca755..d8cd3250 100644
--- a/src/snekmate/auth/access_control.vy
+++ b/src/snekmate/auth/access_control.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title Multi-Role-Based Access Control Functions
 @custom:contract-name access_control
diff --git a/src/snekmate/auth/interfaces/IAccessControl.vyi b/src/snekmate/auth/interfaces/IAccessControl.vyi
index 3b067a82..e8c3309a 100644
--- a/src/snekmate/auth/interfaces/IAccessControl.vyi
+++ b/src/snekmate/auth/interfaces/IAccessControl.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title `access_control` Interface Definition
 @custom:contract-name IAccessControl
diff --git a/src/snekmate/auth/mocks/access_control_mock.vy b/src/snekmate/auth/mocks/access_control_mock.vy
index 8292f8b3..44e5cebb 100644
--- a/src/snekmate/auth/mocks/access_control_mock.vy
+++ b/src/snekmate/auth/mocks/access_control_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title `access_control` Module Reference Implementation
 @custom:contract-name access_control_mock
diff --git a/src/snekmate/auth/mocks/ownable_2step_mock.vy b/src/snekmate/auth/mocks/ownable_2step_mock.vy
index de6f2e76..736364e8 100644
--- a/src/snekmate/auth/mocks/ownable_2step_mock.vy
+++ b/src/snekmate/auth/mocks/ownable_2step_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title `ownable_2step` Module Reference Implementation
 @custom:contract-name ownable_2step_mock
diff --git a/src/snekmate/auth/mocks/ownable_mock.vy b/src/snekmate/auth/mocks/ownable_mock.vy
index a0f2e5e2..2baae010 100644
--- a/src/snekmate/auth/mocks/ownable_mock.vy
+++ b/src/snekmate/auth/mocks/ownable_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title `ownable` Module Reference Implementation
 @custom:contract-name ownable_mock
diff --git a/src/snekmate/auth/ownable.vy b/src/snekmate/auth/ownable.vy
index 79f813ec..c4f118cb 100644
--- a/src/snekmate/auth/ownable.vy
+++ b/src/snekmate/auth/ownable.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title Owner-Based Access Control Functions
 @custom:contract-name ownable
diff --git a/src/snekmate/auth/ownable_2step.vy b/src/snekmate/auth/ownable_2step.vy
index 178172e3..1862baae 100644
--- a/src/snekmate/auth/ownable_2step.vy
+++ b/src/snekmate/auth/ownable_2step.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title 2-Step Ownership Transfer Functions
 @custom:contract-name ownable_2step
diff --git a/src/snekmate/extensions/erc2981.vy b/src/snekmate/extensions/erc2981.vy
index 694ab42e..63971a77 100644
--- a/src/snekmate/extensions/erc2981.vy
+++ b/src/snekmate/extensions/erc2981.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title ERC-721 and ERC-1155 Compatible ERC-2981 Reference Implementation
 @custom:contract-name erc2981
diff --git a/src/snekmate/extensions/erc4626.vy b/src/snekmate/extensions/erc4626.vy
index 099fc05c..0b528afd 100644
--- a/src/snekmate/extensions/erc4626.vy
+++ b/src/snekmate/extensions/erc4626.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title Modern and Gas-Efficient ERC-4626 Tokenised Vault Implementation
 @custom:contract-name erc4626
diff --git a/src/snekmate/extensions/interfaces/IERC2981.vyi b/src/snekmate/extensions/interfaces/IERC2981.vyi
index 71fbe654..1d7a117a 100644
--- a/src/snekmate/extensions/interfaces/IERC2981.vyi
+++ b/src/snekmate/extensions/interfaces/IERC2981.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title EIP-2981 Interface Definition
 @custom:contract-name IERC2981
diff --git a/src/snekmate/extensions/mocks/erc2981_mock.vy b/src/snekmate/extensions/mocks/erc2981_mock.vy
index 44e5dd1e..823a76e8 100644
--- a/src/snekmate/extensions/mocks/erc2981_mock.vy
+++ b/src/snekmate/extensions/mocks/erc2981_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title `erc2981` Module Reference Implementation
 @custom:contract-name erc2981_mock
diff --git a/src/snekmate/extensions/mocks/erc4626_mock.vy b/src/snekmate/extensions/mocks/erc4626_mock.vy
index 07c55fc5..6d2a7874 100644
--- a/src/snekmate/extensions/mocks/erc4626_mock.vy
+++ b/src/snekmate/extensions/mocks/erc4626_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title `erc4626` Module Reference Implementation
 @custom:contract-name erc4626_mock
diff --git a/src/snekmate/governance/mocks/timelock_controller_mock.vy b/src/snekmate/governance/mocks/timelock_controller_mock.vy
index 8ade082f..032a662f 100644
--- a/src/snekmate/governance/mocks/timelock_controller_mock.vy
+++ b/src/snekmate/governance/mocks/timelock_controller_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title `timelock_controller` Module Reference Implementation
 @custom:contract-name timelock_controller_mock
diff --git a/src/snekmate/governance/timelock_controller.vy b/src/snekmate/governance/timelock_controller.vy
index 0e69c6de..3ead8ac9 100644
--- a/src/snekmate/governance/timelock_controller.vy
+++ b/src/snekmate/governance/timelock_controller.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title Multi-Role-Based Timelock Controller Reference Implementation
 @custom:contract-name timelock_controller
diff --git a/src/snekmate/tokens/erc1155.vy b/src/snekmate/tokens/erc1155.vy
index 8f60121b..9a3be177 100644
--- a/src/snekmate/tokens/erc1155.vy
+++ b/src/snekmate/tokens/erc1155.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title Modern and Gas-Efficient ERC-1155 Implementation
 @custom:contract-name erc1155
diff --git a/src/snekmate/tokens/erc20.vy b/src/snekmate/tokens/erc20.vy
index 563482d5..04f6dd76 100644
--- a/src/snekmate/tokens/erc20.vy
+++ b/src/snekmate/tokens/erc20.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title Modern and Gas-Efficient ERC-20 + EIP-2612 Implementation
 @custom:contract-name erc20
diff --git a/src/snekmate/tokens/erc721.vy b/src/snekmate/tokens/erc721.vy
index 6fef0ddf..353c174d 100644
--- a/src/snekmate/tokens/erc721.vy
+++ b/src/snekmate/tokens/erc721.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title Modern and Gas-Efficient ERC-721 + EIP-4494 Implementation
 @custom:contract-name erc721
diff --git a/src/snekmate/tokens/interfaces/IERC1155.vyi b/src/snekmate/tokens/interfaces/IERC1155.vyi
index 553b6358..326dc96b 100644
--- a/src/snekmate/tokens/interfaces/IERC1155.vyi
+++ b/src/snekmate/tokens/interfaces/IERC1155.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title EIP-1155 Interface Definition
 @custom:contract-name IERC1155
diff --git a/src/snekmate/tokens/interfaces/IERC1155MetadataURI.vyi b/src/snekmate/tokens/interfaces/IERC1155MetadataURI.vyi
index 80785087..5635bfb8 100644
--- a/src/snekmate/tokens/interfaces/IERC1155MetadataURI.vyi
+++ b/src/snekmate/tokens/interfaces/IERC1155MetadataURI.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title EIP-1155 Optional Metadata Interface Definition
 @custom:contract-name IERC1155MetadataURI
diff --git a/src/snekmate/tokens/interfaces/IERC1155Receiver.vyi b/src/snekmate/tokens/interfaces/IERC1155Receiver.vyi
index bece0ca5..236d876c 100644
--- a/src/snekmate/tokens/interfaces/IERC1155Receiver.vyi
+++ b/src/snekmate/tokens/interfaces/IERC1155Receiver.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title EIP-1155 Token Receiver Interface Definition
 @custom:contract-name IERC1155Receiver
diff --git a/src/snekmate/tokens/interfaces/IERC20Permit.vyi b/src/snekmate/tokens/interfaces/IERC20Permit.vyi
index d1094727..032c3dca 100644
--- a/src/snekmate/tokens/interfaces/IERC20Permit.vyi
+++ b/src/snekmate/tokens/interfaces/IERC20Permit.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title EIP-2612 Interface Definition
 @custom:contract-name IERC20Permit
diff --git a/src/snekmate/tokens/interfaces/IERC4906.vyi b/src/snekmate/tokens/interfaces/IERC4906.vyi
index 365d5b8a..071c1223 100644
--- a/src/snekmate/tokens/interfaces/IERC4906.vyi
+++ b/src/snekmate/tokens/interfaces/IERC4906.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title EIP-4906 Interface Definition
 @custom:contract-name IERC4906
diff --git a/src/snekmate/tokens/interfaces/IERC721Enumerable.vyi b/src/snekmate/tokens/interfaces/IERC721Enumerable.vyi
index 71277e8e..f523ae29 100644
--- a/src/snekmate/tokens/interfaces/IERC721Enumerable.vyi
+++ b/src/snekmate/tokens/interfaces/IERC721Enumerable.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title EIP-721 Optional Enumeration Interface Definition
 @custom:contract-name IERC721Enumerable
diff --git a/src/snekmate/tokens/interfaces/IERC721Metadata.vyi b/src/snekmate/tokens/interfaces/IERC721Metadata.vyi
index 07b29246..48b6beb5 100644
--- a/src/snekmate/tokens/interfaces/IERC721Metadata.vyi
+++ b/src/snekmate/tokens/interfaces/IERC721Metadata.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title EIP-721 Optional Metadata Interface Definition
 @custom:contract-name IERC721Metadata
diff --git a/src/snekmate/tokens/interfaces/IERC721Permit.vyi b/src/snekmate/tokens/interfaces/IERC721Permit.vyi
index c864fc70..264f0e78 100644
--- a/src/snekmate/tokens/interfaces/IERC721Permit.vyi
+++ b/src/snekmate/tokens/interfaces/IERC721Permit.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title EIP-4494 Interface Definition
 @custom:contract-name IERC721Permit
diff --git a/src/snekmate/tokens/interfaces/IERC721Receiver.vyi b/src/snekmate/tokens/interfaces/IERC721Receiver.vyi
index 1d3e746e..d3323f35 100644
--- a/src/snekmate/tokens/interfaces/IERC721Receiver.vyi
+++ b/src/snekmate/tokens/interfaces/IERC721Receiver.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title EIP-721 Token Receiver Interface Definition
 @custom:contract-name IERC721Receiver
diff --git a/src/snekmate/tokens/mocks/erc1155_mock.vy b/src/snekmate/tokens/mocks/erc1155_mock.vy
index d00e4b61..be684743 100644
--- a/src/snekmate/tokens/mocks/erc1155_mock.vy
+++ b/src/snekmate/tokens/mocks/erc1155_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title `erc1155` Module Reference Implementation
 @custom:contract-name erc1155_mock
diff --git a/src/snekmate/tokens/mocks/erc20_mock.vy b/src/snekmate/tokens/mocks/erc20_mock.vy
index e38aa451..818c22b4 100644
--- a/src/snekmate/tokens/mocks/erc20_mock.vy
+++ b/src/snekmate/tokens/mocks/erc20_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title `erc20` Module Reference Implementation
 @custom:contract-name erc20_mock
diff --git a/src/snekmate/tokens/mocks/erc721_mock.vy b/src/snekmate/tokens/mocks/erc721_mock.vy
index 407b82bb..349842c9 100644
--- a/src/snekmate/tokens/mocks/erc721_mock.vy
+++ b/src/snekmate/tokens/mocks/erc721_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title `erc721` Module Reference Implementation
 @custom:contract-name erc721_mock
diff --git a/src/snekmate/utils/base64.vy b/src/snekmate/utils/base64.vy
index b2a8ee5c..2e954454 100644
--- a/src/snekmate/utils/base64.vy
+++ b/src/snekmate/utils/base64.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title Base64 Encoding and Decoding Functions
 @custom:contract-name base64
diff --git a/src/snekmate/utils/batch_distributor.vy b/src/snekmate/utils/batch_distributor.vy
index 65fab8e0..38de404f 100644
--- a/src/snekmate/utils/batch_distributor.vy
+++ b/src/snekmate/utils/batch_distributor.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title Batch Sending Both Native and ERC-20 Tokens
 @custom:contract-name batch_distributor
diff --git a/src/snekmate/utils/create2_address.vy b/src/snekmate/utils/create2_address.vy
index 15c126db..da779047 100644
--- a/src/snekmate/utils/create2_address.vy
+++ b/src/snekmate/utils/create2_address.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title `CREATE2` EVM Opcode Utility Functions for Address Calculations
 @custom:contract-name create2_address
diff --git a/src/snekmate/utils/create_address.vy b/src/snekmate/utils/create_address.vy
index fbf5f1da..5b9233be 100644
--- a/src/snekmate/utils/create_address.vy
+++ b/src/snekmate/utils/create_address.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title `CREATE` EVM Opcode Utility Functions for Address Calculations
 @custom:contract-name create_address
diff --git a/src/snekmate/utils/ecdsa.vy b/src/snekmate/utils/ecdsa.vy
index ef493126..c21cdd34 100644
--- a/src/snekmate/utils/ecdsa.vy
+++ b/src/snekmate/utils/ecdsa.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title Elliptic Curve Digital Signature Algorithm (ECDSA) Secp256k1-Based Functions
 @custom:contract-name ecdsa
diff --git a/src/snekmate/utils/eip712_domain_separator.vy b/src/snekmate/utils/eip712_domain_separator.vy
index 3a597e02..f9f743ae 100644
--- a/src/snekmate/utils/eip712_domain_separator.vy
+++ b/src/snekmate/utils/eip712_domain_separator.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title EIP-712 Domain Separator
 @custom:contract-name eip712_domain_separator
diff --git a/src/snekmate/utils/interfaces/IERC1271.vyi b/src/snekmate/utils/interfaces/IERC1271.vyi
index d4f68cf6..91f4650b 100644
--- a/src/snekmate/utils/interfaces/IERC1271.vyi
+++ b/src/snekmate/utils/interfaces/IERC1271.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title EIP-1271 Interface Definition
 @custom:contract-name IERC1271
diff --git a/src/snekmate/utils/interfaces/IERC5267.vyi b/src/snekmate/utils/interfaces/IERC5267.vyi
index 2b68cef6..c47e8d96 100644
--- a/src/snekmate/utils/interfaces/IERC5267.vyi
+++ b/src/snekmate/utils/interfaces/IERC5267.vyi
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title EIP-5267 Interface Definition
 @custom:contract-name IERC5267
diff --git a/src/snekmate/utils/math.vy b/src/snekmate/utils/math.vy
index 5757cba4..cf1bde14 100644
--- a/src/snekmate/utils/math.vy
+++ b/src/snekmate/utils/math.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title Standard Mathematical Utility Functions
 @custom:contract-name math
diff --git a/src/snekmate/utils/merkle_proof_verification.vy b/src/snekmate/utils/merkle_proof_verification.vy
index bcc8a463..c672d8fb 100644
--- a/src/snekmate/utils/merkle_proof_verification.vy
+++ b/src/snekmate/utils/merkle_proof_verification.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title Merkle Tree Proof Verification Functions
 @custom:contract-name merkle_proof_verification
diff --git a/src/snekmate/utils/message_hash_utils.vy b/src/snekmate/utils/message_hash_utils.vy
index 247b942e..032e8562 100644
--- a/src/snekmate/utils/message_hash_utils.vy
+++ b/src/snekmate/utils/message_hash_utils.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title Signature Message Hash Utility Functions
 @custom:contract-name message_hash_utils
diff --git a/src/snekmate/utils/mocks/base64_mock.vy b/src/snekmate/utils/mocks/base64_mock.vy
index 2ac92fb6..7ec07b16 100644
--- a/src/snekmate/utils/mocks/base64_mock.vy
+++ b/src/snekmate/utils/mocks/base64_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title `base64` Module Reference Implementation
 @custom:contract-name base64_mock
diff --git a/src/snekmate/utils/mocks/batch_distributor_mock.vy b/src/snekmate/utils/mocks/batch_distributor_mock.vy
index 14308b26..d1bbc575 100644
--- a/src/snekmate/utils/mocks/batch_distributor_mock.vy
+++ b/src/snekmate/utils/mocks/batch_distributor_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title `batch_distributor` Module Reference Implementation
 @custom:contract-name batch_distributor_mock
diff --git a/src/snekmate/utils/mocks/create2_address_mock.vy b/src/snekmate/utils/mocks/create2_address_mock.vy
index 03300152..440b4e3f 100644
--- a/src/snekmate/utils/mocks/create2_address_mock.vy
+++ b/src/snekmate/utils/mocks/create2_address_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title `create2_address` Module Reference Implementation
 @custom:contract-name create2_address_mock
diff --git a/src/snekmate/utils/mocks/create_address_mock.vy b/src/snekmate/utils/mocks/create_address_mock.vy
index 4933ea22..5c50ea90 100644
--- a/src/snekmate/utils/mocks/create_address_mock.vy
+++ b/src/snekmate/utils/mocks/create_address_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title `create_address` Module Reference Implementation
 @custom:contract-name create_address_mock
diff --git a/src/snekmate/utils/mocks/ecdsa_mock.vy b/src/snekmate/utils/mocks/ecdsa_mock.vy
index 96802ec1..6bf8529c 100644
--- a/src/snekmate/utils/mocks/ecdsa_mock.vy
+++ b/src/snekmate/utils/mocks/ecdsa_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title `ecdsa` Module Reference Implementation
 @custom:contract-name ecdsa_mock
diff --git a/src/snekmate/utils/mocks/eip712_domain_separator_mock.vy b/src/snekmate/utils/mocks/eip712_domain_separator_mock.vy
index 9580b69a..10132d80 100644
--- a/src/snekmate/utils/mocks/eip712_domain_separator_mock.vy
+++ b/src/snekmate/utils/mocks/eip712_domain_separator_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title `eip712_domain_separator` Module Reference Implementation
 @custom:contract-name eip712_domain_separator_mock
diff --git a/src/snekmate/utils/mocks/math_mock.vy b/src/snekmate/utils/mocks/math_mock.vy
index 6257b3d3..525a4b07 100644
--- a/src/snekmate/utils/mocks/math_mock.vy
+++ b/src/snekmate/utils/mocks/math_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title `math` Module Reference Implementation
 @custom:contract-name math_mock
diff --git a/src/snekmate/utils/mocks/merkle_proof_verification_mock.vy b/src/snekmate/utils/mocks/merkle_proof_verification_mock.vy
index d3f8221d..d09dc671 100644
--- a/src/snekmate/utils/mocks/merkle_proof_verification_mock.vy
+++ b/src/snekmate/utils/mocks/merkle_proof_verification_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title `merkle_proof_verification` Module Reference Implementation
 @custom:contract-name merkle_proof_verification_mock
diff --git a/src/snekmate/utils/mocks/message_hash_utils_mock.vy b/src/snekmate/utils/mocks/message_hash_utils_mock.vy
index da25f9ba..dd691e02 100644
--- a/src/snekmate/utils/mocks/message_hash_utils_mock.vy
+++ b/src/snekmate/utils/mocks/message_hash_utils_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title `message_hash_utils` Module Reference Implementation
 @custom:contract-name message_hash_utils_mock
diff --git a/src/snekmate/utils/mocks/multicall_mock.vy b/src/snekmate/utils/mocks/multicall_mock.vy
index a45c804b..5b3c5eac 100644
--- a/src/snekmate/utils/mocks/multicall_mock.vy
+++ b/src/snekmate/utils/mocks/multicall_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title `multicall` Module Reference Implementation
 @custom:contract-name multicall_mock
diff --git a/src/snekmate/utils/mocks/p256_mock.vy b/src/snekmate/utils/mocks/p256_mock.vy
index 45c92020..f4e0658d 100644
--- a/src/snekmate/utils/mocks/p256_mock.vy
+++ b/src/snekmate/utils/mocks/p256_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title `p256` Module Reference Implementation
 @custom:contract-name p256_mock
diff --git a/src/snekmate/utils/mocks/signature_checker_mock.vy b/src/snekmate/utils/mocks/signature_checker_mock.vy
index 1ad7c811..f911fcaa 100644
--- a/src/snekmate/utils/mocks/signature_checker_mock.vy
+++ b/src/snekmate/utils/mocks/signature_checker_mock.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title `signature_checker` Module Reference Implementation
 @custom:contract-name signature_checker_mock
diff --git a/src/snekmate/utils/multicall.vy b/src/snekmate/utils/multicall.vy
index 7da02a20..e24ff8a1 100644
--- a/src/snekmate/utils/multicall.vy
+++ b/src/snekmate/utils/multicall.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title Multicall Functions
 @custom:contract-name multicall
diff --git a/src/snekmate/utils/p256.vy b/src/snekmate/utils/p256.vy
index 7677fe75..4e354bef 100644
--- a/src/snekmate/utils/p256.vy
+++ b/src/snekmate/utils/p256.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title Elliptic Curve Digital Signature Algorithm (ECDSA) Secp256r1-Based Functions
 @custom:contract-name p256
diff --git a/src/snekmate/utils/signature_checker.vy b/src/snekmate/utils/signature_checker.vy
index 539acd10..1a1f85d3 100644
--- a/src/snekmate/utils/signature_checker.vy
+++ b/src/snekmate/utils/signature_checker.vy
@@ -1,4 +1,4 @@
-# pragma version ~=0.4.0rc6
+# pragma version ~=0.4.0
 """
 @title ECDSA and EIP-1271 Signature Verification Functions
 @custom:contract-name signature_checker


Test patch:
diff --git a/.github/workflows/publish-test-pypi.yml b/.github/workflows/publish-test-pypi.yml
index 644f0b02..d78c3860 100644
--- a/.github/workflows/publish-test-pypi.yml
+++ b/.github/workflows/publish-test-pypi.yml
@@ -30,11 +30,7 @@ jobs:
           architecture: ${{ matrix.architecture }}
 
       - name: Install pypa/build
-        run: >-
-          python -m
-          pip install
-          build
-          --user
+        run: python -m pip install build --user
 
       - name: Build a binary wheel and a source tarball
         run: python -m build
diff --git a/.github/workflows/test-contracts.yml b/.github/workflows/test-contracts.yml
index 55c90201..c272864a 100644
--- a/.github/workflows/test-contracts.yml
+++ b/.github/workflows/test-contracts.yml
@@ -34,19 +34,19 @@ jobs:
           python-version: ${{ matrix.python_version }}
           architecture: ${{ matrix.architecture }}
 
-      - name: Install Vyper
-        run: pip install git+https://github.com/vyperlang/vyper.git@master
+      - name: Setup Ape
+        uses: ApeWorX/github-action@v2
+        with:
+          python-version: ${{ matrix.python_version }}
 
-      - name: Show the Vyper version
-        run: vyper --version
+      - name: Check Ape compilation
+        run: ape compile
 
-      # - name: Setup Ape
-      #   uses: ApeWorX/github-action@v2
-      #   with:
-      #     python-version: ${{ matrix.python_version }}
+      - name: Remove Ape Vyper and install latest Vyper
+        run: pip install --force-reinstall vyper
 
-      # - name: Check Ape compilation
-      #   run: ape compile
+      - name: Show the Vyper version
+        run: vyper --version
 
       - name: Install pnpm
         uses: pnpm/action-setup@v3
@@ -64,8 +64,7 @@ jobs:
         with:
           path: ${{ steps.pnpm-cache-dir-path.outputs.dir }}
           key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
-          restore-keys: |
-            ${{ runner.os }}-pnpm-store-
+          restore-keys: ${{ runner.os }}-pnpm-store-
 
       - name: Use Node.js ${{ matrix.node_version }}
         uses: actions/setup-node@v4