{"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":"0c8579ff-9191-4d2d-a8a9-4c246c5ff45a","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"edc7fc8711de45937528c9c0b13cfa0771f2b36dd05f39ed2b0a2278c75cb8c0","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","subagents":3,"tools":[]},"key":"audit_economics","kind":"code","role":"review","skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"c663041cb44996ae60af9c8be5ebf9b8493ec6f19b6fe93f3fb0b5e3916ac374","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","subagents":3,"tools":[]},"key":"audit_flow","kind":"code","role":"review","skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"2d7449db844a4b41b2c26121e7beca161443d45d199506a5cb2b88027f3f2837","dependsOn":["build_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"b89279670f5a00f5d26286edee00c97dd158b997031350a01cafe6e0329ad227","skillId":"audit-judge","subagents":4,"tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"b89279670f5a00f5d26286edee00c97dd158b997031350a01cafe6e0329ad227","skillId":"audit-judge","state":"accepted"},{"acceptedSubmissionHash":"1f88488712fce0e92c7a0c7a071dc7f03edc33177b27f742d48f9bb3361fcfd9","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","subagents":3,"tools":[]},"key":"audit_math","kind":"code","role":"review","skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"51594e9a16889ce4e00ff97b52d12812e76c4eca8e335b806d36dc93061e7a99","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","subagents":3,"tools":[]},"key":"audit_permissions","kind":"code","role":"review","skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"012b7c07b71d1b56038866a667b506fa15c319676089d1e483dbda237b731125","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"15b04fc8f60521936b9e2b37c09a804685ec689fc98cd5b04510d986d3106a15","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"15b04fc8f60521936b9e2b37c09a804685ec689fc98cd5b04510d986d3106a15","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"717bb6b28dd78bf31c3ffc69940b00aa90d17af166b3a58f315157f5a8a8be8f","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"5b454dc36dd95a96da40a769d04de779cf1fac3dce6ee231ce1005c9bd095e39","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"606842ccca0e7c5d3017a54684625438eab9b351eb51dcf0cf88c43d1ea41464","skillId":"write-foundry-tests","subagents":4,"tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"606842ccca0e7c5d3017a54684625438eab9b351eb51dcf0cf88c43d1ea41464","skillId":"write-foundry-tests","state":"accepted"}],"objective":"A custom token: ROUTR (ROUTR).\nToken name: ROUTR\nToken symbol: ROUTR\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"67bcb9f27c661434bfb0022acce75a140d54ade1cbb559066e75fd0207add3d1","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"0c8579ff-9191-4d2d-a8a9-4c246c5ff45a","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2644-routr"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51027","feedbackHash":"d20fde014bfd92678f9fd42b57285f84bdc48a6548e5a78e2c8e26c06ff1937b","nodeKey":"audit_economics","submissionHash":"edc7fc8711de45937528c9c0b13cfa0771f2b36dd05f39ed2b0a2278c75cb8c0","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51884","feedbackHash":"c6c9c5da5fed07b39a4ef1c97150fe899934f5734a0ff57254456fd01fea2352","nodeKey":"audit_flow","submissionHash":"c663041cb44996ae60af9c8be5ebf9b8493ec6f19b6fe93f3fb0b5e3916ac374","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51168","feedbackHash":"851d1a3a511fffa955b66cd93a14dd58c318d45bf7ed9edbe22d3b26108bf40e","nodeKey":"audit_judge","submissionHash":"2d7449db844a4b41b2c26121e7beca161443d45d199506a5cb2b88027f3f2837","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52481","feedbackHash":"35b1dfc39b11136d704c6262fac954d4edccc566278b68880e2ffe462a10c6c7","nodeKey":"audit_math","submissionHash":"1f88488712fce0e92c7a0c7a071dc7f03edc33177b27f742d48f9bb3361fcfd9","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51043","feedbackHash":"78213b0737c8d4eaae507d5822a0840569b8e17e9fab438eda9cce15d5b7f510","nodeKey":"audit_permissions","submissionHash":"51594e9a16889ce4e00ff97b52d12812e76c4eca8e335b806d36dc93061e7a99","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"53941","feedbackHash":"98a282be2a709b182db5c4741f9c83e0145c60feda6ed918457ebf099599e325","nodeKey":"build_contract_project","submissionHash":"012b7c07b71d1b56038866a667b506fa15c319676089d1e483dbda237b731125","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52552","feedbackHash":"68e033366976ee92b167e40f079366016f06f5095f8206617662cb45ca7d89aa","nodeKey":"manifest","submissionHash":"717bb6b28dd78bf31c3ffc69940b00aa90d17af166b3a58f315157f5a8a8be8f","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51444","feedbackHash":"d0865325ad8da83107b63b25f1ca60bb68f159f85e466a36376c2a69d2ae335a","nodeKey":"write_foundry_tests","submissionHash":"5b454dc36dd95a96da40a769d04de779cf1fac3dce6ee231ce1005c9bd095e39","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"91ee6b07a6b2b2548de0b1e95aab7b9af188e54239f742da61d4d6fb9a2e17d9","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"b9f2760d634136e40e2f2b999b172433d5a3378f49216774e6fc0d3c3bd0659d","device":"fea1c984a93ab45d","findings":[],"hash":"012b7c07b71d1b56038866a667b506fa15c319676089d1e483dbda237b731125","nodeId":"a9ce905d-189f-4171-aaa7-a5bb2a797248","outcome":"completed","summary":"Implemented ROUTR with 18 decimals and exactly 1,000,000,000 tokens minted once to the deployer. Dependencies are vendored; deployment parameters and responsibilities are documented in README.md.\n\nVerified successfully:\n\n- `forge build`\n- `forge test`: 32 passing tests, including fuzz and invariant checks with the supplied seed\n- `forge fmt --check`","treeHash":"1b16e56f359006b9caf27a2abb5258d029ea43a2","usage":{"cachedInputTokens":374016,"inputTokens":44489,"model":"gpt-6-astra","outputTokens":14552,"runtime":"codex","turns":4,"wallClockMs":403738}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"a4e285247c6f8aed","findings":[],"hash":"1f88488712fce0e92c7a0c7a071dc7f03edc33177b27f742d48f9bb3361fcfd9","nodeId":"a121d790-9161-42d4-8773-41d16ea16796","outcome":"completed","summary":"The review is complete. `.imd-findings.json` holds an empty findings list and seven coverage rows, all `holds`.\n\n**What I reviewed.** The token is `src/ROUTR.sol`, a 17-line fixed-supply ERC-20 that inherits OpenZeppelin v5.0.2 with no overrides. I applied the Senior Auditor's Mindset and the Math Precision, Boundary and Numerical Gap guides to every arithmetic and boundary path reachable from the three entry points.\n\n**Why there are no findings in the math area:**\n- The only arithmetic the contract adds is the supply constant. It is a compile-time checked expression equal to exactly 10^27 and is minted once to the deployer.\n- The inherited transfer path checks balance before its unchecked subtraction, and the receiver-side add cannot wrap because the sum of balances is fixed at 10^27.\n- The allowance path checks the allowance before its unchecked decrement and skips the decrement only at exactly max uint. An allowance of max minus one is decremented correctly.\n- There is no division, scaling, fee, rounding or downcast anywhere, so the Numerical Gap seams have nothing to attach to.\n- The launch's basis-point splits divide 10^27 exactly, so the swarm, pool and remainder shares produce no dust and arrive whole.\n\n**Evidence.** The project suite passed with the documented fuzz seed. I also ran a scratch test of 1 wei, max uint, exact-allowance, max-minus-one allowance, full-balance self-transfer and supply concentration cases, all passing. I confirmed the vendored OpenZeppelin files match both the lock file and the upstream v5.0.2 sources byte for byte, so the arithmetic under review is unmodified upstream code. The scratch test and downloaded files were removed afterwards.\n\n**Leads dismissed.** Aderyn's large-numeric-literal line is a style note only. The value it points at is verified correct.\n\n**Not reached.** Nothing within the assigned area. Permissions, economics and control flow belong to the other specialists, though I noted in passing that the token has no owner, admin or mint path at all.","treeHash":null,"usage":{"cachedInputTokens":486550,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":9229,"runtime":"claude","turns":23,"wallClockMs":152975}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"6208734cdf5317a1","findings":[],"hash":"2d7449db844a4b41b2c26121e7beca161443d45d199506a5cb2b88027f3f2837","nodeId":"6566a6c4-22f4-4d18-bfab-6cfad67d2b29","outcome":"completed","summary":"The review is complete. The findings file is written and the working tree has no changes beyond it.\n\n**Outcome: no defects found.** The file `.imd-findings.json` holds an empty findings list and six coverage rows, all `holds`.\n\n**What was checked**\n\n- **Specialist input.** All four specialists and the test writer reported nothing, so there was nothing to reproduce, merge or drop.\n- **The token itself.** ROUTR is OpenZeppelin v5.0.2 ERC20 with one constructor mint of 10^27 base units to msg.sender and no overrides. Each of the three entry points was traced through the inherited approve, transfer and transferFrom paths, including zero-address, insufficient-balance and insufficient-allowance reverts.\n- **Dependency integrity.** The five vendored OpenZeppelin files hash-match both the lockfile and the upstream v5.0.2 files fetched from GitHub.\n- **Launch floor.** A scratch replica of the protected test's checks passed: CREATE2 deployment through a factory contract leaves the whole supply with the factory, decimals are 18, the reachable runtime has no DELEGATECALL, CALLCODE or SELFDESTRUCT, creation and runtime sizes are far under the limits, the 10% swarm flow arrives whole, and 22 admin-style selectors all revert without changing balances or supply. The scratch directory was removed afterwards.\n- **Manifest.** launch.json uses only schema keys, empty constructorArgs match the no-arg constructor, totalSupply equals what the constructor mints, and the paired currency on chain 1 has code and reports the symbol IMD.\n- **Static analysis lead.** Aderyn's large-literal note on line 12 was evaluated and the literal equals the intended supply, so it is not a defect.\n- **Repo suite.** All 44 existing unit, fuzz and invariant tests pass with the README's seed.","treeHash":null,"usage":{"cachedInputTokens":306882,"inputTokens":194,"model":"claude-fable-5-1","outputTokens":9286,"runtime":"claude","turns":20,"wallClockMs":135438}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"2565f234b0a569e9","findings":[],"hash":"51594e9a16889ce4e00ff97b52d12812e76c4eca8e335b806d36dc93061e7a99","nodeId":"72293cd2-9aff-48fd-a339-9a8ee44fc648","outcome":"completed","summary":"The review is complete. The findings file holds an empty findings list and nine coverage rows, and the working tree is otherwise untouched.\n\n**Result: no defects in the permissions area.** ROUTR is a thin wrapper over an unmodified OpenZeppelin v5.0.2 ERC20 with a single constructor mint, and every failure mode in the Access Control, Trust Gap and Asymmetry guides was checked against it without producing a reproducible issue.\n\nWhat I verified, with evidence:\n\n- **Entry-point inventory** from the compiled ABI shows exactly three state-changing functions: approve, transfer and transferFrom. There is no owner, minter, pauser, blacklist, initializer, upgrade path, receive or fallback. Selector sweeps from both the deployer and a stranger all revert.\n- **Constructor** mints exactly 10^27 base units once to msg.sender, which is the factory, and nothing to tx.origin or the factory's caller. The aderyn large-literal lead resolves to the exact intended value.\n- **No privileged pull right.** The deployer calling transferFrom on a holder with zero allowance reverts with the allowance error even for one wei, so no actor can move or freeze a holder's balance.\n- **Asymmetry pass.** Both transfer paths share the same internal checks and event. The only difference is allowance consumption on transferFrom, and no admin, batch or force variants exist to diverge from the user path.\n- **Trust Gap pass.** With no privileged actor, setter, fee recipient or callback, no seam exists where authorization and economics interact.\n- **Runtime bytecode scan** finds no CALL, DELEGATECALL, CALLCODE, STATICCALL, CREATE or SELFDESTRUCT among reachable opcodes. Context uses plain msg.sender with no meta-transaction forwarder.\n- **Dependency integrity.** All six vendored OpenZeppelin files hash identically to the lockfile and to the upstream v5.0.2 tag fetched from GitHub, so no hidden hook or exemption was introduced in the library.\n- **Project test suite** passes: 32 tests including 1,024-run fuzzing and a 128 by 64 stateful invariant run. My five additional scratch permission tests also passed and were removed afterward.\n\nTwo notes that are not defects: the standard ERC-20 approve ordering race is inherent to the interface and is documented in the README, and the Approval event is not emitted on transferFrom, which is upstream v5 behaviour and also documented. Nothing in my area was left unreached.","treeHash":null,"usage":{"cachedInputTokens":544553,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":13226,"runtime":"claude","turns":31,"wallClockMs":182221}},{"artifacts":[],"attempt":1,"bundleHash":"6734725bd47d393c5265c85d29dc2c8b579bc683b15295c37c0e76e7a6596fad","device":"b41d844dba698308","findings":[],"hash":"5b454dc36dd95a96da40a769d04de779cf1fac3dce6ee231ce1005c9bd095e39","nodeId":"b2794712-7323-4f01-a236-a7a5c819ac80","outcome":"completed","summary":"Added 12 boundary, failure-path, and fuzz tests; expanded stateful invariants to 10 randomized actions.\n\nVerified offline with the required seed: **44 tests passed**, including **32,768 invariant calls**. `forge build` also passed.\n\nAll changes are under `test/`. No implementation defects were reproduced.","treeHash":"0455ac995c4606a3cc854d84b0ab23aa8a4ad06e","usage":{"cachedInputTokens":762752,"inputTokens":61629,"model":"gpt-6-astra","outputTokens":14054,"runtime":"codex","turns":6,"wallClockMs":449559}},{"artifacts":[],"attempt":1,"bundleHash":"390beaf81588eeb8856b2c7922f6b9c03102be07f1a4abf51b2fc28d3dbc16f3","device":"809ae05b6282abad","findings":[],"hash":"717bb6b28dd78bf31c3ffc69940b00aa90d17af166b3a58f315157f5a8a8be8f","nodeId":"3a3cfddb-bf2d-4c6c-9153-16712403899e","outcome":"completed","summary":"Nothing further is needed. The manifest is written and validated, the tree builds and tests pass, and only `launch.json` exists as a change.\n\n**Delivered:** `launch.json` at the repository root with kind `custom_token`.\n\n- **Token:** contract `ROUTR`, name `ROUTR`, symbol `ROUTR`, 18 decimals, no constructor arguments, `totalSupply` `\"1000000000000000000000000000\"`. The constructor takes no parameters and mints that entire supply once to `msg.sender`, the factory.\n- **Contracts:** `[]`. The accepted tree contains only `src/ROUTR.sol` besides tests, so there are no application contracts to name.\n- **Pool:** pairs with IMD at `0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7`, fee `12500`, tick spacing `60`, initial price `79228162514264337593543950336` (2^96, provenance only).\n- **Economics:** copied verbatim from the brief.\n- **Notes:** 602 characters describing only the token's actual behavior.\n\n**Verification:** `forge build` compiled 28 files with Solc 0.8.26. `forge test` with the pinned fuzz seed passed all 32 tests, including the 1,024-run fuzz suite and the 128-run invariant suite. A scratch checker confirmed the manifest's key set, types, lowercase address, name shape, constructor-argument count against the compiled ABI, empty link references, economics equality, and the 2^256 price bound. `git status` shows `launch.json` as the only change; no other file was touched.","treeHash":"562e049d25ae371f8897b3f4d109e3ffc2d2479d","usage":{"cachedInputTokens":134528,"inputTokens":36581,"model":"claude-fable-5-1","outputTokens":7574,"runtime":"claude","turns":16,"wallClockMs":45136}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"4aa8623bfb8d8e5e","findings":[],"hash":"c663041cb44996ae60af9c8be5ebf9b8493ec6f19b6fe93f3fb0b5e3916ac374","nodeId":"8149735c-180c-4f9d-a7df-ce8f7c8f5ca9","outcome":"completed","summary":"The review is complete and the findings file is written. The repository tree is unchanged apart from the gitignored scratch test and the findings file.\n\n**Result: no defects found in the control-flow area.** ROUTR is a nine-line contract that inherits OpenZeppelin's ERC-20 unchanged and mints the fixed supply once to msg.sender in its constructor. Across the three guides nothing reached a concrete failing input.\n\nWhat I checked:\n\n- **Execution Trace.** Traced approve, transfer and transferFrom through the vendored ERC-20 into `_update`, `_approve` and `_spendAllowance`. Every failure path reverts the whole call, including allowance rollback when the balance or receiver check fails. The only sentinel is the documented infinite allowance. There are no external calls, callbacks, fees or partial updates.\n- **Periphery.** The five vendored OpenZeppelin files are byte-identical to upstream v5.0.2, which I fetched from GitHub into a separate directory and hashed. Context returns plain msg.sender.\n- **First Principles.** The constructor's one assumption, that msg.sender is the intended holder, holds under the factory's CREATE2 deployment. I confirmed this with a probe contract. The supply constant equals 10^27 and decimals default to 18, matching the brief.\n- **Floor checks reproduced locally.** A scratch test mirrored the protected floor where it needs no Uniswap harness. The reachable runtime contains no DELEGATECALL, CALLCODE, SELFDESTRUCT, CALL or CREATE. Twelve privileged selectors from the deployer all revert and the holder keeps and can move their balance. The compiled ABI has only the three listed non-view functions.\n- **Existing suite.** All 32 project tests pass with the README seed, including the 128 by 64 invariant run against an independent ledger.\n\nThe static-analysis lead about the large numeric literal is a style note. The literal is a compile-time constant with the correct value.\n\nCoverage record: the three entry points plus the constructor, two invariants, the vendored base, the bytecode floor and the aderyn lead are marked as holding. One row is marked unreached: the actual Uniswap v4 seed and swap from the protected test, since that harness is not in this repository. Token-side transfers into and out of a pool-holder contract were verified exact.","treeHash":null,"usage":{"cachedInputTokens":531382,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":10862,"runtime":"claude","turns":22,"wallClockMs":165703}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"61b4050710026370","findings":[],"hash":"edc7fc8711de45937528c9c0b13cfa0771f2b36dd05f39ed2b0a2278c75cb8c0","nodeId":"05bdd43d-c4e0-441d-a12d-2c9452f83423","outcome":"completed","summary":"The findings file is in place and no tracked file changed (git reports a clean tree, with the findings file and scratch directory ignored by the workspace).\n\n**Result: no defects found in the economics area.** The file `.imd-findings.json` holds an empty findings list and eight coverage rows, all `holds`.\n\n**What was reviewed.** ROUTR is a 17-line contract: it inherits the vendored OpenZeppelin ERC20 and mints the full supply to the direct caller in the constructor. It adds no transfer override, fee, burn, owner, pause, mint, or callback. I checked it against the Senior Auditor's Mindset and the Economic Security, Invariant and Flow Gap guides, and verified each claim concretely:\n\n- **Launch flows arrive exact.** A scratch test drove the 10% transfer to the distributor, a pool-manager pull of the 85% seed via `transferFrom`, the 5% remainder, a claim, and a buy and sell against the manager. Every balance matched the amount sent and the supply stayed at 10^27.\n- **Supply cannot grow.** The compiled ABI exposes only the ERC-20 surface plus the supply constant. The internal mint is reachable only from the constructor. The project's 128-run stateful invariant and 32 unit and fuzz tests all pass.\n- **ERC-20 compliance and sentinels.** Zero-address sender, receiver and spender revert with ERC-6093 errors. Insufficient balance or allowance reverts and rolls back. Unlimited allowance is not decremented. Overspending by one wei reverts.\n- **Dependency integrity.** All five vendored OpenZeppelin files hash identical to the lock file and to the upstream v5.0.2 sources I fetched during review, so the library is genuine.\n- **Bytecode.** A reachable-opcode walk, the same one the protected test uses, found no DELEGATECALL, CALLCODE or SELFDESTRUCT in the 1752-byte runtime.\n- **Static-analysis lead.** Aderyn's large-numeric-literal note on line 12 is style only. The expression compiles to exactly 10^27, which the tests assert.\n\n**Not a defect, noted for the judge.** Tokens sent to the token contract itself are unrecoverable, and the standard ERC-20 approve ordering race exists. Both are inherent to plain ERC-20, are documented in the README, and carry no privileged actor or exploit path. No manifest exists yet, which is expected before the manifest step runs. The README's stated constructor arguments and total supply are consistent with what the constructor does.\n\n**Coverage.** All three listed entry points plus five invariant rows are answered as `holds`. Nothing in my area was left unreached. The scratch test directory was removed after running, since it contained no proof for a finding.","treeHash":null,"usage":{"cachedInputTokens":503716,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":10230,"runtime":"claude","turns":22,"wallClockMs":149754}}],"verification":[{"checks":[{"durationMs":1052,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 977.73ms\nCompiler run successful!\n","passed":true},{"durationMs":1748,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 31 tests for test/ROUTR.t.sol:ROUTRTest\n[PASS] testFuzz_approvedTransferSucceeds(uint256,uint256) (runs: 1024, μ: 169072, ~: 169766)\nLogs:\n  Bound result 4595507363184205867143\n  Bound result 292429633528652346144106040\n\n[PASS] testFuzz_selfTransferRequiresSufficientBalance(uint256) (runs: 1024, μ: 53738, ~: 53816)\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 1024, μ: 99602, ~: 99841)\nLogs:\n  Bound result 232993636637752170329632112\n\n[PASS] testFuzz_transferFromRespectsBalanceAndAllowance(uint256,uint256,uint256) (runs: 1024, μ: 200829, ~: 196787)\nLogs:\n  Bound result 187464470174\n\n[PASS] testFuzz_transferRejectsOverspend(uint256) (runs: 1024, μ: 71957, ~: 72298)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039457584009532290303175\n\n[PASS] test_approvalCanExceedCurrentBalance() (gas: 78348)\n[PASS] test_approveEmitsEventAndDoesNotMoveTokens() (gas: 123615)\n[PASS] test_approveOverwritesAndRevocationPreventsSpending() (gas: 181237)\n[PASS] test_approveZeroSpenderReverts() (gas: 40208)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 26306)\n[PASS] test_deployerHasNoPrivilegeOverHolder() (gas: 452986)\n[PASS] test_directEtherAndUnknownCallsRevert() (gas: 67282)\n[PASS] test_factoryReceivesSupplyInsteadOfItsCallerOrOrigin() (gas: 285874)\n[PASS] test_holderUsingTransferFromAlsoNeedsApproval() (gas: 38462)\n[PASS] test_infiniteAllowanceIsNotDecremented() (gas: 144184)\n[PASS] test_insufficientBalanceRollsBackAllowance() (gas: 126152)\n[PASS] test_launchDistributionClaimsAndPoolTransfersArriveWhole() (gas: 1080857)\n[PASS] test_metadataAndInitialSupply() (gas: 109760)\n[PASS] test_noMintBurnOrInitializationEntryPoint() (gas: 689547)\n[PASS] test_selfTransferPreservesBalance() (gas: 56763)\n[PASS] test_transferEntireBalance() (gas: 78437)\n[PASS] test_transferFromEmptyAccountReverts() (gas: 55119)\n[PASS] test_transferFromSelfStillConsumesAllowance() (gas: 107992)\n[PASS] test_transferFromToZeroRollsBackAllowance() (gas: 118882)\n[PASS] test_transferFromUsesAllowanceAndEmitsTransfer() (gas: 251141)\n[PASS] test_transferFromZeroAddressRevertsEvenForZeroAmount() (gas: 37794)\n[PASS] test_transferReturnsTrueAndEmitsExactAmount() (gas: 96284)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 74910)\n[PASS] test_unapprovedSpenderCannotUseAnotherSpendersApproval() (gas: 120593)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 73367)\n[PASS] test_zeroTransferFromWithoutAllowanceEmitsEvent() (gas: 68929)\nSuite result: ok. 31 passed; 0 failed; 0 skipped; finished in 34.16ms (168.52ms CPU time)\n\nRan 1 test for test/ROUTR.invariant.t.sol:ROUTRInvariantTest\n[PASS] invariant_balancesAllowancesAndSupplyMatchModel() (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+--------------+-------+---------+----------╮\n| Contract     | Selector     | Calls | Reverts | Discards |\n+==========================================================+\n| ROUTRHandler | approve      | 2750  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| ROUTRHandler | transfer     | 2691  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| ROUTRHandler | transferFrom | 2751  | 0       | 0        |\n╰--------------+--------------+-------+---------+----------╯\n\nLogs:\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 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 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 0\n  Bound result 0\n  Bound result 637\n  Bound result 376\n  Bound result 0\n  Bound result 260\n  Bound result 0\n  Bound result 0\n  Bound result 213\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 33\n  Bound result 68\n  Bound result 18\n  Bound result 8\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.66s (1.66s CPU time)\n\nRan 2 test suites in 1.66s (1.69s CPU time): 32 tests passed, 0 failed, 0 skipped (32 total tests)\n","passed":true},{"durationMs":35,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"ROUTR.approve(address,uint256)\",\"ROUTR.transfer(address,uint256)\",\"ROUTR.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":5,\"LICENSE\":21,\"README.md\":127,\"dependencies.lock.json\":56,\"foundry.toml\":23,\"src/ROUTR.sol\":17,\"test/ROUTR.invariant.t.sol\":94,\"test/ROUTR.t.sol\":440,\"test/helpers/FactoryHarness.sol\":15},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":435,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":241,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/ROUTR.sol:12: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"012b7c07b71d1b56038866a667b506fa15c319676089d1e483dbda237b731125","verifiedTreeHash":"1b16e56f359006b9caf27a2abb5258d029ea43a2","verifierVersion":"0.1.0+d372f99e"},{"checks":[{"durationMs":1649,"exitCode":0,"name":"build","output":"Compiling 29 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.57s\nCompiler run successful!\n","passed":true},{"durationMs":7219,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 31 tests for test/ROUTR.t.sol:ROUTRTest\n[PASS] testFuzz_approvedTransferSucceeds(uint256,uint256) (runs: 1024, μ: 169118, ~: 169788)\nLogs:\n  Bound result 869845071247247544346275378\n  Bound result 934694\n\n[PASS] testFuzz_selfTransferRequiresSufficientBalance(uint256) (runs: 1024, μ: 53736, ~: 53816)\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 1024, μ: 99671, ~: 99841)\nLogs:\n  Bound result 8\n\n[PASS] testFuzz_transferFromRespectsBalanceAndAllowance(uint256,uint256,uint256) (runs: 1024, μ: 200505, ~: 194340)\nLogs:\n  Bound result 13830\n\n[PASS] testFuzz_transferRejectsOverspend(uint256) (runs: 1024, μ: 71952, ~: 72298)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129663126\n\n[PASS] test_approvalCanExceedCurrentBalance() (gas: 78348)\n[PASS] test_approveEmitsEventAndDoesNotMoveTokens() (gas: 123615)\n[PASS] test_approveOverwritesAndRevocationPreventsSpending() (gas: 181237)\n[PASS] test_approveZeroSpenderReverts() (gas: 40208)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 26306)\n[PASS] test_deployerHasNoPrivilegeOverHolder() (gas: 452986)\n[PASS] test_directEtherAndUnknownCallsRevert() (gas: 67282)\n[PASS] test_factoryReceivesSupplyInsteadOfItsCallerOrOrigin() (gas: 285874)\n[PASS] test_holderUsingTransferFromAlsoNeedsApproval() (gas: 38462)\n[PASS] test_infiniteAllowanceIsNotDecremented() (gas: 144184)\n[PASS] test_insufficientBalanceRollsBackAllowance() (gas: 126152)\n[PASS] test_launchDistributionClaimsAndPoolTransfersArriveWhole() (gas: 1080857)\n[PASS] test_metadataAndInitialSupply() (gas: 109760)\n[PASS] test_noMintBurnOrInitializationEntryPoint() (gas: 689547)\n[PASS] test_selfTransferPreservesBalance() (gas: 56763)\n[PASS] test_transferEntireBalance() (gas: 78437)\n[PASS] test_transferFromEmptyAccountReverts() (gas: 55119)\n[PASS] test_transferFromSelfStillConsumesAllowance() (gas: 107992)\n[PASS] test_transferFromToZeroRollsBackAllowance() (gas: 118882)\n[PASS] test_transferFromUsesAllowanceAndEmitsTransfer() (gas: 251141)\n[PASS] test_transferFromZeroAddressRevertsEvenForZeroAmount() (gas: 37794)\n[PASS] test_transferReturnsTrueAndEmitsExactAmount() (gas: 96284)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 74910)\n[PASS] test_unapprovedSpenderCannotUseAnotherSpendersApproval() (gas: 120593)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 73367)\n[PASS] test_zeroTransferFromWithoutAllowanceEmitsEvent() (gas: 68929)\nSuite result: ok. 31 passed; 0 failed; 0 skipped; finished in 70.02ms (343.21ms CPU time)\n\nRan 12 tests for test/ROUTR.properties.t.sol:ROUTRPropertiesTest\n[PASS] testFuzz_insufficientAllowanceWithSufficientBalance(uint256,uint256,uint256,bool) (runs: 1024, μ: 207500, ~: 209142)\nLogs:\n  Bound result 3\n  Bound result 2\n  Bound result 3\n\n[PASS] testFuzz_insufficientBalanceWithSufficientAllowance(uint256,uint256,uint256,bool) (runs: 1024, μ: 214193, ~: 214485)\nLogs:\n  Bound result 1\n  Bound result 23894\n  Bound result 9093\n\n[PASS] testFuzz_replacingOneSpendersApprovalLeavesOtherApprovalsIntact(uint256,uint256,uint256,uint256) (runs: 1024, μ: 399924, ~: 401945)\nLogs:\n  Bound result 9179049090171\n\n[PASS] testFuzz_splitDelegatedTransfersMatchSingleTransfer(uint256,uint256,uint256) (runs: 1024, μ: 395885, ~: 398180)\nLogs:\n  Bound result 2\n  Bound result 0\n  Bound result 184092159319903027307331858299688199818567817\n\n[PASS] test_boundaryAmountsTransferAndReturnExactly() (gas: 903493)\n[PASS] test_failedDelegatedTransferCanBeRetriedAfterFunding() (gas: 270731)\n[PASS] test_holderCanUseTransferFromWithExplicitSelfApproval() (gas: 232171)\n[PASS] test_infiniteAllowanceCannotBypassBalanceCheckOnSelfTransfer() (gas: 236607)\n[PASS] test_largestFiniteAllowanceCanBecomeInfiniteThenFiniteAgain() (gas: 426437)\n[PASS] test_maximumTransferRequestsRevertWithoutChangingState() (gas: 239144)\n[PASS] test_zeroAmountDoesNotMakeZeroAddressesValid() (gas: 164250)\n[PASS] test_zeroDelegatedTransferPreservesAnExistingAllowance() (gas: 151841)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 70.09ms (271.46ms CPU time)\n\nRan 1 test for test/ROUTR.invariant.t.sol:ROUTRInvariantTest\n[PASS] invariant_balancesAllowancesAndSupplyMatchModel() (runs: 256, calls: 32768, reverts: 0)\n\n╭--------------+---------------------------+-------+---------+----------╮\n| Contract     | Selector                  | Calls | Reverts | Discards |\n+=======================================================================+\n| ROUTRHandler | approve                   | 3261  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| ROUTRHandler | approveBoundary           | 3267  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| ROUTRHandler | rejectZeroAddress         | 3269  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| ROUTRHandler | revokeAndAttemptSpend     | 3185  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| ROUTRHandler | roundTrip                 | 3336  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| ROUTRHandler | transfer                  | 3284  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| ROUTRHandler | transferFrom              | 3274  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| ROUTRHandler | transferFromOverAllowance | 3320  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| ROUTRHandler | transferFromOverBalance   | 3246  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| ROUTRHandler | transferOverBalance       | 3326  | 0       | 0        |\n╰--------------+---------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 250000000000000000000000000\n  Bound result 250000000000000000000000000\n  Bound result 250000000000000000000000000\n  Bound result 115792089237316195423570985008687907853269984665640314039457584007913129644168\n  Bound result 115792089237316195423570985008687907853269984665640314039457584007913129651499\n  Bound result 115792089237316195423570985008687907853269984665640314039457584007913129639942\n  Bound result 0\n  Bound result 1\n  Bound result 3\n  Bound result 115792089237316195423570985008687907853269984665640314039457584007913129643254\n  Bound result 213016745548080757610253865\n  Bound result 35399064132849513337931963756589758837250125259243017685\n  Bound result 0\n  Bound result 271\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639935\n  Bound result 10\n  Bound result 115792089237316195423570985008687907853269984665640344994455889648938722155420\n  Bound result 249999999999999999999999999\n  Bound result 1000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640314039458584007913129639944\n  Bound result 1000000000000000000\n  Bound result 328\n  Bound result 0\n  Bound result 1\n  Bound result 109963943132\n  Bound result 26590155537766363386512404647324899721165260760\n  Bound result 1454\n  Bound result 2\n  Bound result 115792089237316195423570985008687907853269984665640314039457584007913129645239\n  Bound result 6\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640314039457584007913129644489\n  Bound result 122\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640314039457584007913129640022\n  Bound result 125000000000000000000000000\n  Bound result 115792089237316195423570985008687907853269984665640064039456584007914129639933\n  Bound result 11\n  Bound result 101204345500373913133346001\n  Bound result 1000000000000000000\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639934\n  Bound result 132462073434214567687597541\n  Bound result 736\n  Bound result 12\n  Bound result 115792089237316195423570985008687907853269984665640564039456584007913129650513\n  Bound result 500000001000000000000000001\n  Bound result 10719\n  Bound result 115792089237316195423570985008687907853269984665640444091433071121514760212025\n  Bound result 5\n  Bound result 5046\n  Bound result 115792089237316195423570985008687907853269984665640314039457584007913129639301\n  Bound result 630\n  Bound result 10568\n  Bound result 115792089237316195423570985008687907853269984665640314039458584007913129646520\n  Bound result 3\n  Bound result 100000000000000000000\n  Bound result 10\n  Bound result 115792089237316195423570985008687907853269984665640314039458584007913129641388\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639935\n  Bound result 115792089237316195423570985008687907853269984665640314039457584007913129639206\n  Bound result 1000000000000000000000000000\n  Bound result 1000000000\n  Bound result 1708\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639935\n  Bound result 12\n  Bound result 9\n  Bound result 3\n  Bound result 49422300655976383518971161772042036479724517635858811238160587340303074464590\n  Bound result 0\n  Bound result 85\n  Bound result 11\n  Bound result 500000000999999999999999990\n  Bound result 3\n  Bound result 0\n  Bound result 500000000999999999999999989\n  Bound result 4\n  Bound result 2314618938911766135632343910945432989223760196391\n  Bound result 0\n  Bound result 2782524607\n  Bound result 5\n  Bound result 0\n  Bound result 0\n  Bound result 60000000000000000000\n  Bound result 2909\n  Bound result 115792089237316195423570985008687907853269984665640314039458584007913129651043\n  Bound result 118250875119477447309803864206723630095\n  Bound result 5598\n  Bound result 8861\n  Bound result 203481901063218946918241295\n  Bound result 100\n  Bound result 85\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 7.12s (7.11s CPU time)\n\nRan 3 test suites in 7.12s (7.26s CPU time): 44 tests passed, 0 failed, 0 skipped (44 total tests)\n","passed":true},{"durationMs":48,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"ROUTR.approve(address,uint256)\",\"ROUTR.transfer(address,uint256)\",\"ROUTR.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":5,\"LICENSE\":21,\"README.md\":127,\"dependencies.lock.json\":56,\"foundry.toml\":23,\"src/ROUTR.sol\":17,\"test/README.md\":67,\"test/ROUTR.invariant.t.sol\":237,\"test/ROUTR.properties.t.sol\":312,\"test/ROUTR.t.sol\":440,\"test/helpers/FactoryHarness.sol\":15},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"5b454dc36dd95a96da40a769d04de779cf1fac3dce6ee231ce1005c9bd095e39","verifiedTreeHash":"0455ac995c4606a3cc854d84b0ab23aa8a4ad06e","verifierVersion":"0.1.0+d372f99e"},{"checks":[{"durationMs":1081,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.01s\nCompiler run successful!\n","passed":true},{"durationMs":1834,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 31 tests for test/ROUTR.t.sol:ROUTRTest\n[PASS] testFuzz_approvedTransferSucceeds(uint256,uint256) (runs: 1024, μ: 169072, ~: 169766)\nLogs:\n  Bound result 239128342321003207934123539\n  Bound result 11465384704120810\n\n[PASS] testFuzz_selfTransferRequiresSufficientBalance(uint256) (runs: 1024, μ: 53738, ~: 53816)\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 1024, μ: 99602, ~: 99841)\nLogs:\n  Bound result 2\n\n[PASS] testFuzz_transferFromRespectsBalanceAndAllowance(uint256,uint256,uint256) (runs: 1024, μ: 200829, ~: 196787)\nLogs:\n  Bound result 28667214996015580376949497\n\n[PASS] testFuzz_transferRejectsOverspend(uint256) (runs: 1024, μ: 71957, ~: 72298)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039457584009532290303175\n\n[PASS] test_approvalCanExceedCurrentBalance() (gas: 78348)\n[PASS] test_approveEmitsEventAndDoesNotMoveTokens() (gas: 123615)\n[PASS] test_approveOverwritesAndRevocationPreventsSpending() (gas: 181237)\n[PASS] test_approveZeroSpenderReverts() (gas: 40208)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 26306)\n[PASS] test_deployerHasNoPrivilegeOverHolder() (gas: 452986)\n[PASS] test_directEtherAndUnknownCallsRevert() (gas: 67282)\n[PASS] test_factoryReceivesSupplyInsteadOfItsCallerOrOrigin() (gas: 285874)\n[PASS] test_holderUsingTransferFromAlsoNeedsApproval() (gas: 38462)\n[PASS] test_infiniteAllowanceIsNotDecremented() (gas: 144184)\n[PASS] test_insufficientBalanceRollsBackAllowance() (gas: 126152)\n[PASS] test_launchDistributionClaimsAndPoolTransfersArriveWhole() (gas: 1080857)\n[PASS] test_metadataAndInitialSupply() (gas: 109760)\n[PASS] test_noMintBurnOrInitializationEntryPoint() (gas: 689547)\n[PASS] test_selfTransferPreservesBalance() (gas: 56763)\n[PASS] test_transferEntireBalance() (gas: 78437)\n[PASS] test_transferFromEmptyAccountReverts() (gas: 55119)\n[PASS] test_transferFromSelfStillConsumesAllowance() (gas: 107992)\n[PASS] test_transferFromToZeroRollsBackAllowance() (gas: 118882)\n[PASS] test_transferFromUsesAllowanceAndEmitsTransfer() (gas: 251141)\n[PASS] test_transferFromZeroAddressRevertsEvenForZeroAmount() (gas: 37794)\n[PASS] test_transferReturnsTrueAndEmitsExactAmount() (gas: 96284)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 74910)\n[PASS] test_unapprovedSpenderCannotUseAnotherSpendersApproval() (gas: 120593)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 73367)\n[PASS] test_zeroTransferFromWithoutAllowanceEmitsEvent() (gas: 68929)\nSuite result: ok. 31 passed; 0 failed; 0 skipped; finished in 33.17ms (162.56ms CPU time)\n\nRan 1 test for test/ROUTR.invariant.t.sol:ROUTRInvariantTest\n[PASS] invariant_balancesAllowancesAndSupplyMatchModel() (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+--------------+-------+---------+----------╮\n| Contract     | Selector     | Calls | Reverts | Discards |\n+==========================================================+\n| ROUTRHandler | approve      | 2750  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| ROUTRHandler | transfer     | 2691  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| ROUTRHandler | transferFrom | 2751  | 0       | 0        |\n╰--------------+--------------+-------+---------+----------╯\n\nLogs:\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 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 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 0\n  Bound result 0\n  Bound result 637\n  Bound result 376\n  Bound result 0\n  Bound result 260\n  Bound result 0\n  Bound result 0\n  Bound result 213\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 33\n  Bound result 68\n  Bound result 18\n  Bound result 8\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.74s (1.74s CPU time)\n\nRan 2 test suites in 1.74s (1.77s CPU time): 32 tests passed, 0 failed, 0 skipped (32 total tests)\n","passed":true},{"durationMs":35,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"ROUTR.approve(address,uint256)\",\"ROUTR.transfer(address,uint256)\",\"ROUTR.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":5,\"LICENSE\":21,\"README.md\":127,\"dependencies.lock.json\":56,\"foundry.toml\":23,\"launch.json\":24,\"src/ROUTR.sol\":17,\"test/ROUTR.invariant.t.sol\":94,\"test/ROUTR.t.sol\":440,\"test/helpers/FactoryHarness.sol\":15},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"717bb6b28dd78bf31c3ffc69940b00aa90d17af166b3a58f315157f5a8a8be8f","verifiedTreeHash":"562e049d25ae371f8897b3f4d109e3ffc2d2479d","verifierVersion":"0.1.0+d372f99e"}]}