{"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":"e098bf16-c7fb-498c-a1a1-11c055a9c5ea","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"ea743a7d95c3dd3c195c1eaaf25f954c521465b9e0317015f687bd14f3d11310","dependsOn":["build_contract_project","write_foundry_tests","manifest"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_economics","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"143c06322cf654754e4325769066f0448beed87adede4ec527087734f4e7e6b1","dependsOn":["build_contract_project","write_foundry_tests","manifest"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_flow","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"69d0ab937288b54fad2f1956a650f0a8d2449431bae99477b35eae3d686a6093","dependsOn":["build_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"3014f1ea5961918ca059453a484bf4c8bcbbfc2248dbe31d94ac7c5cdf8f50bd","skillId":"audit-judge","tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"3014f1ea5961918ca059453a484bf4c8bcbbfc2248dbe31d94ac7c5cdf8f50bd","skillId":"audit-judge","state":"accepted"},{"acceptedSubmissionHash":"b17ea7dcbdcf917d00fca0435e538ebdf8dc35a7292beb2c051d4e28c622fff1","dependsOn":["build_contract_project","write_foundry_tests","manifest"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_math","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"1e88abbb9cab3bb8b63cdb12efab1c5eba71bb3ddda3d9445e1107675046a755","dependsOn":["build_contract_project","write_foundry_tests","manifest"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_permissions","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"d48095261470564b9b89982fbb901ec498f2376802553ca480fab225db911c6f","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"587567a5ef71546b5973ceaf6ef1dbbd590f49503b5ac9a6973ed86b89584857","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"587567a5ef71546b5973ceaf6ef1dbbd590f49503b5ac9a6973ed86b89584857","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"7b4093ca81289be4dea0b0623366266055fb984b67c57edf0f435e824cf1770e","dependsOn":["build_contract_project","write_foundry_tests"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"0e98e4b98ad82b68a6c8fa43fffc430f6c586f8ef1ab20e93beb31b274ffbf18","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","state":"accepted"}],"objective":"[SIMD-LAUNCH]\nToken name: SIMDTEST\nToken symbol: SIMDTEST\n\nThe token named SIMDTEST with symbol SIMDTEST is launched with a total fixed supply of 1,000,000,000 tokens (18 decimals), of which 90% seeds the liquidity pool paired with IMD. The project simulates a fair launch on the SIMD Launchpad, implementing launch protection via a Uniswap v4 hook contract named SIMDTESTHook. \n\nSIMDTESTHook acts on the univ4_hook swap callback. For the first 10 blocks after pool open, it applies an anti-snipe fee starting at 30% and linearly decaying each block to 0% by block 10. This extra fee is collected on swaps and immediately donated to the pool's in-range liquidity via PoolManager's donate function, thus increasing liquidity and not burning or transferring paired tokens elsewhere. \n\nAdditionally, for the first 1 hour (block timestamp based) after pool opening, every buy swap (token purchased via pool) is limited to a maximum of 1% of the total token supply to prevent large initial buys. This max buy limit only applies on the buy side; sells or transfers are unrestricted. \n\nThe hook charges only these swap fees on top of the pool's default 1.25% fee. No other fees, taxes, minting, pausing, or ownership controls exist. The hook is not upgradeable and has no owner or admin roles, ensuring immutable, decentralized rules.\n\nNo extra contracts are deployed such as staking vaults. All mechanics live entirely within SIMDTESTHook.\n\nTesting must cover these scenarios: swaps during the first 10 blocks triggering anti-snipe fees that decay correctly; attempts to buy over 1% supply in first hour rejected; normal swaps after anti-snipe and max buy periods proceed without extra fees or limits; donated fees correctly augment liquidity without removing paired tokens; all flows with correct fee accounting per SIMD rules.\n\nThis preserves a truly fair launch with anti-snipe measures and per-swap max buy limits for early launch integrity while maintaining full on-chain transparency and no privilege concerns.\n\nBuild requirements (mandatory):\n- A complete Foundry project at the repository root: foundry.toml with solc 0.8.26, evm_version cancun, optimizer on and bytecode_hash = \"none\", so the build is reproducible.\n- Contracts: SIMDTESTHook. The hook is the hook of this launch's pool; keep its creation code within the EIP-3860 size limit.\n- No selfdestruct and no delegatecall anywhere in runtime code. No proxies, no owner, no upgradeability.\n- Chain: Ethereum mainnet (chainId 1). Uniswap v4 PoolManager: 0x000000000004444c5dc75cB358380D2e3dE08A90 (pass it to the hook constructor).\n- Paired currency: IMD, the ERC-20 at 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7 on Ethereum mainnet (18 decimals).\n- Every address the hook needs is known now and fixed at deployment; nothing may require an owner or a setter after launch.\n- launch.json pool: pairedCurrency 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7, fee 12500, tickSpacing 60, initialPrice \"79228162514264337593543950336\" (provenance only; the launch factory sets the opening price from the economics).","parentJobId":null,"planHash":"a29f4231eb16d111749568f05c7e5af405f4ca28e3ab013419d196611e7af895","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"e098bf16-c7fb-498c-a1a1-11c055a9c5ea","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-972-simdtest"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52095","feedbackHash":"f9580540b02569d12464258063d2bd40dd6bcedcdf1fb7d24d3f43c8697d0c1a","nodeKey":"audit_economics","submissionHash":"ea743a7d95c3dd3c195c1eaaf25f954c521465b9e0317015f687bd14f3d11310","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51983","feedbackHash":"18bdae4730fb4b0ab112b3906a2ebc70b2d673a98e730f4bf1380a70d6ef426f","nodeKey":"audit_flow","submissionHash":"143c06322cf654754e4325769066f0448beed87adede4ec527087734f4e7e6b1","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52090","feedbackHash":"ee3526ba59abaf43f322628acd07b31d9cabbf453a45f883d952956e922c2950","nodeKey":"audit_judge","submissionHash":"69d0ab937288b54fad2f1956a650f0a8d2449431bae99477b35eae3d686a6093","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51033","feedbackHash":"f0ab88c2b2fdf1a7d8201165b35016a4146be0f13549161d597b1336c3c6221c","nodeKey":"audit_math","submissionHash":"b17ea7dcbdcf917d00fca0435e538ebdf8dc35a7292beb2c051d4e28c622fff1","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51357","feedbackHash":"06a6992f75fbb12d1a053c3d06ef8b00a912bec22d61d772610cfbd447c96a10","nodeKey":"audit_permissions","submissionHash":"1e88abbb9cab3bb8b63cdb12efab1c5eba71bb3ddda3d9445e1107675046a755","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51046","feedbackHash":"21837b9b5915b3a9e66b63b8a798ca77bec8a9da9e82d6e1ac0fe3f831744676","nodeKey":"build_contract_project","submissionHash":"d48095261470564b9b89982fbb901ec498f2376802553ca480fab225db911c6f","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52012","feedbackHash":"28b41599789d642951d8348f05decd16832a436ca488c8a76a10d084d53c04ea","nodeKey":"build_contract_project","submissionHash":"369fecfd45dff5a7a38066bf22c0dfed99b861d88e35f3e6acdc44ce89dd51f3","tag1":"verification:checks","tag2":"acceptance-v2","value":0},{"agentId":"51549","feedbackHash":"80fd9b481566f8baeabff1cce66ae52d58823a257abb8d1c57da44aec54d15f7","nodeKey":"build_contract_project","submissionHash":"a5ae5d67e437ee397946f0bec65112833ab3b2ffe15efbe6a049fcd7737d19b6","tag1":"verification:checks","tag2":"acceptance-v2","value":0},{"agentId":"51455","feedbackHash":"09b72f96be4e71a0d0a78a1a9cbbba00467c500cb444e0c6ec5ab4cb69d8977f","nodeKey":"manifest","submissionHash":"7b4093ca81289be4dea0b0623366266055fb984b67c57edf0f435e824cf1770e","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52087","feedbackHash":"0f31012c0a0b2089fb990049a2843b968bcfc6a1687aa9770adebdfb1ae67d09","nodeKey":"write_foundry_tests","submissionHash":"0e98e4b98ad82b68a6c8fa43fffc430f6c586f8ef1ab20e93beb31b274ffbf18","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"c5424be124fc5e2673396a83b336cd041b5bcc1dfca8a79b9141f20cae56d4fe","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"32f8ccb2ba729726928a707d27369f170b968bbae877b0ae561c346751c7891f","device":"553a378efc6a19cb","findings":[],"hash":"0e98e4b98ad82b68a6c8fa43fffc430f6c586f8ef1ab20e93beb31b274ffbf18","nodeId":"dcf0ff50-9d3b-4205-84f4-a3b31613a055","outcome":"completed","summary":"Added adversarial fee-accounting, rollback, boundary, and asset-conservation invariant tests for both currency orderings.\n\nValidation passed:\n- `forge build`\n- `forge test`: **73 passed, 0 failed**\n- 1,000 cases per fuzz property\n- 32,768 randomized invariant calls\n\nOnly `test/` changed. No implementation defects were reproduced. Live-mainnet fork validation remains unperformed.","treeHash":"b23a4022fe5d4fbf200377182d542f1501d1c33d","usage":{"cachedInputTokens":1311872,"inputTokens":84912,"model":"gpt-6-astra","outputTokens":19762,"runtime":"codex","turns":6,"wallClockMs":699298}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"90675b3128fe9096","findings":[],"hash":"143c06322cf654754e4325769066f0448beed87adede4ec527087734f4e7e6b1","nodeId":"0f879c05-55ce-499f-8a62-9eff5a4b9094","outcome":"completed","summary":"No substantiated defects found. Recorded findings and coverage for all five required entry points in [.imd-findings.json](/home/imd/.identitymd/work/e098bf16-c7fb-498c-a1a1-11c055a9c5ea/0f879c05-55ce-499f-8a62-9eff5a4b9094/.imd-findings.json).\n\nThe offline Foundry suite passed. Production files remain unchanged. Live mainnet deployment integration was not verified.","treeHash":null,"usage":{"cachedInputTokens":445184,"inputTokens":114678,"model":"gpt-6-astra","outputTokens":5642,"runtime":"codex","turns":4,"wallClockMs":240032}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"7eb57f222fe63696","findings":[],"hash":"1e88abbb9cab3bb8b63cdb12efab1c5eba71bb3ddda3d9445e1107675046a755","nodeId":"0df41a3d-d531-468b-875b-367f13d2218f","outcome":"completed","summary":"Wrote [.imd-findings.json](/root/.identitymd/work/e098bf16-c7fb-498c-a1a1-11c055a9c5ea/0df41a3d-d531-468b-875b-367f13d2218f/.imd-findings.json): no substantiated defects in the assigned area; all five required entry points covered.\n\nAll 73 offline Foundry tests passed. Production factory behavior and live mainnet dependencies remain unverified. No source files changed.","treeHash":null,"usage":{"cachedInputTokens":586112,"inputTokens":101189,"model":"gpt-6-astra","outputTokens":5769,"runtime":"codex","turns":4,"wallClockMs":206344}},{"artifacts":[],"attempt":2,"bundleHash":"c7edc0e6e0d7294208f7dba4f64d3f4f0359e5a3260ac71909132c268404e174","device":"8687b633e8d497b9","findings":[],"hash":"369fecfd45dff5a7a38066bf22c0dfed99b861d88e35f3e6acdc44ce89dd51f3","nodeId":"b52cf842-dfa5-43a3-b646-e4a9da0b75f5","outcome":"completed","summary":"Implemented SIMDTEST, the immutable launch hook, vendored dependencies, tests, and the corrected `univ4_hook` manifest.\n\nVerified:\n\n- `forge build`\n- `forge test` — 64 passing\n- `forge fmt --check`\n- Size and forbidden-opcode checks\n\nDeployment assumptions and the factory’s 90% liquidity-seeding responsibility are documented in `README.md`.","treeHash":"fd534eab39fe526c7c4d59f52e62891f2dd1096d","usage":{"cachedInputTokens":1854976,"inputTokens":109074,"model":"gpt-6-astra","outputTokens":36463,"runtime":"codex","turns":8,"wallClockMs":1137978}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"aa417d85641c229d","findings":[{"citation":"resolved","description":"The documented offline release checker unconditionally indexes chainId, token.totalSupply (line 40), and token.constructorArgs (line 44). These fields are absent from the current launch.json and excluded by the supplied canonical LaunchManifest schema. Consequently the checker always aborts before validating ABIs, deployable bytecode, prohibited opcodes, compiler settings, or dependency hashes. This is one stale-schema integration defect, not three separate findings. Update the checker to validate the accepted manifest fields and obtain chain/supply evidence from their actual authoritative inputs; do not add unsupported fields to launch.json.","line":35,"path":"script/check_release.py","reproduction":"Against the unmodified tree, run `python3 script/check_release.py` from the repository root. Actual: exit status 1 with `KeyError: 'chainId'` at line 35, immediately after parsing launch.json and before artifact inspection. Expected: the current schema-valid manifest passes manifest validation and the checker proceeds to its ABI/bytecode/dependency checks. The current manifest also has no token.totalSupply or token.constructorArgs, so removing only line 35 leaves the same defect at lines 40 and 44.","severity":"low","snippet":"check(manifest[\"chainId\"] == 1, \"Wrong chain\")","title":"Release checker rejects the current schema-valid launch manifest"},{"citation":"resolved","description":"Eighteen entries in the committed dependency checksum manifest disagree with the corresponding vendored files, including PoolManager.sol, Hooks.sol, and Pool.sol. The release checker consumes this manifest and requires every digest to match, so its dependency stage will still reject the current tree after its separate launch-schema defect is repaired. This prevents the documented offline integrity check from accepting the deliverable; it does not by itself establish a runtime vulnerability or malicious library modification. Reconcile the intended reviewed dependency bytes and regenerate the checksum manifest for those exact bytes.","line":4,"path":"DEPENDENCIES.sha256","reproduction":"Run `sha256sum --check --quiet DEPENDENCIES.sha256` from the unchanged repository root. Expected: exit 0 with all vendored files matching. Actual: exit 1, eighteen FAILED entries, and 'WARNING: 18 computed checksums did NOT match'. For a single concrete example, `sha256sum lib/forge-std/src/StdAssertions.sol` returns 3fbf4a025b4fc94eaca4c38c1f3dacb37bee10f12ee81994cfaf365ac1ce7384, whereas DEPENDENCIES.sha256 line 4 records d4c89eec70d267dec6188461fbc74d3dc8c47e518d176a23417533a232ed9780.","severity":"low","snippet":"d4c89eec70d267dec6188461fbc74d3dc8c47e518d176a23417533a232ed9780  lib/forge-std/src/StdAssertions.sol","title":"Dependency integrity manifest does not match the committed libraries"}],"hash":"69d0ab937288b54fad2f1956a650f0a8d2449431bae99477b35eae3d686a6093","nodeId":"d4e1775a-e30f-41cb-b7be-4b62451e1600","outcome":"completed","summary":"Wrote [.imd-findings.json](/home/seat22/.identitymd/work/e098bf16-c7fb-498c-a1a1-11c055a9c5ea/d4e1775a-e30f-41cb-b7be-4b62451e1600/.imd-findings.json) with two reproduced low-severity findings:\n\n- Release checker reads unsupported manifest fields.\n- 18 dependency checksums mismatch committed files.\n\nCovered all five required entry points. Offline build, formatting, and all 73 tests passed on two seeds. No Solidity defect substantiated; live mainnet integration remains unverified.","treeHash":null,"usage":{"cachedInputTokens":1241088,"inputTokens":130181,"model":"gpt-6-astra","outputTokens":8716,"runtime":"codex","turns":5,"wallClockMs":372599}},{"artifacts":[],"attempt":1,"bundleHash":"41b759a4bba929d1f3216e081b0483e316c16ccbee26d792b24b0080aa9df449","device":"7989aa5d838d11d9","findings":[],"hash":"7b4093ca81289be4dea0b0623366266055fb984b67c57edf0f435e824cf1770e","nodeId":"9fa7ecd9-cab4-465e-bda3-521a7fb5ca34","outcome":"completed","summary":"Updated only `launch.json`, removing unsupported fields and documenting the actual hook behavior.\n\nValidation passed: supplied schema, constructor arguments, permissions, and pool parameters. `forge build` succeeded with lint warnings; `forge test` passed all 73 tests.","treeHash":"f36b96d7fef7d7d80e2acc149475afba2a4b936e","usage":{"cachedInputTokens":217472,"inputTokens":42612,"model":"gpt-6-astra","outputTokens":3256,"runtime":"codex","turns":3,"wallClockMs":164392}},{"artifacts":[],"attempt":1,"bundleHash":"28acea2c63351eb72bd787dc2cc4d0ff6bce2378e8063ee49c3dc23fd381e481","device":"d25fbf67753e5494","findings":[],"hash":"a5ae5d67e437ee397946f0bec65112833ab3b2ffe15efbe6a049fcd7737d19b6","nodeId":"b52cf842-dfa5-43a3-b646-e4a9da0b75f5","outcome":"completed","summary":"Implemented the Foundry project with SIMDTEST, SIMDTESTHook, vendored dependencies, launch manifest, deployment preparation, and documentation.\n\nValidation passed:\n- `forge build`\n- `forge test`: 50 tests\n- `forge fmt --check`\n\nThe [README](/home/imd-worker/.identitymd/work/e098bf16-c7fb-498c-a1a1-11c055a9c5ea/b52cf842-dfa5-43a3-b646-e4a9da0b75f5/README.md) documents fee accounting assumptions and the factory’s responsibility to seed 90% of supply atomically. Hook init code is within EIP-3860 limits. No transactions were broadcast.","treeHash":"d5773bddba5b6b1ffcf0f502d5a3bbbaea46db30","usage":{"cachedInputTokens":1239936,"inputTokens":89102,"model":"gpt-6-astra","outputTokens":24674,"runtime":"codex","turns":6,"wallClockMs":810449}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"8576036969b9332c","findings":[],"hash":"b17ea7dcbdcf917d00fca0435e538ebdf8dc35a7292beb2c051d4e28c622fff1","nodeId":"1c0762ab-60fb-4140-8be4-b0effc51ba62","outcome":"completed","summary":"Completed the review and saved [.imd-findings.json](/home/imd/.identitymd-2/work/e098bf16-c7fb-498c-a1a1-11c055a9c5ea/1c0762ab-60fb-4140-8be4-b0effc51ba62/.imd-findings.json).\n\nNo substantiated defects in the assigned math scope. All five entry points are covered. All 73 Foundry tests passed; validation used mock IMD without a mainnet fork.","treeHash":null,"usage":{"cachedInputTokens":676736,"inputTokens":100878,"model":"gpt-6-astra","outputTokens":7286,"runtime":"codex","turns":5,"wallClockMs":276265}},{"artifacts":[],"attempt":3,"bundleHash":"6c1b2f436c45a27d3abe65cd13bb350cee540463d9bb74c59c2957b5afd8dce3","device":"02ae6543274731ab","findings":[],"hash":"d48095261470564b9b89982fbb901ec498f2376802553ca480fab225db911c6f","nodeId":"b52cf842-dfa5-43a3-b646-e4a9da0b75f5","outcome":"completed","summary":"Implemented contracts, corrected `launch.json`, vendored dependencies, and deployment documentation.\n\nPassed `forge build`, all 55 tests, `forge fmt --check`, and manifest/bytecode checks.\n\nFee-bearing exact-input buys and exact-output sells require full fills. Atomic launch and 90% liquidity-seeding responsibilities are documented in [README.md](/home/imd-worker/.identitymd/work/e098bf16-c7fb-498c-a1a1-11c055a9c5ea/b52cf842-dfa5-43a3-b646-e4a9da0b75f5/README.md).","treeHash":"1819aab57333c97e1d3ec04dff11a0f551d1d350","usage":{"cachedInputTokens":1406464,"inputTokens":101281,"model":"gpt-6-astra","outputTokens":29194,"runtime":"codex","turns":7,"wallClockMs":973992}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"8310b806f0fcfbea","findings":[],"hash":"ea743a7d95c3dd3c195c1eaaf25f954c521465b9e0317015f687bd14f3d11310","nodeId":"320a74e1-5323-4346-8d07-57aaf5e76009","outcome":"completed","summary":"Saved [`.imd-findings.json`](/home/imd14/.identitymd/work/e098bf16-c7fb-498c-a1a1-11c055a9c5ea/320a74e1-5323-4346-8d07-57aaf5e76009/.imd-findings.json).\n\nNo substantiated defects found. All five entry points covered; all 73 Foundry tests passed. Mainnet dependencies and factory allocation remain unverified. No source files changed.","treeHash":null,"usage":{"cachedInputTokens":664576,"inputTokens":97135,"model":"gpt-6-astra","outputTokens":6869,"runtime":"codex","turns":4,"wallClockMs":264711}}],"verification":[{"checks":[{"durationMs":3873,"exitCode":0,"name":"build","output":"Compiling 84 files with Solc 0.8.26\nSolc 0.8.26 finished in 3.68s\nCompiler run successful!\nwarning[missing-zero-check]: address parameter is used in a state write or value transfer without a zero-address check\n   ╭▸ src/SIMDTESTHook.sol:51:40\n   │\n51 │     constructor(IPoolManager manager_, address token_) {\n   │                                        ━━━━━━━━━━━━━━\n   │\n   ╰ help: https://getfoundry.sh/forge/linting/missing-zero-check\n\nwarning[uninitialized-local]: local variable is read before being initialized\n    ╭▸ src/SIMDTESTHook.sol:115:70\n    │\n115 │         return (IHooks.beforeSwap.selector, toBeforeSwapDelta(int256(fee).toInt128(), 0), 0);\n    │                                                                      ━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/uninitialized-local\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:115:63\n    │\n115 │         return (IHooks.beforeSwap.selector, toBeforeSwapDelta(int256(fee).toInt128(), 0), 0);\n    │                                                               ━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[uninitialized-local]: local variable is read before being initialized\n    ╭▸ src/SIMDTESTHook.sol:153:34\n    │\n153 │         int128 feeDelta = int256(fee).toInt128();\n    │                                  ━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/uninitialized-local\n\nwarning[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n    ╭▸ src/SIMDTESTHook.sol:128:20\n    │\n128 │         if (buy && block.timestamp - openingTimestamp < BUY_LIMIT_DURATION && tokenDelta > int256(MAX_BUY)) {\n    │                    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/block-timestamp\n\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n    ╭▸ src/SIMDTESTHook.sol:158:13\n    │\n158 │             emit AntiSnipeDonation(poolId, rate, fee);\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:128:92\n    │\n128 │         if (buy && block.timestamp - openingTimestamp < BUY_LIMIT_DURATION && tokenDelta > int256(MAX_BUY)) {\n    │                                                                                            ━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:129:35\n    │\n129 │             revert MaxBuyExceeded(uint256(int256(tokenDelta)), MAX_BUY);\n    │                                   ━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:142:75\n    │\n142 │             if (fee != 0 && int256(pairDelta) != params.amountSpecified + int256(fee)) {\n    │                                                                           ━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:147:19\n    │\n147 │             fee = uint256(-int256(pairDelta)) * rate / (FEE_DENOMINATOR - rate);\n    │                   ━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:150:19\n    │\n150 │             fee = uint256(int256(pairDelta)) * rate / FEE_DENOMINATOR;\n    │                   ━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:153:27\n    │\n153 │         int128 feeDelta = int256(fee).toInt128();\n    │                           ━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unused-return]: return value of an external call is not used\n    ╭▸ src/SIMDTESTHook.sol:157:13\n    │\n157 │             poolManager.donate(key, pairedIsCurrency0 ? fee : 0, pairedIsCurrency0 ? 0 : fee, \"\");\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/unused-return\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:173:19\n    │\n173 │             fee = uint256(-amount) * rate / FEE_DENOMINATOR;\n    │                   ━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:175:19\n    │\n175 │             fee = uint256(amount) * rate / (FEE_DENOMINATOR - rate);\n    │                   ━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:176:17\n    │\n176 │             if (uint256(amount) + fee > uint256(uint128(type(int128).max))) revert SwapAmountTooLarge();\n    │                 ━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:176:41\n    │\n176 │             if (uint256(amount) + fee > uint256(uint128(type(int128).max))) revert SwapAmountTooLarge();\n    │                                         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:176:49\n    │\n176 │             if (uint256(amount) + fee > uint256(uint128(type(int128).max))) revert SwapAmountTooLarge();\n    │                                                 ━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\n","passed":true},{"durationMs":6286,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 3 tests for test/SIMDTEST.t.sol:SIMDTESTTest\n[PASS] testAllowanceAndInsufficientBalanceFailures() (gas: 174202)\n[PASS] testMetadataSupplyAndTransfers() (gas: 134223)\n[PASS] testNoAdministrativeOrMintEntryPoints() (gas: 74372)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 1.51ms (1.07ms CPU time)\n\nRan 26 tests for test/SIMDTESTHook.t.sol:SIMDTESTHookPair1Test\n[PASS] testAllTenBlocksAndEndDonateExactAmounts() (gas: 18907623)\n[PASS] testBuyCapExactInputRevertsWithoutTakingFunds() (gas: 446478)\n[PASS] testBuyCapExactOutputAndOneWeiOver() (gas: 277828)\n[PASS] testBuyCapIsPerSwapNotCumulative() (gas: 408146)\n[PASS] testBuyCapTimeBoundaryAndNoSellOrTransferLimit() (gas: 1168654)\n[PASS] testCannotDonateWithoutActiveLiquidityRollsBackSwap() (gas: 1020532)\n[PASS] testCannotReinitializeOrResetClock() (gas: 60890)\n[PASS] testCreationAndRuntimeSize() (gas: 11763)\n[PASS] testDonationCanBeCollectedByInRangeLP() (gas: 487265)\n[PASS] testEmptyPoolUnspecifiedSwapHasNoFee() (gas: 670110)\n[PASS] testFuzzFeeAccounting(bool,bool,uint88,uint8) (runs: 1000, μ: 456634, ~: 453955)\nLogs:\n  Bound result 99999000000000000004931\n  Bound result 0\n\n[PASS] testInitializationAndPermissions() (gas: 97040)\n[PASS] testInvalidConstructorInputs() (gas: 661192)\n[PASS] testLargeSellsDuringAntiSnipeHaveNoBuyCap() (gas: 887511)\n[PASS] testNormalSwapsAfterBothPeriods() (gas: 1645680)\n[PASS] testOutOfRangeLiquidityReceivesNoDonation() (gas: 701652)\n[PASS] testOversizedSpecifiedAmountsRejectBeforeArithmetic() (gas: 118958)\n[PASS] testPartialFillsAllowedAfterAntiSnipe() (gas: 258128)\n[PASS] testPartialSpecifiedFeeRevertsAtomically() (gas: 354281)\n[PASS] testPoolCannotInitializeBeforeHookDeployment() (gas: 1043860)\n[PASS] testSwapBeforeOpenAndWrongAddressMask() (gas: 973907)\n[PASS] testTimeAndBlockWindowsIndependent() (gas: 458369)\n[PASS] testTinyAmountsRoundDownWithoutUnsettledFees() (gas: 20166831)\n[PASS] testUnauthorizedCallbacks() (gas: 85673)\n[PASS] testUnspecifiedPairPartialFillsChargeOnlyExecutedAmount() (gas: 506174)\n[PASS] testWrongPoolKeysRejected() (gas: 650716)\nSuite result: ok. 26 passed; 0 failed; 0 skipped; finished in 203.79ms (206.47ms CPU time)\n\nRan 26 tests for test/SIMDTESTHook.t.sol:SIMDTESTHookPair0Test\n[PASS] testAllTenBlocksAndEndDonateExactAmounts() (gas: 18900634)\n[PASS] testBuyCapExactInputRevertsWithoutTakingFunds() (gas: 459099)\n[PASS] testBuyCapExactOutputAndOneWeiOver() (gas: 287796)\n[PASS] testBuyCapIsPerSwapNotCumulative() (gas: 412234)\n[PASS] testBuyCapTimeBoundaryAndNoSellOrTransferLimit() (gas: 1166631)\n[PASS] testCannotDonateWithoutActiveLiquidityRollsBackSwap() (gas: 1027070)\n[PASS] testCannotReinitializeOrResetClock() (gas: 60890)\n[PASS] testCreationAndRuntimeSize() (gas: 11763)\n[PASS] testDonationCanBeCollectedByInRangeLP() (gas: 480862)\n[PASS] testEmptyPoolUnspecifiedSwapHasNoFee() (gas: 663616)\n[PASS] testFuzzFeeAccounting(bool,bool,uint88,uint8) (runs: 1000, μ: 456468, ~: 460104)\nLogs:\n  Bound result 99999000000000000006589\n  Bound result 15\n\n[PASS] testInitializationAndPermissions() (gas: 97040)\n[PASS] testInvalidConstructorInputs() (gas: 661192)\n[PASS] testLargeSellsDuringAntiSnipeHaveNoBuyCap() (gas: 881757)\n[PASS] testNormalSwapsAfterBothPeriods() (gas: 1657511)\n[PASS] testOutOfRangeLiquidityReceivesNoDonation() (gas: 697865)\n[PASS] testOversizedSpecifiedAmountsRejectBeforeArithmetic() (gas: 118958)\n[PASS] testPartialFillsAllowedAfterAntiSnipe() (gas: 264230)\n[PASS] testPartialSpecifiedFeeRevertsAtomically() (gas: 354383)\n[PASS] testPoolCannotInitializeBeforeHookDeployment() (gas: 1043860)\n[PASS] testSwapBeforeOpenAndWrongAddressMask() (gas: 973896)\n[PASS] testTimeAndBlockWindowsIndependent() (gas: 463242)\n[PASS] testTinyAmountsRoundDownWithoutUnsettledFees() (gas: 20210169)\n[PASS] testUnauthorizedCallbacks() (gas: 85482)\n[PASS] testUnspecifiedPairPartialFillsChargeOnlyExecutedAmount() (gas: 514022)\n[PASS] testWrongPoolKeysRejected() (gas: 650705)\nSuite result: ok. 26 passed; 0 failed; 0 skipped; finished in 217.15ms (232.65ms CPU time)\n\nRan 8 tests for test/SIMDTESTHookAdversarial.t.sol:SIMDTESTHookAdversarialPair0Test\n[PASS] testFuzz_CapViolationRollsBackAllAccounting(uint96,uint16,uint8) (runs: 1000, μ: 697843, ~: 699617)\nLogs:\n  Bound result 7013\n  Bound result 0\n  Bound result 2\n\n[PASS] testFuzz_MatchesIndependentPoolPlusOnlyIMDDonation(bool,bool,uint96,uint8,bool) (runs: 1000, μ: 1018466, ~: 1027301)\nLogs:\n  Bound result 12\n  Bound result 263735529443244568043560\n\n[PASS] testFuzz_SpecifiedFeeAtInt128Boundary(uint8,uint128) (runs: 1000, μ: 71865, ~: 72121)\nLogs:\n  Bound result 2\n  Bound result 1\n\n[PASS] test_AfterSwapBeforeOpeningCannotStartClock() (gas: 941760)\n[PASS] test_AllPoolKeyFieldsAreBoundForBothSwapCallbacks() (gas: 285133)\n[PASS] test_CorrectSupplyWithWrongDecimalsIsRejected() (gas: 569655)\n[PASS] test_FailedSettlementRollsBackSwapAndDonation() (gas: 687035)\n[PASS] test_ZeroSwapRevertsAndPreservesState() (gas: 334931)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 247.63ms (697.97ms CPU time)\n\nRan 8 tests for test/SIMDTESTHookAdversarial.t.sol:SIMDTESTHookAdversarialPair1Test\n[PASS] testFuzz_CapViolationRollsBackAllAccounting(uint96,uint16,uint8) (runs: 1000, μ: 687945, ~: 689649)\nLogs:\n  Bound result 5400\n  Bound result 0\n  Bound result 6\n\n[PASS] testFuzz_MatchesIndependentPoolPlusOnlyIMDDonation(bool,bool,uint96,uint8,bool) (runs: 1000, μ: 1018703, ~: 1016216)\nLogs:\n  Bound result 3\n  Bound result 768\n\n[PASS] testFuzz_SpecifiedFeeAtInt128Boundary(uint8,uint128) (runs: 1000, μ: 71871, ~: 72272)\nLogs:\n  Bound result 5\n  Bound result 14\n\n[PASS] test_AfterSwapBeforeOpeningCannotStartClock() (gas: 941951)\n[PASS] test_AllPoolKeyFieldsAreBoundForBothSwapCallbacks() (gas: 286143)\n[PASS] test_CorrectSupplyWithWrongDecimalsIsRejected() (gas: 569655)\n[PASS] test_FailedSettlementRollsBackSwapAndDonation() (gas: 693376)\n[PASS] test_ZeroSwapRevertsAndPreservesState() (gas: 335122)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 247.61ms (485.02ms CPU time)\n\nRan 1 test for test/SIMDTESTLaunchInvariant.t.sol:SIMDTESTLaunchPair0Invariant\n[PASS] invariant_ConservationSettlementAndImmutableLaunchRules() (runs: 256, calls: 16384, reverts: 0)\n\n╭---------------+-----------------+-------+---------+----------╮\n| Contract      | Selector        | Calls | Reverts | Discards |\n+==============================================================+\n| LaunchHandler | advance         | 2716  | 0       | 0        |\n|---------------+-----------------+-------+---------+----------|\n| LaunchHandler | changeLiquidity | 2726  | 0       | 0        |\n|---------------+-----------------+-------+---------+----------|\n| LaunchHandler | collectFees     | 2716  | 0       | 0        |\n|---------------+-----------------+-------+---------+----------|\n| LaunchHandler | rejectOverCap   | 2811  | 0       | 0        |\n|---------------+-----------------+-------+---------+----------|\n| LaunchHandler | swap            | 2764  | 0       | 0        |\n|---------------+-----------------+-------+---------+----------|\n| LaunchHandler | transferTokens  | 2651  | 0       | 0        |\n╰---------------+-----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 1\n  Bound result 20000000000000000000000000\n  Bound result 20000000000000000000000000\n  Bound result 2\n  Bound result 15\n  Bound result 13855\n  Bound result 2\n  Bound result 64\n  Bound result 16645\n  Bound result 8374\n  Bound result 3861348269\n  Bound result 250846590650933742040698\n  Bound result 614\n  Bound result 1507\n  Bound result 7596\n  Bound result 0\n  Bound result 2\n  Bound result 776\n  Bound result 14916\n  Bound result 65\n  Bound result 7859\n  Bound result 4596\n  Bound result 0\n  Bound result 3327641369\n  Bound result 0\n  Bound result 12166\n  Bound result 2\n  Bound result 4\n  Bound result 0\n  Bound result 3033974659\n  Bound result 432488678688653394187089\n  Bound result 1\n  Bound result 202184786129170594464417\n  Bound result 2\n  Bound result 617\n  Bound result 2418890149\n  Bound result 162514264337593543950334\n  Bound result 1670\n  Bound result 0\n  Bound result 39\n  Bound result 14333\n  Bound result 2775\n  Bound result 6637\n  Bound result 11086\n  Bound result 3\n  Bound result 787\n  Bound result 1266600\n  Bound result 2\n  Bound result 100\n  Bound result 15486\n  Bound result 0\n  Bound result 0\n  Bound result 892\n  Bound result 15884\n  Bound result 1\n  Bound result 128\n  Bound result 57882382845791608488447\n  Bound result 1264\n  Bound result 1\n  Bound result 1842\n  Bound result 524287\n  Bound result 6339\n  Bound result 0\n  Bound result 255\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 5.98s (5.96s CPU time)\n\nRan 1 test for test/SIMDTESTLaunchInvariant.t.sol:SIMDTESTLaunchPair1Invariant\n[PASS] invariant_ConservationSettlementAndImmutableLaunchRules() (runs: 256, calls: 16384, reverts: 0)\n\n╭---------------+-----------------+-------+---------+----------╮\n| Contract      | Selector        | Calls | Reverts | Discards |\n+==============================================================+\n| LaunchHandler | advance         | 2716  | 0       | 0        |\n|---------------+-----------------+-------+---------+----------|\n| LaunchHandler | changeLiquidity | 2726  | 0       | 0        |\n|---------------+-----------------+-------+---------+----------|\n| LaunchHandler | collectFees     | 2716  | 0       | 0        |\n|---------------+-----------------+-------+---------+----------|\n| LaunchHandler | rejectOverCap   | 2811  | 0       | 0        |\n|---------------+-----------------+-------+---------+----------|\n| LaunchHandler | swap            | 2764  | 0       | 0        |\n|---------------+-----------------+-------+---------+----------|\n| LaunchHandler | transferTokens  | 2651  | 0       | 0        |\n╰---------------+-----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 1\n  Bound result 20000000000000000000000000\n  Bound result 20000000000000000000000000\n  Bound result 2\n  Bound result 15\n  Bound result 11854\n  Bound result 2\n  Bound result 64\n  Bound result 15417\n  Bound result 2094\n  Bound result 3861348269\n  Bound result 250846590650933742040698\n  Bound result 14430\n  Bound result 2465\n  Bound result 19128\n  Bound result 0\n  Bound result 2\n  Bound result 776\n  Bound result 12449\n  Bound result 65\n  Bound result 5162\n  Bound result 6735\n  Bound result 0\n  Bound result 17061\n  Bound result 0\n  Bound result 10570\n  Bound result 2\n  Bound result 4\n  Bound result 0\n  Bound result 3888\n  Bound result 13637\n  Bound result 1\n  Bound result 9416\n  Bound result 2\n  Bound result 129\n  Bound result 496\n  Bound result 162514264337593543950334\n  Bound result 16976\n  Bound result 0\n  Bound result 5\n  Bound result 2807050960812170793582232\n  Bound result 396\n  Bound result 6637\n  Bound result 9477\n  Bound result 3\n  Bound result 787\n  Bound result 1266600\n  Bound result 3\n  Bound result 100\n  Bound result 13222\n  Bound result 0\n  Bound result 0\n  Bound result 892\n  Bound result 14216\n  Bound result 1\n  Bound result 128\n  Bound result 57882382845791608488447\n  Bound result 169\n  Bound result 17835\n  Bound result 552\n  Bound result 10540\n  Bound result 3434\n  Bound result 2\n  Bound result 255\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 6.18s (6.16s CPU time)\n\nRan 7 test suites in 6.19s (13.08s CPU time): 73 tests passed, 0 failed, 0 skipped (73 total tests)\n","passed":true},{"durationMs":45,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SIMDTEST.approve(address,uint256)\",\"SIMDTEST.transfer(address,uint256)\",\"SIMDTEST.transferFrom(address,address,uint256)\",\"SIMDTESTHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"SIMDTESTHook.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":16,\"DEPENDENCIES.sha256\":82,\"README.md\":172,\"foundry.toml\":24,\"launch.json\":24,\"script/check_release.py\":83,\"src/SIMDTEST.sol\":11,\"src/SIMDTESTHook.sol\":188,\"test/SIMDTEST.t.sol\":49,\"test/SIMDTESTHook.t.sol\":595,\"test/SIMDTESTHookAdversarial.t.sol\":270,\"test/SIMDTESTLaunchInvariant.t.sol\":122,\"test/TESTING.md\":42,\"test/helpers/LaunchHandler.sol\":259,\"test/helpers/PoolDriver.sol\":62},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"0e98e4b98ad82b68a6c8fa43fffc430f6c586f8ef1ab20e93beb31b274ffbf18","verifiedTreeHash":"b23a4022fe5d4fbf200377182d542f1501d1c33d","verifierVersion":"0.1.0+ad90ce4c"},{"checks":[{"durationMs":2509,"exitCode":0,"name":"build","output":"Compiling 76 files with Solc 0.8.26\nSolc 0.8.26 finished in 2.34s\nCompiler run successful!\nwarning[missing-zero-check]: address parameter is used in a state write or value transfer without a zero-address check\n   ╭▸ src/SIMDTESTHook.sol:57:40\n   │\n57 │     constructor(IPoolManager manager_, address token_, address factory_) {\n   │                                        ━━━━━━━━━━━━━━\n   │\n   ╰ help: https://getfoundry.sh/forge/linting/missing-zero-check\n\nwarning[uninitialized-local]: local variable is read before being initialized\n    ╭▸ src/SIMDTESTHook.sol:135:61\n    │\n135 │         return (this.beforeSwap.selector, toBeforeSwapDelta(fee.toInt128(), 0), 0);\n    │                                                             ━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/uninitialized-local\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:120:41\n    │\n120 │             adjusted.amountSpecified += int256(fee);\n    │                                         ━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:126:32\n    │\n126 │                     ? _ceilDiv(uint256(-executed) * rate, BPS - rate)\n    │                                ━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:127:32\n    │\n127 │                     : _ceilDiv(uint256(executed) * rate, BPS);\n    │                                ━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[uninitialized-local]: local variable is read before being initialized\n    ╭▸ src/SIMDTESTHook.sol:170:27\n    │\n170 │         int128 feeDelta = fee.toInt128();\n    │                           ━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/uninitialized-local\n\nwarning[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n    ╭▸ src/SIMDTESTHook.sol:148:20\n    │\n148 │         if (buy && block.timestamp - openedAtTimestamp < BUY_LIMIT_DURATION && tokenDelta > int128(int256(MAX_BUY))) {\n    │                    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/block-timestamp\n\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n    ╭▸ src/SIMDTESTHook.sol:175:13\n    │\n175 │             emit AntiSnipeDonation(poolId, rate, fee);\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:148:93\n    │\n148 │         if (buy && block.timestamp - openedAtTimestamp < BUY_LIMIT_DURATION && tokenDelta > int128(int256(MAX_BUY))) {\n    │                                                                                             ━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:148:100\n    │\n148 │         if (buy && block.timestamp - openedAtTimestamp < BUY_LIMIT_DURATION && tokenDelta > int128(int256(MAX_BUY))) {\n    │                                                                                                    ━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:149:35\n    │\n149 │             revert MaxBuyExceeded(uint128(tokenDelta), MAX_BUY);\n    │                                   ━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:165:28\n    │\n165 │             fee = _ceilDiv(uint256(-int256(pairDelta)) * rate, BPS - rate);\n    │                            ━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:167:28\n    │\n167 │             fee = _ceilDiv(uint128(pairDelta) * rate, BPS);\n    │                            ━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unused-return]: return value of an external call is not used\n    ╭▸ src/SIMDTESTHook.sol:174:13\n    │\n174 │             poolManager.donate(key, pairIsCurrency0 ? fee : 0, pairIsCurrency0 ? 0 : fee, \"\");\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/unused-return\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:196:40\n    │\n196 │             if (reason.length != 36 || bytes4(reason) != SwapQuote.selector) {\n    │                                        ━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'bytes4' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:213:34\n    │\n213 │             uint256 grossInput = uint256(-amount);\n    │                                  ━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:217:28\n    │\n217 │             fee = _ceilDiv(uint256(amount) * rate, BPS - rate);\n    │                            ━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:218:14\n    │\n218 │             (uint256(amount) + fee).toInt128();\n    │              ━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\n","passed":true},{"durationMs":140,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 4 tests for test/SIMDTEST.t.sol:SIMDTESTTest\n[PASS] testAllowanceAndTransferFrom() (gas: 158365)\n[PASS] testMetadataAndFixedSupply() (gas: 59965)\n[PASS] testNoMintBurnOwnerPauseOrUpgradeEntrypoints() (gas: 125109)\n[PASS] testTransfersHaveNoTaxOrMaxBuy() (gas: 87786)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 816.64µs (868.29µs CPU time)\n\nRan 30 tests for test/SIMDTESTHook.t.sol:SIMDTESTHookToken0Test\n[PASS] testAfterBothWindowsAllFourModesHaveNoHookFeeOrLimit() (gas: 1815949)\n[PASS] testCallbacksRejectUnauthorizedCallers() (gas: 95270)\n[PASS] testDecayAndAccountingEveryBlockAllFourSwapModes() (gas: 22057137)\n[PASS] testDeploymentRejectsInvalidTokenAndManager() (gas: 7760)\n[PASS] testDonationAccruesToLPAndNeverLeavesManagerOrCreatesClaims() (gas: 901871)\n[PASS] testDonationGoesOnlyToInRangeLPs() (gas: 783593)\n[PASS] testExactlyOnePercentAndRepeatedBuysAllowed() (gas: 352939)\n[PASS] testExhaustingActiveLiquidityRevertsDonationAtomically() (gas: 1077465)\n[PASS] testFuzzFourModesConserveFunds(uint80,uint8,bool,bool) (runs: 256, μ: 543173, ~: 543842)\nLogs:\n  Bound result 456656178593615063\n  Bound result 4\n\n[PASS] testHookSizeLimits() (gas: 16798)\n[PASS] testInitializationRestrictedAndCannotResetClock() (gas: 2990149)\n[PASS] testMaxBuyAt3599SecondsAndExpiryAt3600() (gas: 585061)\n[PASS] testMaxBuyExactInputAboveLimitReverts() (gas: 286004)\n[PASS] testMaxBuyExactInputIncludesAntiSnipeExecution() (gas: 533596)\n[PASS] testMaxBuyExactOutputAboveLimitRevertsAtomically() (gas: 145197)\n[PASS] testMultipleSpecifiedSwapsInOneUnlockSettleAllReservations() (gas: 871376)\n[PASS] testNoOwnerOrSettingsEntrypoints() (gas: 127944)\n[PASS] testOpeningAndPermissions() (gas: 119871)\n[PASS] testPartialExactOutputBuyChargesActualExecutionOnly() (gas: 539585)\n[PASS] testPartialSpecifiedSwapsChargeActualExecutionOnly() (gas: 1220766)\n[PASS] testPartialUnspecifiedSwapsChargeActualExecutionOnly() (gas: 519069)\n[PASS] testPredictedPoolCannotInitializeBeforeHookDeployment() (gas: 2729760)\n[PASS] testQuoteCannotBeCalledExternally() (gas: 39303)\n[PASS] testQuotePropagatesInvalidPriceLimit() (gas: 206055)\n[PASS] testSellAboveOnePercentAndTransfersUnrestricted() (gas: 583915)\n[PASS] testTimeExpiryDoesNotPrematurelyDisableBlockFee() (gas: 509948)\n[PASS] testTinyInputAndOversizedAmountsFailClearly() (gas: 117518)\n[PASS] testUninitializedHookAndWrongPoolRejected() (gas: 2840382)\n[PASS] testWrongFeeSpacingTokenAndHookCannotInitialize() (gas: 3011417)\n[PASS] testWrongHookAddressBitsRejectedByConstructor() (gas: 8296)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 49.46ms (85.79ms CPU time)\n\nRan 30 tests for test/SIMDTESTHook.t.sol:SIMDTESTHookToken1Test\n[PASS] testAfterBothWindowsAllFourModesHaveNoHookFeeOrLimit() (gas: 1827806)\n[PASS] testCallbacksRejectUnauthorizedCallers() (gas: 94888)\n[PASS] testDecayAndAccountingEveryBlockAllFourSwapModes() (gas: 22055198)\n[PASS] testDeploymentRejectsInvalidTokenAndManager() (gas: 7760)\n[PASS] testDonationAccruesToLPAndNeverLeavesManagerOrCreatesClaims() (gas: 895376)\n[PASS] testDonationGoesOnlyToInRangeLPs() (gas: 774767)\n[PASS] testExactlyOnePercentAndRepeatedBuysAllowed() (gas: 357218)\n[PASS] testExhaustingActiveLiquidityRevertsDonationAtomically() (gas: 1070697)\n[PASS] testFuzzFourModesConserveFunds(uint80,uint8,bool,bool) (runs: 256, μ: 543106, ~: 569751)\nLogs:\n  Bound result 448013665\n  Bound result 1\n\n[PASS] testHookSizeLimits() (gas: 16798)\n[PASS] testInitializationRestrictedAndCannotResetClock() (gas: 43229532)\n[PASS] testMaxBuyAt3599SecondsAndExpiryAt3600() (gas: 594988)\n[PASS] testMaxBuyExactInputAboveLimitReverts() (gas: 298643)\n[PASS] testMaxBuyExactInputIncludesAntiSnipeExecution() (gas: 559178)\n[PASS] testMaxBuyExactOutputAboveLimitRevertsAtomically() (gas: 150197)\n[PASS] testMultipleSpecifiedSwapsInOneUnlockSettleAllReservations() (gas: 875358)\n[PASS] testNoOwnerOrSettingsEntrypoints() (gas: 127944)\n[PASS] testOpeningAndPermissions() (gas: 119871)\n[PASS] testPartialExactOutputBuyChargesActualExecutionOnly() (gas: 551206)\n[PASS] testPartialSpecifiedSwapsChargeActualExecutionOnly() (gas: 1220860)\n[PASS] testPartialUnspecifiedSwapsChargeActualExecutionOnly() (gas: 506923)\n[PASS] testPredictedPoolCannotInitializeBeforeHookDeployment() (gas: 42522956)\n[PASS] testQuoteCannotBeCalledExternally() (gas: 39112)\n[PASS] testQuotePropagatesInvalidPriceLimit() (gas: 206029)\n[PASS] testSellAboveOnePercentAndTransfersUnrestricted() (gas: 577465)\n[PASS] testTimeExpiryDoesNotPrematurelyDisableBlockFee() (gas: 514831)\n[PASS] testTinyInputAndOversizedAmountsFailClearly() (gas: 117136)\n[PASS] testUninitializedHookAndWrongPoolRejected() (gas: 42972892)\n[PASS] testWrongFeeSpacingTokenAndHookCannotInitialize() (gas: 43573015)\n[PASS] testWrongHookAddressBitsRejectedByConstructor() (gas: 8296)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 49.42ms (227.76ms CPU time)\n\nRan 3 test suites in 50.45ms (99.70ms CPU time): 64 tests passed, 0 failed, 0 skipped (64 total tests)\n","passed":true},{"durationMs":52,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SIMDTEST.approve(address,uint256)\",\"SIMDTEST.transfer(address,uint256)\",\"SIMDTEST.transferFrom(address,address,uint256)\",\"SIMDTESTHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"SIMDTESTHook.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\",\"SIMDTESTHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"SIMDTESTHook.quoteSwap((address,address,uint24,int24,address),(bool,int256,uint160))\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":15,\"README.md\":182,\"foundry.toml\":22,\"launch.json\":24,\"scripts/check_artifacts.py\":46,\"src/SIMDTEST.sol\":11,\"src/SIMDTESTHook.sol\":239,\"test/SIMDTEST.t.sol\":58,\"test/SIMDTESTHook.t.sol\":610,\"test/helpers/MockIMD.sol\":13,\"test/helpers/PoolRouter.sol\":64},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":1024,"exitCode":0,"name":"slither","output":"[medium/high] incorrect-equality at src/SIMDTESTHook.sol:227: SIMDTESTHook._ceilDiv(uint256,uint256) (src/SIMDTESTHook.sol#227-229) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/SIMDTESTHook.sol:138: SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes) (src/SIMDTESTHook.sol#138-178) uses a dangerous strict equality:\n[medium/medium] unused-return at src/SIMDTESTHook.sol:207: SIMDTESTHook._specifiedFee(int256,uint256) (src/SIMDTESTHook.sol#207-220) ignores return value by (uint256(amount) + fee).toInt128() (src/SIMDTESTHook.sol#218)\n[medium/medium] unused-return at src/SIMDTESTHook.sol:138: SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes) (src/SIMDTESTHook.sol#138-178) ignores return value by poolManager.donate(key,0,fee,) (src/SIMDTESTHook.sol#174)\n[medium/medium] unused-return at src/SIMDTESTHook.sol:138: SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes) (src/SIMDTESTHook.sol#138-178) ignores return value by poolManager.donate(key,fee,0,) (src/SIMDTESTHook.sol#174)\n[low/medium] reentrancy-events at src/SIMDTESTHook.sol:138: Reentrancy in SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes) (src/SIMDTESTHook.sol#138-178):\n[low/medium] timestamp at src/SIMDTESTHook.sol:138: SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes) (src/SIMDTESTHook.sol#138-178) uses timestamp for comparisons","passed":true},{"durationMs":335,"exitCode":0,"name":"aderyn","output":"[high] reentrancy-state-change at src/SIMDTESTHook.sol:59: Reentrancy: State change after external call\n[low] large-numeric-literal at src/SIMDTEST.sol:9: Large Numeric Literal (3 places)\n[low] unchecked-return at src/SIMDTESTHook.sol:174: Unchecked Return (2 places)","passed":true}],"detail":"launch.json is not a valid launch manifest: hook.contract: expected a contract name; hook.permissions: Invalid input: expected array, received undefined; token.contract: expected a contract name; notes: Invalid input: expected string, received undefined","evaluation":"checks","profile":"foundry","status":"rejected","submissionHash":"369fecfd45dff5a7a38066bf22c0dfed99b861d88e35f3e6acdc44ce89dd51f3","verifiedTreeHash":"fd534eab39fe526c7c4d59f52e62891f2dd1096d","verifierVersion":"0.1.0+ad90ce4c"},{"checks":[{"durationMs":3546,"exitCode":0,"name":"build","output":"Compiling 84 files with Solc 0.8.26\nSolc 0.8.26 finished in 3.40s\nCompiler run successful!\nwarning[missing-zero-check]: address parameter is used in a state write or value transfer without a zero-address check\n   ╭▸ src/SIMDTESTHook.sol:51:40\n   │\n51 │     constructor(IPoolManager manager_, address token_) {\n   │                                        ━━━━━━━━━━━━━━\n   │\n   ╰ help: https://getfoundry.sh/forge/linting/missing-zero-check\n\nwarning[uninitialized-local]: local variable is read before being initialized\n    ╭▸ src/SIMDTESTHook.sol:115:70\n    │\n115 │         return (IHooks.beforeSwap.selector, toBeforeSwapDelta(int256(fee).toInt128(), 0), 0);\n    │                                                                      ━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/uninitialized-local\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:115:63\n    │\n115 │         return (IHooks.beforeSwap.selector, toBeforeSwapDelta(int256(fee).toInt128(), 0), 0);\n    │                                                               ━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[uninitialized-local]: local variable is read before being initialized\n    ╭▸ src/SIMDTESTHook.sol:153:34\n    │\n153 │         int128 feeDelta = int256(fee).toInt128();\n    │                                  ━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/uninitialized-local\n\nwarning[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n    ╭▸ src/SIMDTESTHook.sol:128:20\n    │\n128 │         if (buy && block.timestamp - openingTimestamp < BUY_LIMIT_DURATION && tokenDelta > int256(MAX_BUY)) {\n    │                    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/block-timestamp\n\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n    ╭▸ src/SIMDTESTHook.sol:158:13\n    │\n158 │             emit AntiSnipeDonation(poolId, rate, fee);\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:128:92\n    │\n128 │         if (buy && block.timestamp - openingTimestamp < BUY_LIMIT_DURATION && tokenDelta > int256(MAX_BUY)) {\n    │                                                                                            ━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:129:35\n    │\n129 │             revert MaxBuyExceeded(uint256(int256(tokenDelta)), MAX_BUY);\n    │                                   ━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:142:75\n    │\n142 │             if (fee != 0 && int256(pairDelta) != params.amountSpecified + int256(fee)) {\n    │                                                                           ━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:147:19\n    │\n147 │             fee = uint256(-int256(pairDelta)) * rate / (FEE_DENOMINATOR - rate);\n    │                   ━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:150:19\n    │\n150 │             fee = uint256(int256(pairDelta)) * rate / FEE_DENOMINATOR;\n    │                   ━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:153:27\n    │\n153 │         int128 feeDelta = int256(fee).toInt128();\n    │                           ━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unused-return]: return value of an external call is not used\n    ╭▸ src/SIMDTESTHook.sol:157:13\n    │\n157 │             poolManager.donate(key, pairedIsCurrency0 ? fee : 0, pairedIsCurrency0 ? 0 : fee, \"\");\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/unused-return\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:173:19\n    │\n173 │             fee = uint256(-amount) * rate / FEE_DENOMINATOR;\n    │                   ━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:175:19\n    │\n175 │             fee = uint256(amount) * rate / (FEE_DENOMINATOR - rate);\n    │                   ━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:176:17\n    │\n176 │             if (uint256(amount) + fee > uint256(uint128(type(int128).max))) revert SwapAmountTooLarge();\n    │                 ━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:176:41\n    │\n176 │             if (uint256(amount) + fee > uint256(uint128(type(int128).max))) revert SwapAmountTooLarge();\n    │                                         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:176:49\n    │\n176 │             if (uint256(amount) + fee > uint256(uint128(type(int128).max))) revert SwapAmountTooLarge();\n    │                                                 ━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\n","passed":true},{"durationMs":5519,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 3 tests for test/SIMDTEST.t.sol:SIMDTESTTest\n[PASS] testAllowanceAndInsufficientBalanceFailures() (gas: 174202)\n[PASS] testMetadataSupplyAndTransfers() (gas: 134223)\n[PASS] testNoAdministrativeOrMintEntryPoints() (gas: 74372)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 580.48µs (611.85µs CPU time)\n\nRan 26 tests for test/SIMDTESTHook.t.sol:SIMDTESTHookPair1Test\n[PASS] testAllTenBlocksAndEndDonateExactAmounts() (gas: 18907623)\n[PASS] testBuyCapExactInputRevertsWithoutTakingFunds() (gas: 446478)\n[PASS] testBuyCapExactOutputAndOneWeiOver() (gas: 277828)\n[PASS] testBuyCapIsPerSwapNotCumulative() (gas: 408146)\n[PASS] testBuyCapTimeBoundaryAndNoSellOrTransferLimit() (gas: 1168654)\n[PASS] testCannotDonateWithoutActiveLiquidityRollsBackSwap() (gas: 1020532)\n[PASS] testCannotReinitializeOrResetClock() (gas: 60890)\n[PASS] testCreationAndRuntimeSize() (gas: 11763)\n[PASS] testDonationCanBeCollectedByInRangeLP() (gas: 487265)\n[PASS] testEmptyPoolUnspecifiedSwapHasNoFee() (gas: 670110)\n[PASS] testFuzzFeeAccounting(bool,bool,uint88,uint8) (runs: 1000, μ: 457043, ~: 453955)\nLogs:\n  Bound result 99999000000000000000127\n  Bound result 14\n\n[PASS] testInitializationAndPermissions() (gas: 97040)\n[PASS] testInvalidConstructorInputs() (gas: 661192)\n[PASS] testLargeSellsDuringAntiSnipeHaveNoBuyCap() (gas: 887511)\n[PASS] testNormalSwapsAfterBothPeriods() (gas: 1645680)\n[PASS] testOutOfRangeLiquidityReceivesNoDonation() (gas: 701652)\n[PASS] testOversizedSpecifiedAmountsRejectBeforeArithmetic() (gas: 118958)\n[PASS] testPartialFillsAllowedAfterAntiSnipe() (gas: 258128)\n[PASS] testPartialSpecifiedFeeRevertsAtomically() (gas: 354281)\n[PASS] testPoolCannotInitializeBeforeHookDeployment() (gas: 1043860)\n[PASS] testSwapBeforeOpenAndWrongAddressMask() (gas: 973907)\n[PASS] testTimeAndBlockWindowsIndependent() (gas: 458369)\n[PASS] testTinyAmountsRoundDownWithoutUnsettledFees() (gas: 20166831)\n[PASS] testUnauthorizedCallbacks() (gas: 85673)\n[PASS] testUnspecifiedPairPartialFillsChargeOnlyExecutedAmount() (gas: 506174)\n[PASS] testWrongPoolKeysRejected() (gas: 650716)\nSuite result: ok. 26 passed; 0 failed; 0 skipped; finished in 243.14ms (257.47ms CPU time)\n\nRan 26 tests for test/SIMDTESTHook.t.sol:SIMDTESTHookPair0Test\n[PASS] testAllTenBlocksAndEndDonateExactAmounts() (gas: 18900634)\n[PASS] testBuyCapExactInputRevertsWithoutTakingFunds() (gas: 459099)\n[PASS] testBuyCapExactOutputAndOneWeiOver() (gas: 287796)\n[PASS] testBuyCapIsPerSwapNotCumulative() (gas: 412234)\n[PASS] testBuyCapTimeBoundaryAndNoSellOrTransferLimit() (gas: 1166631)\n[PASS] testCannotDonateWithoutActiveLiquidityRollsBackSwap() (gas: 1027070)\n[PASS] testCannotReinitializeOrResetClock() (gas: 60890)\n[PASS] testCreationAndRuntimeSize() (gas: 11763)\n[PASS] testDonationCanBeCollectedByInRangeLP() (gas: 480862)\n[PASS] testEmptyPoolUnspecifiedSwapHasNoFee() (gas: 663616)\n[PASS] testFuzzFeeAccounting(bool,bool,uint88,uint8) (runs: 1000, μ: 456387, ~: 460104)\nLogs:\n  Bound result 99999000000001086394139\n  Bound result 12\n\n[PASS] testInitializationAndPermissions() (gas: 97040)\n[PASS] testInvalidConstructorInputs() (gas: 661192)\n[PASS] testLargeSellsDuringAntiSnipeHaveNoBuyCap() (gas: 881757)\n[PASS] testNormalSwapsAfterBothPeriods() (gas: 1657511)\n[PASS] testOutOfRangeLiquidityReceivesNoDonation() (gas: 697865)\n[PASS] testOversizedSpecifiedAmountsRejectBeforeArithmetic() (gas: 118958)\n[PASS] testPartialFillsAllowedAfterAntiSnipe() (gas: 264230)\n[PASS] testPartialSpecifiedFeeRevertsAtomically() (gas: 354383)\n[PASS] testPoolCannotInitializeBeforeHookDeployment() (gas: 1043860)\n[PASS] testSwapBeforeOpenAndWrongAddressMask() (gas: 973896)\n[PASS] testTimeAndBlockWindowsIndependent() (gas: 463242)\n[PASS] testTinyAmountsRoundDownWithoutUnsettledFees() (gas: 20210169)\n[PASS] testUnauthorizedCallbacks() (gas: 85482)\n[PASS] testUnspecifiedPairPartialFillsChargeOnlyExecutedAmount() (gas: 514022)\n[PASS] testWrongPoolKeysRejected() (gas: 650705)\nSuite result: ok. 26 passed; 0 failed; 0 skipped; finished in 243.16ms (298.98ms CPU time)\n\nRan 8 tests for test/SIMDTESTHookAdversarial.t.sol:SIMDTESTHookAdversarialPair0Test\n[PASS] testFuzz_CapViolationRollsBackAllAccounting(uint96,uint16,uint8) (runs: 1000, μ: 697845, ~: 699617)\nLogs:\n  Bound result 195\n  Bound result 0\n  Bound result 0\n\n[PASS] testFuzz_MatchesIndependentPoolPlusOnlyIMDDonation(bool,bool,uint96,uint8,bool) (runs: 1000, μ: 1019291, ~: 1027494)\nLogs:\n  Bound result 3\n  Bound result 10540\n\n[PASS] testFuzz_SpecifiedFeeAtInt128Boundary(uint8,uint128) (runs: 1000, μ: 71883, ~: 72272)\nLogs:\n  Bound result 8\n  Bound result 309\n\n[PASS] test_AfterSwapBeforeOpeningCannotStartClock() (gas: 941760)\n[PASS] test_AllPoolKeyFieldsAreBoundForBothSwapCallbacks() (gas: 285133)\n[PASS] test_CorrectSupplyWithWrongDecimalsIsRejected() (gas: 569655)\n[PASS] test_FailedSettlementRollsBackSwapAndDonation() (gas: 687035)\n[PASS] test_ZeroSwapRevertsAndPreservesState() (gas: 334931)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 247.40ms (582.95ms CPU time)\n\nRan 8 tests for test/SIMDTESTHookAdversarial.t.sol:SIMDTESTHookAdversarialPair1Test\n[PASS] testFuzz_CapViolationRollsBackAllAccounting(uint96,uint16,uint8) (runs: 1000, μ: 688014, ~: 689649)\nLogs:\n  Bound result 1468318228133571042305316\n  Bound result 307\n  Bound result 0\n\n[PASS] testFuzz_MatchesIndependentPoolPlusOnlyIMDDonation(bool,bool,uint96,uint8,bool) (runs: 1000, μ: 1019304, ~: 1016839)\nLogs:\n  Bound result 7\n  Bound result 97947587723108030950\n\n[PASS] testFuzz_SpecifiedFeeAtInt128Boundary(uint8,uint128) (runs: 1000, μ: 71884, ~: 72121)\nLogs:\n  Bound result 8\n  Bound result 18362\n\n[PASS] test_AfterSwapBeforeOpeningCannotStartClock() (gas: 941951)\n[PASS] test_AllPoolKeyFieldsAreBoundForBothSwapCallbacks() (gas: 286143)\n[PASS] test_CorrectSupplyWithWrongDecimalsIsRejected() (gas: 569655)\n[PASS] test_FailedSettlementRollsBackSwapAndDonation() (gas: 693376)\n[PASS] test_ZeroSwapRevertsAndPreservesState() (gas: 335122)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 247.39ms (520.90ms CPU time)\n\nRan 1 test for test/SIMDTESTLaunchInvariant.t.sol:SIMDTESTLaunchPair0Invariant\n[PASS] invariant_ConservationSettlementAndImmutableLaunchRules() (runs: 256, calls: 16384, reverts: 0)\n\n╭---------------+-----------------+-------+---------+----------╮\n| Contract      | Selector        | Calls | Reverts | Discards |\n+==============================================================+\n| LaunchHandler | advance         | 2776  | 0       | 0        |\n|---------------+-----------------+-------+---------+----------|\n| LaunchHandler | changeLiquidity | 2677  | 0       | 0        |\n|---------------+-----------------+-------+---------+----------|\n| LaunchHandler | collectFees     | 2676  | 0       | 0        |\n|---------------+-----------------+-------+---------+----------|\n| LaunchHandler | rejectOverCap   | 2722  | 0       | 0        |\n|---------------+-----------------+-------+---------+----------|\n| LaunchHandler | swap            | 2808  | 0       | 0        |\n|---------------+-----------------+-------+---------+----------|\n| LaunchHandler | transferTokens  | 2725  | 0       | 0        |\n╰---------------+-----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 1\n  Bound result 20000000000000000000000000\n  Bound result 20000000000000000000000000\n  Bound result 2968181\n  Bound result 0\n  Bound result 33010931\n  Bound result 0\n  Bound result 0\n  Bound result 2\n  Bound result 255\n  Bound result 8450\n  Bound result 2181\n  Bound result 3698\n  Bound result 0\n  Bound result 3\n  Bound result 21\n  Bound result 2583\n  Bound result 0\n  Bound result 26896362653485765887265486\n  Bound result 2\n  Bound result 185\n  Bound result 2807011242\n  Bound result 2964482\n  Bound result 12128\n  Bound result 838696058970097513300834\n  Bound result 104905292299252163310\n  Bound result 3\n  Bound result 8\n  Bound result 5429\n  Bound result 1789\n  Bound result 27\n  Bound result 17892\n  Bound result 5943\n  Bound result 6623775119842521943\n  Bound result 1643\n  Bound result 3\n  Bound result 244\n  Bound result 2251799813685248\n  Bound result 207644153024005457482064\n  Bound result 0\n  Bound result 513\n  Bound result 3\n  Bound result 543\n  Bound result 115524675606434\n  Bound result 3687855614\n  Bound result 8482\n  Bound result 0\n  Bound result 8927\n  Bound result 5714\n  Bound result 81\n  Bound result 383779998\n  Bound result 0\n  Bound result 60213111469990524141\n  Bound result 397090169\n  Bound result 0\n  Bound result 267\n  Bound result 3\n  Bound result 388\n  Bound result 0\n  Bound result 1\n  Bound result 6191542\n  Bound result 0\n  Bound result 2121\n  Bound result 6359420250112319646139\n  Bound result 494\n  Bound result 0\n  Bound result 100\n  Bound result 0\n  Bound result 4114\n  Bound result 0\n  Bound result 663\n  Bound result 3952287325763\n  Bound result 61063506820749657233392\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 5.42s (5.40s CPU time)\n\nRan 1 test for test/SIMDTESTLaunchInvariant.t.sol:SIMDTESTLaunchPair1Invariant\n[PASS] invariant_ConservationSettlementAndImmutableLaunchRules() (runs: 256, calls: 16384, reverts: 0)\n\n╭---------------+-----------------+-------+---------+----------╮\n| Contract      | Selector        | Calls | Reverts | Discards |\n+==============================================================+\n| LaunchHandler | advance         | 2776  | 0       | 0        |\n|---------------+-----------------+-------+---------+----------|\n| LaunchHandler | changeLiquidity | 2677  | 0       | 0        |\n|---------------+-----------------+-------+---------+----------|\n| LaunchHandler | collectFees     | 2676  | 0       | 0        |\n|---------------+-----------------+-------+---------+----------|\n| LaunchHandler | rejectOverCap   | 2722  | 0       | 0        |\n|---------------+-----------------+-------+---------+----------|\n| LaunchHandler | swap            | 2808  | 0       | 0        |\n|---------------+-----------------+-------+---------+----------|\n| LaunchHandler | transferTokens  | 2725  | 0       | 0        |\n╰---------------+-----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 1\n  Bound result 20000000000000000000000000\n  Bound result 20000000000000000000000000\n  Bound result 2968181\n  Bound result 0\n  Bound result 4963\n  Bound result 0\n  Bound result 0\n  Bound result 2\n  Bound result 255\n  Bound result 6092\n  Bound result 243\n  Bound result 3676\n  Bound result 0\n  Bound result 3\n  Bound result 21\n  Bound result 705810129\n  Bound result 0\n  Bound result 7008\n  Bound result 3\n  Bound result 154\n  Bound result 4596\n  Bound result 13562\n  Bound result 10434\n  Bound result 17483\n  Bound result 104905292299252163310\n  Bound result 3\n  Bound result 8\n  Bound result 3707953492\n  Bound result 784\n  Bound result 12822\n  Bound result 10800\n  Bound result 3243\n  Bound result 6623775119842521943\n  Bound result 2233625730\n  Bound result 0\n  Bound result 200\n  Bound result 85714916441803199768132\n  Bound result 17949\n  Bound result 0\n  Bound result 611\n  Bound result 3\n  Bound result 662\n  Bound result 115524675606434\n  Bound result 2322\n  Bound result 6218\n  Bound result 0\n  Bound result 1896\n  Bound result 4009\n  Bound result 81\n  Bound result 1424214541\n  Bound result 0\n  Bound result 60213111469990524141\n  Bound result 5897\n  Bound result 2\n  Bound result 267\n  Bound result 3\n  Bound result 658\n  Bound result 0\n  Bound result 1\n  Bound result 16590\n  Bound result 0\n  Bound result 4113140425\n  Bound result 6359420250112319646139\n  Bound result 290\n  Bound result 0\n  Bound result 100\n  Bound result 19585\n  Bound result 3909\n  Bound result 0\n  Bound result 663\n  Bound result 1060213226994663174552\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 5.44s (5.42s CPU time)\n\nRan 7 test suites in 5.44s (11.84s CPU time): 73 tests passed, 0 failed, 0 skipped (73 total tests)\n","passed":true},{"durationMs":49,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SIMDTEST.approve(address,uint256)\",\"SIMDTEST.transfer(address,uint256)\",\"SIMDTEST.transferFrom(address,address,uint256)\",\"SIMDTESTHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"SIMDTESTHook.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":16,\"DEPENDENCIES.sha256\":82,\"README.md\":172,\"foundry.toml\":24,\"launch.json\":21,\"script/check_release.py\":83,\"src/SIMDTEST.sol\":11,\"src/SIMDTESTHook.sol\":188,\"test/SIMDTEST.t.sol\":49,\"test/SIMDTESTHook.t.sol\":595,\"test/SIMDTESTHookAdversarial.t.sol\":270,\"test/SIMDTESTLaunchInvariant.t.sol\":122,\"test/TESTING.md\":42,\"test/helpers/LaunchHandler.sol\":259,\"test/helpers/PoolDriver.sol\":62},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"7b4093ca81289be4dea0b0623366266055fb984b67c57edf0f435e824cf1770e","verifiedTreeHash":"f36b96d7fef7d7d80e2acc149475afba2a4b936e","verifierVersion":"0.1.0+ad90ce4c"},{"checks":[{"durationMs":13718,"exitCode":0,"name":"build","output":"Compiling 58 files with Solc 0.8.26\nSolc 0.8.26 finished in 13.61s\nCompiler run successful!\nwarning[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n    ╭▸ src/SIMDTESTHook.sol:113:13\n    │\n113 │         if (block.timestamp - openingTimestamp < MAX_BUY_DURATION && tokenDelta > int128(int256(MAX_BUY))) {\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/block-timestamp\n\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n    ╭▸ src/SIMDTESTHook.sol:131:9\n    │\n131 │         emit AntiSnipeDonation(poolId, Currency.unwrap(unspecifiedIs0 ? key.currency0 : key.currency1), fee, rate);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:113:83\n    │\n113 │         if (block.timestamp - openingTimestamp < MAX_BUY_DURATION && tokenDelta > int128(int256(MAX_BUY))) {\n    │                                                                                   ━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:113:90\n    │\n113 │         if (block.timestamp - openingTimestamp < MAX_BUY_DURATION && tokenDelta > int128(int256(MAX_BUY))) {\n    │                                                                                          ━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:114:35\n    │\n114 │             revert MaxBuyExceeded(uint256(uint128(tokenDelta)), MAX_BUY);\n    │                                   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:114:43\n    │\n114 │             revert MaxBuyExceeded(uint256(uint128(tokenDelta)), MAX_BUY);\n    │                                           ━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:122:34\n    │\n122 │         uint256 absoluteAmount = uint256(amount < 0 ? -amount : amount);\n    │                                  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unused-return]: return value of an external call is not used\n    ╭▸ src/SIMDTESTHook.sol:130:9\n    │\n130 │         poolManager.donate(key, unspecifiedIs0 ? fee : 0, unspecifiedIs0 ? 0 : fee, \"\");\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/unused-return\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:132:44\n    │\n132 │         return (IHooks.afterSwap.selector, int128(int256(fee)));\n    │                                            ━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:132:51\n    │\n132 │         return (IHooks.afterSwap.selector, int128(int256(fee)));\n    │                                                   ━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\n","passed":true},{"durationMs":139,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 4 tests for test/SIMDTEST.t.sol:SIMDTESTTest\n[PASS] testAllowanceAndTransferFrom() (gas: 158900)\n[PASS] testCannotBurnByTransferOrTransferWithoutBalance() (gas: 58827)\n[PASS] testFuzzTransfersConserveFixedSupply(uint96) (runs: 256, μ: 79330, ~: 79747)\n[PASS] testNoExternalMintOrPrivilegeFunctions() (gas: 73499)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 3.00ms (4.64ms CPU time)\n\nRan 23 tests for test/SIMDTESTHook.t.sol:SIMDTESTCurrency0Test\n[PASS] testBlocksAndTimestampAreIndependent() (gas: 278422)\n[PASS] testCallbacksRequirePoolManager() (gas: 65573)\n[PASS] testCapIsPerSwapAndDoesNotAccumulate() (gas: 532899)\n[PASS] testConstructorRejectsMissingManagerAndToken() (gas: 6563)\n[PASS] testDonationAccruesToInRangeLPAndCanBeCollected() (gas: 999563)\n[PASS] testDustRoundsDownWithoutDonation() (gas: 944229)\n[PASS] testExactInputOverCapRejectedEvenIfNetBelowCap() (gas: 264085)\n[PASS] testFactoryInitializationAndNoReset() (gas: 23864657)\n[PASS] testFeeDecayAllModesEveryBlock() (gas: 12597920)\n[PASS] testFuzzExecutedFeeAccounting(uint96,uint8,bool,bool) (runs: 256, μ: 283999, ~: 282843)\n[PASS] testHookDeploymentSizeAndNoDangerousOpcodes() (gas: 935996)\n[PASS] testIncorrectPermissionAddressCannotDeploy() (gas: 17079)\n[PASS] testLargeSellsAndTransfersAreUnrestricted() (gas: 661802)\n[PASS] testLimitLastSecondAndExactExpiry() (gas: 361990)\n[PASS] testNoInRangeRecipientRevertsDonationAtomically() (gas: 856302)\n[PASS] testNormalSwapsAfterBothPeriods() (gas: 998589)\n[PASS] testOnePercentExactOutputAccepted() (gas: 275312)\n[PASS] testOnePercentPlusWeiExactOutputRejected() (gas: 114530)\n[PASS] testOpeningSupplyAndSeed() (gas: 82001)\n[PASS] testPartialFillsAllModesUseExecutedAmounts() (gas: 1170507)\n[PASS] testPredictedHookCannotBeInitializedBeforeDeployment() (gas: 75765045)\n[PASS] testSwapBeforeOpenRejected() (gas: 23667788)\n[PASS] testWrongPoolParametersRejected() (gas: 23876643)\nSuite result: ok. 23 passed; 0 failed; 0 skipped; finished in 75.78ms (178.67ms CPU time)\n\nRan 23 tests for test/SIMDTESTHook.t.sol:SIMDTESTCurrency1Test\n[PASS] testBlocksAndTimestampAreIndependent() (gas: 282468)\n[PASS] testCallbacksRequirePoolManager() (gas: 65338)\n[PASS] testCapIsPerSwapAndDoesNotAccumulate() (gas: 535805)\n[PASS] testConstructorRejectsMissingManagerAndToken() (gas: 6565)\n[PASS] testDonationAccruesToInRangeLPAndCanBeCollected() (gas: 988625)\n[PASS] testDustRoundsDownWithoutDonation() (gas: 954903)\n[PASS] testExactInputOverCapRejectedEvenIfNetBelowCap() (gas: 275132)\n[PASS] testFactoryInitializationAndNoReset() (gas: 7607586)\n[PASS] testFeeDecayAllModesEveryBlock() (gas: 12606470)\n[PASS] testFuzzExecutedFeeAccounting(uint96,uint8,bool,bool) (runs: 256, μ: 285412, ~: 282870)\n[PASS] testHookDeploymentSizeAndNoDangerousOpcodes() (gas: 935996)\n[PASS] testIncorrectPermissionAddressCannotDeploy() (gas: 17079)\n[PASS] testLargeSellsAndTransfersAreUnrestricted() (gas: 659958)\n[PASS] testLimitLastSecondAndExactExpiry() (gas: 370198)\n[PASS] testNoInRangeRecipientRevertsDonationAtomically() (gas: 866852)\n[PASS] testNormalSwapsAfterBothPeriods() (gas: 1009798)\n[PASS] testOnePercentExactOutputAccepted() (gas: 279358)\n[PASS] testOnePercentPlusWeiExactOutputRejected() (gas: 118644)\n[PASS] testOpeningSupplyAndSeed() (gas: 81989)\n[PASS] testPartialFillsAllModesUseExecutedAmounts() (gas: 1170529)\n[PASS] testPredictedHookCannotBeInitializedBeforeDeployment() (gas: 20956648)\n[PASS] testSwapBeforeOpenRejected() (gas: 7412439)\n[PASS] testWrongPoolParametersRejected() (gas: 7611893)\nSuite result: ok. 23 passed; 0 failed; 0 skipped; finished in 75.79ms (120.09ms CPU time)\n\nRan 3 test suites in 76.66ms (154.58ms CPU time): 50 tests passed, 0 failed, 0 skipped (50 total tests)\n","passed":true},{"durationMs":40,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SIMDTEST.approve(address,uint256)\",\"SIMDTEST.transfer(address,uint256)\",\"SIMDTEST.transferFrom(address,address,uint256)\",\"SIMDTESTHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"SIMDTESTHook.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":15,\"README.md\":161,\"foundry.toml\":19,\"launch.json\":29,\"src/SIMDTEST.sol\":11,\"src/SIMDTESTHook.sol\":138,\"test/SIMDTEST.t.sol\":58,\"test/SIMDTESTHook.t.sol\":496,\"test/helpers/MockIMD.sol\":13,\"test/helpers/PoolRouter.sol\":58,\"test/helpers/TestBase.sol\":55,\"tools/mine_hook.py\":46},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":2085,"exitCode":0,"name":"slither","output":"[medium/high] incorrect-equality at src/SIMDTESTHook.sol:100: SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes) (src/SIMDTESTHook.sol#100-133) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/SIMDTESTHook.sol:100: SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes) (src/SIMDTESTHook.sol#100-133) uses a dangerous strict equality:\n[medium/medium] unused-return at src/SIMDTESTHook.sol:100: SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes) (src/SIMDTESTHook.sol#100-133) ignores return value by poolManager.donate(key,0,fee,) (src/SIMDTESTHook.sol#130)\n[medium/medium] unused-return at src/SIMDTESTHook.sol:100: SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes) (src/SIMDTESTHook.sol#100-133) ignores return value by poolManager.donate(key,fee,0,) (src/SIMDTESTHook.sol#130)\n[low/medium] reentrancy-events at src/SIMDTESTHook.sol:100: Reentrancy in SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes) (src/SIMDTESTHook.sol#100-133):\n[low/medium] timestamp at src/SIMDTESTHook.sol:100: SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes) (src/SIMDTESTHook.sol#100-133) uses timestamp for comparisons","passed":true},{"durationMs":667,"exitCode":0,"name":"aderyn","output":"[high] reentrancy-state-change at src/SIMDTESTHook.sol:51: Reentrancy: State change after external call\n[low] large-numeric-literal at src/SIMDTEST.sol:9: Large Numeric Literal (3 places)\n[low] unchecked-return at src/SIMDTESTHook.sol:130: Unchecked Return","passed":true}],"detail":"launch.json is not a valid launch manifest: kind: Invalid discriminator value. Expected 'univ4_hook' | 'evm_project' | 'custom_token' | 'evm_contracts'","evaluation":"checks","profile":"foundry","status":"rejected","submissionHash":"a5ae5d67e437ee397946f0bec65112833ab3b2ffe15efbe6a049fcd7737d19b6","verifiedTreeHash":"d5773bddba5b6b1ffcf0f502d5a3bbbaea46db30","verifierVersion":"0.1.0+ad90ce4c"},{"checks":[{"durationMs":1972,"exitCode":0,"name":"build","output":"Compiling 81 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.84s\nCompiler run successful!\nwarning[missing-zero-check]: address parameter is used in a state write or value transfer without a zero-address check\n   ╭▸ src/SIMDTESTHook.sol:51:40\n   │\n51 │     constructor(IPoolManager manager_, address token_) {\n   │                                        ━━━━━━━━━━━━━━\n   │\n   ╰ help: https://getfoundry.sh/forge/linting/missing-zero-check\n\nwarning[uninitialized-local]: local variable is read before being initialized\n    ╭▸ src/SIMDTESTHook.sol:115:70\n    │\n115 │         return (IHooks.beforeSwap.selector, toBeforeSwapDelta(int256(fee).toInt128(), 0), 0);\n    │                                                                      ━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/uninitialized-local\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:115:63\n    │\n115 │         return (IHooks.beforeSwap.selector, toBeforeSwapDelta(int256(fee).toInt128(), 0), 0);\n    │                                                               ━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[uninitialized-local]: local variable is read before being initialized\n    ╭▸ src/SIMDTESTHook.sol:153:34\n    │\n153 │         int128 feeDelta = int256(fee).toInt128();\n    │                                  ━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/uninitialized-local\n\nwarning[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n    ╭▸ src/SIMDTESTHook.sol:128:20\n    │\n128 │         if (buy && block.timestamp - openingTimestamp < BUY_LIMIT_DURATION && tokenDelta > int256(MAX_BUY)) {\n    │                    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/block-timestamp\n\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n    ╭▸ src/SIMDTESTHook.sol:158:13\n    │\n158 │             emit AntiSnipeDonation(poolId, rate, fee);\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:128:92\n    │\n128 │         if (buy && block.timestamp - openingTimestamp < BUY_LIMIT_DURATION && tokenDelta > int256(MAX_BUY)) {\n    │                                                                                            ━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:129:35\n    │\n129 │             revert MaxBuyExceeded(uint256(int256(tokenDelta)), MAX_BUY);\n    │                                   ━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:142:75\n    │\n142 │             if (fee != 0 && int256(pairDelta) != params.amountSpecified + int256(fee)) {\n    │                                                                           ━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:147:19\n    │\n147 │             fee = uint256(-int256(pairDelta)) * rate / (FEE_DENOMINATOR - rate);\n    │                   ━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:150:19\n    │\n150 │             fee = uint256(int256(pairDelta)) * rate / FEE_DENOMINATOR;\n    │                   ━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:153:27\n    │\n153 │         int128 feeDelta = int256(fee).toInt128();\n    │                           ━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unused-return]: return value of an external call is not used\n    ╭▸ src/SIMDTESTHook.sol:157:13\n    │\n157 │             poolManager.donate(key, pairedIsCurrency0 ? fee : 0, pairedIsCurrency0 ? 0 : fee, \"\");\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/unused-return\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:173:19\n    │\n173 │             fee = uint256(-amount) * rate / FEE_DENOMINATOR;\n    │                   ━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:175:19\n    │\n175 │             fee = uint256(amount) * rate / (FEE_DENOMINATOR - rate);\n    │                   ━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:176:17\n    │\n176 │             if (uint256(amount) + fee > uint256(uint128(type(int128).max))) revert SwapAmountTooLarge();\n    │                 ━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:176:41\n    │\n176 │             if (uint256(amount) + fee > uint256(uint128(type(int128).max))) revert SwapAmountTooLarge();\n    │                                         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:176:49\n    │\n176 │             if (uint256(amount) + fee > uint256(uint128(type(int128).max))) revert SwapAmountTooLarge();\n    │                                                 ━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\n","passed":true},{"durationMs":113,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 3 tests for test/SIMDTEST.t.sol:SIMDTESTTest\n[PASS] testAllowanceAndInsufficientBalanceFailures() (gas: 174202)\n[PASS] testMetadataSupplyAndTransfers() (gas: 134223)\n[PASS] testNoAdministrativeOrMintEntryPoints() (gas: 74372)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 571.41µs (563.90µs CPU time)\n\nRan 26 tests for test/SIMDTESTHook.t.sol:SIMDTESTHookPair0Test\n[PASS] testAllTenBlocksAndEndDonateExactAmounts() (gas: 18900634)\n[PASS] testBuyCapExactInputRevertsWithoutTakingFunds() (gas: 459099)\n[PASS] testBuyCapExactOutputAndOneWeiOver() (gas: 287796)\n[PASS] testBuyCapIsPerSwapNotCumulative() (gas: 412234)\n[PASS] testBuyCapTimeBoundaryAndNoSellOrTransferLimit() (gas: 1166631)\n[PASS] testCannotDonateWithoutActiveLiquidityRollsBackSwap() (gas: 1027070)\n[PASS] testCannotReinitializeOrResetClock() (gas: 60890)\n[PASS] testCreationAndRuntimeSize() (gas: 11763)\n[PASS] testDonationCanBeCollectedByInRangeLP() (gas: 480862)\n[PASS] testEmptyPoolUnspecifiedSwapHasNoFee() (gas: 663616)\n[PASS] testFuzzFeeAccounting(bool,bool,uint88,uint8) (runs: 256, μ: 456189, ~: 459550)\nLogs:\n  Bound result 80478905965783017367833\n  Bound result 6\n\n[PASS] testInitializationAndPermissions() (gas: 97040)\n[PASS] testInvalidConstructorInputs() (gas: 661192)\n[PASS] testLargeSellsDuringAntiSnipeHaveNoBuyCap() (gas: 881757)\n[PASS] testNormalSwapsAfterBothPeriods() (gas: 1657511)\n[PASS] testOutOfRangeLiquidityReceivesNoDonation() (gas: 697865)\n[PASS] testOversizedSpecifiedAmountsRejectBeforeArithmetic() (gas: 118958)\n[PASS] testPartialFillsAllowedAfterAntiSnipe() (gas: 264230)\n[PASS] testPartialSpecifiedFeeRevertsAtomically() (gas: 354383)\n[PASS] testPoolCannotInitializeBeforeHookDeployment() (gas: 1043860)\n[PASS] testSwapBeforeOpenAndWrongAddressMask() (gas: 973896)\n[PASS] testTimeAndBlockWindowsIndependent() (gas: 463242)\n[PASS] testTinyAmountsRoundDownWithoutUnsettledFees() (gas: 20210169)\n[PASS] testUnauthorizedCallbacks() (gas: 85482)\n[PASS] testUnspecifiedPairPartialFillsChargeOnlyExecutedAmount() (gas: 514022)\n[PASS] testWrongPoolKeysRejected() (gas: 650705)\nSuite result: ok. 26 passed; 0 failed; 0 skipped; finished in 37.75ms (83.97ms CPU time)\n\nRan 26 tests for test/SIMDTESTHook.t.sol:SIMDTESTHookPair1Test\n[PASS] testAllTenBlocksAndEndDonateExactAmounts() (gas: 18907623)\n[PASS] testBuyCapExactInputRevertsWithoutTakingFunds() (gas: 446478)\n[PASS] testBuyCapExactOutputAndOneWeiOver() (gas: 277828)\n[PASS] testBuyCapIsPerSwapNotCumulative() (gas: 408146)\n[PASS] testBuyCapTimeBoundaryAndNoSellOrTransferLimit() (gas: 1168654)\n[PASS] testCannotDonateWithoutActiveLiquidityRollsBackSwap() (gas: 1020532)\n[PASS] testCannotReinitializeOrResetClock() (gas: 60890)\n[PASS] testCreationAndRuntimeSize() (gas: 11763)\n[PASS] testDonationCanBeCollectedByInRangeLP() (gas: 487265)\n[PASS] testEmptyPoolUnspecifiedSwapHasNoFee() (gas: 670110)\n[PASS] testFuzzFeeAccounting(bool,bool,uint88,uint8) (runs: 256, μ: 457400, ~: 454115)\nLogs:\n  Bound result 99999000000000000003001\n  Bound result 2\n\n[PASS] testInitializationAndPermissions() (gas: 97040)\n[PASS] testInvalidConstructorInputs() (gas: 661192)\n[PASS] testLargeSellsDuringAntiSnipeHaveNoBuyCap() (gas: 887511)\n[PASS] testNormalSwapsAfterBothPeriods() (gas: 1645680)\n[PASS] testOutOfRangeLiquidityReceivesNoDonation() (gas: 701652)\n[PASS] testOversizedSpecifiedAmountsRejectBeforeArithmetic() (gas: 118958)\n[PASS] testPartialFillsAllowedAfterAntiSnipe() (gas: 258128)\n[PASS] testPartialSpecifiedFeeRevertsAtomically() (gas: 354281)\n[PASS] testPoolCannotInitializeBeforeHookDeployment() (gas: 1043860)\n[PASS] testSwapBeforeOpenAndWrongAddressMask() (gas: 973907)\n[PASS] testTimeAndBlockWindowsIndependent() (gas: 458369)\n[PASS] testTinyAmountsRoundDownWithoutUnsettledFees() (gas: 20166831)\n[PASS] testUnauthorizedCallbacks() (gas: 85673)\n[PASS] testUnspecifiedPairPartialFillsChargeOnlyExecutedAmount() (gas: 506174)\n[PASS] testWrongPoolKeysRejected() (gas: 650716)\nSuite result: ok. 26 passed; 0 failed; 0 skipped; finished in 38.04ms (76.60ms CPU time)\n\nRan 3 test suites in 38.77ms (76.36ms CPU time): 55 tests passed, 0 failed, 0 skipped (55 total tests)\n","passed":true},{"durationMs":37,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SIMDTEST.approve(address,uint256)\",\"SIMDTEST.transfer(address,uint256)\",\"SIMDTEST.transferFrom(address,address,uint256)\",\"SIMDTESTHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"SIMDTESTHook.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":16,\"DEPENDENCIES.sha256\":82,\"README.md\":172,\"foundry.toml\":24,\"launch.json\":24,\"script/check_release.py\":83,\"src/SIMDTEST.sol\":11,\"src/SIMDTESTHook.sol\":188,\"test/SIMDTEST.t.sol\":49,\"test/SIMDTESTHook.t.sol\":587,\"test/helpers/PoolDriver.sol\":62},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":804,"exitCode":0,"name":"slither","output":"[medium/high] incorrect-equality at src/SIMDTESTHook.sol:118: SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes) (src/SIMDTESTHook.sol#118-161) uses a dangerous strict equality:\n[medium/medium] uninitialized-local at src/SIMDTESTHook.sol:110: SIMDTESTHook.beforeSwap(address,PoolKey,IPoolManager.SwapParams,bytes).fee (src/SIMDTESTHook.sol#110) is a local variable never initialized\n[medium/medium] uninitialized-local at src/SIMDTESTHook.sol:137: SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes).fee (src/SIMDTESTHook.sol#137) is a local variable never initialized\n[medium/medium] unused-return at src/SIMDTESTHook.sol:118: SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes) (src/SIMDTESTHook.sol#118-161) ignores return value by poolManager.donate(key,0,fee,) (src/SIMDTESTHook.sol#157)\n[medium/medium] unused-return at src/SIMDTESTHook.sol:118: SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes) (src/SIMDTESTHook.sol#118-161) ignores return value by poolManager.donate(key,fee,0,) (src/SIMDTESTHook.sol#157)\n[low/medium] reentrancy-events at src/SIMDTESTHook.sol:118: Reentrancy in SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes) (src/SIMDTESTHook.sol#118-161):\n[low/medium] timestamp at src/SIMDTESTHook.sol:118: SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes) (src/SIMDTESTHook.sol#118-161) uses timestamp for comparisons","passed":true},{"durationMs":199,"exitCode":0,"name":"aderyn","output":"[high] reentrancy-state-change at src/SIMDTESTHook.sol:55: Reentrancy: State change after external call\n[low] large-numeric-literal at src/SIMDTEST.sol:9: Large Numeric Literal (4 places)\n[low] unchecked-return at src/SIMDTESTHook.sol:157: Unchecked Return","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"d48095261470564b9b89982fbb901ec498f2376802553ca480fab225db911c6f","verifiedTreeHash":"1819aab57333c97e1d3ec04dff11a0f551d1d350","verifierVersion":"0.1.0+ad90ce4c"}]}