{"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":"f9a4ad38-805a-4356-ba86-1068658a1a13","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"e3bb9df55bf13c2673cda45d3d5afa79583278c50b1f48aa45d95c6c17dc39ac","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":"cdf357428913b0ddebf9973870753d599078fc806a9eda45ef569f968e6f0ecb","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":"e49a86a77e0ad198460639fc5d0c053491d1b256548d8b32ca2a938e8ff06c1a","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":"7da8392b16ad0e23b5b727c0d575ac5b6c3fe0c024d311efaae9d26ef6d0a732","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":"f1d323f5730736f3726c776a44932fbe56932f1fffbc014f2c112bef5204b193","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":"e2a22577d75e9ceb045f3d9edd8104e376d853d52e250e17032457094ca6587b","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":"dc2108b10260f8bc7ee34eef17f8f917d747cd519660999b8198947846e1013d","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"a428496232f6b814fda1832c7fea4c897349fcaee84fae9e3af947782726809a","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"1ddb4d02eb75e52d5f38cfd5c9bb54f332687b81929c68880cf1e8a6ab27254d","skillId":"write-foundry-tests","subagents":4,"tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"1ddb4d02eb75e52d5f38cfd5c9bb54f332687b81929c68880cf1e8a6ab27254d","skillId":"write-foundry-tests","state":"accepted"}],"objective":"A custom token: SQUEEKSTR (SQKSTR).\nToken name: SQUEEKSTR\nToken symbol: SQKSTR\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"a3f5777e04d9e9784587ff050e063dba8eaa6235ee477aaaa538e3a3ecf5639e","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"f9a4ad38-805a-4356-ba86-1068658a1a13","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-3239-squeekstr"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52608","feedbackHash":"8447e8be96a428bfe23e3cb73d58ef861253ce85d33203a37efdae6028bd6320","nodeKey":"audit_economics","submissionHash":"e3bb9df55bf13c2673cda45d3d5afa79583278c50b1f48aa45d95c6c17dc39ac","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52606","feedbackHash":"ea5980194fe1fdb8aef6f7830600e82491bf6ceea3e89e90c35ddc150ba5ac73","nodeKey":"audit_flow","submissionHash":"cdf357428913b0ddebf9973870753d599078fc806a9eda45ef569f968e6f0ecb","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52128","feedbackHash":"f8c5250deecb343d707c512df29f045e682e58a7f0024ff4bb03738c47d91236","nodeKey":"audit_judge","submissionHash":"e49a86a77e0ad198460639fc5d0c053491d1b256548d8b32ca2a938e8ff06c1a","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52139","feedbackHash":"f7bb9ed3e7e62fd5e3e14c3aed2e24580a5339af33a60f85510b0a713f4a51ec","nodeKey":"audit_math","submissionHash":"7da8392b16ad0e23b5b727c0d575ac5b6c3fe0c024d311efaae9d26ef6d0a732","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51510","feedbackHash":"2af6978e2d4f480ab7c45656daffb8bd9707d1074e6d9a9cbfef833b06d331fc","nodeKey":"audit_permissions","submissionHash":"f1d323f5730736f3726c776a44932fbe56932f1fffbc014f2c112bef5204b193","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"56303","feedbackHash":"3caea5e53c97e8e3e501b5cef887726186cf41e9a53c14bfb5635d10380a51d8","nodeKey":"build_contract_project","submissionHash":"e2a22577d75e9ceb045f3d9edd8104e376d853d52e250e17032457094ca6587b","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52371","feedbackHash":"ebc9f479b22287c52d7d009576738adf804feb758927d7ef1deea0aee75c7b1a","nodeKey":"manifest","submissionHash":"dc2108b10260f8bc7ee34eef17f8f917d747cd519660999b8198947846e1013d","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51202","feedbackHash":"6e6733f6aa8a6a8f804b128f2b3a414b2a459bcf9156d72d856f540ca90dbeb5","nodeKey":"write_foundry_tests","submissionHash":"a428496232f6b814fda1832c7fea4c897349fcaee84fae9e3af947782726809a","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"4fd66e01bbc6094f9477193223e1c286e10a76ae09ae5c507a54682ced31b2ab","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"079b3bf4557d8811","findings":[],"hash":"7da8392b16ad0e23b5b727c0d575ac5b6c3fe0c024d311efaae9d26ef6d0a732","nodeId":"235363cc-ab02-4599-aef2-c180510008d8","outcome":"completed","summary":"I found no defects in the math area. `.imd-findings.json` has an empty findings list and a coverage row for all 5 entry points, each marked `holds`. I made no other changes, and all 23 existing tests pass.\n\n**What I checked:** `src/SqueekstrToken.sol` is a plain OpenZeppelin 5.1.0 `ERC20` + `ERC20Permit` with one addition, `burn`, which burns only the caller's own tokens. I read the vendored OpenZeppelin `_update`, `_spendAllowance` and `permit` code against the Math Precision, Boundary and Numerical Gap failure modes:\n\n- **Supply:** `1_000_000_000 * 10**18` is computed as a uint256 and equals 1e27 exactly. It is minted once, only in the constructor, to `msg.sender`. Aderyn's \"large numeric literal\" warning is about style only.\n- **Unchecked arithmetic:** every `unchecked` block comes after its bound check. A transfer or burn of `balance + 1` reverts with `ERC20InsufficientBalance`. Spending above the allowance reverts with `ERC20InsufficientAllowance`. Credits can't overflow because no balance can exceed the total supply.\n- **Exact amounts:** there are no fees, taxes or division, so there's nothing to round. Transfers move exactly the amount asked, which also means the launch flows arrive in full.\n- **Edge values:**\n  - A transfer or burn of 0 succeeds and changes nothing.\n  - An allowance of `type(uint256).max` is never reduced, which is the standard behaviour.\n  - `permit` accepts a deadline equal to the current block time and rejects anything earlier.\n  - Each nonce works only once, and the signature check rejects malleable and zero-address signatures.\n- **Supply only shrinks:** the only way to change the total supply after deployment is a holder burning their own balance.\n\n**Two other things:**\n- I didn't write a scratch reproduction test, because there was nothing to reproduce.\n- After my run, `git status` lists files I didn't create in the repository root: `.bashrc`, `.profile`, `.zshrc`, `.gitconfig`, `.mcp.json`, `.claude/`, `.idea`, `.vscode`, `.gitmodules` and others. They come from the environment, not from this review. Strip them before anything is compared, because the submission is rejected if any file changes. `.imd-findings.json` itself doesn't show up in `git status`, so it is probably git-ignored.","treeHash":null,"usage":{"cachedInputTokens":133695,"cost":{"source":"runtime","usdMicros":238389},"inputTokens":2954,"model":"claude-opus-5-5","outputTokens":2737,"runtime":"claude","turns":5,"wallClockMs":51627}},{"artifacts":[],"attempt":1,"bundleHash":"fe4ae0259987b183518bb465a72110245a912abef79496a0763a3ca3e5424ebb","device":"e583a2c8200626c9","findings":[],"hash":"a428496232f6b814fda1832c7fea4c897349fcaee84fae9e3af947782726809a","nodeId":"dbe0828d-497b-4a57-9c02-884fa4e29e07","outcome":"completed","summary":"I added two test files to the SQUEEKSTR test suite. The full suite (61 tests, three suites) passes with `forge build` and `forge test`, run with the verifier's fuzz seed. I found no defect, so I didn't write a findings file.\n\nThe token is a standard OpenZeppelin 5.1 ERC-20 with signature approvals (`permit`) and a burn that only works on the caller's own balance. It mints 1,000,000,000 × 10¹⁸ to the deployer once in the constructor. It has no owner, no way to mint more, no pause and no transfer fee. The 23 tests that were already there are unchanged.\n\n**`test/SqueekstrToken.edges.t.sol`** has 37 tests, mostly failure paths:\n- **Deployment:** deploying from inside a contract (the way the launch factory does) mints the whole supply to that contract, and deploying again at the same address reverts, so the supply can't be minted twice.\n- **Signature setup:** the signing domain has the right name, version, chain and token address.\n- **Transfers:** sending the exact balance works and one wei more reverts. Also covered: sending the maximum possible amount, sending to yourself, and sending zero to the zero address, which still reverts. Tokens sent to the token contract itself are accepted and then stuck there; that's standard ERC-20 behaviour, not a defect.\n- **Allowances:**\n  - Approving the zero address reverts, and a new approval replaces the old one rather than adding to it.\n  - A spender can't move tokens to the zero address, and a failed attempt doesn't use up any allowance.\n  - Having enough allowance doesn't help when the owner's balance is too low.\n  - An unlimited allowance is never reduced, while maximum-minus-one is; spending the exact allowance leaves zero.\n  - An owner moving their own tokens through the spender route still needs an allowance, and allowances are separate per spender.\n- **Burn:** burning zero, burning the whole supply, burning the maximum amount (reverts), and confirming a burn can't touch another holder's balance or allowance.\n- **`permit`:** works at exactly the deadline and fails one second after it. It rejects a signature reused for a different spender or amount, a skipped nonce, the alternate form of a valid signature, a malformed signature, an all-zero signature, and a zero-address spender (which doesn't use up the nonce). It also rejects a signature taken from another chain or another copy of the token. Repeated permits use nonces in order and replace the allowance.\n- **Fuzz tests:** random amounts through approve-and-spend, transfers between random addresses, and random signers through `permit` (each signature works once and is then refused).\n\n**`test/invariant/SqueekstrToken.invariant.t.sol`** is the random-sequence test. A helper contract makes random calls from five accounts: transfers, approvals, spender transfers, burns, permits and time jumps. It also deliberately tries things that must fail: overspending a balance, overspending an allowance, burning too much, and permits signed by the wrong person. It keeps its own record of what every balance, allowance and nonce should be. After every call it checks:\n- total supply equals 1,000,000,000 minus what was burned, and never goes above that;\n- each account's balance matches the record, and the five accounts together hold the whole supply;\n- every allowance and nonce matches the record;\n- nothing that should have failed succeeded, and no call returned false;\n- the name, symbol, decimals and supply constant never change.\n\nIt runs 64 sequences of 32,000 calls in total, and every call type was exercised.\n\nI left the new files uncommitted.","treeHash":"8fd96c2773c0861fd2a8001018ba81db640bf7cf","usage":{"cachedInputTokens":340857,"cost":{"source":"runtime","usdMicros":912608},"inputTokens":15,"model":"claude-opus-5-5","outputTokens":18852,"runtime":"claude","turns":10,"wallClockMs":223168}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"829d84438fb3fdc8","findings":[],"hash":"cdf357428913b0ddebf9973870753d599078fc806a9eda45ef569f968e6f0ecb","nodeId":"2f0c753a-c3e2-49cc-84f0-4d64a474f827","outcome":"completed","summary":"I found no defects in SQUEEKSTR's control flow, so `.imd-findings.json` has an empty findings list. Its coverage record has one `holds` row for each of the five entry points, plus a row for the supply invariant.\n\n**What the contract is:** `src/SqueekstrToken.sol` is plain OpenZeppelin ERC20 + ERC20Permit 5.1.0 with nothing overridden. Its constructor mints 1e27 (1,000,000,000 × 10^18) to `msg.sender`, and its only other function is `burn(amount)`, which can burn only the caller's own balance. I compared the vendored `lib/openzeppelin-contracts/contracts` against a fresh clone of upstream v5.1.0, and they are byte-identical. So the library code it inherits behaves exactly as upstream.\n\n**What I checked, by guide:**\n- **Execution Trace:** Every transfer moves exactly the amount asked for, with no fee or burn. So the launch flows (factory to distributor, distributor to claimant, the pool seed, buys and sells) arrive whole. Zero-address cases revert. A max allowance stays unlimited, and a partial allowance goes down by exactly what is spent. A permit cannot be replayed, and one signed for another chain ID is rejected.\n- **Periphery:** The ECDSA, Nonces and EIP712 code behind `permit` rejects high-s malleated signatures, expired deadlines and an owner of address(0). It rebuilds the signing domain when the chain ID changes.\n- **First Principles:** Supply only changes through the constructor mint and the holder's own burn. Self-transfers and transfers of zero conserve balances. There is no owner or other privileged role, and no path to DELEGATECALL, CALLCODE or SELFDESTRUCT. `decimals()` is 18.\n\n**Tests:** I wrote a scratch Foundry suite (fuzzed burns and self-transfers, permit replay, chain-ID change, malleated signatures, allowance edges) and it passed 6/6. The project's own 23 tests also pass. I deleted the scratch tests afterwards, and `.imd-findings.json` is the only file I wrote.\n\n**Static analysis:** Slither reported nothing. Aderyn's one lead is a \"large numeric literal\" at line 24, which is just the supply constant `1_000_000_000 * 10 ** 18`. It is correct, so I didn't report it.\n\n**Not covered:** I did not run the protected floor tests. They need the launch harness's environment variables and source files (`LaunchLiquidity`, `PoolInitializationGuard`) that are not in this tree. No `launch.json` exists yet to review. If one is written, the token's `constructorArgs` should be `[]` and `totalSupply` should be `\"1000000000000000000000000000\"`.","treeHash":null,"usage":{"cachedInputTokens":293116,"cost":{"source":"runtime","usdMicros":509958},"inputTokens":18,"model":"claude-opus-5-5","outputTokens":6228,"runtime":"claude","turns":9,"wallClockMs":77231}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"2d977abd7ffb09d4","findings":[],"hash":"db73d44bc46a8544d450c4df25953cb4353d153f5ffb8c7025eb6631827f3527","nodeId":"4349ad44-c43e-4677-8a0b-74b8d9185f7c","outcome":"failed","summary":"Inline source file exceeds operator boundary","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":null,"outputTokens":0,"runtime":"codex","turns":0,"wallClockMs":6004}},{"artifacts":[],"attempt":2,"bundleHash":"6024168729068007d1747922e116984f97284cea9df0da282cb3b86d4122993a","device":"c69899cad79c228f","findings":[],"hash":"dc2108b10260f8bc7ee34eef17f8f917d747cd519660999b8198947846e1013d","nodeId":"4349ad44-c43e-4677-8a0b-74b8d9185f7c","outcome":"completed","summary":"Created [launch.json](/home/imd2/.identitymd/work/f9a4ad38-805a-4356-ba86-1068658a1a13/4349ad44-c43e-4677-8a0b-74b8d9185f7c/launch.json) with the verified constructor, exact supply, economics, and pool settings. Only the manifest changed.\n\n`forge build` and all 23 repository tests passed offline with the supplied fuzz seed.","treeHash":"614de64c93f025c6bb491116cfd00f660fe5982d","usage":{"cachedInputTokens":325632,"cost":{"source":"estimated","usdMicros":810652},"inputTokens":30932,"model":"gpt-6-astra","outputTokens":3514,"runtime":"codex","turns":3,"wallClockMs":119540}},{"artifacts":[],"attempt":1,"bundleHash":"e0e95895b9725ca07d455f1a3d6e28762ac1363d890413e7a8161bb1e801dced","device":"82f7a432aff9f55a","findings":[],"hash":"e2a22577d75e9ceb045f3d9edd8104e376d853d52e250e17032457094ca6587b","nodeId":"cf6c941d-3943-45f5-941c-46e5b9caace7","outcome":"completed","summary":"The SQUEEKSTR token project is complete, committed, and verified from a clean export of the commit with an empty environment.\n\n**What was delivered**\n\n- `src/SqueekstrToken.sol`: contract `SqueekstrToken`, an OpenZeppelin v5.1.0 ERC-20 with ERC-2612 permit. Name `SQUEEKSTR`, symbol `SQKSTR`, 18 decimals. The constructor takes no arguments and mints the whole 1,000,000,000 supply once to `msg.sender`, which is the launch factory. No owner, minter, pause, blocklist, fee or upgrade path exists, so the supply can never grow and no privileged call can move or freeze a balance. Holders may burn their own tokens only.\n- `test/SqueekstrToken.t.sol`: 23 tests covering metadata, the single constructor mint, exact transfers, allowance success and failure, permit success, expiry, wrong signer and replay, burn limits, every common admin and mint selector rejected from both the deployer and a stranger, the launch flows arriving whole, a bytecode scan for DELEGATECALL, CALLCODE and SELFDESTRUCT, and three fuzz tests for conservation of supply.\n- `script/DeploySqueekstrToken.s.sol`: a reference deploy script whose `deploy()` is called directly by a test, with no environment reads.\n- `foundry.toml` pins solc 0.8.26, sets `bytecode_hash = \"none\"`, disables ffi and filesystem access. `remappings.txt` points at the vendored libraries.\n- `lib/`: forge-std 1.9.7 and OpenZeppelin Contracts 5.1.0 committed as plain files, with no submodules.\n- `README.md` documents behaviour, assumptions, manifest values for the launch step, deployment parameters, the empty \"After launch\" section, and operational responsibilities.\n\n**Verification results**\n\n- `forge build`, `forge test` with the verifier's fuzz seed, and `forge fmt --check` all pass, both in the workspace and from a clean `git archive` export with an empty environment.\n- The token matches the protected floor's requirements: whole supply to the factory, decimals 18, no supply growth, no privileged balance moves, no forbidden opcodes in reachable runtime, and tax-free transfers so the seed and swaps move exact amounts.\n\n**Not done**\n\n- Slither was not run; it is not in this machine's toolchain. The contract avoids all six rejected detectors by construction, as noted in the README.\n- No `launch.json` was written, per the launch rules. The README lists the values the manifest step needs.","treeHash":"1c6554c1bcc230db5ccb97a01b9abc9f5fac9635","usage":{"cachedInputTokens":345246,"cost":{"source":"runtime","usdMicros":1877308},"inputTokens":258,"model":"claude-fable-5-1","outputTokens":17671,"runtime":"claude","turns":18,"wallClockMs":204752}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"3c9b660ee1938912","findings":[],"hash":"e3bb9df55bf13c2673cda45d3d5afa79583278c50b1f48aa45d95c6c17dc39ac","nodeId":"7a85c683-8ae7-4988-908c-42d5f3294d15","outcome":"completed","summary":"I found no economic defects in `SqueekstrToken`, so `.imd-findings.json` has an empty findings list and a coverage row for each of the five entry points. All five are marked `holds`, and I added three rows for invariants I checked. No project files were changed; I wrote some scratch tests and deleted them afterwards.\n\n**Covered (Economic Security, Invariant and Flow Gap guides):**\n- **What the code is:** `src/SqueekstrToken.sol` is a plain OpenZeppelin 5.1.0 ERC20 with permit. It adds nothing to transfers: no fee, no burn on transfer, no special cases. The only mint is in the constructor: `TOTAL_SUPPLY = 1_000_000_000 * 10**18` (1e27), sent to `msg.sender`. The only extra function is `burn(uint256)`, which can only burn the caller's own balance.\n- **Supply and balances:** there is no way to mint after deployment, so the supply can only shrink, and only when a holder burns their own tokens. Fuzz tests showed that the balances always add up to the total supply after transfers and burns.\n- **Launch flows:** every launch transfer (factory to distributor, pool seed, distributor to claimant, swaps, remainder) delivers exactly the amount sent, because no transfer logic is overridden.\n- **Allowances and permit:** `transferFrom` reverts when the amount exceeds the allowance and reduces the allowance by exactly the amount; an unlimited allowance is never reduced. A permit signature cannot be reused, either on the same chain or on a different chain ID.\n- **Vendored OpenZeppelin:** the 19 library files the token depends on are byte-for-byte the same as the official v5.1.0 release, so the library hasn't been tampered with.\n- **Static analysis lead:** aderyn flagged the large number at line 24. It is correct (1e27) and harmless.\n- **Tests:** all 23 existing project tests pass, and my 4 scratch tests passed before I deleted them.\n\n**Not covered:** I couldn't run the protected launch test here. It depends on harness files (`src/LaunchLiquidity.sol`, `PoolInitializationGuard`, `HookFlags`, the floor's `OwnerChecks`) that aren't in this repository. Since the token adds no transfer logic, I expect it to pass, but I haven't run it. There is no `launch.json` yet, so I didn't review one.","treeHash":null,"usage":{"cachedInputTokens":162786,"cost":{"source":"runtime","usdMicros":380556},"inputTokens":12,"model":"claude-opus-5-5","outputTokens":4627,"runtime":"claude","turns":6,"wallClockMs":58342}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"9c6767b941fcfedc","findings":[{"citation":"resolved","description":"Merged from audit_permissions. Not a defect of the token and no change is required in it. The token inherits OpenZeppelin 5.1.0 ERC20Permit unchanged (all 13 vendored files it depends on hash-match upstream v5.1.0 byte for byte). ERC-2612 permit is callable by anyone holding the signature, so an observer can submit a holder's permit before the intended spender does. The allowance is set exactly as signed and the nonce advances, so the spender's own permit call then reverts with ERC2612InvalidSigner even though the allowance it needs is already in place. No balance or allowance can be moved by the submitter, nothing is replayable, and the signed amount is the upper bound. Recorded as a trust assumption of the permission model: integrators should wrap permit in try/catch or check allowance() before calling permit.","line":16,"path":"src/SqueekstrToken.sol","reproduction":"State: fresh SqueekstrToken, ALICE holds 100e18, signs permit(owner=ALICE, spender=BOB, value=10e18, nonce=0, deadline=now+1 day). (1) EVE calls permit(ALICE,BOB,10e18,deadline,v,r,s): succeeds; allowance(ALICE,BOB)=10e18, nonces(ALICE)=1. (2) BOB calls the identical permit(...): reverts ERC2612InvalidSigner (the digest now embeds nonce 1, so the recovered signer is not ALICE). (3) BOB calls transferFrom(ALICE,BOB,10e18): succeeds; balanceOf(BOB)=10e18, balanceOf(ALICE)=90e18. Expected per ERC-2612 and OpenZeppelin ERC20Permit: exactly this. Actual: exactly this (reproduced with scratch test test/scratch/PermitFrontrun.t.sol::test_thirdPartyCanSubmitPermitAndReplayReverts, which passes on this tree).","severity":"info","snippet":"contract SqueekstrToken is ERC20, ERC20Permit {","title":"permit() can be submitted by any third party (standard ERC-2612); an integrator that calls permit then transferFrom in one transaction without tolerating a pre-submitted permit reverts"}],"hash":"e49a86a77e0ad198460639fc5d0c053491d1b256548d8b32ca2a938e8ff06c1a","nodeId":"fbf7bd05-3b8c-4abc-8b94-db184ad0523e","outcome":"completed","summary":"The review is complete and written to `.imd-findings.json`. No source files were changed. Only ignored paths exist in the working tree.\n\n**Outcome: no defects.** The token is OpenZeppelin ERC20 plus ERC20Permit with a self-only burn, and nothing custom beyond constants and the constructor mint.\n\n**Specialist findings judged**\n\n- Four specialists and the independent tester reported nothing. The permissions specialist reported one info item on permit.\n- I kept that item as info, merged under my own reproduction. Anyone holding a holder's permit signature can submit it first. The allowance is set exactly as signed, the nonce advances, and the intended spender's own permit call then reverts. Transfer still works. This is standard ERC-2612 behaviour, not a token defect, and is recorded as a trust assumption for integrators. A scratch test under test/scratch reproduces the sequence and passes on this tree.\n\n**What I verified myself**\n\n- Every vendored OpenZeppelin file the token depends on hash-matches the upstream v5.1.0 tag, so the inherited behaviour is the documented one.\n- The constructor mints exactly the manifest supply to the deployer, decimals are 18, and the manifest's empty constructor arguments match the argument-free constructor. The aderyn large-literal lead is style only. The value is correct.\n- No owner, mint, pause, blocklist or burnFrom exists. The project test suite, 61 tests, passes, including the opcode scan for DELEGATECALL, CALLCODE and SELFDESTRUCT.\n- Runtime and creation bytecode are well under the size limits.\n- The protected floor tests cannot run here because they import service-side files not in this tree. I checked each of their assertions against the code by hand and all hold.\n\n**Coverage record.** All five entry points are answered. Four hold. Permit points to the single info finding. Three invariant rows cover supply, privilege and opcode checks, and the dependency match.","treeHash":null,"usage":{"cachedInputTokens":201870,"cost":{"source":"runtime","usdMicros":1297440},"inputTokens":162,"model":"claude-fable-5-1","outputTokens":8163,"runtime":"claude","turns":6,"wallClockMs":189971}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"8d428b115b0ebd64","findings":[{"citation":"resolved","description":"Not a defect of the token and no fix is required in it: this is the documented behaviour of OpenZeppelin 5.1.0 ERC20Permit, which the token inherits unchanged (vendored files were diffed byte-for-byte against upstream v5.1.0). It is recorded as a trust assumption for the permission model: the right to consume a holder's permit signature is held by anyone who sees it, not only the named spender. A holder's signed allowance is therefore set the moment any observer submits it, and the holder's nonce moves. An integrating contract that does `permit(...)` followed by `transferFrom(...)` in one call, without catching the permit revert, fails if an observer front-runs the permit, even though the allowance it needs is already in place. The token's own guards hold: the replay reverts with ERC2612InvalidSigner (the nonce moved, so the recovered signer differs), the allowance is never larger than signed, and funds cannot be moved by the front-runner. Integrators should wrap permit in try/catch or check allowance() first.","line":5,"path":"src/SqueekstrToken.sol","reproduction":"State: ALICE holds 100e18 SQKSTR and signs an ERC-2612 permit (owner=ALICE, spender=BOB, value=10e18, nonce=0, deadline=now+1 day). Steps: (1) EVE (unrelated) calls permit(ALICE,BOB,10e18,deadline,v,r,s) -> succeeds, allowance(ALICE,BOB)=10e18, nonces(ALICE)=1. (2) BOB calls the same permit(...) -> reverts ERC2612InvalidSigner. (3) BOB calls transferFrom(ALICE,BOB,10e18) -> succeeds. Expected per ERC-2612: exactly this. Actual: exactly this. Verified with a scratch Foundry test (test_permitThirdPartySubmitThenIntegratorRevert) on this tree. Impact is limited to a revert in an integrator that does not tolerate a pre-submitted permit; no balance or allowance is affected.","severity":"info","snippet":"import {ERC20Permit} from \"@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol\";","title":"permit() may be submitted by any third party (standard ERC-2612); integrators that call permit then transferFrom in one transaction can be griefed into reverting"}],"hash":"f1d323f5730736f3726c776a44932fbe56932f1fffbc014f2c112bef5204b193","nodeId":"ac40e9d2-4529-4a67-9824-e0e7cf3fb848","outcome":"completed","summary":"The permissions audit of SQUEEKSTR is complete and the area is clean. The findings file is written and validated against the tree.\n\n**What I checked**\n\n- **Access Control.** The token is OpenZeppelin 5.1.0 ERC20 plus ERC20Permit and a self-only `burn`. There is no owner, role, initializer, proxy, receive or fallback. The constructor mints the whole supply once to the deployer. Mint, pause, blacklist, upgrade and burnFrom selectors all revert whether called by the factory or a stranger.\n- **Trust Gap.** Every vendored OpenZeppelin file the token reaches was diffed byte for byte against the upstream v5.1.0 tag. All are identical, so there is no hidden library backdoor such as a patched `_msgSender` or `_update`.\n- **Asymmetry.** approve and permit write the same allowance slot in the same overwrite direction and both emit Approval. transferFrom with no allowance reverts for the deployer like anyone else. Mint exists only in the constructor and burn only for the caller.\n- **Inversion probes** in a scratch Foundry test confirmed: stranger burn touches nothing, replayed and malleable permit signatures are rejected, zero-address owner is rejected, and the token refuses plain and value calls. The scratch directory was removed afterwards.\n\n**Result in .imd-findings.json**\n\n- One informational note, not a defect: a permit signature can be submitted by any third party, which is standard ERC-2612 behaviour and only matters for integrators that call permit and transferFrom together without tolerating a pre-submitted permit. It carries a concrete reproduction.\n- Nine coverage rows: all five entry points answered, four `holds` and permit marked `finding` pointing at the informational note, plus four invariant rows that hold.\n\nThe aderyn large-literal lead is a style remark on a constant written as `1_000_000_000 * 10 ** 18` and is not a defect. Slither reported nothing. Nothing outside my area was found severe enough to report, and no entry point was left unreached.","treeHash":null,"usage":{"cachedInputTokens":414666,"cost":{"source":"runtime","usdMicros":1761598},"inputTokens":258,"model":"claude-fable-5-1","outputTokens":11369,"runtime":"claude","turns":9,"wallClockMs":178947}}],"verification":[{"checks":[{"durationMs":2008,"exitCode":0,"name":"build","output":"Compiling 44 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.92s\nCompiler run successful!\n","passed":true},{"durationMs":20816,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 23 tests for test/SqueekstrToken.t.sol:SqueekstrTokenTest\n[PASS] testFuzz_burnNeverGrowsSupply(uint256,uint256) (runs: 256, μ: 117146, ~: 118169)\nLogs:\n  Bound result 699008696324847929909566878\n  Bound result 429711134795056479234182892\n\n[PASS] testFuzz_transferAboveBalanceReverts(address,uint256,uint256) (runs: 256, μ: 96224, ~: 96546)\nLogs:\n  Bound result 827905\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913128812039\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 256, μ: 111527, ~: 111677)\nLogs:\n  Bound result 767226744049484294770916851\n\n[PASS] test_approveAndTransferFrom() (gas: 206184)\n[PASS] test_burnOnlyTouchesCaller() (gas: 114042)\n[PASS] test_burnReducesHolderBalanceAndSupply() (gas: 113201)\n[PASS] test_burnRevertsBeyondBalance() (gas: 91149)\n[PASS] test_constructorMintsWholeSupplyToDeployerOnce() (gas: 1178851)\n[PASS] test_deployScriptMintsToCaller() (gas: 2502008)\n[PASS] test_infiniteAllowanceIsNotDecremented() (gas: 168294)\n[PASS] test_launchFlowsArriveWhole() (gas: 219388)\n[PASS] test_metadata() (gas: 59185)\n[PASS] test_noAdminEntryPointExists() (gas: 695482)\n[PASS] test_permitRevertsOnWrongSigner() (gas: 75404)\n[PASS] test_permitRevertsWhenExpired() (gas: 42070)\n[PASS] test_permitSetsAllowanceAndConsumesNonce() (gas: 148157)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 5963588)\n[PASS] test_transferFromRevertsBeyondAllowance() (gas: 133146)\n[PASS] test_transferFromWithoutApprovalReverts() (gas: 92655)\n[PASS] test_transferMovesExactAmount() (gas: 89380)\n[PASS] test_transferRevertsOnInsufficientBalance() (gas: 92597)\n[PASS] test_transferRevertsToZeroAddress() (gas: 30753)\n[PASS] test_transferZeroAmountSucceeds() (gas: 43183)\nSuite result: ok. 23 passed; 0 failed; 0 skipped; finished in 31.58ms (104.97ms CPU time)\n\nRan 37 tests for test/SqueekstrToken.edges.t.sol:SqueekstrTokenEdgesTest\n[PASS] testFuzz_permitRoundTrip(uint256,address,uint256,uint256) (runs: 500, μ: 166166, ~: 166429)\nLogs:\n  Bound result 1612832364758810772682260566606701915392294926956401324527544634883649754632\n  Bound result 1104156778027694654390726845227213068419440646994\n  Bound result 1\n\n[PASS] testFuzz_transferBetweenThirdPartiesDoesNotTouchOthers(address,address,uint256) (runs: 1000, μ: 182718, ~: 183366)\nLogs:\n  Bound result 2262\n  Bound result 1036\n  Bound result 11853\n\n[PASS] testFuzz_transferFromSpendsExactAllowance(uint256,uint256) (runs: 1000, μ: 146950, ~: 162079)\nLogs:\n  Bound result 3600\n  Bound result 14\n\n[PASS] test_allowanceIsPerSpender() (gas: 90484)\n[PASS] test_allowanceMaxMinusOneIsDecremented() (gas: 121878)\n[PASS] test_approveOverwritesNotAdds() (gas: 164312)\n[PASS] test_approveZeroSpenderReverts() (gas: 32994)\n[PASS] test_burnDoesNotSpendAllowanceOrTouchOthers() (gas: 101227)\n[PASS] test_burnUint256MaxReverts() (gas: 35430)\n[PASS] test_burnWholeSupply() (gas: 96267)\n[PASS] test_burnZeroIsANoOp() (gas: 42047)\n[PASS] test_create2DeployMintsToDeployingContract() (gas: 1040487767)\n[PASS] test_eip712DomainFields() (gas: 22675)\n[PASS] test_permitAtExactDeadlineSucceeds() (gas: 99721)\n[PASS] test_permitDoesNotMoveBalances() (gas: 173735)\n[PASS] test_permitExpiresOneSecondAfterDeadline() (gas: 49900)\n[PASS] test_permitHighSMalleatedSignatureReverts() (gas: 148183)\n[PASS] test_permitSequentialNoncesAndOverwrite() (gas: 165561)\n[PASS] test_permitSignatureNotValidOnAnotherDeployment() (gas: 1197143)\n[PASS] test_permitSignatureNotValidOnOtherChain() (gas: 87048)\n[PASS] test_permitSignedForOtherSpenderReverts() (gas: 76017)\n[PASS] test_permitToZeroSpenderReverts() (gas: 76367)\n[PASS] test_permitWithAlteredValueReverts() (gas: 69633)\n[PASS] test_permitWithFutureNonceReverts() (gas: 75699)\n[PASS] test_permitWithInvalidVReverts() (gas: 69513)\n[PASS] test_permitZeroSignatureCannotApproveForZeroOwner() (gas: 63955)\n[PASS] test_selfTransferFromStillNeedsAllowance() (gas: 36146)\n[PASS] test_selfTransferKeepsBalance() (gas: 77177)\n[PASS] test_transferExactBalanceSucceedsOneMoreReverts() (gas: 100873)\n[PASS] test_transferFromAllowanceOkButBalanceShortReverts() (gas: 103465)\n[PASS] test_transferFromExactAllowanceDrainsToZero() (gas: 160295)\n[PASS] test_transferFromToZeroAddressReverts() (gas: 93878)\n[PASS] test_transferFromZeroAmountWithoutAllowanceSucceeds() (gas: 48703)\n[PASS] test_transferToTokenContractIsNotBlockedButIsStuck() (gas: 78230)\n[PASS] test_transferUint256MaxReverts() (gas: 33672)\n[PASS] test_transferWholeSupplyThenOneWeiMoreReverts() (gas: 115936)\n[PASS] test_transferZeroToZeroAddressStillReverts() (gas: 32888)\nSuite result: ok. 37 passed; 0 failed; 0 skipped; finished in 43.64ms (112.21ms CPU time)\n\nRan 1 test for test/invariant/SqueekstrToken.invariant.t.sol:SqueekstrTokenInvariantTest\n[PASS]\nSqueekstrTokenInvariantTest invariants:\n[PASS] invariant_allowancesAndNoncesMatchLedger\n[PASS] invariant_balancesSumToSupplyAndMatchLedger\n[PASS] invariant_metadataIsImmutable\n[PASS] invariant_noUnexpectedSuccessOrFalseReturn\n[PASS] invariant_supplyEqualsMintedMinusBurned\n SqueekstrTokenInvariantTest invariants (runs: 64, calls: 32000, reverts: 0)\n\n╭------------------+---------------------------+-------+---------+----------╮\n| Contract         | Selector                  | Calls | Reverts | Discards |\n+===========================================================================+\n| SqueekstrHandler | approve                   | 2907  | 0       | 0        |\n|------------------+---------------------------+-------+---------+----------|\n| SqueekstrHandler | burn                      | 2967  | 0       | 0        |\n|------------------+---------------------------+-------+---------+----------|\n| SqueekstrHandler | burnTooMuch               | 3014  | 0       | 0        |\n|------------------+---------------------------+-------+---------+----------|\n| SqueekstrHandler | permit                    | 2893  | 0       | 0        |\n|------------------+---------------------------+-------+---------+----------|\n| SqueekstrHandler | permitBySomeoneElse       | 2937  | 0       | 0        |\n|------------------+---------------------------+-------+---------+----------|\n| SqueekstrHandler | transfer                  | 5835  | 0       | 0        |\n|------------------+---------------------------+-------+---------+----------|\n| SqueekstrHandler | transferFrom              | 2834  | 0       | 0        |\n|------------------+---------------------------+-------+---------+----------|\n| SqueekstrHandler | transferFromOverAllowance | 2853  | 0       | 0        |\n|------------------+---------------------------+-------+---------+----------|\n| SqueekstrHandler | transferTooMuch           | 2851  | 0       | 0        |\n|------------------+---------------------------+-------+---------+----------|\n| SqueekstrHandler | warp                      | 2909  | 0       | 0        |\n╰------------------+---------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 49569\n  Bound result 2591998\n  Bound result 2286462\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639934\n  Bound result 7765642260\n  Bound result 0\n  Bound result 0\n  Bound result 7\n  Bound result 2447124\n  Bound result 16938218\n  Bound result 0\n  Bound result 7207\n  Bound result 23959523\n  Bound result 757656403143553258588179741\n  Bound result 3407\n  Bound result 46017617965271658998132806377273786150567209547319631783129418758269817624\n  Bound result 61059740538983882004281\n  Bound result 3000000000000000000\n  Bound result 70000000000000000000\n  Bound result 4197\n  Bound result 8390\n  Bound result 127\n  Bound result 400000000000000000000\n  Bound result 757273880893202778\n  Bound result 340282366920938463463374607431768211455\n  Bound result 255\n  Bound result 635420\n  Bound result 5420\n  Bound result 0\n  Bound result 373344708141107728470548612195522\n  Bound result 1513\n  Bound result 678322617\n  Bound result 659918\n  Bound result 24301\n  Bound result 1745\n  Bound result 53591\n  Bound result 10300\n  Bound result 0\n  Bound result 48\n  Bound result 48879\n  Bound result 25000000000000000000\n  Bound result 55934\n  Bound result 26376045\n  Bound result 24576\n  Bound result 421076279\n  Bound result 28\n  Bound result 0\n  Bound result 86\n  Bound result 86\n  Bound result 30869854565464493453547652\n  Bound result 3000000000000000000\n  Bound result 4\n  Bound result 0\n  Bound result 198595957296918563105722846\n  Bound result 28\n  Bound result 6560\n  Bound result 0\n  Bound result 253\n  Bound result 1\n  Bound result 4101\n  Bound result 91\n  Bound result 286663175199557665995201936866458882206139279773042620746648640385962\n  Bound result 186682681233399399206678672\n  Bound result 49569\n  Bound result 1321117587432\n  Bound result 4732\n  Bound result 8979\n  Bound result 8\n  Bound result 666\n  Bound result 116454206\n  Bound result 0\n  Bound result 29101097437958682844595433\n  Bound result 2549623618\n  Bound result 1383911933\n  Bound result 1300\n  Bound result 5107\n  Bound result 27878952297808242657670336\n  Bound result 7\n  Bound result 233\n  Bound result 3393\n  Bound result 604266\n  Bound result 24730000559768662858804435\n  Bound result 26\n  Bound result 239\n  Bound result 0\n  Bound result 30396898851763980197126947886853738003698501122415141614450286590736\n  Bound result 1\n  Bound result 728555305705594574644169393\n  Bound result 30000000000000000000\n  Bound result 9053\n  Bound result 9622\n  Bound result 96\n  Bound result 600935692794279149\n  Bound result 59\n  Bound result 1966\n  Bound result 61060497812864775207059\n  Bound result 220059122158937042844176\n  Bound result 4167\n  Bound result 3297\n  Bound result 4196\n  Bound result 3000000000000000000\n  Bound result 0\n  Bound result 20\n  Bound result 2\n  Bound result 49569\n  Bound result 3916\n  Bound result 995\n  Bound result 4\n  Bound result 242\n  Bound result 0\n  Bound result 3344\n  Bound result 1218327825\n  Bound result 27\n  Bound result 6560\n  Bound result 4\n  Bound result 7\n  Bound result 0\n  Bound result 18\n  Bound result 27\n  Bound result 11542603\n  Bound result 19947423374940490461719351339\n  Bound result 0\n  Bound result 0\n  Bound result 682\n  Bound result 4\n  Bound result 9093\n  Bound result 601868\n  Bound result 28\n  Bound result 0\n  Bound result 23959523\n  Bound result 3751\n  Bound result 15851799387147433832933176\n  Bound result 0\n  Bound result 3000000000000000000\n  Bound result 7689\n  Bound result 1\n  Bound result 4996\n  Bound result 7955514854306691705018850\n  Bound result 58574549819408\n  Bound result 4680870\n  Bound result 7000000000000000000\n  Bound result 24939240\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639935\n  Bound result 2\n  Bound result 7955514854306691705018850\n  Bound result 2\n  Bound result 1142161709052399958804410748006186371237954012129896439983\n  Bound result 93125129338872968637716421148260541311401477532770608853160596741473653101656\n  Bound result 115792089237316195423570985008687907852837564279074904382605163141518161494337\n  Bound result 67826982787822797887123146\n  Bound result 2173\n  Bound result 0\n  Bound result 4676\n  Bound result 933\n  Bound result 7225272\n  Bound result 28675798802937876827613\n  Bound result 3745\n  Bound result 5824\n  Bound result 10329\n  Bound result 253\n  Bound result 164511\n  Bound result 8782\n  Bound result 9\n  Bound result 940\n  Bound result 2274\n  Bound result 643\n  Bound result 14133613\n  Bound result 5\n  Bound result 7000000000000000000\n  Bound result 31446578\n  Bound result 48879\n  Bound result 2113768\n  Bound result 8823\n  Bound result 10000000000000000000\n  Bound result 9787\n  Bound result 1000000000000000000000\n  Bound result 1397\n  Bound result 159\n  Bound result 49569\n  Bound result 6502\n  Bound result 2192335439819155650475600476151304779277161772\n  Bound result 4228666473\n  Bound result 31536000\n  Bound result 11\n  Bound result 70000000000000000000\n  Bound result 41\n  Bound result 4025\n  Bound result 6000000000000000000\n  Bound result 0\n  Bound result 508743845449062194137189198570269\n  Bound result 8917\n  Bound result 425852\n  Bound result 2025861338894880098\n  Bound result 8502\n  Bound result 7932871077459682248332342\n  Bound result 29968775\n  Bound result 1406\n  Bound result 5000000000000000000\n  Bound result 109\n  Bound result 1725540768\n  Bound result 3243078519439957535996874\n  Bound result 213974144\n  Bound result 5467\n  Bound result 3711270093071604062270060\n  Bound result 28\n  Bound result 11487889142665735963122499157503251086020007964218514093\n  Bound result 100\n  Bound result 95\n  Bound result 2\n  Bound result 1857123998\n  Bound result 2595\n  Bound result 298\n  Bound result 28\n  Bound result 48344083160133181187897251245147733470480187900810015504034473742673694069\n  Bound result 91\n  Bound result 929221794940634722679391\n  Bound result 1507\n  Bound result 13\n  Bound result 2827\n  Bound result 242\n  Bound result 961\n  Bound result 22698501\n  Bound result 3573\n  Bound result 9\n  Bound result 5000000000000000000\n  Bound result 1715\n  Bound result 4\n  Bound result 53591\n  Bound result 2161\n  Bound result 1524308\n  Bound result 4794\n  Bound result 0\n  Bound result 30000000000000000000\n  Bound result 9\n  Bound result 0\n  Bound result 12223\n  Bound result 27\n  Bound result 30000000000000000000\n  Bound result 66\n  Bound result 244\n  Bound result 3976\n  Bound result 8263\n  Bound result 100000000000000000000\n  Bound result 0\n  Bound result 290899147673906010879726\n  Bound result 2\n  Bound result 11\n  Bound result 175587646117793366041776\n  Bound result 0\n  Bound result 5000000000000000000\n  Bound result 75538\n  Bound result 1326\n  Bound result 32455401413915021343050056439765696525188071978\n  Bound result 4384\n  Bound result 5\n  Bound result 27\n  Bound result 24301\n  Bound result 242\n  Bound result 6971352029966877206259735139948358799327\n  Bound result 3\n  Bound result 242\n  Bound result 318103471721729221663753357\n  Bound result 586414508403147971272972667\n  Bound result 844\n  Bound result 95\n  Bound result 2664\n  Bound result 10257\n  Bound result 9\n  Bound result 253\n  Bound result 4081\n  Bound result 193\n  Bound result 2223220\n  Bound result 242\n  Bound result 14344344773757114542725010974893829190309064995953621\n  Bound result 463144846074888755318160854294963174513544896886\n  Bound result 174638909522967929311688023\n  Bound result 1745196253418224322917237\n  Bound result 48879\n  Bound result 1192803312423605530111\n  Bound result 670831\n  Bound result 4294967294\n  Bound result 7374890543\n  Bound result 7\n  Bound result 30954101\n  Bound result 24301\n  Bound result 19820656\n  Bound result 1302\n  Bound result 3322109009770138997972864\n  Bound result 31093938\n  Bound result 68130663832034995498922303\n  Bound result 7911\n  Bound result 2827\n  Bound result 255\n  Bound result 16688075\n  Bound result 26410759\n  Bound result 7364631218242217508416382\n  Bound result 9210\n  Bound result 1954751708299537756457355\n  Bound result 69\n  Bound result 2364\n  Bound result 521539063942391550954664354\n  Bound result 3707\n  Bound result 6466\n  Bound result 11730911651915299298571649614418002504621835090528759\n  Bound result 253\n  Bound result 8978148858260436288591\n  Bound result 961\n  Bound result 1207148640\n  Bound result 68751379697530266\n  Bound result 1068\n  Bound result 190012\n  Bound result 4000000000000000000\n  Bound result 26409663560779159245957853369630291191693597991513560285392977449354095080820\n  Bound result 25000000000000000000\n  Bound result 1000000000000000000\n  Bound result 423034338390458922503955593\n  Bound result 2115\n  Bound result 4\n  Bound result 31536000\n  Bound result 9\n  Bound result 22413748\n  Bound result 224234\n  Bound result 115792089237316195423570985008687907852837564279074904382605163141518161494337\n  Bound result 1218769\n  Bound result 7197\n  Bound result 1000000000000000000001\n  Bound result 127\n  Bound result 7\n  Bound result 1134\n  Bound result 7663628432458602643990235469943440563150679\n  Bound result 169685712152397249045684198448000455220759910126421100785744176619679469\n  Bound result 4113\n  Bound result 127\n  Bound result 563\n  Bound result 1000000000000000000000\n  Bound result 9\n  Bound result 7\n  Bound result 2510381141304167522125242\n  Bound result 2885676294924407\n  Bound result 9051\n  Bound result 4453\n  Bound result 79022256136709256917\n  Bound result 3000000000000000000\n  Bound result 3548\n  Bound result 1502281292750517723\n  Bound result 18086941563281576505929867897669581\n  Bound result 253\n  Bound result 7329265\n  Bound result 28035941\n  Bound result 5000000000000000000\n  Bound result 126601\n  Bound result 2973457\n  Bound result 48879\n  Bound result 91\n  Bound result 3000000000000000000\n  Bound result 555\n  Bound result 358304180688245561732237\n  Bound result 62844181566776063009578855738276149\n  Bound result 244\n  Bound result 4158\n  Bound result 7007705\n  Bound result 6\n  Bound result 6\n  Bound result 7\n  Bound result 24939240\n  Bound result 255\n  Bound result 354601074401325062497096583\n  Bound result 96\n  Bound result 7896277532782167589692869\n  Bound result 21622492\n  Bound result 2393190\n  Bound result 9\n  Bound result 1461501637330902918203684832716283019655932542975\n  Bound result 2\n  Bound result 48879\n  Bound result 2079615\n  Bound result 115792089237316195423570985008687907853269984665640563973993156389086439397468\n  Bound result 15272699\n  Bound result 11\n  Bound result 1001000000000000000000\n  Bound result 423034338390458922503955591\n  Bound result 2827\n  Bound result 22413747\n  Bound result 5853\n  Bound result 3875253017\n  Bound result 1031599\n  Bound result 35272052228268461361837\n  Bound result 4768\n  Bound result 86\n  Bound result 5128752550202555790147910\n  Bound result 242\n  Bound result 7\n  Bound result 5040\n  Bound result 1384\n  Bound result 136389361020886136616\n  Bound result 95\n  Bound result 244\n  Bound result 1981\n  Bound result 43\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 20.70s (20.70s CPU time)\n\nRan 3 test suites in 20.70s (20.77s CPU time): 61 tests passed, 0 failed, 0 skipped (61 total tests)\n","passed":true},{"durationMs":44,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SqueekstrToken.approve(address,uint256)\",\"SqueekstrToken.burn(uint256)\",\"SqueekstrToken.permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\",\"SqueekstrToken.transfer(address,uint256)\",\"SqueekstrToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"README.md\":113,\"foundry.toml\":19,\"remappings.txt\":2,\"script/DeploySqueekstrToken.s.sol\":25,\"src/SqueekstrToken.sol\":37,\"test/SqueekstrToken.edges.t.sol\":460,\"test/SqueekstrToken.t.sol\":364,\"test/invariant/SqueekstrToken.invariant.t.sol\":280},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"a428496232f6b814fda1832c7fea4c897349fcaee84fae9e3af947782726809a","verifiedTreeHash":"8fd96c2773c0861fd2a8001018ba81db640bf7cf","verifierVersion":"0.1.0+b51cee5a"},{"checks":[{"durationMs":939,"exitCode":0,"name":"build","output":"Compiling 42 files with Solc 0.8.26\nSolc 0.8.26 finished in 848.94ms\nCompiler run successful!\n","passed":true},{"durationMs":116,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 23 tests for test/SqueekstrToken.t.sol:SqueekstrTokenTest\n[PASS] testFuzz_burnNeverGrowsSupply(uint256,uint256) (runs: 256, μ: 117484, ~: 118169)\nLogs:\n  Bound result 269333359639341386221390533\n  Bound result 1\n\n[PASS] testFuzz_transferAboveBalanceReverts(address,uint256,uint256) (runs: 256, μ: 96179, ~: 96546)\nLogs:\n  Bound result 382214584862463307677076141\n  Bound result 3328608015779617557882634199752976562404183382084530925\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 256, μ: 111397, ~: 111677)\nLogs:\n  Bound result 8755\n\n[PASS] test_approveAndTransferFrom() (gas: 206184)\n[PASS] test_burnOnlyTouchesCaller() (gas: 114042)\n[PASS] test_burnReducesHolderBalanceAndSupply() (gas: 113201)\n[PASS] test_burnRevertsBeyondBalance() (gas: 91149)\n[PASS] test_constructorMintsWholeSupplyToDeployerOnce() (gas: 1178851)\n[PASS] test_deployScriptMintsToCaller() (gas: 2502008)\n[PASS] test_infiniteAllowanceIsNotDecremented() (gas: 168294)\n[PASS] test_launchFlowsArriveWhole() (gas: 219388)\n[PASS] test_metadata() (gas: 59185)\n[PASS] test_noAdminEntryPointExists() (gas: 695482)\n[PASS] test_permitRevertsOnWrongSigner() (gas: 75404)\n[PASS] test_permitRevertsWhenExpired() (gas: 42070)\n[PASS] test_permitSetsAllowanceAndConsumesNonce() (gas: 148157)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 5963588)\n[PASS] test_transferFromRevertsBeyondAllowance() (gas: 133146)\n[PASS] test_transferFromWithoutApprovalReverts() (gas: 92655)\n[PASS] test_transferMovesExactAmount() (gas: 89380)\n[PASS] test_transferRevertsOnInsufficientBalance() (gas: 92597)\n[PASS] test_transferRevertsToZeroAddress() (gas: 30753)\n[PASS] test_transferZeroAmountSucceeds() (gas: 43183)\nSuite result: ok. 23 passed; 0 failed; 0 skipped; finished in 15.31ms (44.32ms CPU time)\n\nRan 1 test suite in 16.04ms (15.31ms CPU time): 23 tests passed, 0 failed, 0 skipped (23 total tests)\n","passed":true},{"durationMs":42,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SqueekstrToken.approve(address,uint256)\",\"SqueekstrToken.burn(uint256)\",\"SqueekstrToken.permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\",\"SqueekstrToken.transfer(address,uint256)\",\"SqueekstrToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"README.md\":113,\"foundry.toml\":19,\"launch.json\":20,\"remappings.txt\":2,\"script/DeploySqueekstrToken.s.sol\":25,\"src/SqueekstrToken.sol\":37,\"test/SqueekstrToken.t.sol\":364},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"dc2108b10260f8bc7ee34eef17f8f917d747cd519660999b8198947846e1013d","verifiedTreeHash":"614de64c93f025c6bb491116cfd00f660fe5982d","verifierVersion":"0.1.0+b51cee5a"},{"checks":[{"durationMs":966,"exitCode":0,"name":"build","output":"Compiling 42 files with Solc 0.8.26\nSolc 0.8.26 finished in 876.88ms\nCompiler run successful!\n","passed":true},{"durationMs":147,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 23 tests for test/SqueekstrToken.t.sol:SqueekstrTokenTest\n[PASS] testFuzz_burnNeverGrowsSupply(uint256,uint256) (runs: 256, μ: 117484, ~: 118169)\nLogs:\n  Bound result 269333359639341386221390533\n  Bound result 1\n\n[PASS] testFuzz_transferAboveBalanceReverts(address,uint256,uint256) (runs: 256, μ: 96179, ~: 96546)\nLogs:\n  Bound result 4049\n  Bound result 21986\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 256, μ: 111397, ~: 111677)\nLogs:\n  Bound result 131019038191042929\n\n[PASS] test_approveAndTransferFrom() (gas: 206184)\n[PASS] test_burnOnlyTouchesCaller() (gas: 114042)\n[PASS] test_burnReducesHolderBalanceAndSupply() (gas: 113201)\n[PASS] test_burnRevertsBeyondBalance() (gas: 91149)\n[PASS] test_constructorMintsWholeSupplyToDeployerOnce() (gas: 1178851)\n[PASS] test_deployScriptMintsToCaller() (gas: 2502008)\n[PASS] test_infiniteAllowanceIsNotDecremented() (gas: 168294)\n[PASS] test_launchFlowsArriveWhole() (gas: 219388)\n[PASS] test_metadata() (gas: 59185)\n[PASS] test_noAdminEntryPointExists() (gas: 695482)\n[PASS] test_permitRevertsOnWrongSigner() (gas: 75404)\n[PASS] test_permitRevertsWhenExpired() (gas: 42070)\n[PASS] test_permitSetsAllowanceAndConsumesNonce() (gas: 148157)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 5963588)\n[PASS] test_transferFromRevertsBeyondAllowance() (gas: 133146)\n[PASS] test_transferFromWithoutApprovalReverts() (gas: 92655)\n[PASS] test_transferMovesExactAmount() (gas: 89380)\n[PASS] test_transferRevertsOnInsufficientBalance() (gas: 92597)\n[PASS] test_transferRevertsToZeroAddress() (gas: 30753)\n[PASS] test_transferZeroAmountSucceeds() (gas: 43183)\nSuite result: ok. 23 passed; 0 failed; 0 skipped; finished in 17.89ms (50.84ms CPU time)\n\nRan 1 test suite in 18.68ms (17.89ms CPU time): 23 tests passed, 0 failed, 0 skipped (23 total tests)\n","passed":true},{"durationMs":46,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SqueekstrToken.approve(address,uint256)\",\"SqueekstrToken.burn(uint256)\",\"SqueekstrToken.permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\",\"SqueekstrToken.transfer(address,uint256)\",\"SqueekstrToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"README.md\":113,\"foundry.toml\":19,\"remappings.txt\":2,\"script/DeploySqueekstrToken.s.sol\":25,\"src/SqueekstrToken.sol\":37,\"test/SqueekstrToken.t.sol\":364},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":1342,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":458,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/SqueekstrToken.sol:24: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"e2a22577d75e9ceb045f3d9edd8104e376d853d52e250e17032457094ca6587b","verifiedTreeHash":"1c6554c1bcc230db5ccb97a01b9abc9f5fac9635","verifierVersion":"0.1.0+b51cee5a"}]}