{"assessments":[],"deployments":[],"fuzz":[],"identity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"interpretation":"Records acceptance and evidence. Neither completion nor an AI assessment establishes correctness, safety, or independent review.","jobId":"b7ff84b3-e29f-4c3a-86d0-a514f22f004e","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"f024ac16739c08b714229bb0da47850dc7a8bfae3ff24444c9c559b5f6fd597c","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_economics","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"5cf20599a7d3003aa8468b3da15757ed63238a2790ab621193058fe8172c8968","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_flow","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"df415c15c883c6f950a6bb1aa512c8673b51d6e3e9941a1f09fed298e137fde2","dependsOn":["build_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","state":"accepted"},{"acceptedSubmissionHash":"2d75b43637d152f3a4b36079f222e2fc560c5cdb1b6038a63ada107117293ed6","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_math","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"2c8e38054d3dc2da64272fcd61d1e3ad7ba7f5e9ebd611a1bfee05b73b8b57ca","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_permissions","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"f50dbf5bc735669f67941ba457d1f9c85d71f41e62ffafca3aae939e503441a9","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"816fe39c7efd64504a19175b0f4dd9186d61069f37a22684c90358a18c60bddc","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"816fe39c7efd64504a19175b0f4dd9186d61069f37a22684c90358a18c60bddc","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"4732bb7d99313d7845aa7078082d5fc7ea2c0052bb4dec73f56b4cb68d36c64c","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"3a5668f5b73e6abffefbf0bad06c648c1ad530a1e7d8b63b013e2a6cf792cdf2","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"ab3f8f2aa4e7f3b3ada558c0dcf522ba733ca3df3b1da92c707a0fe305816d5f","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"ab3f8f2aa4e7f3b3ada558c0dcf522ba733ca3df3b1da92c707a0fe305816d5f","skillId":"write-foundry-tests","state":"accepted"}],"objective":"A custom token: ConditionalsIMD (CONDITIONAL).\nToken name: ConditionalsIMD\nToken symbol: CONDITIONAL\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"668008941149de2a65a1fe5dae912bdb8281c54a76d747d3dd7a6676d12c16e0","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"b7ff84b3-e29f-4c3a-86d0-a514f22f004e","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2550-conditionalsimd"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52149","feedbackHash":"f50f5da52c894b183c7a10ca156baf50c758102b4876501ad7fd42a0fd3d633f","nodeKey":"audit_economics","submissionHash":"f024ac16739c08b714229bb0da47850dc7a8bfae3ff24444c9c559b5f6fd597c","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52665","feedbackHash":"b710e6f98f0cc078f8990e37ec60959ece24ebe9c3de62fbaf4d2766ec42091d","nodeKey":"audit_flow","submissionHash":"5cf20599a7d3003aa8468b3da15757ed63238a2790ab621193058fe8172c8968","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52253","feedbackHash":"8f99e712b34e336b73075757fa2e4f93b13ef3d4ce798fc79dec1ffb0145895c","nodeKey":"audit_judge","submissionHash":"df415c15c883c6f950a6bb1aa512c8673b51d6e3e9941a1f09fed298e137fde2","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52701","feedbackHash":"d1a6494bde0f21cc4375dc0664780e4ad3bf872f143694b763d3e41e25088a1c","nodeKey":"audit_math","submissionHash":"2d75b43637d152f3a4b36079f222e2fc560c5cdb1b6038a63ada107117293ed6","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"50989","feedbackHash":"aa59190f1f74102b180595e298736777823480c324c00d93576e10bfcb9ab8c6","nodeKey":"audit_permissions","submissionHash":"2c8e38054d3dc2da64272fcd61d1e3ad7ba7f5e9ebd611a1bfee05b73b8b57ca","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51078","feedbackHash":"6304973ed2a3b3b57b44613d6fcc943aa8017919b688d458d980205824b26548","nodeKey":"build_contract_project","submissionHash":"f50dbf5bc735669f67941ba457d1f9c85d71f41e62ffafca3aae939e503441a9","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51247","feedbackHash":"8f20078611c5f7c8ac9bb1ef570e91d8750e12975eae926f882f06f343271b68","nodeKey":"manifest","submissionHash":"4732bb7d99313d7845aa7078082d5fc7ea2c0052bb4dec73f56b4cb68d36c64c","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51983","feedbackHash":"2ab7e015db96cdae2d992516dd82371f4aab4385e9a339a220900f0e5718c00d","nodeKey":"write_foundry_tests","submissionHash":"3a5668f5b73e6abffefbf0bad06c648c1ad530a1e7d8b63b013e2a6cf792cdf2","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"0d65b105d9c6437b0f8ec9c7c9ed813c075ec41511f7bcb1fffd8a2515a31f4c","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"e36579e0223ff908","findings":[],"hash":"2c8e38054d3dc2da64272fcd61d1e3ad7ba7f5e9ebd611a1bfee05b73b8b57ca","nodeId":"6539a9d5-4eea-4cb3-9f26-ee7bcd597db7","outcome":"completed","summary":"The review is complete. No defects found in the assigned area.\n\n**Result:** `.imd-findings.json` holds an empty findings list and eight coverage rows, one for each of the three listed entry points plus the constructor and four invariants. Only that file was created; the scratch test I used was removed and the tree is otherwise untouched.\n\n**What the token is.** ConditionalsIMD is a 17-line contract that inherits OpenZeppelin v5.1.0 ERC20 and mints 10^27 units to msg.sender once in the constructor. The compiled ABI exposes only the standard ERC20 functions and one constant view. There is no owner, initializer, mint, burn, pause, blacklist, hook, receive or fallback, and no delegatecall or selfdestruct anywhere in src or the vendored library.\n\n**What I checked against the Access Control, Asymmetry and Trust Gap guides:**\n- Permission map: every state write is keyed on msg.sender's own balance or allowance row. The deployer, which is the factory in production, holds no authority over other holders after the mint.\n- Inconsistent guards: each storage variable has exactly one writer path, so there is no weaker parallel route.\n- Paired-function symmetry: transfer and transferFrom both end in the same internal update with identical validation. The only difference is the allowance spend, which is the intended behaviour, and the unlimited-allowance sentinel is standard.\n- Trust gap on launch flows: with no fees, burns or exemption list, factory-to-distributor, claim, seed and trader swaps all move exact amounts, which is what the protected floor requires.\n- Supply chain: I diffed the five vendored OpenZeppelin files against upstream v5.1.0 and they are byte-identical.\n- Static analysis lead: the aderyn large-numeric-literal note is style only. The literal evaluates to exactly the manifest supply.\n\n**Verification run:** the project's 38 tests pass with the pinned fuzz seed, and seven adversarial access probes I wrote in test/scratch all passed before I deleted them. The approve front-running race inherent to ERC20 is documented in the README and is a known property of the standard, not a defect of this code, so it is not reported.","treeHash":null,"usage":{"cachedInputTokens":538498,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":9234,"runtime":"claude","turns":20,"wallClockMs":192088}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"aac006f7fc669006","findings":[],"hash":"2d75b43637d152f3a4b36079f222e2fc560c5cdb1b6038a63ada107117293ed6","nodeId":"1eacac07-1033-4142-acea-dd363a60a049","outcome":"completed","summary":"I found no math defects. `.imd-findings.json` holds `{\"findings\":[]}` and a coverage row for each of the three entry points, all marked `holds`.\n\n**What I reviewed.** `src/ConditionalsIMD.sol` is a plain OpenZeppelin v5.1.0 ERC20. Its only code is a constant `INITIAL_SUPPLY = 1_000_000_000 * 10 ** 18` and one `_mint(msg.sender, INITIAL_SUPPLY)` in the constructor. I traced `approve`, `transfer` and `transferFrom` through the library's internal functions. I also downloaded the five vendored library files from the upstream v5.1.0 tag, and they are byte-identical.\n\n**Math Precision guide.**\n- There is no division, rounding, scaling between units, narrowing cast, shift or bitmask anywhere in the code.\n- The constant works out to exactly 10^27, which matches the 1,000,000,000-token supply with 18 decimals, and `decimals()` returns 18.\n- The two subtractions that skip overflow checks can't wrap, because each one is preceded by a check that reverts first (balance below the amount, or allowance below the amount).\n- The unchecked additions to a receiver's balance can't overflow, because no balance can exceed the total supply, and the supply is fixed after the constructor.\n\n**Boundary guide.**\n- Amounts of 0, 1 wei and the whole supply move exactly. One unit over a balance or allowance reverts.\n- Sending to or approving the zero address reverts.\n- A maximum (`type(uint256).max`) allowance is never reduced, which is the library's intended behaviour.\n- There are no external calls, payable functions, special-address branches or byte decoding to check.\n\n**Numerical Gap guide.** No value is computed, so there are no seams. The total supply always equals the sum of balances, and nothing after deployment can mint or burn.\n\n**Static analysis lead.** Aderyn flagged a large numeric literal at line 10. I checked it: the value is correct and nowhere near the uint256 limit, so I didn't report it.\n\n**Checks run.** `forge test` passes all 38 existing tests, including the invariant test against an independent ledger (128 runs, 8,192 calls). I wrote no proof tests because there was nothing to reproduce. Nothing in my area was left unreached. Other areas, such as the launch's pool and distributor flows, were not my assignment. Since the token has no special transfer rules, nothing in my area affects them.\n\nNo files in the repository were changed; `git status` is clean.","treeHash":null,"usage":{"cachedInputTokens":392446,"inputTokens":18,"model":"claude-opus-5-5","outputTokens":4089,"runtime":"claude","turns":9,"wallClockMs":76189}},{"artifacts":[],"attempt":1,"bundleHash":"cac2dfa8a073d9c874fbc47abcc5c3bf3a3419bf59d07b11dd2fd0246688ab0a","device":"90675b3128fe9096","findings":[],"hash":"3a5668f5b73e6abffefbf0bad06c648c1ad530a1e7d8b63b013e2a6cf792cdf2","nodeId":"3ab839df-044c-4626-b2d7-fb3030b17e67","outcome":"completed","summary":"Added 20 tests and strengthened invariants for failure paths, allowance boundaries, revocation, and balance conservation.\n\nValidation passed:\n- `forge build`\n- `forge test` with the required seed: **58 passed**\n- **32,768 invariant calls**, no unexpected reverts\n\nAll changes are under `test/`. No implementation defects found.","treeHash":"19b79346bd5870bcd10c54593ce3147dff47c180","usage":{"cachedInputTokens":736512,"inputTokens":79798,"model":"gpt-6-astra","outputTokens":13771,"runtime":"codex","turns":6,"wallClockMs":340109}},{"artifacts":[],"attempt":1,"bundleHash":"65249e62d9515bc59e6035f5eb19015c979e1e058fbb7c45c70b70782e3dd536","device":"93652ca7a1cbb0e8","findings":[],"hash":"4732bb7d99313d7845aa7078082d5fc7ea2c0052bb4dec73f56b4cb68d36c64c","nodeId":"dbeb5669-d782-421a-8f6e-907c2b7b1d85","outcome":"completed","summary":"Created [launch.json](/root/.identitymd/work/b7ff84b3-e29f-4c3a-86d0-a514f22f004e/dbeb5669-d782-421a-8f6e-907c2b7b1d85/launch.json) matching the accepted token, constructor, supply, pool, and exact economics.\n\n`forge build` succeeded. All 38 tests passed with the supplied fuzz seed. Only `launch.json` is changed for submission.","treeHash":"99d75e71f80263c4e3e48f81fe9c528068772db1","usage":{"cachedInputTokens":228736,"inputTokens":24584,"model":"gpt-6-astra","outputTokens":2213,"runtime":"codex","turns":3,"wallClockMs":56645}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"0ef0cddb99617930","findings":[],"hash":"5cf20599a7d3003aa8468b3da15757ed63238a2790ab621193058fe8172c8968","nodeId":"33d40157-d968-4d04-888a-81f4d2a08874","outcome":"completed","summary":"The review is complete. The findings file holds an empty findings list and a coverage record, which is the honest result for this code.\n\n**Outcome: no defects found.** ConditionalsIMD is a 17-line wrapper over OpenZeppelin v5.1.0 ERC20 that mints 10^27 minor units to msg.sender once and adds nothing else. Every path in my three guides was traced and holds.\n\n**What I checked, by guide**\n\n- **Execution Trace.** Followed transfer, transferFrom and approve from entry to storage through the vendored ERC20 implementation. Zero-address checks, the balance check before the unchecked subtraction, allowance consumption, the unlimited-allowance branch, and revert atomicity all behave as the README states. There are no external calls, callbacks, sentinel branches, payable paths or bytes decoding.\n- **Periphery.** Downloaded the OpenZeppelin v5.1.0 tarball and byte-compared all five vendored files. They are unmodified and the archive hash matches DEPENDENCIES.md. Context uses plain msg.sender, so there is no meta-transaction path.\n- **First Principles.** The constructor takes no arguments and mints to the immediate caller, so under CREATE2 the factory receives the whole supply. No mint, burn or admin selector exists in the ABI. A reachable-opcode scan of the compiled runtime found no DELEGATECALL, CALLCODE, SELFDESTRUCT or outbound CALL. Storage holds only the five standard ERC20 slots.\n\n**Checks run**\n\n- Project suite with the pinned fuzz seed: all 38 tests pass, including the stateful invariant run.\n- Formatter check passes.\n- Seven scratch probes of my own for CREATE2 deployment, repeated pulls against one allowance, max allowance survival, value rejection and storage layout. Six passed. The one failure was a wrong expectation in my probe about which custom error a transfer from the zero address raises. It reverts either way, so this is not a defect. The scratch directory has been removed.\n\n**Static-analysis lead.** The aderyn \"large numeric literal\" note on the supply constant is style only. The suite asserts the literal equals 10^27, the manifest's totalSupply in minor units.\n\n**Coverage.** All three listed entry points are marked holds, plus five invariant rows covering supply constancy, absence of privileged roles and dangerous opcodes, unmodified dependencies and metadata matching the brief. The launch manifest is out of scope here since the repository does not include a launch.json.","treeHash":null,"usage":{"cachedInputTokens":595475,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":10917,"runtime":"claude","turns":24,"wallClockMs":186127}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"7591760a616c6429","findings":[{"citation":"resolved","description":"Documentation drift only. The README was written before the manifest step ran; the accepted tree now contains launch.json at the repository root (kind custom_token, contract ConditionalsIMD, constructorArgs [], totalSupply 1000000000000000000000000000, decimals 18). The manifest itself was checked and is consistent with the code: the constructor takes no parameters so an empty constructorArgs list is correct, totalSupply equals INITIAL_SUPPLY (10^27), decimals 18 matches ERC20.decimals(), the contract name is 15 characters, addresses are lowercase, uint256 fields are strings, fee/tickSpacing/decimals are numbers, notes is 460 characters, and there are no extra keys. No code change is needed; the sentence in the README is simply no longer true.","line":27,"path":"README.md","reproduction":"Run `ls launch.json` at the repository root: the file exists (1071 bytes). Read README.md line 27: it says \"this repository does not supply a `launch.json`\". Expected: README describes the tree as it is. Actual: README contradicts the tree. No on-chain or behavioural effect.","severity":"info","snippet":"`INITIAL_SUPPLY` is the fixed supply constant in smallest units. There are no application contracts or additional configurable parameters. The token does not encode distribution recipients, pool parameters, or launch economics: the launch factory distributes the tokens after creation. The separate launch process supplies its manifest; this repository does not supply a `launch.json`.","title":"README states the repository supplies no launch.json, but launch.json is present in the tree"}],"hash":"df415c15c883c6f950a6bb1aa512c8673b51d6e3e9941a1f09fed298e137fde2","nodeId":"f1d1f448-9c53-4552-ba4a-58916fb64e74","outcome":"completed","summary":"The review is complete and `.imd-findings.json` is written. No code defects were found.\n\n**What was checked**\n\n- The token is a 17-line contract: unmodified OpenZeppelin v5.1.0 `ERC20` plus a no-argument constructor that mints 10^27 units once to the deployer. The six vendored OpenZeppelin files are byte-identical to the upstream v5.1.0 tarball, whose SHA-256 matches DEPENDENCIES.md.\n- All three entry points (`approve`, `transfer`, `transferFrom`) were traced through the OpenZeppelin source and exercised in a scratch Foundry test. Reverts, exact-amount delivery, finite versus unlimited allowance behaviour, and the absence of fees, hooks or external calls all behave as the brief requires.\n- Deployment via CREATE2 from a factory contract leaves the whole supply with the factory. Creation and runtime code are far below the size limits, and the reachable runtime contains no DELEGATECALL, CALLCODE or SELFDESTRUCT.\n- The ABI exposes only ERC-20 functions and a constant view. There is no mint, burn, pause, blacklist, owner or receive path, so the protected floor's admin probes cannot change supply or freeze a holder.\n- The project's own 58 tests pass with the pinned fuzz seed. launch.json matches the code and the schema rules.\n- The aderyn \"large numeric literal\" lead is the intentional supply constant and is not a defect. The four specialists and the tester reported nothing, so there was nothing to merge or drop.\n\n**Reported**\n\nOne `info` finding: README line 27 says the repository does not supply a `launch.json`, but the manifest step has since added one to the tree. This is documentation drift with no behavioural effect.\n\nThe coverage record marks all three listed entry points as `holds`, plus four extra rows for the constructor and supply, privileged-entry-point absence, the static-analysis lead, and the manifest. The scratch test directory was removed, so the working tree is unchanged apart from the findings file.","treeHash":null,"usage":{"cachedInputTokens":290523,"inputTokens":162,"model":"claude-fable-5-1","outputTokens":9262,"runtime":"claude","turns":16,"wallClockMs":176315}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"af1843f371022d4a","findings":[],"hash":"f024ac16739c08b714229bb0da47850dc7a8bfae3ff24444c9c559b5f6fd597c","nodeId":"e32b488a-f9c6-412d-a9d4-c37a63acb884","outcome":"completed","summary":"The review is complete. The findings file holds an empty findings list and eight coverage rows, and the scratch directory is removed.\n\n**Result: no defects found in the assigned area.** ConditionalsIMD is a 17-line contract that inherits unmodified OpenZeppelin v5.1.0 ERC20 and mints exactly 10^27 units to msg.sender once in the constructor. It has no owner, mint, burn, pause, fee, exemption list, external call or payable path.\n\nWhat I verified:\n\n- **Vendored library integrity.** The upstream v5.1.0 archive hash matches DEPENDENCIES.md, and all six vendored OpenZeppelin files are byte-identical to upstream.\n- **Economic Security guide.** There is no external dependency, oracle, price-dependent operation, fee formula or shared cap to break. ERC-20 behavior at boundaries, including zero value, max uint, self-transfer and zero addresses, is standard OpenZeppelin and matches the README.\n- **Invariant guide.** Sum of balances equals total supply forever. The only mint is in the constructor, no burn path exists, and transfers to the zero address revert. A 1,024-run scratch fuzz over eight holders kept the sum exact.\n- **Flow Gap guide.** The token makes no periphery calls, so no seam exists inside it. Every transfer moves exactly the requested amount, so the swarm share, claims, pool seed and swaps cannot arrive short.\n- **Runtime bytecode.** An opcode walk using the protected floor's algorithm found no DELEGATECALL, CALLCODE, SELFDESTRUCT, CALL or CREATE in reachable code.\n- **Static-analysis lead.** The aderyn large-numeric-literal note is a style remark. The literal is a compile-time constant equal to the manifest supply.\n\nCoverage rows mark all three entry points, approve, transfer and transferFrom, as holds, plus five invariant rows. The one thing I could not run is the real protected harness with the Uniswap v4 PoolManager, since its sources are not in this tree. That limitation is recorded in the notes field.","treeHash":null,"usage":{"cachedInputTokens":514172,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":10160,"runtime":"claude","turns":25,"wallClockMs":188347}},{"artifacts":[],"attempt":1,"bundleHash":"ef6a488a3366ce7eb393ae4710c1225efc75c6cf8550c7fc5ac4cc2473cf86bd","device":"d2bae9a4a05e8265","findings":[],"hash":"f50dbf5bc735669f67941ba457d1f9c85d71f41e62ffafca3aae939e503441a9","nodeId":"5b6e45b1-cad0-47b5-988b-eb115f6e7a52","outcome":"completed","summary":"Implemented ConditionalsIMD (CONDITIONAL): 1 billion tokens, 18 decimals, minted once entirely to the deployer. No administrative or additional minting powers.\n\nDependencies are vendored; deployment parameters, assumptions, and responsibilities are documented.\n\nVerified with Solidity 0.8.26:\n\n- `forge build` passed\n- `forge test` passed: 38 tests using the specified fuzz seed\n- `forge fmt --check` passed","treeHash":"429df162a08f61961065805ef81aa3ab44ce7a66","usage":{"cachedInputTokens":490112,"inputTokens":48226,"model":"gpt-6-astra","outputTokens":14752,"runtime":"codex","turns":4,"wallClockMs":382433}}],"verification":[{"checks":[{"durationMs":1585,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.49s\nCompiler run successful!\n","passed":true},{"durationMs":9922,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 19 tests for test/ConditionalsIMD.properties.t.sol:ConditionalsIMDPropertiesTest\n[PASS] testFuzz_DirectTransfersDoNotConsumeApproval(uint256,bool) (runs: 1024, μ: 335632, ~: 335448)\nLogs:\n  Bound result 499999999999999999999999999\n\n[PASS] testFuzz_InsufficientBalancePreservesFiniteOrUnlimitedApproval(uint256,uint256,bool) (runs: 1024, μ: 289825, ~: 288674)\nLogs:\n  Bound result 40067207824869928196568403\n  Bound result 501108787163512153587042601284117773024753059479532\n\n[PASS] testFuzz_InvalidReceiverPreservesFiniteOrUnlimitedApproval(uint256,uint256,uint256,bool) (runs: 1024, μ: 288330, ~: 286734)\nLogs:\n  Bound result 500000000000000000000\n  Bound result 22930\n\n[PASS] testFuzz_NearMaximumFiniteAllowanceStillDecrements(uint256,uint256) (runs: 1024, μ: 165087, ~: 165731)\nLogs:\n  Bound result 514433\n  Bound result 337236611718573195746\n\n[PASS] testFuzz_ReplacingApprovalIsIdempotent(uint256,uint256) (runs: 1024, μ: 202624, ~: 202688)\n[PASS] testFuzz_RevocationSurvivesRefillingTheOwnersBalance(uint256,bool) (runs: 1024, μ: 458049, ~: 457314)\nLogs:\n  Bound result 500000000000000000000000000\n\n[PASS] testFuzz_SplitTransfersMatchCombinedTransfer(uint256,uint256,uint256) (runs: 1024, μ: 354404, ~: 358151)\nLogs:\n  Bound result 724299042145901709324579673\n  Bound result 642449324524988934665318004\n  Bound result 48034813843374772977820364\n\n[PASS] testFuzz_TransferRoundTripRestoresBothBalances(uint256,uint256,uint256) (runs: 1024, μ: 265394, ~: 266712)\nLogs:\n  Bound result 15435\n  Bound result 1129\n  Bound result 5774\n\n[PASS] testFuzz_TwoSpendersCannotExceedTheSharedBalance(uint256,uint256) (runs: 1024, μ: 412960, ~: 413802)\nLogs:\n  Bound result 514433\n  Bound result 95223\n\n[PASS] test_AllowanceDoesNotFollowTokensToAnotherHolder() (gas: 237424)\n[PASS] test_DelegatedSelfTransferCannotExceedBalance() (gas: 114622)\n[PASS] test_MaximumAmountCannotBeSpentEvenWithUnlimitedApproval() (gas: 208451)\n[PASS] test_MaximumFiniteApprovalDecrementsAndCanReplaceUnlimitedApproval() (gas: 342841)\n[PASS] test_SelfApprovalAllowsHolderToUseTransferFrom() (gas: 198960)\n[PASS] test_TransactionOriginCannotLendItsAllowanceToAnotherCaller() (gas: 188865)\n[PASS] test_TransferToTokenContractIsAccountedForWithoutBurning() (gas: 92304)\n[PASS] test_UnlimitedApprovalCannotTransferToZero() (gas: 122236)\n[PASS] test_ZeroApprovalToZeroSpenderStillReverts() (gas: 48040)\n[PASS] test_ZeroTransferFromToZeroStillReverts() (gas: 79083)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 144.84ms (1.27s CPU time)\n\nRan 37 tests for test/ConditionalsIMD.t.sol:ConditionalsIMDTest\n[PASS] testFuzz_RevertWhenSpendingMoreThanAllowance(uint256,uint256) (runs: 1024, μ: 123008, ~: 123594)\nLogs:\n  Bound result 10000000000000000000\n  Bound result 100000000000000000000\n\n[PASS] testFuzz_RevertWhenTransferExceedsFundedBalance(uint256,uint256) (runs: 1024, μ: 126967, ~: 127224)\nLogs:\n  Bound result 514433\n  Bound result 337236611718573195746\n\n[PASS] testFuzz_TransferConservesSupply(address,uint256) (runs: 1024, μ: 92936, ~: 93254)\nLogs:\n  Bound result 6\n\n[PASS] testFuzz_TransferFromAccountsForBalanceAndAllowance(uint256,uint256) (runs: 1024, μ: 162747, ~: 164846)\nLogs:\n  Bound result 10678918235899042\n  Bound result 4099299274060494\n\n[PASS] test_ApprovalCanBeReplacedAndRevoked() (gas: 170085)\n[PASS] test_ApprovalsAreIsolatedByOwnerAndSpender() (gas: 157156)\n[PASS] test_ApproveEmitsEventWithoutMovingTokens() (gas: 88777)\n[PASS] test_ConstructorEmitsExactlyOneMint() (gas: 9740)\n[PASS] test_Create2DeploysWithNoConstructorArguments() (gas: 246425)\n[PASS] test_DeployerCannotSpendAnotherHoldersTokensWithoutApproval() (gas: 95061)\n[PASS] test_EmptyHolderMayApproveFutureTokens() (gas: 184837)\n[PASS] test_FactoryReceivesSupplyInsteadOfItsCaller() (gas: 268338)\n[PASS] test_InfiniteAllowanceIsNotDecremented() (gas: 182627)\n[PASS] test_LaunchDistributionClaimsAndPoolTransfersArriveWhole() (gas: 610449)\n[PASS] test_MetadataAndEntireSupplyBelongToDeployer() (gas: 107694)\n[PASS] test_NoPostDeploymentMintBurnOrAdminEntrypoints() (gas: 846122)\n[PASS] test_RejectsNativeCurrencyAndUnknownCalls() (gas: 64667)\n[PASS] test_RevertWhenApprovingZeroSpender() (gas: 48131)\n[PASS] test_RevertWhenHolderUsesTransferFromWithoutSelfApproval() (gas: 42661)\n[PASS] test_RevertWhenSelfTransferExceedsBalance() (gas: 40275)\n[PASS] test_RevertWhenTransferExceedsBalance() (gas: 67815)\n[PASS] test_RevertWhenTransferFromExceedsBalanceAndRollsBackAllowance() (gas: 178480)\n[PASS] test_RevertWhenTransferFromHasInsufficientAllowance() (gas: 115745)\n[PASS] test_RevertWhenTransferFromToZeroAndRollsBackAllowance() (gas: 114199)\n[PASS] test_RevertWhenTransferFromZeroSender() (gas: 35363)\n[PASS] test_RevertWhenTransferToZeroEvenForZeroAmount() (gas: 82395)\n[PASS] test_RevertWhenTransferUsesMaximumAmount() (gas: 55074)\n[PASS] test_RevertWhenWrongSpenderUsesApproval() (gas: 105160)\n[PASS] test_SelfTransferFromConsumesAllowanceWithoutChangingBalance() (gas: 105311)\n[PASS] test_SelfTransferPreservesBalance() (gas: 53991)\n[PASS] test_TransferDeliversExactAmountAndEmitsEvent() (gas: 93475)\n[PASS] test_TransferEntireBalance() (gas: 151369)\n[PASS] test_TransferFromEmitsEventAndConsumesFiniteAllowance() (gas: 279693)\n[PASS] test_TransferOneSmallestUnit() (gas: 78578)\n[PASS] test_TransferToContractNeedsNoCallback() (gas: 170256)\n[PASS] test_ZeroTransferFromEmptyHolderEmitsEvent() (gas: 73378)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 81424)\nSuite result: ok. 37 passed; 0 failed; 0 skipped; finished in 145.11ms (559.30ms CPU time)\n\nRan 2 tests for test/ConditionalsIMD.invariant.t.sol:ConditionalsIMDInvariantTest\n[PASS] invariant_SupplyBalancesAndAllowancesMatchIndependentLedger() (runs: 256, calls: 32768, reverts: 0)\n\n╭--------------+----------------------------+-------+---------+----------╮\n| Contract     | Selector                   | Calls | Reverts | Discards |\n+========================================================================+\n| TokenHandler | approve                    | 3725  | 0       | 0        |\n|--------------+----------------------------+-------+---------+----------|\n| TokenHandler | rejectedApprovalToZero     | 3664  | 0       | 0        |\n|--------------+----------------------------+-------+---------+----------|\n| TokenHandler | rejectedSpend              | 3649  | 0       | 0        |\n|--------------+----------------------------+-------+---------+----------|\n| TokenHandler | rejectedTransfer           | 3569  | 0       | 0        |\n|--------------+----------------------------+-------+---------+----------|\n| TokenHandler | rejectedTransferFromToZero | 3674  | 0       | 0        |\n|--------------+----------------------------+-------+---------+----------|\n| TokenHandler | rejectedTransferToZero     | 3619  | 0       | 0        |\n|--------------+----------------------------+-------+---------+----------|\n| TokenHandler | revoke                     | 3747  | 0       | 0        |\n|--------------+----------------------------+-------+---------+----------|\n| TokenHandler | transfer                   | 3590  | 0       | 0        |\n|--------------+----------------------------+-------+---------+----------|\n| TokenHandler | transferFrom               | 3531  | 0       | 0        |\n╰--------------+----------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039468584007913129639935\n  Bound result 0\n  Bound result 0\n  Bound result 24576\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 832284236607124405251302840\n  Bound result 60000000000000000000\n  Bound result 0\n  Bound result 5051\n  Bound result 0\n  Bound result 0\n  Bound result 999999999999999999999999998\n  Bound result 1\n  Bound result 2\n  Bound result 1497\n  Bound result 4963\n  Bound result 1\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 2383681419032887913787113968097958659403943789682168062303931920801956\n  Bound result 0\n  Bound result 0\n  Bound result 649\n  Bound result 0\n  Bound result 42312829538254\n  Bound result 232\n  Bound result 0\n  Bound result 35653771089431591412015888877\n  Bound result 0\n  Bound result 0\n  Bound result 572\n  Bound result 1\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639933\n  Bound result 1\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129647859\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 885861309358821847676364\n  Bound result 0\n  Bound result 3309\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 877\n  Bound result 9\n  Bound result 1194712121669590544725626764073669957001\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 918\n  Bound result 0\n  Bound result 0\n  Bound result 50000000000000000000\n  Bound result 201454906224774483964688130990555368102685326796\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 10491\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 60000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 7896\n  Bound result 0\n  Bound result 0\n\n[PASS] test_HandlerSequenceSpendsRevokesAndRecoversAfterFailures() (gas: 12016421)\nLogs:\n  Bound result 500000000000000000000000000\n  Bound result 500000000000000000000000000\n  Bound result 250000000000000000000000000\n  Bound result 250000000000000000000000000\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639935\n  Bound result 1\n  Bound result 250000000000000000000000000\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639934\n  Bound result 1\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 9.82s (9.82s CPU time)\n\nRan 3 test suites in 9.82s (10.11s CPU time): 58 tests passed, 0 failed, 0 skipped (58 total tests)\n","passed":true},{"durationMs":43,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"ConditionalsIMD.approve(address,uint256)\",\"ConditionalsIMD.transfer(address,uint256)\",\"ConditionalsIMD.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":5,\"DEPENDENCIES.md\":17,\"README.md\":57,\"foundry.toml\":19,\"remappings.txt\":3,\"src/ConditionalsIMD.sol\":18,\"test/ConditionalsIMD.invariant.t.sol\":227,\"test/ConditionalsIMD.properties.t.sol\":358,\"test/ConditionalsIMD.t.sol\":475,\"test/README.md\":41},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"3a5668f5b73e6abffefbf0bad06c648c1ad530a1e7d8b63b013e2a6cf792cdf2","verifiedTreeHash":"19b79346bd5870bcd10c54593ce3147dff47c180","verifierVersion":"0.1.0+4d02833d"},{"checks":[{"durationMs":1238,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.13s\nCompiler run successful!\n","passed":true},{"durationMs":2426,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 37 tests for test/ConditionalsIMD.t.sol:ConditionalsIMDTest\n[PASS] testFuzz_RevertWhenSpendingMoreThanAllowance(uint256,uint256) (runs: 1024, μ: 122990, ~: 123582)\nLogs:\n  Bound result 79639\n  Bound result 10773724705309989522508348\n\n[PASS] testFuzz_RevertWhenTransferExceedsFundedBalance(uint256,uint256) (runs: 1024, μ: 126956, ~: 127188)\nLogs:\n  Bound result 5\n  Bound result 20000000000000000000\n\n[PASS] testFuzz_TransferConservesSupply(address,uint256) (runs: 1024, μ: 92919, ~: 93254)\nLogs:\n  Bound result 18811\n\n[PASS] testFuzz_TransferFromAccountsForBalanceAndAllowance(uint256,uint256) (runs: 1024, μ: 162636, ~: 164846)\nLogs:\n  Bound result 514433\n  Bound result 138392\n\n[PASS] test_ApprovalCanBeReplacedAndRevoked() (gas: 170085)\n[PASS] test_ApprovalsAreIsolatedByOwnerAndSpender() (gas: 157156)\n[PASS] test_ApproveEmitsEventWithoutMovingTokens() (gas: 88777)\n[PASS] test_ConstructorEmitsExactlyOneMint() (gas: 9740)\n[PASS] test_Create2DeploysWithNoConstructorArguments() (gas: 246425)\n[PASS] test_DeployerCannotSpendAnotherHoldersTokensWithoutApproval() (gas: 95061)\n[PASS] test_EmptyHolderMayApproveFutureTokens() (gas: 184837)\n[PASS] test_FactoryReceivesSupplyInsteadOfItsCaller() (gas: 268338)\n[PASS] test_InfiniteAllowanceIsNotDecremented() (gas: 182627)\n[PASS] test_LaunchDistributionClaimsAndPoolTransfersArriveWhole() (gas: 610449)\n[PASS] test_MetadataAndEntireSupplyBelongToDeployer() (gas: 107694)\n[PASS] test_NoPostDeploymentMintBurnOrAdminEntrypoints() (gas: 846122)\n[PASS] test_RejectsNativeCurrencyAndUnknownCalls() (gas: 64667)\n[PASS] test_RevertWhenApprovingZeroSpender() (gas: 48131)\n[PASS] test_RevertWhenHolderUsesTransferFromWithoutSelfApproval() (gas: 42661)\n[PASS] test_RevertWhenSelfTransferExceedsBalance() (gas: 40275)\n[PASS] test_RevertWhenTransferExceedsBalance() (gas: 67815)\n[PASS] test_RevertWhenTransferFromExceedsBalanceAndRollsBackAllowance() (gas: 178480)\n[PASS] test_RevertWhenTransferFromHasInsufficientAllowance() (gas: 115745)\n[PASS] test_RevertWhenTransferFromToZeroAndRollsBackAllowance() (gas: 114199)\n[PASS] test_RevertWhenTransferFromZeroSender() (gas: 35363)\n[PASS] test_RevertWhenTransferToZeroEvenForZeroAmount() (gas: 82395)\n[PASS] test_RevertWhenTransferUsesMaximumAmount() (gas: 55074)\n[PASS] test_RevertWhenWrongSpenderUsesApproval() (gas: 105160)\n[PASS] test_SelfTransferFromConsumesAllowanceWithoutChangingBalance() (gas: 105311)\n[PASS] test_SelfTransferPreservesBalance() (gas: 53991)\n[PASS] test_TransferDeliversExactAmountAndEmitsEvent() (gas: 93475)\n[PASS] test_TransferEntireBalance() (gas: 151369)\n[PASS] test_TransferFromEmitsEventAndConsumesFiniteAllowance() (gas: 279693)\n[PASS] test_TransferOneSmallestUnit() (gas: 78578)\n[PASS] test_TransferToContractNeedsNoCallback() (gas: 170256)\n[PASS] test_ZeroTransferFromEmptyHolderEmitsEvent() (gas: 73378)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 81424)\nSuite result: ok. 37 passed; 0 failed; 0 skipped; finished in 39.22ms (129.69ms CPU time)\n\nRan 1 test for test/ConditionalsIMD.invariant.t.sol:ConditionalsIMDInvariantTest\n[PASS] invariant_SupplyBalancesAndAllowancesMatchIndependentLedger() (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+---------------+-------+---------+----------╮\n| Contract     | Selector      | Calls | Reverts | Discards |\n+===========================================================+\n| TokenHandler | approve       | 2085  | 0       | 0        |\n|--------------+---------------+-------+---------+----------|\n| TokenHandler | rejectedSpend | 2026  | 0       | 0        |\n|--------------+---------------+-------+---------+----------|\n| TokenHandler | transfer      | 2046  | 0       | 0        |\n|--------------+---------------+-------+---------+----------|\n| TokenHandler | transferFrom  | 2035  | 0       | 0        |\n╰--------------+---------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1000000000000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 5327\n  Bound result 7\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 429434129810152433323755322\n  Bound result 500000000000000000000\n  Bound result 0\n  Bound result 3\n  Bound result 500000000000000000000\n  Bound result 464463211944726588433017566\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 5825\n  Bound result 11000000000000000000\n  Bound result 500000000000000000000\n  Bound result 5967\n  Bound result 1252\n  Bound result 1085\n  Bound result 78609502502965882750685086\n  Bound result 4\n  Bound result 766452793750\n  Bound result 0\n  Bound result 2630\n  Bound result 1673\n  Bound result 1280\n  Bound result 1000000000000000000000000000\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.32s (2.31s CPU time)\n\nRan 2 test suites in 2.32s (2.36s CPU time): 38 tests passed, 0 failed, 0 skipped (38 total tests)\n","passed":true},{"durationMs":45,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"ConditionalsIMD.approve(address,uint256)\",\"ConditionalsIMD.transfer(address,uint256)\",\"ConditionalsIMD.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":5,\"DEPENDENCIES.md\":17,\"README.md\":57,\"foundry.toml\":19,\"launch.json\":24,\"remappings.txt\":3,\"src/ConditionalsIMD.sol\":18,\"test/ConditionalsIMD.invariant.t.sol\":110,\"test/ConditionalsIMD.t.sol\":475},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"4732bb7d99313d7845aa7078082d5fc7ea2c0052bb4dec73f56b4cb68d36c64c","verifiedTreeHash":"99d75e71f80263c4e3e48f81fe9c528068772db1","verifierVersion":"0.1.0+4d02833d"},{"checks":[{"durationMs":1248,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.15s\nCompiler run successful!\n","passed":true},{"durationMs":2555,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 37 tests for test/ConditionalsIMD.t.sol:ConditionalsIMDTest\n[PASS] testFuzz_RevertWhenSpendingMoreThanAllowance(uint256,uint256) (runs: 1024, μ: 122990, ~: 123582)\nLogs:\n  Bound result 79639\n  Bound result 10773724705309989522508348\n\n[PASS] testFuzz_RevertWhenTransferExceedsFundedBalance(uint256,uint256) (runs: 1024, μ: 126956, ~: 127188)\nLogs:\n  Bound result 20000000000000000000\n  Bound result 19236\n\n[PASS] testFuzz_TransferConservesSupply(address,uint256) (runs: 1024, μ: 92919, ~: 93254)\nLogs:\n  Bound result 3455577960681544909290088\n\n[PASS] testFuzz_TransferFromAccountsForBalanceAndAllowance(uint256,uint256) (runs: 1024, μ: 162636, ~: 164846)\nLogs:\n  Bound result 20000000000000000000\n  Bound result 19236\n\n[PASS] test_ApprovalCanBeReplacedAndRevoked() (gas: 170085)\n[PASS] test_ApprovalsAreIsolatedByOwnerAndSpender() (gas: 157156)\n[PASS] test_ApproveEmitsEventWithoutMovingTokens() (gas: 88777)\n[PASS] test_ConstructorEmitsExactlyOneMint() (gas: 9740)\n[PASS] test_Create2DeploysWithNoConstructorArguments() (gas: 246425)\n[PASS] test_DeployerCannotSpendAnotherHoldersTokensWithoutApproval() (gas: 95061)\n[PASS] test_EmptyHolderMayApproveFutureTokens() (gas: 184837)\n[PASS] test_FactoryReceivesSupplyInsteadOfItsCaller() (gas: 268338)\n[PASS] test_InfiniteAllowanceIsNotDecremented() (gas: 182627)\n[PASS] test_LaunchDistributionClaimsAndPoolTransfersArriveWhole() (gas: 610449)\n[PASS] test_MetadataAndEntireSupplyBelongToDeployer() (gas: 107694)\n[PASS] test_NoPostDeploymentMintBurnOrAdminEntrypoints() (gas: 846122)\n[PASS] test_RejectsNativeCurrencyAndUnknownCalls() (gas: 64667)\n[PASS] test_RevertWhenApprovingZeroSpender() (gas: 48131)\n[PASS] test_RevertWhenHolderUsesTransferFromWithoutSelfApproval() (gas: 42661)\n[PASS] test_RevertWhenSelfTransferExceedsBalance() (gas: 40275)\n[PASS] test_RevertWhenTransferExceedsBalance() (gas: 67815)\n[PASS] test_RevertWhenTransferFromExceedsBalanceAndRollsBackAllowance() (gas: 178480)\n[PASS] test_RevertWhenTransferFromHasInsufficientAllowance() (gas: 115745)\n[PASS] test_RevertWhenTransferFromToZeroAndRollsBackAllowance() (gas: 114199)\n[PASS] test_RevertWhenTransferFromZeroSender() (gas: 35363)\n[PASS] test_RevertWhenTransferToZeroEvenForZeroAmount() (gas: 82395)\n[PASS] test_RevertWhenTransferUsesMaximumAmount() (gas: 55074)\n[PASS] test_RevertWhenWrongSpenderUsesApproval() (gas: 105160)\n[PASS] test_SelfTransferFromConsumesAllowanceWithoutChangingBalance() (gas: 105311)\n[PASS] test_SelfTransferPreservesBalance() (gas: 53991)\n[PASS] test_TransferDeliversExactAmountAndEmitsEvent() (gas: 93475)\n[PASS] test_TransferEntireBalance() (gas: 151369)\n[PASS] test_TransferFromEmitsEventAndConsumesFiniteAllowance() (gas: 279693)\n[PASS] test_TransferOneSmallestUnit() (gas: 78578)\n[PASS] test_TransferToContractNeedsNoCallback() (gas: 170256)\n[PASS] test_ZeroTransferFromEmptyHolderEmitsEvent() (gas: 73378)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 81424)\nSuite result: ok. 37 passed; 0 failed; 0 skipped; finished in 31.67ms (121.50ms CPU time)\n\nRan 1 test for test/ConditionalsIMD.invariant.t.sol:ConditionalsIMDInvariantTest\n[PASS] invariant_SupplyBalancesAndAllowancesMatchIndependentLedger() (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+---------------+-------+---------+----------╮\n| Contract     | Selector      | Calls | Reverts | Discards |\n+===========================================================+\n| TokenHandler | approve       | 2085  | 0       | 0        |\n|--------------+---------------+-------+---------+----------|\n| TokenHandler | rejectedSpend | 2026  | 0       | 0        |\n|--------------+---------------+-------+---------+----------|\n| TokenHandler | transfer      | 2046  | 0       | 0        |\n|--------------+---------------+-------+---------+----------|\n| TokenHandler | transferFrom  | 2035  | 0       | 0        |\n╰--------------+---------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1000000000000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 5328\n  Bound result 0\n  Bound result 0\n  Bound result 1000000000000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 500000000000000000000\n  Bound result 464463211944726588433017566\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 5711\n  Bound result 0\n  Bound result 500000000000000000000\n  Bound result 201\n  Bound result 1140\n  Bound result 162\n  Bound result 448013215717255628085100945\n  Bound result 4\n  Bound result 766452793750\n  Bound result 0\n  Bound result 2595\n  Bound result 1696\n  Bound result 2896\n  Bound result 1000000000000000000000000000\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.46s (2.45s CPU time)\n\nRan 2 test suites in 2.46s (2.49s CPU time): 38 tests passed, 0 failed, 0 skipped (38 total tests)\n","passed":true},{"durationMs":63,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"ConditionalsIMD.approve(address,uint256)\",\"ConditionalsIMD.transfer(address,uint256)\",\"ConditionalsIMD.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":5,\"DEPENDENCIES.md\":17,\"README.md\":57,\"foundry.toml\":19,\"remappings.txt\":3,\"src/ConditionalsIMD.sol\":18,\"test/ConditionalsIMD.invariant.t.sol\":110,\"test/ConditionalsIMD.t.sol\":475},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":444,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":237,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/ConditionalsIMD.sol:10: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"f50dbf5bc735669f67941ba457d1f9c85d71f41e62ffafca3aae939e503441a9","verifiedTreeHash":"429df162a08f61961065805ef81aa3ab44ce7a66","verifierVersion":"0.1.0+4d02833d"}]}