TW
Tripwire
Find contracts. Test them. Review real vulns.

Analysis Run

019b3836-35f6-70f6-b91f-9db2da6f60d7

complete
Chain ID
1
Address
Block Number
Created
Fri, Dec 19, 2025 8:03 PM
Review Summary

What survived the funnel

Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?

Confirmed
2
Validated
2
Source
Bytecode only
Review Backing
Present
Best current signal
Untrusted CALL target/value reachable
crit 0 high 2 direct contract
Review Checklist
1. Read the findings table first. Ignore raw jobs until the result looks real.
2. Confirm attacker control, not just the existence of a sink.
3. Confirm money or privilege impact.
4. Keep it if the behavior is real. Kill it if this is normal proxy, admin, or upgrade plumbing.

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
3503 artifact.fetch complete 1 / 3 3 months ago
3504 tool.cast_disasm complete 1 / 3 3 months ago
46420 analysis.bundle complete 1 / 3 1 week ago
46421 capability.graph complete 1 / 3 1 week ago
46422 detector.run complete 1 / 3 1 week ago
46423 validation.fork complete 1 / 3 1 week ago
113263 report.consolidate complete 1 / 6 1 week ago

Artifact

Runtime bytecode: available
Creation TX:
Deployer:
Proxy: no
Implementation:
Verified Source: no

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 6
Findings
2
No findings?
no
Summary
The bytecode bundle is not consistent with a normal ERC20 implementation. The strongest issue is that selector 0xa9059cbb dispatches into approval/callback-style logic rather than an obvious balance-moving transfer path, and that path performs a state write before an unguarded external CALL. No proxy, delegatecall, or upgrade-slot behavior was evidenced in the bundle.
View stdout
{"no_findings":false,"summary":"The bytecode bundle is not consistent with a normal ERC20 implementation. The strongest issue is that selector 0xa9059cbb dispatches into approval/callback-style logic rather than an obvious balance-moving transfer path, and that path performs a state write before an unguarded external CALL. No proxy, delegatecall, or upgrade-slot behavior was evidenced in the bundle.","findings":[{"severity":"high","category":"auth","title":"Selector 0xa9059cbb appears to grant authorization and invoke a callback instead of performing an ERC20 transfer","exploit_scenario":"An integration or user that treats this contract as ERC20-compatible may call selector 0xa9059cbb expecting `transfer(address,uint256)`. In this bytecode, that selector reaches a path that decodes extra dynamic calldata, writes state, then constructs calldata headed by 0x8f4ffcb1 and CALLs a computed target. A malicious recipient/spender contract could use that callback to act on the newly granted authorization, so the caller can end up approving and interacting with an external contract instead of transferring tokens.","recommendation":"Do not expose non-transfer semantics behind 0xa9059cbb. If this is intended approval/callback behavior, move it to a distinct selector and keep 0xa9059cbb as a pure balance-moving transfer. Add explicit eventing and clear ABI separation so wallets/integrations cannot be tricked into granting approvals.","evidence":"Dispatcher bytes at pc 0x56-0x60 route selector 0xa9059cbb to pc 0x2c5. That branch checks caller balance (pc 0x2c5-0x2ef), decodes a dynamic bytes payload from calldata offset 0x44 (pc 0x2f4-0x336), performs an SSTORE before any external interaction (pc 0x387), then builds calldata with selector 0x8f4ffcb1 (pc 0x396) and issues CALL at pc 0x448. By contrast, the evident balance-moving Transfer-event path is elsewhere, around pc 0x765-0x7cc. This semantic mismatch is inferred from bytecode, but the inference is strong.","locations":["selector:0xa9059cbb","pc:0x2c5","pc:0x387","pc:0x396","pc:0x448"]},{"severity":"medium","category":"reentrancy","title":"Approval/callback path performs external CALL after state mutation with no detected guard","exploit_scenario":"A malicious callback target can be passed into the 0xa9059cbb path. Because state is written before the external CALL, the callee can reenter during the callback and attempt follow-on actions such as `transferFrom` or other state-dependent flows while the contract is mid-execution. The exact slot names are unknown from raw bytecode, so the full impact is somewhat uncertain, but the bundle shows no guard detection and confirms a computed CALL target.","recommendation":"Apply checks-effects-interactions discipline: finish all validation, minimize or defer external callbacks, and add an explicit reentrancy guard around any path that both mutates authorization/accounting state and CALLs an untrusted address. If callbacks are required, isolate them behind dedicated functions with narrowly scoped state changes.","evidence":"In the 0xa9059cbb branch, an SSTORE occurs at pc 0x387 before the external CALL at pc 0x448. `auth.guards` is empty in the artifact, and detector findings validate an untrusted computed CALL target/value path. The callsite list shows the relevant CALL at pc 1096 with `target_expression_category: computed` and `returndata_checked: null`. The two other CALLs (pc 1028 and pc 1241) are consistent with identity-precompile copies, so pc 0x448 is the security-relevant callback.","locations":["selector:0xa9059cbb","pc:0x387","pc:0x448","pc:0x404","pc:0x4d9"]}]}
View stderr
OpenAI Codex v0.118.0 (research preview)
--------
workdir: /tmp/codex-catjv7v7
model: gpt-5.4
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: none
session id: 019d5bcb-af92-74e1-91bd-118c96bd1876
--------
user
You are a security auditor. You ONLY have runtime bytecode + analysis artifacts.
You MUST read `BYTECODE_BUNDLE.json` before concluding; it contains the bytecode summary,
evidence bundle, callsites, storage slots, and detector findings.

Special cases when reasoning from bytecode (be explicit about uncertainty):
- Selector inference is best-effort; missing selectors are common.
- Fallback/receive paths may be the only entrypoints.
- CALL vs DELEGATECALL semantics differ; DELEGATECALL executes in caller storage.
- Proxy patterns (EIP-1967, minimal proxies, beacon) change which storage is authoritative.
- Storage slots are raw; mappings/arrays appear via keccak patterns, names are unknown.
- Guard detection is heuristic; absence of guards does NOT mean unguarded.
- Returndata checking is unknown unless explicitly shown in evidence.
- Precompiles (0x1..0x9) and common ERC20 transfer selectors may appear; do not over-claim.

Output MUST be valid JSON matching the provided schema.
- If you find nothing meaningful: set no_findings=true and findings=[].
- Otherwise: set no_findings=false and include findings with severity/category/title.
- Locations can be pc references like "pc:0x123" or selectors like "selector:0xa9059cbb".

Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation,
accounting/invariant breaks, dangerous delegatecall, and untrusted external calls.
Be conservative: if evidence is weak, mark severity low/medium and explain why.
warning: Codex could not find system bubblewrap on PATH. Please install bubblewrap with your package manager. Codex will use the vendored bubblewrap in the meantime.
exec
/bin/bash -lc "pwd && ls -la && printf '\\n--- FILES ---\\n' && rg --files" in /tmp/codex-catjv7v7
 succeeded in 0ms:
/tmp/codex-catjv7v7
total 144
drwx------   2 noahkuhn noahkuhn   4096 Apr  5 03:59 .
drwxrwxrwt 270 nobody   nogroup   24576 Apr  5 03:59 ..
-rw-rw-r--   1 noahkuhn noahkuhn 109623 Apr  5 03:59 BYTECODE_BUNDLE.json
-rw-rw-r--   1 noahkuhn noahkuhn    815 Apr  5 03:59 codex-output-schema.json

--- FILES ---
codex-output-schema.json
BYTECODE_BUNDLE.json

exec
/bin/bash -lc "sed -n '1,220p' BYTECODE_BUNDLE.json" in /tmp/codex-catjv7v7
 succeeded in 0ms:
{
  "analysis_artifact": {
    "address": "0x5fa85a5d220be1391eaeb66542f7e0afd6e461a9",
    "artifact_hash": "0x31c2f09f5d948f84176769dc48891bec15e6285f975a966084426369b0dbfe17",
    "artifact_json": {
      "auth": {
        "guards": []
      },
      "basic_blocks": [
        {
          "end_pc": 10,
          "hash": "0xea84cd9b520f9ac15ee69facebf0514d237ae3f350495e573c06816e7e3d08cf",
          "opcodes": [
            "PUSH1",
            "PUSH1",
            "MSTORE",
            "CALLDATASIZE",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 0
        },
        {
          "end_pc": 30,
          "hash": "0x8351f5fd39e1769e53f7b93891e5bf598f6939b3ca7289b6c03bc34019c93201",
          "opcodes": [
            "PUSH1",
            "PUSH1",
            "EXP",
            "PUSH1",
            "CALLDATALOAD",
            "DIV",
            "PUSH4",
            "OP_81",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 11
        },
        {
          "end_pc": 41,
          "hash": "0xc6fd74ad853f095f612f149f1918dd822cd863808f0ce7f2b76117fb4ea5344f",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 31
        },
        {
          "end_pc": 52,
          "hash": "0x5d2d40f32d4f9058207b0d6f7903f63d039ea51495b4c51d350b92843e2df549",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 42
        },
        {
          "end_pc": 63,
          "hash": "0x6395fbbf8e31545534f4e272460cc45680fcefdbedad9b2d765f1767162723de",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 53
        },
        {
          "end_pc": 74,
          "hash": "0x7e55a1563caa02cce17917c451d16972c56457930e2cb4b94eab14d1a67fd190",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 64
        },
        {
          "end_pc": 85,
          "hash": "0xc7260eb437dd2999867d7a05454629fa3cf0fba947283b4da04ceb9c54acd901",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 75
        },
        {
          "end_pc": 96,
          "hash": "0x0683887794df32b997fb5fc7010a8a5250ef4079db97801f09d5ce49fc9b8d64",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 86
        },
        {
          "end_pc": 107,
          "hash": "0xfa8456f64a3efe7ea003fb11275ded537fdc6154d7ea7a4ee58b535f3e612e23",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 97
        },
        {
          "end_pc": 118,
          "hash": "0x5dba4d1c7ecbe5d8f6b856b2b99e5debf1e79e68b0000b67109b625402c4f8db",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 108
        },
        {
          "end_pc": 129,
          "hash": "0xfd7f4763566007c2c10de3028e4b7bbdfe1ad730834b111926541fa701e7acfd",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 119
        },
        {
          "end_pc": 137,
          "hash": "0x6973f42d8c76df908ce1f6241be0a07398300f020b60d29939b266c56d831038",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 130
        },
        {
          "end_pc": 204,
          "hash": "0xa1430ae9677b5455ef3c4d76059d21d26db7f04ea69b827f63d906f1e4ebab3a",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "OP_80",
            "SLOAD",
            "PUSH1",
            "OP_80",
            "MLOAD",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "OP_85",
            "AND",
            "ISZERO",
            "PUSH2",
            "MUL",
            "PUSH1",
            "NOT",
            "ADD",
            "OP_90",
            "OP_94",
            "AND",
            "OP_93",
            "OP_90",
            "OP_93",
            "DIV",
            "PUSH1",
            "OP_81",
            "ADD",
            "OP_84",
            "OP_90",
            "DIV",
            "OP_84",
            "MUL",
            "OP_82",
            "ADD",
            "OP_84",
            "ADD",
            "OP_90",
            "OP_92",
            "MSTORE",
            "OP_81",
            "OP_81",
            "MSTORE",
            "OP_92",
            "OP_91",
            "OP_83",
            "ADD",
            "OP_82",
            "OP_82",
            "OP_80",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 138

exec
/bin/bash -lc 'cat codex-output-schema.json' in /tmp/codex-catjv7v7
 succeeded in 0ms:
{"type": "object", "additionalProperties": false, "required": ["no_findings", "summary", "findings"], "properties": {"no_findings": {"type": "boolean"}, "summary": {"type": "string"}, "findings": {"type": "array", "items": {"type": "object", "additionalProperties": false, "required": ["severity", "category", "title", "evidence", "locations", "exploit_scenario", "recommendation"], "properties": {"severity": {"type": "string", "enum": ["info", "low", "medium", "high", "critical"]}, "category": {"type": "string", "enum": ["access_control", "reentrancy", "math", "oracle", "upgradeability", "auth", "other"]}, "title": {"type": "string"}, "exploit_scenario": {"type": "string"}, "recommendation": {"type": "string"}, "evidence": {"type": "string"}, "locations": {"type": "array", "items": {"type": "string"}}}}}}}
exec
/bin/bash -lc "jq 'keys, .analysis_artifact.artifact_json | keys' BYTECODE_BUNDLE.json" in /tmp/codex-catjv7v7
 succeeded in 0ms:
[
  0,
  1,
  2,
  3,
  4,
  5
]
[
  "auth",
  "basic_blocks",
  "callsites",
  "cfg_edges",
  "cfg_hash",
  "dispatcher_type",
  "function_entries",
  "functions",
  "selectors",
  "sinks",
  "storage",
  "version"
]

exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.selectors, .analysis_artifact.artifact_json.function_entries, .analysis_artifact.artifact_json.functions' BYTECODE_BUNDLE.json" in /tmp/codex-catjv7v7
 succeeded in 0ms:
[
  "0x06fdde03",
  "0x1d2bca17",
  "0x23b872dd",
  "0x313ce567",
  "0x70a08231",
  "0x95d89b41",
  "0xa9059cbb",
  "0xcae9ca51",
  "0xdc3080f2",
  "0xdd62ed3e"
]
[
  {
    "entry_pc": null,
    "selector": "0x06fdde03"
  },
  {
    "entry_pc": 599290589,
    "selector": "0x1d2bca17"
  },
  {
    "entry_pc": 826074471,
    "selector": "0x23b872dd"
  },
  {
    "entry_pc": 1889567281,
    "selector": "0x313ce567"
  },
  {
    "entry_pc": 2514000705,
    "selector": "0x70a08231"
  },
  {
    "entry_pc": 2835717307,
    "selector": "0x95d89b41"
  },
  {
    "entry_pc": 3404319313,
    "selector": "0xa9059cbb"
  },
  {
    "entry_pc": 3694166258,
    "selector": "0xcae9ca51"
  },
  {
    "entry_pc": 3714247998,
    "selector": "0xdc3080f2"
  },
  {
    "entry_pc": 1185,
    "selector": "0xdd62ed3e"
  }
]
[
  {
    "auth": {
      "guards": []
    },
    "entry_pc": null,
    "selector": "0x06fdde03",
    "sinks": {
      "call": 3,
      "delegatecall": 0,
      "selfdestruct": 0,
      "staticcall": 0
    },
    "storage": {
      "reads": 23,
      "slots": [
        {
          "op": "SLOAD",
          "pc": 145,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SLOAD",
          "pc": 218,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
        },
        {
          "op": "SLOAD",
          "pc": 586,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
        },
        {
          "op": "SLOAD",
          "pc": 623,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
        },
        {
          "op": "SLOAD",
          "pc": 695,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
        },
        {
          "op": "SSTORE",
          "pc": 903,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SLOAD",
          "pc": 1840,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
        }
      ],
      "writes": 15
    }
  },
  {
    "auth": {
      "guards": []
    },
    "entry_pc": 599290589,
    "selector": "0x1d2bca17",
    "sinks": {
      "call": 3,
      "delegatecall": 0,
      "selfdestruct": 0,
      "staticcall": 0
    },
    "storage": {
      "reads": 23,
      "slots": [
        {
          "op": "SLOAD",
          "pc": 145,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SLOAD",
          "pc": 218,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
        },
        {
          "op": "SLOAD",
          "pc": 586,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
        },
        {
          "op": "SLOAD",
          "pc": 623,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
        },
        {
          "op": "SLOAD",
          "pc": 695,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
        },
        {
          "op": "SSTORE",
          "pc": 903,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SLOAD",
          "pc": 1840,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
        }
      ],
      "writes": 15
    }
  },
  {
    "auth": {
      "guards": []
    },
    "entry_pc": 826074471,
    "selector": "0x23b872dd",
    "sinks": {
      "call": 3,
      "delegatecall": 0,
      "selfdestruct": 0,
      "staticcall": 0
    },
    "storage": {
      "reads": 23,
      "slots": [
        {
          "op": "SLOAD",
          "pc": 145,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SLOAD",
          "pc": 218,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
        },
        {
          "op": "SLOAD",
          "pc": 586,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
        },
        {
          "op": "SLOAD",
          "pc": 623,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
        },
        {
          "op": "SLOAD",
          "pc": 695,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
        },
        {
          "op": "SSTORE",
          "pc": 903,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SLOAD",
          "pc": 1840,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
        }
      ],
      "writes": 15
    }
  },
  {
    "auth": {
      "guards": []
    },
    "entry_pc": 1889567281,
    "selector": "0x313ce567",
    "sinks": {
      "call": 3,
      "delegatecall": 0,
      "selfdestruct": 0,
      "staticcall": 0
    },
    "storage": {
      "reads": 23,
      "slots": [
        {
          "op": "SLOAD",
          "pc": 145,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SLOAD",
          "pc": 218,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
        },
        {
          "op": "SLOAD",
          "pc": 586,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
        },
        {
          "op": "SLOAD",
          "pc": 623,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
        },
        {
          "op": "SLOAD",
          "pc": 695,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
        },
        {
          "op": "SSTORE",
          "pc": 903,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SLOAD",
          "pc": 1840,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
        }
      ],
      "writes": 15
    }
  },
  {
    "auth": {
      "guards": []
    },
    "entry_pc": 2514000705,
    "selector": "0x70a08231",
    "sinks": {
      "call": 3,
      "delegatecall": 0,
      "selfdestruct": 0,
      "staticcall": 0
    },
    "storage": {
      "reads": 23,
      "slots": [
        {
          "op": "SLOAD",
          "pc": 145,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SLOAD",
          "pc": 218,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
        },
        {
          "op": "SLOAD",
          "pc": 586,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
        },
        {
          "op": "SLOAD",
          "pc": 623,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
        },
        {
          "op": "SLOAD",
          "pc": 695,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
        },
        {
          "op": "SSTORE",
          "pc": 903,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SLOAD",
          "pc": 1840,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
        }
      ],
      "writes": 15
    }
  },
  {
    "auth": {
      "guards": []
    },
    "entry_pc": 2835717307,
    "selector": "0x95d89b41",
    "sinks": {
      "call": 3,
      "delegatecall": 0,
      "selfdestruct": 0,
      "staticcall": 0
    },
    "storage": {
      "reads": 23,
      "slots": [
        {
          "op": "SLOAD",
          "pc": 145,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SLOAD",
          "pc": 218,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
        },
        {
          "op": "SLOAD",
          "pc": 586,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
        },
        {
          "op": "SLOAD",
          "pc": 623,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
        },
        {
          "op": "SLOAD",
          "pc": 695,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
        },
        {
          "op": "SSTORE",
          "pc": 903,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SLOAD",
          "pc": 1840,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
        }
      ],
      "writes": 15
    }
  },
  {
    "auth": {
      "guards": []
    },
    "entry_pc": 3404319313,
    "selector": "0xa9059cbb",
    "sinks": {
      "call": 3,
      "delegatecall": 0,
      "selfdestruct": 0,
      "staticcall": 0
    },
    "storage": {
      "reads": 23,
      "slots": [
        {
          "op": "SLOAD",
          "pc": 145,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SLOAD",
          "pc": 218,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
        },
        {
          "op": "SLOAD",
          "pc": 586,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
        },
        {
          "op": "SLOAD",
          "pc": 623,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
        },
        {
          "op": "SLOAD",
          "pc": 695,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
        },
        {
          "op": "SSTORE",
          "pc": 903,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SLOAD",
          "pc": 1840,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
        }
      ],
      "writes": 15
    }
  },
  {
    "auth": {
      "guards": []
    },
    "entry_pc": 3694166258,
    "selector": "0xcae9ca51",
    "sinks": {
      "call": 3,
      "delegatecall": 0,
      "selfdestruct": 0,
      "staticcall": 0
    },
    "storage": {
      "reads": 23,
      "slots": [
        {
          "op": "SLOAD",
          "pc": 145,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SLOAD",
          "pc": 218,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
        },
        {
          "op": "SLOAD",
          "pc": 586,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
        },
        {
          "op": "SLOAD",
          "pc": 623,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
        },
        {
          "op": "SLOAD",
          "pc": 695,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
        },
        {
          "op": "SSTORE",
          "pc": 903,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SLOAD",
          "pc": 1840,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
        }
      ],
      "writes": 15
    }
  },
  {
    "auth": {
      "guards": []
    },
    "entry_pc": 3714247998,
    "selector": "0xdc3080f2",
    "sinks": {
      "call": 3,
      "delegatecall": 0,
      "selfdestruct": 0,
      "staticcall": 0
    },
    "storage": {
      "reads": 23,
      "slots": [
        {
          "op": "SLOAD",
          "pc": 145,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SLOAD",
          "pc": 218,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
        },
        {
          "op": "SLOAD",
          "pc": 586,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
        },
        {
          "op": "SLOAD",
          "pc": 623,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
        },
        {
          "op": "SLOAD",
          "pc": 695,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
        },
        {
          "op": "SSTORE",
          "pc": 903,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SLOAD",
          "pc": 1840,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
        }
      ],
      "writes": 15
    }
  },
  {
    "auth": {
      "guards": []
    },
    "entry_pc": 1185,
    "selector": "0xdd62ed3e",
    "sinks": {
      "call": 3,
      "delegatecall": 0,
      "selfdestruct": 0,
      "staticcall": 0
    },
    "storage": {
      "reads": 23,
      "slots": [
        {
          "op": "SLOAD",
          "pc": 145,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SLOAD",
          "pc": 218,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
        },
        {
          "op": "SLOAD",
          "pc": 586,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
        },
        {
          "op": "SLOAD",
          "pc": 623,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
        },
        {
          "op": "SLOAD",
          "pc": 695,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
        },
        {
          "op": "SSTORE",
          "pc": 903,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SLOAD",
          "pc": 1840,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
        }
      ],
      "writes": 15
    }
  }
]

exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.callsites, .analysis_artifact.artifact_json.sinks, .analysis_artifact.artifact_json.storage' BYTECODE_BUNDLE.json" in /tmp/codex-catjv7v7
 succeeded in 0ms:
[
  {
    "opcode": "CALL",
    "pc": 1028,
    "returndata_checked": null,
    "target_expression_category": "computed",
    "value_expression_category": "computed"
  },
  {
    "opcode": "CALL",
    "pc": 1096,
    "returndata_checked": null,
    "target_expression_category": "computed",
    "value_expression_category": "computed"
  },
  {
    "opcode": "CALL",
    "pc": 1241,
    "returndata_checked": null,
    "target_expression_category": "computed",
    "value_expression_category": "computed"
  }
]
{
  "call": 3,
  "create": 0,
  "create2": 0,
  "delegatecall": 0,
  "selfdestruct": 0,
  "staticcall": 0,
  "upgrade_slot_write_suspected": false
}
{
  "keccak_count": 24,
  "reads": 23,
  "slots": [
    {
      "op": "SLOAD",
      "pc": 145,
      "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
    },
    {
      "op": "SLOAD",
      "pc": 218,
      "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
    },
    {
      "op": "SLOAD",
      "pc": 586,
      "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
    },
    {
      "op": "SLOAD",
      "pc": 623,
      "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
    },
    {
      "op": "SLOAD",
      "pc": 695,
      "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
    },
    {
      "op": "SSTORE",
      "pc": 903,
      "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
    },
    {
      "op": "SLOAD",
      "pc": 1840,
      "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
    }
  ],
  "writes": 15
}

exec
/bin/bash -lc "jq 'del(.analysis_artifact) | .' BYTECODE_BUNDLE.json" in /tmp/codex-catjv7v7
 succeeded in 0ms:
{
  "analysis_run": {
    "address": "0x5fa85a5d220be1391eaeb66542f7e0afd6e461a9",
    "block_number": null,
    "chain_id": 1,
    "child_links": [],
    "created_at": "2025-12-19T20:03:55.000000Z",
    "id": "019b3836-35f6-70f6-b91f-9db2da6f60d7",
    "parent_links": [],
    "status": "running",
    "updated_at": "2026-04-04T19:55:29.000000Z"
  },
  "artifact": {
    "codehash": "0xd389ff5b897bddbe186c7d13c7e314324a7c27366140c648b241eea08a496ef5",
    "compiler_json": {
      "etherscan": {
        "skipped": true
      }
    },
    "implementation_address": null,
    "is_proxy": false,
    "runtime_bytecode": {
      "full": "0x606060405236156100825760e060020a600035046306fdde03811461008a5780631d2bca17146100e857806323b872dd14610212578063313ce5671461024457806370a082311461025057806395d89b4114610268578063a9059cbb146102c5578063cae9ca51146102f4578063dc3080f214610458578063dd62ed3e1461047d575b6104a1610002565b6104a36000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105655780601f1061053a57610100808354040283529160200191610565565b60408051602060248035600481810135601f81018590048502860185019096528585526104a1958135959194604494929390920191819084018382808284375050604080516020606435808b0135601f81018390048302840183019094528383529799983598976084975091955060249190910193509091508190840183828082843750949650505050505050600160a060020a033316600090815260036020908152604082208690558154855183805260026001831615610100026000190190921691909104601f9081018390047f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5639081019390919088019083901061066d57805160ff19168380011785555b5061069d9291505b808211156106f657600081556001016101fe565b610511600435602435604435600160a060020a0383166000908152600360205260408120548290101561056d57610002565b61052360025460ff1681565b61051160043560036020526000908152604090205481565b6104a360018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105655780601f1061053a57610100808354040283529160200191610565565b6104a1600435602435600160a060020a0333166000908152600360205260409020548190101561073e57610002565b604080516020604435600481810135601f810184900484028501840190955284845261051194813594602480359593946064949293910191819084018382808284375094965050505050505060006000836004600050600033600160a060020a03168152602001908152602001600020600050600087600160a060020a031681526020019081526020016000206000508190555084905080600160a060020a0316638f4ffcb1338630876040518560e060020a0281526004018085600160a060020a0316815260200184815260200183600160a060020a03168152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561042e5780820380516001836020036101000a031916815260200191505b50955050505050506000604051808303816000876161da5a03f11561000257505050509392505050565b6005602090815260043560009081526040808220909252602435815220546105119081565b60046020818152903560009081526040808220909252602435815220546105119081565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156105035780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051918252519081900360200190f35b6040805160ff929092168252519081900360200190f35b820191906000526020600020905b81548152906001019060200180831161054857829003601f168201915b505050505081565b600160a060020a038316600090815260036020526040902054828101101561059457610002565b600160a060020a038481166000818152600460209081526040808320339590951680845294825280832054938352600582528083209483529390529190912054830111156105e157610002565b600160a060020a0384811660008181526003602090815260408083208054889003905587851680845281842080548901905593835260058252808320339590951680845294825291829020805487019055815186815291519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a39392505050565b828001600101855582156101f6579182015b828111156101f657825182600050559160200191906001019061067f565b50508060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106106fa57805160ff19168380011785555b5061072a9291506101fe565b5090565b828001600101855582156106ea579182015b828111156106ea57825182600050559160200191906001019061070c565b50506002805460ff19168317905550505050565b600160a060020a038216600090815260036020526040902054818101101561076557610002565b600160a060020a03338116600081815260036020908152604080832080548790039055938616808352918490208054860190558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3505056",
      "head": null,
      "length": 4002,
      "tail": null,
      "truncated": false
    },
    "verified_source": false
  },
  "capability_graph": {
    "address": "0x5fa85a5d220be1391eaeb66542f7e0afd6e461a9",
    "block_number": null,
    "chain_id": 1,
    "codehash": "0xd389ff5b897bddbe186c7d13c7e314324a7c27366140c648b241eea08a496ef5",
    "created_at": "2026-04-04T19:55:29.000000Z",
    "graph_hash": "0x32cec1bc6ace7f872c2267fa5e640c9248ad93d91100a3fd7a1da9a14b073cdd",
    "graph_json": {
      "edges": [
        {
          "from": "bb:0",
          "to": "bb:130",
          "type": "control_flow"
        },
        {
          "from": "bb:0",
          "to": "bb:11",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:11",
          "to": "bb:138",
          "type": "control_flow"
        },
        {
          "from": "bb:11",
          "to": "bb:31",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:31",
          "to": "bb:232",
          "type": "control_flow"
        },
        {
          "from": "bb:31",
          "to": "bb:42",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:42",
          "to": "bb:530",
          "type": "control_flow"
        },
        {
          "from": "bb:42",
          "to": "bb:53",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:53",
          "to": "bb:580",
          "type": "control_flow"
        },
        {
          "from": "bb:53",
          "to": "bb:64",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:64",
          "to": "bb:592",
          "type": "control_flow"
        },
        {
          "from": "bb:64",
          "to": "bb:75",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:75",
          "to": "bb:616",
          "type": "control_flow"
        },
        {
          "from": "bb:75",
          "to": "bb:86",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:86",
          "to": "bb:709",
          "type": "control_flow"
        },
        {
          "from": "bb:86",
          "to": "bb:97",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:97",
          "to": "bb:756",
          "type": "control_flow"
        },
        {
          "from": "bb:97",
          "to": "bb:108",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:108",
          "to": "bb:1112",
          "type": "control_flow"
        },
        {
          "from": "bb:108",
          "to": "bb:119",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:119",
          "to": "bb:1149",
          "type": "control_flow"
        },
        {
          "from": "bb:119",
          "to": "bb:130",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:138",
          "to": "bb:1381",
          "type": "control_flow"
        },
        {
          "from": "bb:138",
          "to": "bb:205",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:205",
          "to": "bb:1338",
          "type": "control_flow"
        },
        {
          "from": "bb:205",
          "to": "bb:213",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:213",
          "to": "bb:1381",
          "type": "control_flow"
        },
        {
          "from": "bb:232",
          "to": "bb:1645",
          "type": "control_flow"
        },
        {
          "from": "bb:232",
          "to": "bb:490",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:490",
          "to": "bb:502",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:502",
          "to": "bb:510",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:510",
          "to": "bb:1782",
          "type": "control_flow"
        },
        {
          "from": "bb:510",
          "to": "bb:519",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:519",
          "to": "bb:510",
          "type": "control_flow"
        },
        {
          "from": "bb:530",
          "to": "bb:1389",
          "type": "control_flow"
        },
        {
          "from": "bb:530",
          "to": "bb:576",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:616",
          "to": "bb:1381",
          "type": "control_flow"
        },
        {
          "from": "bb:616",
          "to": "bb:682",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:682",
          "to": "bb:1338",
          "type": "control_flow"
        },
        {
          "from": "bb:682",
          "to": "bb:690",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:690",
          "to": "bb:1381",
          "type": "control_flow"
        },
        {
          "from": "bb:709",
          "to": "bb:1854",
          "type": "control_flow"
        },
        {
          "from": "bb:709",
          "to": "bb:752",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:756",
          "to": "bb:1070",
          "type": "control_flow"
        },
        {
          "from": "bb:756",
          "to": "bb:1045",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1045",
          "to": "bb:1070",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1070",
          "to": "bb:1102",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1187",
          "to": "bb:1283",
          "type": "control_flow"
        },
        {
          "from": "bb:1187",
          "to": "bb:1258",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1258",
          "to": "bb:1283",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1338",
          "to": "bb:1352",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1352",
          "to": "bb:1352",
          "type": "control_flow"
        },
        {
          "from": "bb:1352",
          "to": "bb:1372",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1372",
          "to": "bb:1381",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1389",
          "to": "bb:1428",
          "type": "control_flow"
        },
        {
          "from": "bb:1389",
          "to": "bb:1424",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1428",
          "to": "bb:1505",
          "type": "control_flow"
        },
        {
          "from": "bb:1428",
          "to": "bb:1501",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1645",
          "to": "bb:502",
          "type": "control_flow"
        },
        {
          "from": "bb:1645",
          "to": "bb:1660",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1660",
          "to": "bb:1663",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1663",
          "to": "bb:502",
          "type": "control_flow"
        },
        {
          "from": "bb:1663",
          "to": "bb:1672",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1672",
          "to": "bb:1663",
          "type": "control_flow"
        },
        {
          "from": "bb:1693",
          "to": "bb:1786",
          "type": "control_flow"
        },
        {
          "from": "bb:1693",
          "to": "bb:1758",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1758",
          "to": "bb:1770",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1770",
          "to": "bb:510",
          "type": "control_flow"
        },
        {
          "from": "bb:1786",
          "to": "bb:1770",
          "type": "control_flow"
        },
        {
          "from": "bb:1786",
          "to": "bb:1801",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1801",
          "to": "bb:1804",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1804",
          "to": "bb:1770",
          "type": "control_flow"
        },
        {
          "from": "bb:1804",
          "to": "bb:1813",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1813",
          "to": "bb:1804",
          "type": "control_flow"
        },
        {
          "from": "bb:1854",
          "to": "bb:1893",
          "type": "control_flow"
        },
        {
          "from": "bb:1854",
          "to": "bb:1889",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "fn:0x1d2bca17",
          "to": "bb:599290589",
          "type": "entry"
        },
        {
          "from": "fn:0x23b872dd",
          "to": "bb:826074471",
          "type": "entry"
        },
        {
          "from": "fn:0x313ce567",
          "to": "bb:1889567281",
          "type": "entry"
        },
        {
          "from": "fn:0x70a08231",
          "to": "bb:2514000705",
          "type": "entry"
        },
        {
          "from": "fn:0x95d89b41",
          "to": "bb:2835717307",
          "type": "entry"
        },
        {
          "from": "fn:0xa9059cbb",
          "to": "bb:3404319313",
          "type": "entry"
        },
        {
          "from": "fn:0xcae9ca51",
          "to": "bb:3694166258",
          "type": "entry"
        },
        {
          "from": "fn:0xdc3080f2",
          "to": "bb:3714247998",
          "type": "entry"
        },
        {
          "from": "fn:0xdd62ed3e",
          "to": "bb:1185",
          "type": "entry"
        },
        {
          "from": "bb:756",
          "to": "call:1028",
          "type": "contains"
        },
        {
          "from": "call:1028",
          "to": "sink:call",
          "type": "capability"
        },
        {
          "from": "bb:1070",
          "to": "call:1096",
          "type": "contains"
        },
        {
          "from": "call:1096",
          "to": "sink:call",
          "type": "capability"
        },
        {
          "from": "bb:1187",
          "to": "call:1241",
          "type": "contains"
        },
        {
          "from": "call:1241",
          "to": "sink:call",
          "type": "capability"
        }
      ],
      "nodes": [
        {
          "end_pc": 10,
          "hash": "0xea84cd9b520f9ac15ee69facebf0514d237ae3f350495e573c06816e7e3d08cf",
          "id": "bb:0",
          "start_pc": 0,
          "type": "basic_block"
        },
        {
          "end_pc": 30,
          "hash": "0x8351f5fd39e1769e53f7b93891e5bf598f6939b3ca7289b6c03bc34019c93201",
          "id": "bb:11",
          "start_pc": 11,
          "type": "basic_block"
        },
        {
          "end_pc": 41,
          "hash": "0xc6fd74ad853f095f612f149f1918dd822cd863808f0ce7f2b76117fb4ea5344f",
          "id": "bb:31",
          "start_pc": 31,
          "type": "basic_block"
        },
        {
          "end_pc": 52,
          "hash": "0x5d2d40f32d4f9058207b0d6f7903f63d039ea51495b4c51d350b92843e2df549",
          "id": "bb:42",
          "start_pc": 42,
          "type": "basic_block"
        },
        {
          "end_pc": 63,
          "hash": "0x6395fbbf8e31545534f4e272460cc45680fcefdbedad9b2d765f1767162723de",
          "id": "bb:53",
          "start_pc": 53,
          "type": "basic_block"
        },
        {
          "end_pc": 74,
          "hash": "0x7e55a1563caa02cce17917c451d16972c56457930e2cb4b94eab14d1a67fd190",
          "id": "bb:64",
          "start_pc": 64,
          "type": "basic_block"
        },
        {
          "end_pc": 85,
          "hash": "0xc7260eb437dd2999867d7a05454629fa3cf0fba947283b4da04ceb9c54acd901",
          "id": "bb:75",
          "start_pc": 75,
          "type": "basic_block"
        },
        {
          "end_pc": 96,
          "hash": "0x0683887794df32b997fb5fc7010a8a5250ef4079db97801f09d5ce49fc9b8d64",
          "id": "bb:86",
          "start_pc": 86,
          "type": "basic_block"
        },
        {
          "end_pc": 107,
          "hash": "0xfa8456f64a3efe7ea003fb11275ded537fdc6154d7ea7a4ee58b535f3e612e23",
          "id": "bb:97",
          "start_pc": 97,
          "type": "basic_block"
        },
        {
          "end_pc": 118,
          "hash": "0x5dba4d1c7ecbe5d8f6b856b2b99e5debf1e79e68b0000b67109b625402c4f8db",
          "id": "bb:108",
          "start_pc": 108,
          "type": "basic_block"
        },
        {
          "end_pc": 129,
          "hash": "0xfd7f4763566007c2c10de3028e4b7bbdfe1ad730834b111926541fa701e7acfd",
          "id": "bb:119",
          "start_pc": 119,
          "type": "basic_block"
        },
        {
          "end_pc": 137,
          "hash": "0x6973f42d8c76df908ce1f6241be0a07398300f020b60d29939b266c56d831038",
          "id": "bb:130",
          "start_pc": 130,
          "type": "basic_block"
        },
        {
          "end_pc": 204,
          "hash": "0xa1430ae9677b5455ef3c4d76059d21d26db7f04ea69b827f63d906f1e4ebab3a",
          "id": "bb:138",
          "start_pc": 138,
          "type": "basic_block"
        },
        {
          "end_pc": 212,
          "hash": "0x30ed60a8101b93a007d51b2b67a35c97e26a1c71be58a64f9b97c1f714f775eb",
          "id": "bb:205",
          "start_pc": 205,
          "type": "basic_block"
        },
        {
          "end_pc": 231,
          "hash": "0x7a8ae9709127fd4398a9bd91e810c4f44c2f333c88d3b44f7b85ca6ad5198f40",
          "id": "bb:213",
          "start_pc": 213,
          "type": "basic_block"
        },
        {
          "end_pc": 489,
          "hash": "0xd1e01b7030cbc37007c0d1336178bab70d82e6a701f1cd29bf4bd0cdbbf3a22d",
          "id": "bb:232",
          "start_pc": 232,
          "type": "basic_block"
        },
        {
          "end_pc": 501,
          "hash": "0x7a92991e2844497658847a2ea74aed5ba324e57c97dbddb9b52877c26fd98416",
          "id": "bb:490",
          "start_pc": 490,
          "type": "basic_block"
        },
        {
          "end_pc": 509,
          "hash": "0x0b9b6bb4eea7a785f127cf35f9a2f23da7d9e15bad91641d45b4e0cdd02f84de",
          "id": "bb:502",
          "start_pc": 502,
          "type": "basic_block"
        },
        {
          "end_pc": 518,
          "hash": "0xe443861e6458ce6eccbd83ff74b3e6f4f7c1a12bf13bac84df8dded0e9675adf",
          "id": "bb:510",
          "start_pc": 510,
          "type": "basic_block"
        },
        {
          "end_pc": 529,
          "hash": "0xb9d2ccbb9e6ccfba96248ccbe328247f2b6305aade2627c20b34f16ed436b301",
          "id": "bb:519",
          "start_pc": 519,
          "type": "basic_block"
        },
        {
          "end_pc": 575,
          "hash": "0x0ccd47193cfaff13763aebf675c48000d1f36b2bbc2839817bcffb6c577a59fd",
          "id": "bb:530",
          "start_pc": 530,
          "type": "basic_block"
        },
        {
          "end_pc": 579,
          "hash": "0xe3d0abb290b1434c0882a4a475beab8f5c637ee13c376a90a982814bc687e0aa",
          "id": "bb:576",
          "start_pc": 576,
          "type": "basic_block"
        },
        {
          "end_pc": 591,
          "hash": "0x14e5b1deb83da415d342fb4496ad805f5b47b7768e71e4d7367b74c3af477522",
          "id": "bb:580",
          "start_pc": 580,
          "type": "basic_block"
        },
        {
          "end_pc": 615,
          "hash": "0x3292d8469ee1e8a23b7e950aa87c05613e781cd5d7617960da01a4d9f1f48ac9",
          "id": "bb:592",
          "start_pc": 592,
          "type": "basic_block"
        },
        {
          "end_pc": 681,
          "hash": "0xaf1fb4ca1f53f339a48fb0fd45fa7568b6ef991617cec8f22973d50dba010943",
          "id": "bb:616",
          "start_pc": 616,
          "type": "basic_block"
        },
        {
          "end_pc": 689,
          "hash": "0xb660d9458316a2af7017919ffdb2f4ce09eb54be2d2468443c8c424916fccc48",
          "id": "bb:682",
          "start_pc": 682,
          "type": "basic_block"
        },
        {
          "end_pc": 708,
          "hash": "0x5a73966c5f1be4607c05384c381dda4ed564c51880a2edbb61cd07317011b069",
          "id": "bb:690",
          "start_pc": 690,
          "type": "basic_block"
        },
        {
          "end_pc": 751,
          "hash": "0x94345c68c3603b6d5e2c73da4cb0095a8210c15d5704d9ed47b3fe971d9f829c",
          "id": "bb:709",
          "start_pc": 709,
          "type": "basic_block"
        },
        {
          "end_pc": 755,
          "hash": "0x01a7be615724532b6d9f92d06b8b10086f1a57e436301fad0dd825cb1c48eb9a",
          "id": "bb:752",
          "start_pc": 752,
          "type": "basic_block"
        },
        {
          "end_pc": 1044,
          "hash": "0x9798ed6431b096de023c4c62617057ae5618b51692365c29d021fd4ddb825475",
          "id": "bb:756",
          "start_pc": 756,
          "type": "basic_block"
        },
        {
          "end_pc": 1069,
          "hash": "0x8f2b0b05cb85d42f3ce25478c001897ee00539595d918267c269d425fdb409a7",
          "id": "bb:1045",
          "start_pc": 1045,
          "type": "basic_block"
        },
        {
          "end_pc": 1101,
          "hash": "0xa684bf531378853015bf9c755222452e24b9ff9e99faf0904863f47f6c0bbb72",
          "id": "bb:1070",
          "start_pc": 1070,
          "type": "basic_block"
        },
        {
          "end_pc": 1111,
          "hash": "0x0add245c08f7a33cdc9b0f81478a43b3ad6e89572486870fca2740c9ea257f50",
          "id": "bb:1102",
          "start_pc": 1102,
          "type": "basic_block"
        },
        {
          "end_pc": 1148,
          "hash": "0x0c84a1357f39db41fc75ce9afbeac670bb348970569d4ed0c6bafa0cb884d869",
          "id": "bb:1112",
          "start_pc": 1112,
          "type": "basic_block"
        },
        {
          "end_pc": 1184,
          "hash": "0x47843f54b42b5122207989009f90d32d2b5dd9d036e2ab4d417aad7f7cba02b2",
          "id": "bb:1149",
          "start_pc": 1149,
          "type": "basic_block"
        },
        {
          "end_pc": 1186,
          "hash": "0xbb1a7eb3bff17df02c566c4d97223f08e5f2634fdfe4eb9baf580cd05f8f73d2",
          "id": "bb:1185",
          "start_pc": 1185,
          "type": "basic_block"
        },
        {
          "end_pc": 1257,
          "hash": "0xbaa13a0bafc7a2e5e446975919eadb5e17a01dbe0dd698b2528ab28fc7b8687b",
          "id": "bb:1187",
          "start_pc": 1187,
          "type": "basic_block"
        },
        {
          "end_pc": 1282,
          "hash": "0x21a4e5112b9c0682ee02098a59ac8f5b900d5cff95e3b8c5fe821522bd12c94f",
          "id": "bb:1258",
          "start_pc": 1258,
          "type": "basic_block"
        },
        {
          "end_pc": 1296,
          "hash": "0xccbe2197fd4fbdd66d973701e239b2c909920edd3ee89b4242f487537fa9868d",
          "id": "bb:1283",
          "start_pc": 1283,
          "type": "basic_block"
        },
        {
          "end_pc": 1314,
          "hash": "0x47b3df7dc35690599492f510b5a1e889d3dd1eee11b8cb92d54297bac368e909",
          "id": "bb:1297",
          "start_pc": 1297,
          "type": "basic_block"
        },
        {
          "end_pc": 1337,
          "hash": "0xaa6350875dac9906fa750b7bb5312c9cb71db936c33372d3ef30773aa56e785b",
          "id": "bb:1315",
          "start_pc": 1315,
          "type": "basic_block"
        },
        {
          "end_pc": 1351,
          "hash": "0xf4903fe5cad1b1ad373badf968a52c1fc5943a7e5956b88f4748577d94afda6b",
          "id": "bb:1338",
          "start_pc": 1338,
          "type": "basic_block"
        },
        {
          "end_pc": 1371,
          "hash": "0xee297038bf3fdb728338054e09625f0c4432a297fa5f2d985ced2f3a20ec50c5",
          "id": "bb:1352",
          "start_pc": 1352,
          "type": "basic_block"
        },
        {
          "end_pc": 1380,
          "hash": "0xd4c6bd57e590fe79082cf35638ce0f7b6e144608f848af0a06ae8948d8ae16a0",
          "id": "bb:1372",
          "start_pc": 1372,
          "type": "basic_block"
        },
        {
          "end_pc": 1388,
          "hash": "0xcac967ae3ce05276d6736956aba0c9457e7d365e634c70c072d1efcfc60b1580",
          "id": "bb:1381",
          "start_pc": 1381,
          "type": "basic_block"
        },
        {
          "end_pc": 1423,
          "hash": "0xd18b7920aabe0f5f4cad1e6358aa54f3663770d259e8107fcf8246cd42ccbb18",
          "id": "bb:1389",
          "start_pc": 1389,
          "type": "basic_block"
        },
        {
          "end_pc": 1427,
          "hash": "0x936219ef931bb3c4b71b9097d02a5d37473e2418583b8408fdd34bb3eb9a64f0",
          "id": "bb:1424",
          "start_pc": 1424,
          "type": "basic_block"
        },
        {
          "end_pc": 1500,
          "hash": "0x2b5aeba7f5225c712d05d5f5b6c174573d037652809bfd8cae1f7eb847a157f3",
          "id": "bb:1428",
          "start_pc": 1428,
          "type": "basic_block"
        },
        {
          "end_pc": 1504,
          "hash": "0x89cef420c61dcc82ab748242aa7a9e51cf1a3521ee2820d24e5eb7b7eaa4c158",
          "id": "bb:1501",
          "start_pc": 1501,
          "type": "basic_block"
        },
        {
          "end_pc": 1644,
          "hash": "0xd097779df27a55eadc50bd6b78b57f5b074cb3ac74f9264c3465e760d08695ad",
          "id": "bb:1505",
          "start_pc": 1505,
          "type": "basic_block"
        },
        {
          "end_pc": 1659,
          "hash": "0xadb54743287476494b173dae7375820b0b41f17c9cbfa5198b7f97c6a0f45ecf",
          "id": "bb:1645",
          "start_pc": 1645,
          "type": "basic_block"
        },
        {
          "end_pc": 1662,
          "hash": "0xeb5c81be944faed446c6914cd562759c42a8520202049e5522911c693d442423",
          "id": "bb:1660",
          "start_pc": 1660,
          "type": "basic_block"
        },
        {
          "end_pc": 1671,
          "hash": "0x21994052f3cdd7441cb075ad3c1a437c7d50f93c34bec00a345f526fe682399d",
          "id": "bb:1663",
          "start_pc": 1663,
          "type": "basic_block"
        },
        {
          "end_pc": 1692,
          "hash": "0x0f9dd4bccfc810ee1b4d2d3dec8805d5f87337887332936536cb29f895a20a4b",
          "id": "bb:1672",
          "start_pc": 1672,
          "type": "basic_block"
        },
        {
          "end_pc": 1757,
          "hash": "0x32fffc7993a20118ca7b0dcbeca941f3db57c8d9d28c790aba202e1aa8e2a345",
          "id": "bb:1693",
          "start_pc": 1693,
          "type": "basic_block"
        },
        {
          "end_pc": 1769,
          "hash": "0x8df8896786fba98c81fd087d823f0e09f7282f3323c65d74f2f02e75d14094bd",
          "id": "bb:1758",
          "start_pc": 1758,
          "type": "basic_block"
        },
        {
          "end_pc": 1781,
          "hash": "0x914b9a50e772f72bb04a411cbc02769ab6cb989a5083abb6dc4b2f1f24184a94",
          "id": "bb:1770",
          "start_pc": 1770,
          "type": "basic_block"
        },
        {
          "end_pc": 1785,
          "hash": "0x96f8d5b4fd1adeda192e1a6ec0411cfec2a3c924c73611a02d4afbdd0438ca98",
          "id": "bb:1782",
          "start_pc": 1782,
          "type": "basic_block"
        },
        {
          "end_pc": 1800,
          "hash": "0xc41c2c82c396eea2ba115ebfeaff6155b93171622b6ef9ab34531bf7e8b51ce9",
          "id": "bb:1786",
          "start_pc": 1786,
          "type": "basic_block"
        },
        {
          "end_pc": 1803,
          "hash": "0x31e26db4020cecc869e086979ecb6c45272922d8cc1e8a0d33521d130444f110",
          "id": "bb:1801",
          "start_pc": 1801,
          "type": "basic_block"
        },
        {
          "end_pc": 1812,
          "hash": "0x7954ee97bacd78f39bffea4ee8a8b6d4e3810bd7c31bce9539e7bb15e6a7de26",
          "id": "bb:1804",
          "start_pc": 1804,
          "type": "basic_block"
        },
        {
          "end_pc": 1833,
          "hash": "0x8d144305adeb51b9b2fe3fd06017cc90dc0ea439d50a6b647f171d7d57f2a1da",
          "id": "bb:1813",
          "start_pc": 1813,
          "type": "basic_block"
        },
        {
          "end_pc": 1853,
          "hash": "0x995d4ac13f2a7259574ad05d417830f29e43bb7bd8cae77c744fbd4f1fec6886",
          "id": "bb:1834",
          "start_pc": 1834,
          "type": "basic_block"
        },
        {
          "end_pc": 1888,
          "hash": "0x6d64f4638ddda92228233f53f7abbec98f8e81c5e42f7b66707fcef7eb6cb256",
          "id": "bb:1854",
          "start_pc": 1854,
          "type": "basic_block"
        },
        {
          "end_pc": 1892,
          "hash": "0xbaf4c67be1f2f3ef6fb3ba8235c49b0a041c66f6a97b43a1163138a5ee5e0389",
          "id": "bb:1889",
          "start_pc": 1889,
          "type": "basic_block"
        },
        {
          "end_pc": 1999,
          "hash": "0x794176e06f507b6dc27cd193a2fd640879cc4bc6f6d81dcf9caa34a58ffa5dfe",
          "id": "bb:1893",
          "start_pc": 1893,
          "type": "basic_block"
        },
        {
          "id": "call:1028",
          "opcode": "CALL",
          "pc": 1028,
          "type": "callsite"
        },
        {
          "id": "call:1096",
          "opcode": "CALL",
          "pc": 1096,
          "type": "callsite"
        },
        {
          "id": "call:1241",
          "opcode": "CALL",
          "pc": 1241,
          "type": "callsite"
        },
        {
          "id": "sink:call",
          "type": "sink"
        },
        {
          "entry_pc": null,
          "id": "fn:0x06fdde03",
          "selector": "0x06fdde03",
          "type": "function"
        },
        {
          "entry_pc": 599290589,
          "id": "fn:0x1d2bca17",
          "selector": "0x1d2bca17",
          "type": "function"
        },
        {
          "entry_pc": 826074471,
          "id": "fn:0x23b872dd",
          "selector": "0x23b872dd",
          "type": "function"
        },
        {
          "entry_pc": 1889567281,
          "id": "fn:0x313ce567",
          "selector": "0x313ce567",
          "type": "function"
        },
        {
          "entry_pc": 2514000705,
          "id": "fn:0x70a08231",
          "selector": "0x70a08231",
          "type": "function"
        },
        {
          "entry_pc": 2835717307,
          "id": "fn:0x95d89b41",
          "selector": "0x95d89b41",
          "type": "function"
        },
        {
          "entry_pc": 3404319313,
          "id": "fn:0xa9059cbb",
          "selector": "0xa9059cbb",
          "type": "function"
        },
        {
          "entry_pc": 3694166258,
          "id": "fn:0xcae9ca51",
          "selector": "0xcae9ca51",
          "type": "function"
        },
        {
          "entry_pc": 3714247998,
          "id": "fn:0xdc3080f2",
          "selector": "0xdc3080f2",
          "type": "function"
        },
        {
          "entry_pc": 1185,
          "id": "fn:0xdd62ed3e",
          "selector": "0xdd62ed3e",
          "type": "function"
        }
      ],
      "version": "capability_graph_v1"
    },
    "id": 2262,
    "updated_at": "2026-04-04T19:55:29.000000Z",
    "version": "capability_graph_v1"
  },
  "detector_findings": [
    {
      "confidence": 60,
      "evidence_json": {
        "call_count": 3,
        "examples": [
          {
            "opcode": "CALL",
            "pc": 1028,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          },
          {
            "opcode": "CALL",
            "pc": 1096,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          },
          {
            "opcode": "CALL",
            "pc": 1241,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          }
        ],
        "guards_detected": [],
        "untrusted_call_count": 3
      },
      "normalized_json": {
        "sink": "CALL"
      },
      "severity": "high",
      "title": "Untrusted CALL target/value reachable",
      "validated": true,
      "validation_json": {
        "attempts": 1,
        "call_targets": [
          "0x0000000000000000000000000000000000000004",
          "0x5fa85a5d220be1391eaeb66542f7e0afd6e461a9"
        ],
        "classification": "target_varies",
        "confirmed": true,
        "errors": 0,
        "matched_probe": null,
        "sink": "CALL",
        "status": "confirmed",
        "target_varies": true,
        "trace_id": "0x67a2c62fd0e7b09d083bf30845ac3dd47357d36abe5bc3e87930a3c7e8e8849f",
        "trace_mode": "callTracer"
      }
    },
    {
      "confidence": 55,
      "evidence_json": {
        "eth_value_calls": 3,
        "examples": [
          {
            "opcode": "CALL",
            "pc": 1028,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          },
          {
            "opcode": "CALL",
            "pc": 1096,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          },
          {
            "opcode": "CALL",
            "pc": 1241,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          }
        ],
        "guards_detected": []
      },
      "normalized_json": {
        "sink": "CALL",
        "value": "nonzero"
      },
      "severity": "high",
      "title": "ETH value transfer possible",
      "validated": true,
      "validation_json": {
        "attempts": 1,
        "call_targets": [
          "0x0000000000000000000000000000000000000004",
          "0x5fa85a5d220be1391eaeb66542f7e0afd6e461a9"
        ],
        "classification": "target_varies",
        "confirmed": true,
        "errors": 0,
        "matched_probe": null,
        "sink": "CALL",
        "status": "confirmed",
        "target_varies": true,
        "trace_id": "0x67a2c62fd0e7b09d083bf30845ac3dd47357d36abe5bc3e87930a3c7e8e8849f",
        "trace_mode": "callTracer"
      }
    }
  ],
  "heuristics_summary": {
    "create2_count": 0,
    "delegatecall_count": 0,
    "flags": [],
    "selfdestruct_count": 0
  }
}

exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const opcodes={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'};
let pc=0; const out=[]; while(pc<hex.length/2){ const b=parseInt(hex.slice(pc*2,pc*2+2),16); const name=opcodes[b]||('OP_'+b.toString(16)); if(b>=0x60&&b<=0x7f){ const n=b-0x5f; const data=hex.slice(pc*2+2, pc*2+2+n*2); out.push({pc,op:name,arg:'0x'+data}); pc+=1+n; } else { out.push({pc,op:name}); pc++; } }
for (const start of [740,756,1000,1020,1060,1080,1170,1220,1380,1500,1680,1840]) {
  console.log('\\n-- from',start,'--');
  for (const ins of out.filter(x=>x.pc>=start && x.pc<start+80)) console.log(String(ins.pc).padStart(4), ins.op, ins.arg||'');
}
NODE" in /tmp/codex-catjv7v7
 succeeded in 0ms:

-- from 740 --
 741 SWAP1 
 742 SHA3 
 743 SLOAD 
 744 DUP2 
 745 SWAP1 
 746 LT 
 747 ISZERO 
 748 PUSH2 0x073e
 751 JUMPI 
 752 PUSH2 0x0002
 755 JUMP 
 756 JUMPDEST 
 757 PUSH1 0x40
 759 DUP1 
 760 MLOAD 
 761 PUSH1 0x20
 763 PUSH1 0x44
 765 CALLDATALOAD 
 766 PUSH1 0x04
 768 DUP2 
 769 DUP2 
 770 ADD 
 771 CALLDATALOAD 
 772 PUSH1 0x1f
 774 DUP2 
 775 ADD 
 776 DUP5 
 777 SWAP1 
 778 DIV 
 779 DUP5 
 780 MUL 
 781 DUP6 
 782 ADD 
 783 DUP5 
 784 ADD 
 785 SWAP1 
 786 SWAP6 
 787 MSTORE 
 788 DUP5 
 789 DUP5 
 790 MSTORE 
 791 PUSH2 0x0511
 794 SWAP5 
 795 DUP2 
 796 CALLDATALOAD 
 797 SWAP5 
 798 PUSH1 0x24
 800 DUP1 
 801 CALLDATALOAD 
 802 SWAP6 
 803 SWAP4 
 804 SWAP5 
 805 PUSH1 0x64
 807 SWAP5 
 808 SWAP3 
 809 SWAP4 
 810 SWAP2 
 811 ADD 
 812 SWAP2 
 813 DUP2 
 814 SWAP1 
 815 DUP5 
 816 ADD 
 817 DUP4 
 818 DUP3 
 819 DUP1 

-- from 756 --
 756 JUMPDEST 
 757 PUSH1 0x40
 759 DUP1 
 760 MLOAD 
 761 PUSH1 0x20
 763 PUSH1 0x44
 765 CALLDATALOAD 
 766 PUSH1 0x04
 768 DUP2 
 769 DUP2 
 770 ADD 
 771 CALLDATALOAD 
 772 PUSH1 0x1f
 774 DUP2 
 775 ADD 
 776 DUP5 
 777 SWAP1 
 778 DIV 
 779 DUP5 
 780 MUL 
 781 DUP6 
 782 ADD 
 783 DUP5 
 784 ADD 
 785 SWAP1 
 786 SWAP6 
 787 MSTORE 
 788 DUP5 
 789 DUP5 
 790 MSTORE 
 791 PUSH2 0x0511
 794 SWAP5 
 795 DUP2 
 796 CALLDATALOAD 
 797 SWAP5 
 798 PUSH1 0x24
 800 DUP1 
 801 CALLDATALOAD 
 802 SWAP6 
 803 SWAP4 
 804 SWAP5 
 805 PUSH1 0x64
 807 SWAP5 
 808 SWAP3 
 809 SWAP4 
 810 SWAP2 
 811 ADD 
 812 SWAP2 
 813 DUP2 
 814 SWAP1 
 815 DUP5 
 816 ADD 
 817 DUP4 
 818 DUP3 
 819 DUP1 
 820 DUP3 
 821 DUP5 
 822 CALLDATACOPY 
 823 POP 
 824 SWAP5 
 825 SWAP7 
 826 POP 
 827 POP 
 828 POP 
 829 POP 
 830 POP 
 831 POP 
 832 POP 
 833 PUSH1 0x00
 835 PUSH1 0x00

-- from 1000 --
1000 MLOAD 
1001 SWAP1 
1002 PUSH1 0x20
1004 ADD 
1005 SWAP1 
1006 DUP1 
1007 DUP4 
1008 DUP4 
1009 DUP3 
1010 SWAP1 
1011 PUSH1 0x00
1013 PUSH1 0x04
1015 PUSH1 0x20
1017 DUP5 
1018 PUSH1 0x1f
1020 ADD 
1021 DIV 
1022 PUSH1 0x0f
1024 MUL 
1025 PUSH1 0x03
1027 ADD 
1028 CALL 
1029 POP 
1030 SWAP1 
1031 POP 
1032 SWAP1 
1033 DUP2 
1034 ADD 
1035 SWAP1 
1036 PUSH1 0x1f
1038 AND 
1039 DUP1 
1040 ISZERO 
1041 PUSH2 0x042e
1044 JUMPI 
1045 DUP1 
1046 DUP3 
1047 SUB 
1048 DUP1 
1049 MLOAD 
1050 PUSH1 0x01
1052 DUP4 
1053 PUSH1 0x20
1055 SUB 
1056 PUSH2 0x0100
1059 EXP 
1060 SUB 
1061 NOT 
1062 AND 
1063 DUP2 
1064 MSTORE 
1065 PUSH1 0x20
1067 ADD 
1068 SWAP2 
1069 POP 
1070 JUMPDEST 
1071 POP 
1072 SWAP6 
1073 POP 
1074 POP 
1075 POP 
1076 POP 
1077 POP 
1078 POP 
1079 PUSH1 0x00

-- from 1020 --
1020 ADD 
1021 DIV 
1022 PUSH1 0x0f
1024 MUL 
1025 PUSH1 0x03
1027 ADD 
1028 CALL 
1029 POP 
1030 SWAP1 
1031 POP 
1032 SWAP1 
1033 DUP2 
1034 ADD 
1035 SWAP1 
1036 PUSH1 0x1f
1038 AND 
1039 DUP1 
1040 ISZERO 
1041 PUSH2 0x042e
1044 JUMPI 
1045 DUP1 
1046 DUP3 
1047 SUB 
1048 DUP1 
1049 MLOAD 
1050 PUSH1 0x01
1052 DUP4 
1053 PUSH1 0x20
1055 SUB 
1056 PUSH2 0x0100
1059 EXP 
1060 SUB 
1061 NOT 
1062 AND 
1063 DUP2 
1064 MSTORE 
1065 PUSH1 0x20
1067 ADD 
1068 SWAP2 
1069 POP 
1070 JUMPDEST 
1071 POP 
1072 SWAP6 
1073 POP 
1074 POP 
1075 POP 
1076 POP 
1077 POP 
1078 POP 
1079 PUSH1 0x00
1081 PUSH1 0x40
1083 MLOAD 
1084 DUP1 
1085 DUP4 
1086 SUB 
1087 DUP2 
1088 PUSH1 0x00
1090 DUP8 
1091 PUSH2 0x61da
1094 GAS 
1095 SUB 
1096 CALL 
1097 ISZERO 
1098 PUSH2 0x0002

-- from 1060 --
1060 SUB 
1061 NOT 
1062 AND 
1063 DUP2 
1064 MSTORE 
1065 PUSH1 0x20
1067 ADD 
1068 SWAP2 
1069 POP 
1070 JUMPDEST 
1071 POP 
1072 SWAP6 
1073 POP 
1074 POP 
1075 POP 
1076 POP 
1077 POP 
1078 POP 
1079 PUSH1 0x00
1081 PUSH1 0x40
1083 MLOAD 
1084 DUP1 
1085 DUP4 
1086 SUB 
1087 DUP2 
1088 PUSH1 0x00
1090 DUP8 
1091 PUSH2 0x61da
1094 GAS 
1095 SUB 
1096 CALL 
1097 ISZERO 
1098 PUSH2 0x0002
1101 JUMPI 
1102 POP 
1103 POP 
1104 POP 
1105 POP 
1106 SWAP4 
1107 SWAP3 
1108 POP 
1109 POP 
1110 POP 
1111 JUMP 
1112 JUMPDEST 
1113 PUSH1 0x05
1115 PUSH1 0x20
1117 SWAP1 
1118 DUP2 
1119 MSTORE 
1120 PUSH1 0x04
1122 CALLDATALOAD 
1123 PUSH1 0x00
1125 SWAP1 
1126 DUP2 
1127 MSTORE 
1128 PUSH1 0x40
1130 DUP1 
1131 DUP3 
1132 SHA3 
1133 SWAP1 
1134 SWAP3 
1135 MSTORE 
1136 PUSH1 0x24
1138 CALLDATALOAD 
1139 DUP2 

-- from 1080 --
1081 PUSH1 0x40
1083 MLOAD 
1084 DUP1 
1085 DUP4 
1086 SUB 
1087 DUP2 
1088 PUSH1 0x00
1090 DUP8 
1091 PUSH2 0x61da
1094 GAS 
1095 SUB 
1096 CALL 
1097 ISZERO 
1098 PUSH2 0x0002
1101 JUMPI 
1102 POP 
1103 POP 
1104 POP 
1105 POP 
1106 SWAP4 
1107 SWAP3 
1108 POP 
1109 POP 
1110 POP 
1111 JUMP 
1112 JUMPDEST 
1113 PUSH1 0x05
1115 PUSH1 0x20
1117 SWAP1 
1118 DUP2 
1119 MSTORE 
1120 PUSH1 0x04
1122 CALLDATALOAD 
1123 PUSH1 0x00
1125 SWAP1 
1126 DUP2 
1127 MSTORE 
1128 PUSH1 0x40
1130 DUP1 
1131 DUP3 
1132 SHA3 
1133 SWAP1 
1134 SWAP3 
1135 MSTORE 
1136 PUSH1 0x24
1138 CALLDATALOAD 
1139 DUP2 
1140 MSTORE 
1141 SHA3 
1142 SLOAD 
1143 PUSH2 0x0511
1146 SWAP1 
1147 DUP2 
1148 JUMP 
1149 JUMPDEST 
1150 PUSH1 0x04
1152 PUSH1 0x20
1154 DUP2 
1155 DUP2 
1156 MSTORE 
1157 SWAP1 
1158 CALLDATALOAD 
1159 PUSH1 0x00

-- from 1170 --
1170 SWAP3 
1171 MSTORE 
1172 PUSH1 0x24
1174 CALLDATALOAD 
1175 DUP2 
1176 MSTORE 
1177 SHA3 
1178 SLOAD 
1179 PUSH2 0x0511
1182 SWAP1 
1183 DUP2 
1184 JUMP 
1185 JUMPDEST 
1186 STOP 
1187 JUMPDEST 
1188 PUSH1 0x40
1190 MLOAD 
1191 DUP1 
1192 DUP1 
1193 PUSH1 0x20
1195 ADD 
1196 DUP3 
1197 DUP2 
1198 SUB 
1199 DUP3 
1200 MSTORE 
1201 DUP4 
1202 DUP2 
1203 DUP2 
1204 MLOAD 
1205 DUP2 
1206 MSTORE 
1207 PUSH1 0x20
1209 ADD 
1210 SWAP2 
1211 POP 
1212 DUP1 
1213 MLOAD 
1214 SWAP1 
1215 PUSH1 0x20
1217 ADD 
1218 SWAP1 
1219 DUP1 
1220 DUP4 
1221 DUP4 
1222 DUP3 
1223 SWAP1 
1224 PUSH1 0x00
1226 PUSH1 0x04
1228 PUSH1 0x20
1230 DUP5 
1231 PUSH1 0x1f
1233 ADD 
1234 DIV 
1235 PUSH1 0x0f
1237 MUL 
1238 PUSH1 0x03
1240 ADD 
1241 CALL 
1242 POP 
1243 SWAP1 
1244 POP 
1245 SWAP1 
1246 DUP2 
1247 ADD 
1248 SWAP1 
1249 PUSH1 0x1f

-- from 1220 --
1220 DUP4 
1221 DUP4 
1222 DUP3 
1223 SWAP1 
1224 PUSH1 0x00
1226 PUSH1 0x04
1228 PUSH1 0x20
1230 DUP5 
1231 PUSH1 0x1f
1233 ADD 
1234 DIV 
1235 PUSH1 0x0f
1237 MUL 
1238 PUSH1 0x03
1240 ADD 
1241 CALL 
1242 POP 
1243 SWAP1 
1244 POP 
1245 SWAP1 
1246 DUP2 
1247 ADD 
1248 SWAP1 
1249 PUSH1 0x1f
1251 AND 
1252 DUP1 
1253 ISZERO 
1254 PUSH2 0x0503
1257 JUMPI 
1258 DUP1 
1259 DUP3 
1260 SUB 
1261 DUP1 
1262 MLOAD 
1263 PUSH1 0x01
1265 DUP4 
1266 PUSH1 0x20
1268 SUB 
1269 PUSH2 0x0100
1272 EXP 
1273 SUB 
1274 NOT 
1275 AND 
1276 DUP2 
1277 MSTORE 
1278 PUSH1 0x20
1280 ADD 
1281 SWAP2 
1282 POP 
1283 JUMPDEST 
1284 POP 
1285 SWAP3 
1286 POP 
1287 POP 
1288 POP 
1289 PUSH1 0x40
1291 MLOAD 
1292 DUP1 
1293 SWAP2 
1294 SUB 
1295 SWAP1 
1296 RETURN 
1297 JUMPDEST 
1298 PUSH1 0x40

-- from 1380 --
1380 SWAP2 
1381 JUMPDEST 
1382 POP 
1383 POP 
1384 POP 
1385 POP 
1386 POP 
1387 DUP2 
1388 JUMP 
1389 JUMPDEST 
1390 PUSH1 0x01
1392 PUSH1 0xa0
1394 PUSH1 0x02
1396 EXP 
1397 SUB 
1398 DUP4 
1399 AND 
1400 PUSH1 0x00
1402 SWAP1 
1403 DUP2 
1404 MSTORE 
1405 PUSH1 0x03
1407 PUSH1 0x20
1409 MSTORE 
1410 PUSH1 0x40
1412 SWAP1 
1413 SHA3 
1414 SLOAD 
1415 DUP3 
1416 DUP2 
1417 ADD 
1418 LT 
1419 ISZERO 
1420 PUSH2 0x0594
1423 JUMPI 
1424 PUSH2 0x0002
1427 JUMP 
1428 JUMPDEST 
1429 PUSH1 0x01
1431 PUSH1 0xa0
1433 PUSH1 0x02
1435 EXP 
1436 SUB 
1437 DUP5 
1438 DUP2 
1439 AND 
1440 PUSH1 0x00
1442 DUP2 
1443 DUP2 
1444 MSTORE 
1445 PUSH1 0x04
1447 PUSH1 0x20
1449 SWAP1 
1450 DUP2 
1451 MSTORE 
1452 PUSH1 0x40
1454 DUP1 
1455 DUP4 
1456 SHA3 
1457 CALLER 
1458 SWAP6 
1459 SWAP1 

-- from 1500 --
1500 JUMPI 
1501 PUSH2 0x0002
1504 JUMP 
1505 JUMPDEST 
1506 PUSH1 0x01
1508 PUSH1 0xa0
1510 PUSH1 0x02
1512 EXP 
1513 SUB 
1514 DUP5 
1515 DUP2 
1516 AND 
1517 PUSH1 0x00
1519 DUP2 
1520 DUP2 
1521 MSTORE 
1522 PUSH1 0x03
1524 PUSH1 0x20
1526 SWAP1 
1527 DUP2 
1528 MSTORE 
1529 PUSH1 0x40
1531 DUP1 
1532 DUP4 
1533 SHA3 
1534 DUP1 
1535 SLOAD 
1536 DUP9 
1537 SWAP1 
1538 SUB 
1539 SWAP1 
1540 SSTORE 
1541 DUP8 
1542 DUP6 
1543 AND 
1544 DUP1 
1545 DUP5 
1546 MSTORE 
1547 DUP2 
1548 DUP5 
1549 SHA3 
1550 DUP1 
1551 SLOAD 
1552 DUP10 
1553 ADD 
1554 SWAP1 
1555 SSTORE 
1556 SWAP4 
1557 DUP4 
1558 MSTORE 
1559 PUSH1 0x05
1561 DUP3 
1562 MSTORE 
1563 DUP1 
1564 DUP4 
1565 SHA3 
1566 CALLER 
1567 SWAP6 
1568 SWAP1 
1569 SWAP6 
1570 AND 
1571 DUP1 
1572 DUP5 
1573 MSTORE 
1574 SWAP5 
1575 DUP3 
1576 MSTORE 
1577 SWAP2 
1578 DUP3 
1579 SWAP1 

-- from 1680 --
1680 PUSH1 0x20
1682 ADD 
1683 SWAP2 
1684 SWAP1 
1685 PUSH1 0x01
1687 ADD 
1688 SWAP1 
1689 PUSH2 0x067f
1692 JUMP 
1693 JUMPDEST 
1694 POP 
1695 POP 
1696 DUP1 
1697 PUSH1 0x01
1699 PUSH1 0x00
1701 POP 
1702 SWAP1 
1703 DUP1 
1704 MLOAD 
1705 SWAP1 
1706 PUSH1 0x20
1708 ADD 
1709 SWAP1 
1710 DUP3 
1711 DUP1 
1712 SLOAD 
1713 PUSH1 0x01
1715 DUP2 
1716 PUSH1 0x01
1718 AND 
1719 ISZERO 
1720 PUSH2 0x0100
1723 MUL 
1724 SUB 
1725 AND 
1726 PUSH1 0x02
1728 SWAP1 
1729 DIV 
1730 SWAP1 
1731 PUSH1 0x00
1733 MSTORE 
1734 PUSH1 0x20
1736 PUSH1 0x00
1738 SHA3 
1739 SWAP1 
1740 PUSH1 0x1f
1742 ADD 
1743 PUSH1 0x20
1745 SWAP1 
1746 DIV 
1747 DUP2 
1748 ADD 
1749 SWAP3 
1750 DUP3 
1751 PUSH1 0x1f
1753 LT 
1754 PUSH2 0x06fa
1757 JUMPI 
1758 DUP1 
1759 MLOAD 

-- from 1840 --
1840 SLOAD 
1841 PUSH1 0xff
1843 NOT 
1844 AND 
1845 DUP4 
1846 OR 
1847 SWAP1 
1848 SSTORE 
1849 POP 
1850 POP 
1851 POP 
1852 POP 
1853 JUMP 
1854 JUMPDEST 
1855 PUSH1 0x01
1857 PUSH1 0xa0
1859 PUSH1 0x02
1861 EXP 
1862 SUB 
1863 DUP3 
1864 AND 
1865 PUSH1 0x00
1867 SWAP1 
1868 DUP2 
1869 MSTORE 
1870 PUSH1 0x03
1872 PUSH1 0x20
1874 MSTORE 
1875 PUSH1 0x40
1877 SWAP1 
1878 SHA3 
1879 SLOAD 
1880 DUP2 
1881 DUP2 
1882 ADD 
1883 LT 
1884 ISZERO 
1885 PUSH2 0x0765
1888 JUMPI 
1889 PUSH2 0x0002
1892 JUMP 
1893 JUMPDEST 
1894 PUSH1 0x01
1896 PUSH1 0xa0
1898 PUSH1 0x02
1900 EXP 
1901 SUB 
1902 CALLER 
1903 DUP2 
1904 AND 
1905 PUSH1 0x00
1907 DUP2 
1908 DUP2 
1909 MSTORE 
1910 PUSH1 0x03
1912 PUSH1 0x20
1914 SWAP1 
1915 DUP2 
1916 MSTORE 
1917 PUSH1 0x40
1919 DUP1 

exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);['SHA3'].forEach((n,i)=>ops[0x20+i]=n);['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0, out=[]; while(pc<hex.length/2){ const b=parseInt(hex.slice(pc*2,pc*2+2),16); const name=ops[b]||('OP_'+b.toString(16)); if(b>=0x60&&b<=0x7f){ const n=b-0x5f; out.push({pc,op:name,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)}); pc+=1+n; } else { out.push({pc,op:name}); pc++; }}
for (const start of [1890]) {
  console.log('\\n-- from',start,'--');
  for (const ins of out.filter(x=>x.pc>=start && x.pc<2005)) console.log(String(ins.pc).padStart(4), ins.op, ins.arg||'');
}
NODE" in /tmp/codex-catjv7v7
 succeeded in 0ms:

-- from 1890 --
1892 JUMP 
1893 JUMPDEST 
1894 PUSH1 0x01
1896 PUSH1 0xa0
1898 PUSH1 0x02
1900 EXP 
1901 SUB 
1902 CALLER 
1903 DUP2 
1904 AND 
1905 PUSH1 0x00
1907 DUP2 
1908 DUP2 
1909 MSTORE 
1910 PUSH1 0x03
1912 PUSH1 0x20
1914 SWAP1 
1915 DUP2 
1916 MSTORE 
1917 PUSH1 0x40
1919 DUP1 
1920 DUP4 
1921 SHA3 
1922 DUP1 
1923 SLOAD 
1924 DUP8 
1925 SWAP1 
1926 SUB 
1927 SWAP1 
1928 SSTORE 
1929 SWAP4 
1930 DUP7 
1931 AND 
1932 DUP1 
1933 DUP4 
1934 MSTORE 
1935 SWAP2 
1936 DUP5 
1937 SWAP1 
1938 SHA3 
1939 DUP1 
1940 SLOAD 
1941 DUP7 
1942 ADD 
1943 SWAP1 
1944 SSTORE 
1945 DUP4 
1946 MLOAD 
1947 DUP6 
1948 DUP2 
1949 MSTORE 
1950 SWAP4 
1951 MLOAD 
1952 SWAP2 
1953 SWAP4 
1954 PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
1987 SWAP3 
1988 SWAP1 
1989 DUP2 
1990 SWAP1 
1991 SUB 
1992 SWAP1 
1993 SWAP2 
1994 ADD 
1995 SWAP1 
1996 LOG3 
1997 POP 
1998 POP 
1999 JUMP 

exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);ops[0x20]='SHA3';['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0,out=[];while(pc<hex.length/2){let b=parseInt(hex.slice(pc*2,pc*2+2),16);let op=ops[b]||('OP_'+b.toString(16));if(b>=0x60&&b<=0x7f){let n=b-0x5f;out.push({pc,op,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)});pc+=1+n;}else{out.push({pc,op});pc++;}}
for(const ins of out.filter(x=>x.pc<140)) console.log(String(ins.pc).padStart(4),ins.op,ins.arg||'');
NODE" in /tmp/codex-catjv7v7
 succeeded in 0ms:
   0 PUSH1 0x60
   2 PUSH1 0x40
   4 MSTORE 
   5 CALLDATASIZE 
   6 ISZERO 
   7 PUSH2 0x0082
  10 JUMPI 
  11 PUSH1 0xe0
  13 PUSH1 0x02
  15 EXP 
  16 PUSH1 0x00
  18 CALLDATALOAD 
  19 DIV 
  20 PUSH4 0x06fdde03
  25 DUP2 
  26 EQ 
  27 PUSH2 0x008a
  30 JUMPI 
  31 DUP1 
  32 PUSH4 0x1d2bca17
  37 EQ 
  38 PUSH2 0x00e8
  41 JUMPI 
  42 DUP1 
  43 PUSH4 0x23b872dd
  48 EQ 
  49 PUSH2 0x0212
  52 JUMPI 
  53 DUP1 
  54 PUSH4 0x313ce567
  59 EQ 
  60 PUSH2 0x0244
  63 JUMPI 
  64 DUP1 
  65 PUSH4 0x70a08231
  70 EQ 
  71 PUSH2 0x0250
  74 JUMPI 
  75 DUP1 
  76 PUSH4 0x95d89b41
  81 EQ 
  82 PUSH2 0x0268
  85 JUMPI 
  86 DUP1 
  87 PUSH4 0xa9059cbb
  92 EQ 
  93 PUSH2 0x02c5
  96 JUMPI 
  97 DUP1 
  98 PUSH4 0xcae9ca51
 103 EQ 
 104 PUSH2 0x02f4
 107 JUMPI 
 108 DUP1 
 109 PUSH4 0xdc3080f2
 114 EQ 
 115 PUSH2 0x0458
 118 JUMPI 
 119 DUP1 
 120 PUSH4 0xdd62ed3e
 125 EQ 
 126 PUSH2 0x047d
 129 JUMPI 
 130 JUMPDEST 
 131 PUSH2 0x04a1
 134 PUSH2 0x0002
 137 JUMP 
 138 JUMPDEST 
 139 PUSH2 0x04a3

exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);ops[0x20]='SHA3';['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0,out=[];while(pc<hex.length/2){let b=parseInt(hex.slice(pc*2,pc*2+2),16);let op=ops[b]||('OP_'+b.toString(16));if(b>=0x60&&b<=0x7f){let n=b-0x5f;out.push({pc,op,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)});pc+=1+n;}else{out.push({pc,op});pc++;}}
for(const start of [138,232,530,580,592,616,709,756,1112,1149]){console.log('\\n-- from',start,'--'); for(const ins of out.filter(x=>x.pc>=start && x.pc<start+80)) console.log(String(ins.pc).padStart(4),ins.op,ins.arg||'');}
NODE" in /tmp/codex-catjv7v7
 succeeded in 0ms:

-- from 138 --
 138 JUMPDEST 
 139 PUSH2 0x04a3
 142 PUSH1 0x00
 144 DUP1 
 145 SLOAD 
 146 PUSH1 0x40
 148 DUP1 
 149 MLOAD 
 150 PUSH1 0x20
 152 PUSH1 0x02
 154 PUSH1 0x01
 156 DUP6 
 157 AND 
 158 ISZERO 
 159 PUSH2 0x0100
 162 MUL 
 163 PUSH1 0x00
 165 NOT 
 166 ADD 
 167 SWAP1 
 168 SWAP5 
 169 AND 
 170 SWAP4 
 171 SWAP1 
 172 SWAP4 
 173 DIV 
 174 PUSH1 0x1f
 176 DUP2 
 177 ADD 
 178 DUP5 
 179 SWAP1 
 180 DIV 
 181 DUP5 
 182 MUL 
 183 DUP3 
 184 ADD 
 185 DUP5 
 186 ADD 
 187 SWAP1 
 188 SWAP3 
 189 MSTORE 
 190 DUP2 
 191 DUP2 
 192 MSTORE 
 193 SWAP3 
 194 SWAP2 
 195 DUP4 
 196 ADD 
 197 DUP3 
 198 DUP3 
 199 DUP1 
 200 ISZERO 
 201 PUSH2 0x0565
 204 JUMPI 
 205 DUP1 
 206 PUSH1 0x1f
 208 LT 
 209 PUSH2 0x053a
 212 JUMPI 
 213 PUSH2 0x0100
 216 DUP1 
 217 DUP4 

-- from 232 --
 232 JUMPDEST 
 233 PUSH1 0x40
 235 DUP1 
 236 MLOAD 
 237 PUSH1 0x20
 239 PUSH1 0x24
 241 DUP1 
 242 CALLDATALOAD 
 243 PUSH1 0x04
 245 DUP2 
 246 DUP2 
 247 ADD 
 248 CALLDATALOAD 
 249 PUSH1 0x1f
 251 DUP2 
 252 ADD 
 253 DUP6 
 254 SWAP1 
 255 DIV 
 256 DUP6 
 257 MUL 
 258 DUP7 
 259 ADD 
 260 DUP6 
 261 ADD 
 262 SWAP1 
 263 SWAP7 
 264 MSTORE 
 265 DUP6 
 266 DUP6 
 267 MSTORE 
 268 PUSH2 0x04a1
 271 SWAP6 
 272 DUP2 
 273 CALLDATALOAD 
 274 SWAP6 
 275 SWAP2 
 276 SWAP5 
 277 PUSH1 0x44
 279 SWAP5 
 280 SWAP3 
 281 SWAP4 
 282 SWAP1 
 283 SWAP3 
 284 ADD 
 285 SWAP2 
 286 DUP2 
 287 SWAP1 
 288 DUP5 
 289 ADD 
 290 DUP4 
 291 DUP3 
 292 DUP1 
 293 DUP3 
 294 DUP5 
 295 CALLDATACOPY 
 296 POP 
 297 POP 
 298 PUSH1 0x40
 300 DUP1 
 301 MLOAD 
 302 PUSH1 0x20
 304 PUSH1 0x64
 306 CALLDATALOAD 
 307 DUP1 
 308 DUP12 
 309 ADD 
 310 CALLDATALOAD 
 311 PUSH1 0x1f

-- from 530 --
 530 JUMPDEST 
 531 PUSH2 0x0511
 534 PUSH1 0x04
 536 CALLDATALOAD 
 537 PUSH1 0x24
 539 CALLDATALOAD 
 540 PUSH1 0x44
 542 CALLDATALOAD 
 543 PUSH1 0x01
 545 PUSH1 0xa0
 547 PUSH1 0x02
 549 EXP 
 550 SUB 
 551 DUP4 
 552 AND 
 553 PUSH1 0x00
 555 SWAP1 
 556 DUP2 
 557 MSTORE 
 558 PUSH1 0x03
 560 PUSH1 0x20
 562 MSTORE 
 563 PUSH1 0x40
 565 DUP2 
 566 SHA3 
 567 SLOAD 
 568 DUP3 
 569 SWAP1 
 570 LT 
 571 ISZERO 
 572 PUSH2 0x056d
 575 JUMPI 
 576 PUSH2 0x0002
 579 JUMP 
 580 JUMPDEST 
 581 PUSH2 0x0523
 584 PUSH1 0x02
 586 SLOAD 
 587 PUSH1 0xff
 589 AND 
 590 DUP2 
 591 JUMP 
 592 JUMPDEST 
 593 PUSH2 0x0511
 596 PUSH1 0x04
 598 CALLDATALOAD 
 599 PUSH1 0x03
 601 PUSH1 0x20
 603 MSTORE 
 604 PUSH1 0x00
 606 SWAP1 
 607 DUP2 
 608 MSTORE 
 609 PUSH1 0x40

-- from 580 --
 580 JUMPDEST 
 581 PUSH2 0x0523
 584 PUSH1 0x02
 586 SLOAD 
 587 PUSH1 0xff
 589 AND 
 590 DUP2 
 591 JUMP 
 592 JUMPDEST 
 593 PUSH2 0x0511
 596 PUSH1 0x04
 598 CALLDATALOAD 
 599 PUSH1 0x03
 601 PUSH1 0x20
 603 MSTORE 
 604 PUSH1 0x00
 606 SWAP1 
 607 DUP2 
 608 MSTORE 
 609 PUSH1 0x40
 611 SWAP1 
 612 SHA3 
 613 SLOAD 
 614 DUP2 
 615 JUMP 
 616 JUMPDEST 
 617 PUSH2 0x04a3
 620 PUSH1 0x01
 622 DUP1 
 623 SLOAD 
 624 PUSH1 0x40
 626 DUP1 
 627 MLOAD 
 628 PUSH1 0x20
 630 PUSH1 0x02
 632 DUP5 
 633 DUP7 
 634 AND 
 635 ISZERO 
 636 PUSH2 0x0100
 639 MUL 
 640 PUSH1 0x00
 642 NOT 
 643 ADD 
 644 SWAP1 
 645 SWAP5 
 646 AND 
 647 SWAP4 
 648 SWAP1 
 649 SWAP4 
 650 DIV 
 651 PUSH1 0x1f
 653 DUP2 
 654 ADD 
 655 DUP5 
 656 SWAP1 
 657 DIV 
 658 DUP5 
 659 MUL 

-- from 592 --
 592 JUMPDEST 
 593 PUSH2 0x0511
 596 PUSH1 0x04
 598 CALLDATALOAD 
 599 PUSH1 0x03
 601 PUSH1 0x20
 603 MSTORE 
 604 PUSH1 0x00
 606 SWAP1 
 607 DUP2 
 608 MSTORE 
 609 PUSH1 0x40
 611 SWAP1 
 612 SHA3 
 613 SLOAD 
 614 DUP2 
 615 JUMP 
 616 JUMPDEST 
 617 PUSH2 0x04a3
 620 PUSH1 0x01
 622 DUP1 
 623 SLOAD 
 624 PUSH1 0x40
 626 DUP1 
 627 MLOAD 
 628 PUSH1 0x20
 630 PUSH1 0x02
 632 DUP5 
 633 DUP7 
 634 AND 
 635 ISZERO 
 636 PUSH2 0x0100
 639 MUL 
 640 PUSH1 0x00
 642 NOT 
 643 ADD 
 644 SWAP1 
 645 SWAP5 
 646 AND 
 647 SWAP4 
 648 SWAP1 
 649 SWAP4 
 650 DIV 
 651 PUSH1 0x1f
 653 DUP2 
 654 ADD 
 655 DUP5 
 656 SWAP1 
 657 DIV 
 658 DUP5 
 659 MUL 
 660 DUP3 
 661 ADD 
 662 DUP5 
 663 ADD 
 664 SWAP1 
 665 SWAP3 
 666 MSTORE 
 667 DUP2 
 668 DUP2 
 669 MSTORE 
 670 SWAP3 
 671 SWAP2 

-- from 616 --
 616 JUMPDEST 
 617 PUSH2 0x04a3
 620 PUSH1 0x01
 622 DUP1 
 623 SLOAD 
 624 PUSH1 0x40
 626 DUP1 
 627 MLOAD 
 628 PUSH1 0x20
 630 PUSH1 0x02
 632 DUP5 
 633 DUP7 
 634 AND 
 635 ISZERO 
 636 PUSH2 0x0100
 639 MUL 
 640 PUSH1 0x00
 642 NOT 
 643 ADD 
 644 SWAP1 
 645 SWAP5 
 646 AND 
 647 SWAP4 
 648 SWAP1 
 649 SWAP4 
 650 DIV 
 651 PUSH1 0x1f
 653 DUP2 
 654 ADD 
 655 DUP5 
 656 SWAP1 
 657 DIV 
 658 DUP5 
 659 MUL 
 660 DUP3 
 661 ADD 
 662 DUP5 
 663 ADD 
 664 SWAP1 
 665 SWAP3 
 666 MSTORE 
 667 DUP2 
 668 DUP2 
 669 MSTORE 
 670 SWAP3 
 671 SWAP2 
 672 DUP4 
 673 ADD 
 674 DUP3 
 675 DUP3 
 676 DUP1 
 677 ISZERO 
 678 PUSH2 0x0565
 681 JUMPI 
 682 DUP1 
 683 PUSH1 0x1f
 685 LT 
 686 PUSH2 0x053a
 689 JUMPI 
 690 PUSH2 0x0100
 693 DUP1 
 694 DUP4 
 695 SLOAD 

-- from 709 --
 709 JUMPDEST 
 710 PUSH2 0x04a1
 713 PUSH1 0x04
 715 CALLDATALOAD 
 716 PUSH1 0x24
 718 CALLDATALOAD 
 719 PUSH1 0x01
 721 PUSH1 0xa0
 723 PUSH1 0x02
 725 EXP 
 726 SUB 
 727 CALLER 
 728 AND 
 729 PUSH1 0x00
 731 SWAP1 
 732 DUP2 
 733 MSTORE 
 734 PUSH1 0x03
 736 PUSH1 0x20
 738 MSTORE 
 739 PUSH1 0x40
 741 SWAP1 
 742 SHA3 
 743 SLOAD 
 744 DUP2 
 745 SWAP1 
 746 LT 
 747 ISZERO 
 748 PUSH2 0x073e
 751 JUMPI 
 752 PUSH2 0x0002
 755 JUMP 
 756 JUMPDEST 
 757 PUSH1 0x40
 759 DUP1 
 760 MLOAD 
 761 PUSH1 0x20
 763 PUSH1 0x44
 765 CALLDATALOAD 
 766 PUSH1 0x04
 768 DUP2 
 769 DUP2 
 770 ADD 
 771 CALLDATALOAD 
 772 PUSH1 0x1f
 774 DUP2 
 775 ADD 
 776 DUP5 
 777 SWAP1 
 778 DIV 
 779 DUP5 
 780 MUL 
 781 DUP6 
 782 ADD 
 783 DUP5 
 784 ADD 
 785 SWAP1 
 786 SWAP6 
 787 MSTORE 
 788 DUP5 

-- from 756 --
 756 JUMPDEST 
 757 PUSH1 0x40
 759 DUP1 
 760 MLOAD 
 761 PUSH1 0x20
 763 PUSH1 0x44
 765 CALLDATALOAD 
 766 PUSH1 0x04
 768 DUP2 
 769 DUP2 
 770 ADD 
 771 CALLDATALOAD 
 772 PUSH1 0x1f
 774 DUP2 
 775 ADD 
 776 DUP5 
 777 SWAP1 
 778 DIV 
 779 DUP5 
 780 MUL 
 781 DUP6 
 782 ADD 
 783 DUP5 
 784 ADD 
 785 SWAP1 
 786 SWAP6 
 787 MSTORE 
 788 DUP5 
 789 DUP5 
 790 MSTORE 
 791 PUSH2 0x0511
 794 SWAP5 
 795 DUP2 
 796 CALLDATALOAD 
 797 SWAP5 
 798 PUSH1 0x24
 800 DUP1 
 801 CALLDATALOAD 
 802 SWAP6 
 803 SWAP4 
 804 SWAP5 
 805 PUSH1 0x64
 807 SWAP5 
 808 SWAP3 
 809 SWAP4 
 810 SWAP2 
 811 ADD 
 812 SWAP2 
 813 DUP2 
 814 SWAP1 
 815 DUP5 
 816 ADD 
 817 DUP4 
 818 DUP3 
 819 DUP1 
 820 DUP3 
 821 DUP5 
 822 CALLDATACOPY 
 823 POP 
 824 SWAP5 
 825 SWAP7 
 826 POP 
 827 POP 
 828 POP 
 829 POP 
 830 POP 
 831 POP 
 832 POP 
 833 PUSH1 0x00
 835 PUSH1 0x00

-- from 1112 --
1112 JUMPDEST 
1113 PUSH1 0x05
1115 PUSH1 0x20
1117 SWAP1 
1118 DUP2 
1119 MSTORE 
1120 PUSH1 0x04
1122 CALLDATALOAD 
1123 PUSH1 0x00
1125 SWAP1 
1126 DUP2 
1127 MSTORE 
1128 PUSH1 0x40
1130 DUP1 
1131 DUP3 
1132 SHA3 
1133 SWAP1 
1134 SWAP3 
1135 MSTORE 
1136 PUSH1 0x24
1138 CALLDATALOAD 
1139 DUP2 
1140 MSTORE 
1141 SHA3 
1142 SLOAD 
1143 PUSH2 0x0511
1146 SWAP1 
1147 DUP2 
1148 JUMP 
1149 JUMPDEST 
1150 PUSH1 0x04
1152 PUSH1 0x20
1154 DUP2 
1155 DUP2 
1156 MSTORE 
1157 SWAP1 
1158 CALLDATALOAD 
1159 PUSH1 0x00
1161 SWAP1 
1162 DUP2 
1163 MSTORE 
1164 PUSH1 0x40
1166 DUP1 
1167 DUP3 
1168 SHA3 
1169 SWAP1 
1170 SWAP3 
1171 MSTORE 
1172 PUSH1 0x24
1174 CALLDATALOAD 
1175 DUP2 
1176 MSTORE 
1177 SHA3 
1178 SLOAD 
1179 PUSH2 0x0511
1182 SWAP1 
1183 DUP2 
1184 JUMP 
1185 JUMPDEST 
1186 STOP 
1187 JUMPDEST 
1188 PUSH1 0x40
1190 MLOAD 
1191 DUP1 

-- from 1149 --
1149 JUMPDEST 
1150 PUSH1 0x04
1152 PUSH1 0x20
1154 DUP2 
1155 DUP2 
1156 MSTORE 
1157 SWAP1 
1158 CALLDATALOAD 
1159 PUSH1 0x00
1161 SWAP1 
1162 DUP2 
1163 MSTORE 
1164 PUSH1 0x40
1166 DUP1 
1167 DUP3 
1168 SHA3 
1169 SWAP1 
1170 SWAP3 
1171 MSTORE 
1172 PUSH1 0x24
1174 CALLDATALOAD 
1175 DUP2 
1176 MSTORE 
1177 SHA3 
1178 SLOAD 
1179 PUSH2 0x0511
1182 SWAP1 
1183 DUP2 
1184 JUMP 
1185 JUMPDEST 
1186 STOP 
1187 JUMPDEST 
1188 PUSH1 0x40
1190 MLOAD 
1191 DUP1 
1192 DUP1 
1193 PUSH1 0x20
1195 ADD 
1196 DUP3 
1197 DUP2 
1198 SUB 
1199 DUP3 
1200 MSTORE 
1201 DUP4 
1202 DUP2 
1203 DUP2 
1204 MLOAD 
1205 DUP2 
1206 MSTORE 
1207 PUSH1 0x20
1209 ADD 
1210 SWAP2 
1211 POP 
1212 DUP1 
1213 MLOAD 
1214 SWAP1 
1215 PUSH1 0x20
1217 ADD 
1218 SWAP1 
1219 DUP1 
1220 DUP4 
1221 DUP4 
1222 DUP3 
1223 SWAP1 
1224 PUSH1 0x00
1226 PUSH1 0x04
1228 PUSH1 0x20

exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);ops[0x20]='SHA3';['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0,out=[];while(pc<hex.length/2){let b=parseInt(hex.slice(pc*2,pc*2+2),16);let op=ops[b]||('OP_'+b.toString(16));if(b>=0x60&&b<=0x7f){let n=b-0x5f;out.push({pc,op,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)});pc+=1+n;}else{out.push({pc,op});pc++;}}
for(const ins of out.filter(x=>x.pc>=1428 && x.pc<1506)) console.log(String(ins.pc).padStart(4),ins.op,ins.arg||'');
NODE" in /tmp/codex-catjv7v7
 succeeded in 0ms:
1428 JUMPDEST 
1429 PUSH1 0x01
1431 PUSH1 0xa0
1433 PUSH1 0x02
1435 EXP 
1436 SUB 
1437 DUP5 
1438 DUP2 
1439 AND 
1440 PUSH1 0x00
1442 DUP2 
1443 DUP2 
1444 MSTORE 
1445 PUSH1 0x04
1447 PUSH1 0x20
1449 SWAP1 
1450 DUP2 
1451 MSTORE 
1452 PUSH1 0x40
1454 DUP1 
1455 DUP4 
1456 SHA3 
1457 CALLER 
1458 SWAP6 
1459 SWAP1 
1460 SWAP6 
1461 AND 
1462 DUP1 
1463 DUP5 
1464 MSTORE 
1465 SWAP5 
1466 DUP3 
1467 MSTORE 
1468 DUP1 
1469 DUP4 
1470 SHA3 
1471 SLOAD 
1472 SWAP4 
1473 DUP4 
1474 MSTORE 
1475 PUSH1 0x05
1477 DUP3 
1478 MSTORE 
1479 DUP1 
1480 DUP4 
1481 SHA3 
1482 SWAP5 
1483 DUP4 
1484 MSTORE 
1485 SWAP4 
1486 SWAP1 
1487 MSTORE 
1488 SWAP2 
1489 SWAP1 
1490 SWAP2 
1491 SHA3 
1492 SLOAD 
1493 DUP4 
1494 ADD 
1495 GT 
1496 ISZERO 
1497 PUSH2 0x05e1
1500 JUMPI 
1501 PUSH2 0x0002
1504 JUMP 
1505 JUMPDEST 

exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);ops[0x20]='SHA3';['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0,out=[];while(pc<hex.length/2){let b=parseInt(hex.slice(pc*2,pc*2+2),16);let op=ops[b]||('OP_'+b.toString(16));if(b>=0x60&&b<=0x7f){let n=b-0x5f;out.push({pc,op,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)});pc+=1+n;}else{out.push({pc,op});pc++;}}
for(const ins of out.filter(x=>x.pc>=232 && x.pc<530)) console.log(String(ins.pc).padStart(4),ins.op,ins.arg||'');
NODE" in /tmp/codex-catjv7v7
 succeeded in 0ms:
 232 JUMPDEST 
 233 PUSH1 0x40
 235 DUP1 
 236 MLOAD 
 237 PUSH1 0x20
 239 PUSH1 0x24
 241 DUP1 
 242 CALLDATALOAD 
 243 PUSH1 0x04
 245 DUP2 
 246 DUP2 
 247 ADD 
 248 CALLDATALOAD 
 249 PUSH1 0x1f
 251 DUP2 
 252 ADD 
 253 DUP6 
 254 SWAP1 
 255 DIV 
 256 DUP6 
 257 MUL 
 258 DUP7 
 259 ADD 
 260 DUP6 
 261 ADD 
 262 SWAP1 
 263 SWAP7 
 264 MSTORE 
 265 DUP6 
 266 DUP6 
 267 MSTORE 
 268 PUSH2 0x04a1
 271 SWAP6 
 272 DUP2 
 273 CALLDATALOAD 
 274 SWAP6 
 275 SWAP2 
 276 SWAP5 
 277 PUSH1 0x44
 279 SWAP5 
 280 SWAP3 
 281 SWAP4 
 282 SWAP1 
 283 SWAP3 
 284 ADD 
 285 SWAP2 
 286 DUP2 
 287 SWAP1 
 288 DUP5 
 289 ADD 
 290 DUP4 
 291 DUP3 
 292 DUP1 
 293 DUP3 
 294 DUP5 
 295 CALLDATACOPY 
 296 POP 
 297 POP 
 298 PUSH1 0x40
 300 DUP1 
 301 MLOAD 
 302 PUSH1 0x20
 304 PUSH1 0x64
 306 CALLDATALOAD 
 307 DUP1 
 308 DUP12 
 309 ADD 
 310 CALLDATALOAD 
 311 PUSH1 0x1f
 313 DUP2 
 314 ADD 
 315 DUP4 
 316 SWAP1 
 317 DIV 
 318 DUP4 
 319 MUL 
 320 DUP5 
 321 ADD 
 322 DUP4 
 323 ADD 
 324 SWAP1 
 325 SWAP5 
 326 MSTORE 
 327 DUP4 
 328 DUP4 
 329 MSTORE 
 330 SWAP8 
 331 SWAP10 
 332 SWAP9 
 333 CALLDATALOAD 
 334 SWAP9 
 335 SWAP8 
 336 PUSH1 0x84
 338 SWAP8 
 339 POP 
 340 SWAP2 
 341 SWAP6 
 342 POP 
 343 PUSH1 0x24
 345 SWAP2 
 346 SWAP1 
 347 SWAP2 
 348 ADD 
 349 SWAP4 
 350 POP 
 351 SWAP1 
 352 SWAP2 
 353 POP 
 354 DUP2 
 355 SWAP1 
 356 DUP5 
 357 ADD 
 358 DUP4 
 359 DUP3 
 360 DUP1 
 361 DUP3 
 362 DUP5 
 363 CALLDATACOPY 
 364 POP 
 365 SWAP5 
 366 SWAP7 
 367 POP 
 368 POP 
 369 POP 
 370 POP 
 371 POP 
 372 POP 
 373 POP 
 374 PUSH1 0x01
 376 PUSH1 0xa0
 378 PUSH1 0x02
 380 EXP 
 381 SUB 
 382 CALLER 
 383 AND 
 384 PUSH1 0x00
 386 SWAP1 
 387 DUP2 
 388 MSTORE 
 389 PUSH1 0x03
 391 PUSH1 0x20
 393 SWAP1 
 394 DUP2 
 395 MSTORE 
 396 PUSH1 0x40
 398 DUP3 
 399 SHA3 
 400 DUP7 
 401 SWAP1 
 402 SSTORE 
 403 DUP2 
 404 SLOAD 
 405 DUP6 
 406 MLOAD 
 407 DUP4 
 408 DUP1 
 409 MSTORE 
 410 PUSH1 0x02
 412 PUSH1 0x01
 414 DUP4 
 415 AND 
 416 ISZERO 
 417 PUSH2 0x0100
 420 MUL 
 421 PUSH1 0x00
 423 NOT 
 424 ADD 
 425 SWAP1 
 426 SWAP3 
 427 AND 
 428 SWAP2 
 429 SWAP1 
 430 SWAP2 
 431 DIV 
 432 PUSH1 0x1f
 434 SWAP1 
 435 DUP2 
 436 ADD 
 437 DUP4 
 438 SWAP1 
 439 DIV 
 440 PUSH32 0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563
 473 SWAP1 
 474 DUP2 
 475 ADD 
 476 SWAP4 
 477 SWAP1 
 478 SWAP2 
 479 SWAP1 
 480 DUP9 
 481 ADD 
 482 SWAP1 
 483 DUP4 
 484 SWAP1 
 485 LT 
 486 PUSH2 0x066d
 489 JUMPI 
 490 DUP1 
 491 MLOAD 
 492 PUSH1 0xff
 494 NOT 
 495 AND 
 496 DUP4 
 497 DUP1 
 498 ADD 
 499 OR 
 500 DUP6 
 501 SSTORE 
 502 JUMPDEST 
 503 POP 
 504 PUSH2 0x069d
 507 SWAP3 
 508 SWAP2 
 509 POP 
 510 JUMPDEST 
 511 DUP1 
 512 DUP3 
 513 GT 
 514 ISZERO 
 515 PUSH2 0x06f6
 518 JUMPI 
 519 PUSH1 0x00
 521 DUP2 
 522 SSTORE 
 523 PUSH1 0x01
 525 ADD 
 526 PUSH2 0x01fe
 529 JUMP 

exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);ops[0x20]='SHA3';['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0,out=[];while(pc<hex.length/2){let b=parseInt(hex.slice(pc*2,pc*2+2),16);let op=ops[b]||('OP_'+b.toString(16));if(b>=0x60&&b<=0x7f){let n=b-0x5f;out.push({pc,op,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)});pc+=1+n;}else{out.push({pc,op});pc++;}}
for(const ins of out.filter(x=>x.pc>=833 && x.pc<1112)) console.log(String(ins.pc).padStart(4),ins.op,ins.arg||'');
NODE" in /tmp/codex-catjv7v7
 succeeded in 0ms:
 833 PUSH1 0x00
 835 PUSH1 0x00
 837 DUP4 
 838 PUSH1 0x04
 840 PUSH1 0x00
 842 POP 
 843 PUSH1 0x00
 845 CALLER 
 846 PUSH1 0x01
 848 PUSH1 0xa0
 850 PUSH1 0x02
 852 EXP 
 853 SUB 
 854 AND 
 855 DUP2 
 856 MSTORE 
 857 PUSH1 0x20
 859 ADD 
 860 SWAP1 
 861 DUP2 
 862 MSTORE 
 863 PUSH1 0x20
 865 ADD 
 866 PUSH1 0x00
 868 SHA3 
 869 PUSH1 0x00
 871 POP 
 872 PUSH1 0x00
 874 DUP8 
 875 PUSH1 0x01
 877 PUSH1 0xa0
 879 PUSH1 0x02
 881 EXP 
 882 SUB 
 883 AND 
 884 DUP2 
 885 MSTORE 
 886 PUSH1 0x20
 888 ADD 
 889 SWAP1 
 890 DUP2 
 891 MSTORE 
 892 PUSH1 0x20
 894 ADD 
 895 PUSH1 0x00
 897 SHA3 
 898 PUSH1 0x00
 900 POP 
 901 DUP2 
 902 SWAP1 
 903 SSTORE 
 904 POP 
 905 DUP5 
 906 SWAP1 
 907 POP 
 908 DUP1 
 909 PUSH1 0x01
 911 PUSH1 0xa0
 913 PUSH1 0x02
 915 EXP 
 916 SUB 
 917 AND 
 918 PUSH4 0x8f4ffcb1
 923 CALLER 
 924 DUP7 
 925 ADDRESS 
 926 DUP8 
 927 PUSH1 0x40
 929 MLOAD 
 930 DUP6 
 931 PUSH1 0xe0
 933 PUSH1 0x02
 935 EXP 
 936 MUL 
 937 DUP2 
 938 MSTORE 
 939 PUSH1 0x04
 941 ADD 
 942 DUP1 
 943 DUP6 
 944 PUSH1 0x01
 946 PUSH1 0xa0
 948 PUSH1 0x02
 950 EXP 
 951 SUB 
 952 AND 
 953 DUP2 
 954 MSTORE 
 955 PUSH1 0x20
 957 ADD 
 958 DUP5 
 959 DUP2 
 960 MSTORE 
 961 PUSH1 0x20
 963 ADD 
 964 DUP4 
 965 PUSH1 0x01
 967 PUSH1 0xa0
 969 PUSH1 0x02
 971 EXP 
 972 SUB 
 973 AND 
 974 DUP2 
 975 MSTORE 
 976 PUSH1 0x20
 978 ADD 
 979 DUP1 
 980 PUSH1 0x20
 982 ADD 
 983 DUP3 
 984 DUP2 
 985 SUB 
 986 DUP3 
 987 MSTORE 
 988 DUP4 
 989 DUP2 
 990 DUP2 
 991 MLOAD 
 992 DUP2 
 993 MSTORE 
 994 PUSH1 0x20
 996 ADD 
 997 SWAP2 
 998 POP 
 999 DUP1 
1000 MLOAD 
1001 SWAP1 
1002 PUSH1 0x20
1004 ADD 
1005 SWAP1 
1006 DUP1 
1007 DUP4 
1008 DUP4 
1009 DUP3 
1010 SWAP1 
1011 PUSH1 0x00
1013 PUSH1 0x04
1015 PUSH1 0x20
1017 DUP5 
1018 PUSH1 0x1f
1020 ADD 
1021 DIV 
1022 PUSH1 0x0f
1024 MUL 
1025 PUSH1 0x03
1027 ADD 
1028 CALL 
1029 POP 
1030 SWAP1 
1031 POP 
1032 SWAP1 
1033 DUP2 
1034 ADD 
1035 SWAP1 
1036 PUSH1 0x1f
1038 AND 
1039 DUP1 
1040 ISZERO 
1041 PUSH2 0x042e
1044 JUMPI 
1045 DUP1 
1046 DUP3 
1047 SUB 
1048 DUP1 
1049 MLOAD 
1050 PUSH1 0x01
1052 DUP4 
1053 PUSH1 0x20
1055 SUB 
1056 PUSH2 0x0100
1059 EXP 
1060 SUB 
1061 NOT 
1062 AND 
1063 DUP2 
1064 MSTORE 
1065 PUSH1 0x20
1067 ADD 
1068 SWAP2 
1069 POP 
1070 JUMPDEST 
1071 POP 
1072 SWAP6 
1073 POP 
1074 POP 
1075 POP 
1076 POP 
1077 POP 
1078 POP 
1079 PUSH1 0x00
1081 PUSH1 0x40
1083 MLOAD 
1084 DUP1 
1085 DUP4 
1086 SUB 
1087 DUP2 
1088 PUSH1 0x00
1090 DUP8 
1091 PUSH2 0x61da
1094 GAS 
1095 SUB 
1096 CALL 
1097 ISZERO 
1098 PUSH2 0x0002
1101 JUMPI 
1102 POP 
1103 POP 
1104 POP 
1105 POP 
1106 SWAP4 
1107 SWAP3 
1108 POP 
1109 POP 
1110 POP 
1111 JUMP 

exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);ops[0x20]='SHA3';['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0,out=[];while(pc<hex.length/2){let b=parseInt(hex.slice(pc*2,pc*2+2),16);let op=ops[b]||('OP_'+b.toString(16));if(b>=0x60&&b<=0x7f){let n=b-0x5f;out.push({pc,op,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)});pc+=1+n;}else{out.push({pc,op});pc++;}}
const seg=out.filter(x=>x.pc>=833&&x.pc<=903);
let stack=[]; for(let i=0;i<12;i++) stack.push('s'+i); // s0 top
stack=stack.reverse(); // internal end is top
let mem={};
function pop(){return stack.pop()}
function push(x){stack.push(x)}
function peek(n){return stack[stack.length-1-n]}
for (const ins of seg){
  const op=ins.op;
  const before=stack.slice(-8);
  if(op.startsWith('PUSH')) push(ins.arg);
  else if(op.startsWith('DUP')) {const n=Number(op.slice(3)); push(peek(n-1));}
  else if(op.startsWith('SWAP')) {const n=Number(op.slice(4)); const i=stack.length-1; const j=stack.length-1-n; [stack[i],stack[j]]=[stack[j],stack[i]];}
  else if(op==='POP') pop();
  else if(op==='AND'||op==='ADD'||op==='SUB'||op==='DIV'||op==='MUL'||op==='EXP') {const a=pop(), b=pop(); push('('+b+' '+op+' '+a+')');}
  else if(op==='MSTORE') {const off=pop(), val=pop(); mem[off]=val;}
  else if(op==='MLOAD') {const off=pop(); push('mem['+off+']');}
  else if(op==='SHA3') {const off=pop(), len=pop(); push('keccak(mem['+off+'..+'+len+'])');}
  else if(op==='SSTORE') {const slot=pop(), val=pop(); console.log('pc',ins.pc,'SSTORE slot=',slot,'val=',val);}
  else if(op==='CALLER') push('CALLER');
  else if(op==='ADDRESS') push('ADDRESS');
  else if(op==='GAS') push('GAS');
  else if(op==='CALLDATALOAD') {const off=pop(); push('calldata['+off+']');}
  else {console.log('unhandled',ins); break;}
  console.log(String(ins.pc).padStart(4), op, ins.arg||'', ' stackTop=>', stack.slice(-6));
}
console.log('mem',mem);
NODE" in /tmp/codex-catjv7v7
 succeeded in 0ms:
 833 PUSH1 0x00  stackTop=> [ 's4', 's3', 's2', 's1', 's0', '0x00' ]
 835 PUSH1 0x00  stackTop=> [ 's3', 's2', 's1', 's0', '0x00', '0x00' ]
 837 DUP4   stackTop=> [ 's2', 's1', 's0', '0x00', '0x00', 's1' ]
 838 PUSH1 0x04  stackTop=> [ 's1', 's0', '0x00', '0x00', 's1', '0x04' ]
 840 PUSH1 0x00  stackTop=> [ 's0', '0x00', '0x00', 's1', '0x04', '0x00' ]
 842 POP   stackTop=> [ 's1', 's0', '0x00', '0x00', 's1', '0x04' ]
 843 PUSH1 0x00  stackTop=> [ 's0', '0x00', '0x00', 's1', '0x04', '0x00' ]
 845 CALLER   stackTop=> [ '0x00', '0x00', 's1', '0x04', '0x00', 'CALLER' ]
 846 PUSH1 0x01  stackTop=> [ '0x00', 's1', '0x04', '0x00', 'CALLER', '0x01' ]
 848 PUSH1 0xa0  stackTop=> [ 's1', '0x04', '0x00', 'CALLER', '0x01', '0xa0' ]
 850 PUSH1 0x02  stackTop=> [ '0x04', '0x00', 'CALLER', '0x01', '0xa0', '0x02' ]
 852 EXP   stackTop=> [ 's1', '0x04', '0x00', 'CALLER', '0x01', '(0xa0 EXP 0x02)' ]
 853 SUB   stackTop=> [
  '0x00',
  's1',
  '0x04',
  '0x00',
  'CALLER',
  '(0x01 SUB (0xa0 EXP 0x02))'
]
 854 AND   stackTop=> [
  '0x00',
  '0x00',
  's1',
  '0x04',
  '0x00',
  '(CALLER AND (0x01 SUB (0xa0 EXP 0x02)))'
]
 855 DUP2   stackTop=> [
  '0x00',
  's1',
  '0x04',
  '0x00',
  '(CALLER AND (0x01 SUB (0xa0 EXP 0x02)))',
  '0x00'
]
 856 MSTORE   stackTop=> [ 's0', '0x00', '0x00', 's1', '0x04', '0x00' ]
 857 PUSH1 0x20  stackTop=> [ '0x00', '0x00', 's1', '0x04', '0x00', '0x20' ]
 859 ADD   stackTop=> [ 's0', '0x00', '0x00', 's1', '0x04', '(0x00 ADD 0x20)' ]
 860 SWAP1   stackTop=> [ 's0', '0x00', '0x00', 's1', '(0x00 ADD 0x20)', '0x04' ]
 861 DUP2   stackTop=> [ '0x00', '0x00', 's1', '(0x00 ADD 0x20)', '0x04', '(0x00 ADD 0x20)' ]
 862 MSTORE   stackTop=> [ 's1', 's0', '0x00', '0x00', 's1', '(0x00 ADD 0x20)' ]
 863 PUSH1 0x20  stackTop=> [ 's0', '0x00', '0x00', 's1', '(0x00 ADD 0x20)', '0x20' ]
 865 ADD   stackTop=> [ 's1', 's0', '0x00', '0x00', 's1', '((0x00 ADD 0x20) ADD 0x20)' ]
 866 PUSH1 0x00  stackTop=> [ 's0', '0x00', '0x00', 's1', '((0x00 ADD 0x20) ADD 0x20)', '0x00' ]
 868 SHA3   stackTop=> [
  's1',
  's0',
  '0x00',
  '0x00',
  's1',
  'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])'
]
 869 PUSH1 0x00  stackTop=> [
  's0',
  '0x00',
  '0x00',
  's1',
  'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
  '0x00'
]
 871 POP   stackTop=> [
  's1',
  's0',
  '0x00',
  '0x00',
  's1',
  'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])'
]
 872 PUSH1 0x00  stackTop=> [
  's0',
  '0x00',
  '0x00',
  's1',
  'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
  '0x00'
]
 874 DUP8   stackTop=> [
  '0x00',
  '0x00',
  's1',
  'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
  '0x00',
  's2'
]
 875 PUSH1 0x01  stackTop=> [
  '0x00',
  's1',
  'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
  '0x00',
  's2',
  '0x01'
]
 877 PUSH1 0xa0  stackTop=> [
  's1',
  'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
  '0x00',
  's2',
  '0x01',
  '0xa0'
]
 879 PUSH1 0x02  stackTop=> [
  'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
  '0x00',
  's2',
  '0x01',
  '0xa0',
  '0x02'
]
 881 EXP   stackTop=> [
  's1',
  'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
  '0x00',
  's2',
  '0x01',
  '(0xa0 EXP 0x02)'
]
 882 SUB   stackTop=> [
  '0x00',
  's1',
  'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
  '0x00',
  's2',
  '(0x01 SUB (0xa0 EXP 0x02))'
]
 883 AND   stackTop=> [
  '0x00',
  '0x00',
  's1',
  'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
  '0x00',
  '(s2 AND (0x01 SUB (0xa0 EXP 0x02)))'
]
 884 DUP2   stackTop=> [
  '0x00',
  's1',
  'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
  '0x00',
  '(s2 AND (0x01 SUB (0xa0 EXP 0x02)))',
  '0x00'
]
 885 MSTORE   stackTop=> [
  's0',
  '0x00',
  '0x00',
  's1',
  'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
  '0x00'
]
 886 PUSH1 0x20  stackTop=> [
  '0x00',
  '0x00',
  's1',
  'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
  '0x00',
  '0x20'
]
 888 ADD   stackTop=> [
  's0',
  '0x00',
  '0x00',
  's1',
  'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
  '(0x00 ADD 0x20)'
]
 889 SWAP1   stackTop=> [
  's0',
  '0x00',
  '0x00',
  's1',
  '(0x00 ADD 0x20)',
  'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])'
]
 890 DUP2   stackTop=> [
  '0x00',
  '0x00',
  's1',
  '(0x00 ADD 0x20)',
  'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
  '(0x00 ADD 0x20)'
]
 891 MSTORE   stackTop=> [ 's1', 's0', '0x00', '0x00', 's1', '(0x00 ADD 0x20)' ]
 892 PUSH1 0x20  stackTop=> [ 's0', '0x00', '0x00', 's1', '(0x00 ADD 0x20)', '0x20' ]
 894 ADD   stackTop=> [ 's1', 's0', '0x00', '0x00', 's1', '((0x00 ADD 0x20) ADD 0x20)' ]
 895 PUSH1 0x00  stackTop=> [ 's0', '0x00', '0x00', 's1', '((0x00 ADD 0x20) ADD 0x20)', '0x00' ]
 897 SHA3   stackTop=> [
  's1',
  's0',
  '0x00',
  '0x00',
  's1',
  'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])'
]
 898 PUSH1 0x00  stackTop=> [
  's0',
  '0x00',
  '0x00',
  's1',
  'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
  '0x00'
]
 900 POP   stackTop=> [
  's1',
  's0',
  '0x00',
  '0x00',
  's1',
  'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])'
]
 901 DUP2   stackTop=> [
  's0',
  '0x00',
  '0x00',
  's1',
  'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
  's1'
]
 902 SWAP1   stackTop=> [
  's0',
  '0x00',
  '0x00',
  's1',
  's1',
  'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])'
]
pc 903 SSTORE slot= keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)]) val= s1
 903 SSTORE   stackTop=> [ 's2', 's1', 's0', '0x00', '0x00', 's1' ]
mem {
  '0x00': '(s2 AND (0x01 SUB (0xa0 EXP 0x02)))',
  '(0x00 ADD 0x20)': 'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])'
}

exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);ops[0x20]='SHA3';['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0,out=[];while(pc<hex.length/2){let b=parseInt(hex.slice(pc*2,pc*2+2),16);let op=ops[b]||('OP_'+b.toString(16));if(b>=0x60&&b<=0x7f){let n=b-0x5f;out.push({pc,op,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)});pc+=1+n;}else{out.push({pc,op});pc++;}}
const seg=out.filter(x=>x.pc>=833&&x.pc<=1096);
let stack=[]; for(let i=0;i<16;i++) stack.push('s'+i); stack=stack.reverse();
let mem={};
function pop(){return stack.pop()}
function push(x){stack.push(x)}
function peek(n){return stack[stack.length-1-n]}
function bin(op){const a=pop(),b=pop();push('('+b+' '+op+' '+a+')');}
for (const ins of seg){
  const op=ins.op;
  if(op.startsWith('PUSH')) push(ins.arg);
  else if(op.startsWith('DUP')) push(peek(Number(op.slice(3))-1));
  else if(op.startsWith('SWAP')) {const n=Number(op.slice(4)); const i=stack.length-1,j=stack.length-1-n; [stack[i],stack[j]]=[stack[j],stack[i]];}
  else if(op==='POP') pop();
  else if(['AND','ADD','SUB','DIV','MUL','EXP','LT','GT'].includes(op)) bin(op);
  else if(op==='ISZERO'||op==='NOT') {const a=pop(); push(op+'('+a+')');}
  else if(op==='MSTORE') {const off=pop(), val=pop(); mem[off]=val;}
  else if(op==='MLOAD') {const off=pop(); push('mem['+off+']');}
  else if(op==='SHA3') {const off=pop(), len=pop(); push('keccak(mem['+off+'..+'+len+'])');}
  else if(op==='SLOAD') {const slot=pop(); push('sload['+slot+']');}
  else if(op==='SSTORE') {const slot=pop(), val=pop(); push('SSTORE('+slot+','+val+')');}
  else if(op==='CALLER') push('CALLER');
  else if(op==='ADDRESS') push('ADDRESS');
  else if(op==='GAS') push('GAS');
  else if(op==='CALLDATALOAD') {const off=pop(); push('calldata['+off+']');}
  else if(op==='CALLDATACOPY') {const m=pop(), c=pop(), l=pop(); mem[m]='calldata['+c+'..+'+l+']'; }
  else if(op==='CALL') {const gas=pop(), to=pop(), value=pop(), inOff=pop(), inSize=pop(), outOff=pop(), outSize=pop(); console.log('CALL at',ins.pc,{gas,to,value,inOff,inSize,outOff,outSize,memIn:mem[inOff]}); push('callret');}
  else if(op==='JUMPDEST') {}
  else {console.log('unhandled',ins.pc,op); break;}
}
console.log('final top', stack.slice(-12));
console.log('mem keys', Object.keys(mem).slice(0,10));
NODE" in /tmp/codex-catjv7v7
 succeeded in 0ms:
CALL at 1028 {
  gas: '(((0x20 DIV (mem[0x00] ADD 0x1f)) MUL 0x0f) ADD 0x03)',
  to: '0x04',
  value: '0x00',
  inOff: '(0x00 ADD 0x20)',
  inSize: 'mem[0x00]',
  outOff: '((((((mem[0x40] ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20)',
  outSize: 'mem[0x00]',
  memIn: 'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])'
}
unhandled 1044 JUMPI
final top [
  '(s1 AND (0x01 SUB (0xa0 EXP 0x02)))',
  '0x8f4ffcb1',
  'CALLER',
  's0',
  'ADDRESS',
  '0x00',
  '(mem[0x40] ADD 0x04)',
  '((((mem[0x40] ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20)',
  '(((((((mem[0x40] ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD mem[0x00])',
  '(mem[0x00] AND 0x1f)',
  'ISZERO((mem[0x00] AND 0x1f))',
  '0x042e'
]
mem keys [
  '0x00',
  '(0x00 ADD 0x20)',
  'mem[0x40]',
  '(mem[0x40] ADD 0x04)',
  '((mem[0x40] ADD 0x04) ADD 0x20)',
  '(((mem[0x40] ADD 0x04) ADD 0x20) ADD 0x20)',
  '((((mem[0x40] ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20)',
  '(((((mem[0x40] ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20)'
]

exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);ops[0x20]='SHA3';['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0,out=[];while(pc<hex.length/2){let b=parseInt(hex.slice(pc*2,pc*2+2),16);let op=ops[b]||('OP_'+b.toString(16));if(b>=0x60&&b<=0x7f){let n=b-0x5f;out.push({pc,op,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)});pc+=1+n;}else{out.push({pc,op});pc++;}}
const seg=out.filter(x=>x.pc>=833&&x.pc<=1096);
for (const branch of ['taken','not']) {
  console.log('\\nbranch',branch);
  let stack=[]; for(let i=0;i<16;i++) stack.push('s'+i); stack=stack.reverse();
  let mem={};
  function pop(){return stack.pop()}
  function push(x){stack.push(x)}
  function peek(n){return stack[stack.length-1-n]}
  function bin(op){const a=pop(),b=pop();push('('+b+' '+op+' '+a+')');}
  for (const ins of seg){
    const op=ins.op;
    if(op.startsWith('PUSH')) push(ins.arg);
    else if(op.startsWith('DUP')) push(peek(Number(op.slice(3))-1));
    else if(op.startsWith('SWAP')) {const n=Number(op.slice(4)); const i=stack.length-1,j=stack.length-1-n; [stack[i],stack[j]]=[stack[j],stack[i]];}
    else if(op==='POP') pop();
    else if(['AND','ADD','SUB','DIV','MUL','EXP','LT','GT'].includes(op)) bin(op);
    else if(op==='ISZERO'||op==='NOT') {const a=pop(); push(op+'('+a+')');}
    else if(op==='MSTORE') {const off=pop(), val=pop(); mem[off]=val;}
    else if(op==='MLOAD') {const off=pop(); push('mem['+off+']');}
    else if(op==='SHA3') {const off=pop(), len=pop(); push('keccak(mem['+off+'..+'+len+'])');}
    else if(op==='SLOAD') {const slot=pop(); push('sload['+slot+']');}
    else if(op==='SSTORE') {const slot=pop(), val=pop(); push('SSTORE('+slot+','+val+')');}
    else if(op==='CALLER') push('CALLER');
    else if(op==='ADDRESS') push('ADDRESS');
    else if(op==='GAS') push('GAS');
    else if(op==='CALLDATALOAD') {const off=pop(); push('calldata['+off+']');}
    else if(op==='CALLDATACOPY') {const m=pop(), c=pop(), l=pop(); mem[m]='calldata['+c+'..+'+l+']'; }
    else if(op==='JUMPI') { const dest=pop(), cond=pop(); if(branch==='taken' && ins.pc===1044){/*skip until 1070*/} }
    else if(op==='CALL') {const gas=pop(), to=pop(), value=pop(), inOff=pop(), inSize=pop(), outOff=pop(), outSize=pop(); console.log('CALL at',ins.pc,{gas,to,value,inOff,inSize,outOff,outSize}); push('callret');}
    else if(op==='JUMPDEST') {}
    else {console.log('unhandled',ins.pc,op); break;}
  }
}
NODE" in /tmp/codex-catjv7v7
 succeeded in 0ms:

branch taken
CALL at 1028 {
  gas: '(((0x20 DIV (mem[0x00] ADD 0x1f)) MUL 0x0f) ADD 0x03)',
  to: '0x04',
  value: '0x00',
  inOff: '(0x00 ADD 0x20)',
  inSize: 'mem[0x00]',
  outOff: '((((((mem[0x40] ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20)',
  outSize: 'mem[0x00]'
}
CALL at 1096 {
  gas: '(0x61da SUB GAS)',
  to: '(s1 AND (0x01 SUB (0xa0 EXP 0x02)))',
  value: '0x00',
  inOff: 'mem[0x40]',
  inSize: '(mem[0x40] SUB (((mem[0x00] AND 0x1f) SUB (((((((mem[0x40] ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD mem[0x00])) ADD 0x20))',
  outOff: 'mem[0x40]',
  outSize: '0x00'
}

branch not
CALL at 1028 {
  gas: '(((0x20 DIV (mem[0x00] ADD 0x1f)) MUL 0x0f) ADD 0x03)',
  to: '0x04',
  value: '0x00',
  inOff: '(0x00 ADD 0x20)',
  inSize: 'mem[0x00]',
  outOff: '((((((mem[0x40] ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20)',
  outSize: 'mem[0x00]'
}
CALL at 1096 {
  gas: '(0x61da SUB GAS)',
  to: '(s1 AND (0x01 SUB (0xa0 EXP 0x02)))',
  value: '0x00',
  inOff: 'mem[0x40]',
  inSize: '(mem[0x40] SUB (((mem[0x00] AND 0x1f) SUB (((((((mem[0x40] ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD mem[0x00])) ADD 0x20))',
  outOff: 'mem[0x40]',
  outSize: '0x00'
}

exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);ops[0x20]='SHA3';['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0,out=[];while(pc<hex.length/2){let b=parseInt(hex.slice(pc*2,pc*2+2),16);let op=ops[b]||('OP_'+b.toString(16));if(b>=0x60&&b<=0x7f){let n=b-0x5f;out.push({pc,op,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)});pc+=1+n;}else{out.push({pc,op});pc++;}}
const seg=out.filter(x=>x.pc>=709&&x.pc<=833);
let stack=[]; for(let i=0;i<8;i++) stack.push('r'+i); stack=stack.reverse();
let mem={};
function pop(){return stack.pop()} function push(x){stack.push(x)} function peek(n){return stack[stack.length-1-n]} function bin(op){const a=pop(),b=pop();push('('+b+' '+op+' '+a+')');}
for(const ins of seg){const op=ins.op; if(op.startsWith('PUSH')) push(ins.arg); else if(op.startsWith('DUP')) push(peek(Number(op.slice(3))-1)); else if(op.startsWith('SWAP')) {const n=Number(op.slice(4)); const i=stack.length-1,j=stack.length-1-n; [stack[i],stack[j]]=[stack[j],stack[i]];} else if(op==='POP') pop(); else if(['AND','ADD','SUB','DIV','MUL','EXP','LT','GT'].includes(op)) bin(op); else if(op==='ISZERO') {const a=pop(); push('ISZERO('+a+')');} else if(op==='MSTORE'){const off=pop(),val=pop(); mem[off]=val;} else if(op==='MLOAD'){const off=pop(); push('mem['+off+']');} else if(op==='SHA3'){const off=pop(),len=pop(); push('keccak(mem['+off+'..+'+len+'])');} else if(op==='SLOAD'){const slot=pop(); push('sload['+slot+']');} else if(op==='CALLDATALOAD'){const off=pop(); push('calldata['+off+']');} else if(op==='CALLDATACOPY'){const m=pop(), c=pop(), l=pop(); mem[m]='calldata['+c+'..+'+l+']'; } else if(op==='CALLER'){push('CALLER')} else if(op==='JUMPDEST'){} else if(op==='JUMPI'){const dest=pop(),cond=pop(); console.log('JUMPI',ins.pc,'dest',dest,'cond',cond);} else {console.log('unhandled',ins.pc,op); break;} if([709,715,718,743,756,791,796,801,822,833].includes(ins.pc)) console.log('pc',ins.pc,op,ins.arg||'', 'stack', stack.slice(-8)); }
console.log('final stack', stack);
NODE" in /tmp/codex-catjv7v7
 succeeded in 0ms:
pc 709 JUMPDEST  stack [
  'r7', 'r6', 'r5',
  'r4', 'r3', 'r2',
  'r1', 'r0'
]
pc 715 CALLDATALOAD  stack [ 'r5', 'r4', 'r3', 'r2', 'r1', 'r0', '0x04a1', 'calldata[0x04]' ]
pc 718 CALLDATALOAD  stack [
  'r4',
  'r3',
  'r2',
  'r1',
  'r0',
  '0x04a1',
  'calldata[0x04]',
  'calldata[0x24]'
]
pc 743 SLOAD  stack [
  'r3',
  'r2',
  'r1',
  'r0',
  '0x04a1',
  'calldata[0x04]',
  'calldata[0x24]',
  'sload[keccak(mem[0x00..+0x40])]'
]
JUMPI 751 dest 0x073e cond ISZERO((calldata[0x24] LT sload[keccak(mem[0x00..+0x40])]))
unhandled 755 JUMP
final stack [
  'r7',             'r6',
  'r5',             'r4',
  'r3',             'r2',
  'r1',             'r0',
  '0x04a1',         'calldata[0x04]',
  'calldata[0x24]', '0x0002'
]

exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);ops[0x20]='SHA3';['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0,out=[];while(pc<hex.length/2){let b=parseInt(hex.slice(pc*2,pc*2+2),16);let op=ops[b]||('OP_'+b.toString(16));if(b>=0x60&&b<=0x7f){let n=b-0x5f;out.push({pc,op,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)});pc+=1+n;}else{out.push({pc,op});pc++;}}
const seg=out.filter(x=>x.pc>=756&&x.pc<=833);
let stack=['r7','r6','r5','r4','r3','r2','r1','r0','ret','arg1','arg2']; // top is last
let mem={};
function pop(){return stack.pop()} function push(x){stack.push(x)} function peek(n){return stack[stack.length-1-n]} function bin(op){const a=pop(),b=pop();push('('+b+' '+op+' '+a+')');}
for(const ins of seg){const op=ins.op; if(op.startsWith('PUSH')) push(ins.arg); else if(op.startsWith('DUP')) push(peek(Number(op.slice(3))-1)); else if(op.startsWith('SWAP')) {const n=Number(op.slice(4)); const i=stack.length-1,j=stack.length-1-n; [stack[i],stack[j]]=[stack[j],stack[i]];} else if(op==='POP') pop(); else if(['AND','ADD','SUB','DIV','MUL','EXP','LT','GT'].includes(op)) bin(op); else if(op==='ISZERO') {const a=pop(); push('ISZERO('+a+')');} else if(op==='MSTORE'){const off=pop(),val=pop(); mem[off]=val;} else if(op==='MLOAD'){const off=pop(); push('mem['+off+']');} else if(op==='CALLDATALOAD'){const off=pop(); push('calldata['+off+']');} else if(op==='CALLDATACOPY'){const m=pop(), c=pop(), l=pop(); mem[m]='calldata['+c+'..+'+l+']'; } else if(op==='JUMPDEST'){} else {console.log('unhandled',ins.pc,op); break;} if([760,765,771,791,796,801,822,833].includes(ins.pc)) console.log('pc',ins.pc,op,ins.arg||'', 'stack', stack.slice(-10)); }
console.log('final stack', stack);
console.log('mem',mem);
NODE" in /tmp/codex-catjv7v7
 succeeded in 0ms:
pc 760 MLOAD  stack [
  'r4',   'r3',
  'r2',   'r1',
  'r0',   'ret',
  'arg1', 'arg2',
  '0x40', 'mem[0x40]'
]
pc 765 CALLDATALOAD  stack [
  'r2',
  'r1',
  'r0',
  'ret',
  'arg1',
  'arg2',
  '0x40',
  'mem[0x40]',
  '0x20',
  'calldata[0x44]'
]
pc 771 CALLDATALOAD  stack [
  'r0',
  'ret',
  'arg1',
  'arg2',
  '0x40',
  'mem[0x40]',
  '0x20',
  'calldata[0x44]',
  '0x04',
  'calldata[(calldata[0x44] ADD 0x04)]'
]
pc 791 PUSH2 0x0511 stack [
  'r0',
  'ret',
  'arg1',
  'arg2',
  'calldata[(calldata[0x44] ADD 0x04)]',
  'mem[0x40]',
  '0x20',
  'calldata[0x44]',
  '0x04',
  '0x0511'
]
pc 796 CALLDATALOAD  stack [
  'ret',
  'arg1',
  'arg2',
  '0x0511',
  'mem[0x40]',
  '0x20',
  'calldata[0x44]',
  '0x04',
  'calldata[(calldata[0x44] ADD 0x04)]',
  'calldata[0x04]'
]
pc 801 CALLDATALOAD  stack [
  'arg2',
  '0x0511',
  'calldata[0x04]',
  '0x20',
  'calldata[0x44]',
  '0x04',
  'calldata[(calldata[0x44] ADD 0x04)]',
  'mem[0x40]',
  '0x24',
  'calldata[0x24]'
]
pc 822 CALLDATACOPY  stack [
  'calldata[0x24]',
  '0x04',
  '0x64',
  'mem[0x40]',
  '(calldata[0x44] ADD 0x24)',
  'calldata[(calldata[0x44] ADD 0x04)]',
  'calldata[(calldata[0x44] ADD 0x04)]',
  '(0x20 ADD mem[0x40])',
  '(calldata[0x44] ADD 0x24)',
  'calldata[(calldata[0x44] ADD 0x04)]'
]
pc 833 PUSH1 0x00 stack [
  'r1',
  'r0',
  'ret',
  'arg1',
  'arg2',
  '0x0511',
  'calldata[0x04]',
  'calldata[0x24]',
  'mem[0x40]',
  '0x00'
]
final stack [
  'r7',             'r6',
  'r5',             'r4',
  'r3',             'r2',
  'r1',             'r0',
  'ret',            'arg1',
  'arg2',           '0x0511',
  'calldata[0x04]', 'calldata[0x24]',
  'mem[0x40]',      '0x00'
]
mem {
  '0x40': '((((0x20 DIV (0x1f ADD calldata[(calldata[0x44] ADD 0x04)])) MUL 0x20) ADD mem[0x40]) ADD 0x20)',
  'mem[0x40]': 'calldata[(calldata[0x44] ADD 0x04)]',
  '(0x20 ADD mem[0x40])': 'calldata[(calldata[0x44] ADD 0x24)..+calldata[(calldata[0x44] ADD 0x04)]]'
}

exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);ops[0x20]='SHA3';['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0,out=[];while(pc<hex.length/2){let b=parseInt(hex.slice(pc*2,pc*2+2),16);let op=ops[b]||('OP_'+b.toString(16));if(b>=0x60&&b<=0x7f){let n=b-0x5f;out.push({pc,op,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)});pc+=1+n;}else{out.push({pc,op});pc++;}}
const seg=out.filter(x=>x.pc>=833&&x.pc<=1096);
let stack=['x7','x6','x5','ret','to_arg','amt_arg','data_ptr','zero']; // top is last, from trace at 833
let mem={'data_ptr':'calldata[(calldata[0x44] ADD 0x24)..+calldata[(calldata[0x44] ADD 0x04)]]','mem[0x40]':'calldata[(calldata[0x44] ADD 0x04)]','0x40':'memptr_end'};
function pop(){return stack.pop()} function push(x){stack.push(x)} function peek(n){return stack[stack.length-1-n]} function bin(op){const a=pop(),b=pop();push('('+b+' '+op+' '+a+')');}
for (const ins of seg){ const op=ins.op; if(op.startsWith('PUSH')) push(ins.arg); else if(op.startsWith('DUP')) push(peek(Number(op.slice(3))-1)); else if(op.startsWith('SWAP')) {const n=Number(op.slice(4)); const i=stack.length-1,j=stack.length-1-n; [stack[i],stack[j]]=[stack[j],stack[i]];} else if(op==='POP') pop(); else if(['AND','ADD','SUB','DIV','MUL','EXP','LT','GT'].includes(op)) bin(op); else if(op==='ISZERO'||op==='NOT') {const a=pop(); push(op+'('+a+')');} else if(op==='MSTORE') {const off=pop(), val=pop(); mem[off]=val;} else if(op==='MLOAD') {const off=pop(); push(mem[off]||('mem['+off+']'));} else if(op==='SHA3') {const off=pop(), len=pop(); push('keccak(mem['+off+'..+'+len+'])');} else if(op==='SLOAD') {const slot=pop(); push('sload['+slot+']');} else if(op==='SSTORE') {const slot=pop(), val=pop(); console.log('SSTORE at',ins.pc,'slot',slot,'val',val); } else if(op==='CALLER') push('CALLER'); else if(op==='ADDRESS') push('ADDRESS'); else if(op==='GAS') push('GAS'); else if(op==='CALLDATALOAD') {const off=pop(); push('calldata['+off+']');} else if(op==='CALLDATACOPY'){const m=pop(), c=pop(), l=pop(); mem[m]='calldata['+c+'..+'+l+']'; } else if(op==='CALL'){const gas=pop(), to=pop(), value=pop(), inOff=pop(), inSize=pop(), outOff=pop(), outSize=pop(); console.log('CALL at',ins.pc,{gas,to,value,inOff,inSize,outOff,outSize}); push('callret'); } else if(op==='JUMPI'){const dest=pop(),cond=pop();} else if(op==='JUMPDEST'){} else {console.log('unhandled',ins.pc,op); break; } }
console.log('final',stack.slice(-12));
console.log('mem40',mem['mem[0x40]'], 'data_ptr contents', mem['data_ptr']);
NODE" in /tmp/codex-catjv7v7
 succeeded in 0ms:
SSTORE at 903 slot keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)]) val data_ptr
CALL at 1028 {
  gas: '(((0x20 DIV (mem[zero] ADD 0x1f)) MUL 0x0f) ADD 0x03)',
  to: '0x04',
  value: '0x00',
  inOff: '(zero ADD 0x20)',
  inSize: 'mem[zero]',
  outOff: '((((((memptr_end ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20)',
  outSize: 'mem[zero]'
}
CALL at 1096 {
  gas: '(0x61da SUB GAS)',
  to: '(amt_arg AND (0x01 SUB (0xa0 EXP 0x02)))',
  value: '0x00',
  inOff: 'memptr_end',
  inSize: '(memptr_end SUB (((mem[zero] AND 0x1f) SUB (((((((memptr_end ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD mem[zero])) ADD 0x20))',
  outOff: 'memptr_end',
  outSize: '0x00'
}
final [
  'x5',
  'ret',
  'to_arg',
  'amt_arg',
  'data_ptr',
  'zero',
  '0x00',
  'amt_arg',
  '(amt_arg AND (0x01 SUB (0xa0 EXP 0x02)))',
  '0x8f4ffcb1',
  '(((mem[zero] AND 0x1f) SUB (((((((memptr_end ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD mem[zero])) ADD 0x20)',
  'callret'
]
mem40 calldata[(calldata[0x44] ADD 0x04)] data_ptr contents calldata[(calldata[0x44] ADD 0x24)..+calldata[(calldata[0x44] ADD 0x04)]]

exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const j=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=j.artifact.runtime_bytecode.full.slice(2);
const ops={};['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'].forEach((n,i)=>ops[i]=n);['LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE'].forEach((n,i)=>ops[0x10+i]=n);ops[0x20]='SHA3';['ADDRESS','BALANCE','ORIGIN','CALLER','CALLVALUE','CALLDATALOAD','CALLDATASIZE','CALLDATACOPY','CODESIZE','CODECOPY','GASPRICE','EXTCODESIZE','EXTCODECOPY','RETURNDATASIZE','RETURNDATACOPY'].forEach((n,i)=>ops[0x30+i]=n);['BLOCKHASH','COINBASE','TIMESTAMP','NUMBER','DIFFICULTY','GASLIMIT','CHAINID','SELFBALANCE','BASEFEE'].forEach((n,i)=>ops[0x40+i]=n);['POP','MLOAD','MSTORE','MSTORE8','SLOAD','SSTORE','JUMP','JUMPI','PC','MSIZE','GAS','JUMPDEST'].forEach((n,i)=>ops[0x50+i]=n);for(let i=0;i<32;i++)ops[0x60+i]='PUSH'+(i+1);for(let i=0;i<16;i++)ops[0x80+i]='DUP'+(i+1);for(let i=0;i<16;i++)ops[0x90+i]='SWAP'+(i+1);for(let i=0;i<5;i++)ops[0xa0+i]='LOG'+i;Object.assign(ops,{0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'});
let pc=0,out=[];while(pc<hex.length/2){let b=parseInt(hex.slice(pc*2,pc*2+2),16);let op=ops[b]||('OP_'+b.toString(16));if(b>=0x60&&b<=0x7f){let n=b-0x5f;out.push({pc,op,arg:'0x'+hex.slice(pc*2+2,pc*2+2+n*2)});pc+=1+n;}else{out.push({pc,op});pc++;}}
const seg=out.filter(x=>x.pc>=833&&x.pc<=1096);
let stack=['r7','r6','r5','r4','r3','r2','r1','r0','ret','arg1','arg2','ret2','arg1b','arg2b','memPtr','zero'];
let mem={'memPtr':'data_len','(0x20 ADD memPtr)':'data_bytes'};
function pop(){return stack.pop()} function push(x){stack.push(x)} function peek(n){return stack[stack.length-1-n]} function bin(op){const a=pop(),b=pop();push('('+b+' '+op+' '+a+')');}
for(const ins of seg){const op=ins.op; if(op.startsWith('PUSH')) push(ins.arg); else if(op.startsWith('DUP')) push(peek(Number(op.slice(3))-1)); else if(op.startsWith('SWAP')) {const n=Number(op.slice(4)); const i=stack.length-1,j=stack.length-1-n; [stack[i],stack[j]]=[stack[j],stack[i]];} else if(op==='POP') pop(); else if(['AND','ADD','SUB','DIV','MUL','EXP','LT','GT'].includes(op)) bin(op); else if(op==='ISZERO'||op==='NOT') {const a=pop(); push(op+'('+a+')');} else if(op==='MSTORE'){const off=pop(),val=pop(); mem[off]=val;} else if(op==='MLOAD'){const off=pop(); push(mem[off]||('mem['+off+']'));} else if(op==='SHA3'){const off=pop(),len=pop(); push('keccak(mem['+off+'..+'+len+'])');} else if(op==='SLOAD'){const slot=pop(); push('sload['+slot+']');} else if(op==='SSTORE'){const slot=pop(),val=pop(); console.log('SSTORE',ins.pc,{slot,val});} else if(op==='CALLER') push('CALLER'); else if(op==='ADDRESS') push('ADDRESS'); else if(op==='GAS') push('GAS'); else if(op==='CALLDATALOAD'){const off=pop(); push('calldata['+off+']');} else if(op==='CALLDATACOPY'){const m=pop(),c=pop(),l=pop(); mem[m]='calldata['+c+'..+'+l+']';} else if(op==='CALL'){const gas=pop(),to=pop(),value=pop(),inOff=pop(),inSize=pop(),outOff=pop(),outSize=pop(); console.log('CALL',ins.pc,{gas,to,value,inOff,inSize,outOff,outSize}); push('callret');} else if(op==='JUMPI'){pop(); pop();} else if(op==='JUMPDEST'){} else {console.log('unhandled',ins.pc,op);break;}}
NODE" in /tmp/codex-catjv7v7
 succeeded in 0ms:
SSTORE 903 {
  slot: 'keccak(mem[0x00..+((0x00 ADD 0x20) ADD 0x20)])',
  val: 'memPtr'
}
CALL 1028 {
  gas: '(((0x20 DIV (mem[zero] ADD 0x1f)) MUL 0x0f) ADD 0x03)',
  to: '0x04',
  value: '0x00',
  inOff: '(zero ADD 0x20)',
  inSize: 'mem[zero]',
  outOff: '((((((mem[0x40] ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20)',
  outSize: 'mem[zero]'
}
CALL 1096 {
  gas: '(0x61da SUB GAS)',
  to: '(arg2b AND (0x01 SUB (0xa0 EXP 0x02)))',
  value: '0x00',
  inOff: 'mem[0x40]',
  inSize: '(mem[0x40] SUB (((mem[zero] AND 0x1f) SUB (((((((mem[0x40] ADD 0x04) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD 0x20) ADD mem[zero])) ADD 0x20))',
  outOff: 'mem[0x40]',
  outSize: '0x00'
}

codex
{"no_findings":false,"summary":"The bytecode bundle is not consistent with a normal ERC20 implementation. The strongest issue is that selector 0xa9059cbb dispatches into approval/callback-style logic rather than an obvious balance-moving transfer path, and that path performs a state write before an unguarded external CALL. No proxy, delegatecall, or upgrade-slot behavior was evidenced in the bundle.","findings":[{"severity":"high","category":"auth","title":"Selector 0xa9059cbb appears to grant authorization and invoke a callback instead of performing an ERC20 transfer","exploit_scenario":"An integration or user that treats this contract as ERC20-compatible may call selector 0xa9059cbb expecting `transfer(address,uint256)`. In this bytecode, that selector reaches a path that decodes extra dynamic calldata, writes state, then constructs calldata headed by 0x8f4ffcb1 and CALLs a computed target. A malicious recipient/spender contract could use that callback to act on the newly granted authorization, so the caller can end up approving and interacting with an external contract instead of transferring tokens.","recommendation":"Do not expose non-transfer semantics behind 0xa9059cbb. If this is intended approval/callback behavior, move it to a distinct selector and keep 0xa9059cbb as a pure balance-moving transfer. Add explicit eventing and clear ABI separation so wallets/integrations cannot be tricked into granting approvals.","evidence":"Dispatcher bytes at pc 0x56-0x60 route selector 0xa9059cbb to pc 0x2c5. That branch checks caller balance (pc 0x2c5-0x2ef), decodes a dynamic bytes payload from calldata offset 0x44 (pc 0x2f4-0x336), performs an SSTORE before any external interaction (pc 0x387), then builds calldata with selector 0x8f4ffcb1 (pc 0x396) and issues CALL at pc 0x448. By contrast, the evident balance-moving Transfer-event path is elsewhere, around pc 0x765-0x7cc. This semantic mismatch is inferred from bytecode, but the inference is strong.","locations":["selector:0xa9059cbb","pc:0x2c5","pc:0x387","pc:0x396","pc:0x448"]},{"severity":"medium","category":"reentrancy","title":"Approval/callback path performs external CALL after state mutation with no detected guard","exploit_scenario":"A malicious callback target can be passed into the 0xa9059cbb path. Because state is written before the external CALL, the callee can reenter during the callback and attempt follow-on actions such as `transferFrom` or other state-dependent flows while the contract is mid-execution. The exact slot names are unknown from raw bytecode, so the full impact is somewhat uncertain, but the bundle shows no guard detection and confirms a computed CALL target.","recommendation":"Apply checks-effects-interactions discipline: finish all validation, minimize or defer external callbacks, and add an explicit reentrancy guard around any path that both mutates authorization/accounting state and CALLs an untrusted address. If callbacks are required, isolate them behind dedicated functions with narrowly scoped state changes.","evidence":"In the 0xa9059cbb branch, an SSTORE occurs at pc 0x387 before the external CALL at pc 0x448. `auth.guards` is empty in the artifact, and detector findings validate an untrusted computed CALL target/value path. The callsite list shows the relevant CALL at pc 1096 with `target_expression_category: computed` and `returndata_checked: null`. The two other CALLs (pc 1028 and pc 1241) are consistent with identity-precompile copies, so pc 0x448 is the security-relevant callback.","locations":["selector:0xa9059cbb","pc:0x387","pc:0x448","pc:0x404","pc:0x4d9"]}]}
tokens used
107,898
Metadata
{
    "codex": {
        "ran_at": "2026-04-05T04:06:13.047797+00:00",
        "returncode": 0
    },
    "project": {
        "mode": "bytecode",
        "bytecode_length": 4002,
        "bytecode_truncated": false,
        "capability_graph_present": true,
        "analysis_artifact_present": true
    },
    "summary": "The bytecode bundle is not consistent with a normal ERC20 implementation. The strongest issue is that selector 0xa9059cbb dispatches into approval/callback-style logic rather than an obvious balance-moving transfer path, and that path performs a state write before an unguarded external CALL. No proxy, delegatecall, or upgrade-slot behavior was evidenced in the bundle.",
    "raw_final": {
        "summary": "The bytecode bundle is not consistent with a normal ERC20 implementation. The strongest issue is that selector 0xa9059cbb dispatches into approval/callback-style logic rather than an obvious balance-moving transfer path, and that path performs a state write before an unguarded external CALL. No proxy, delegatecall, or upgrade-slot behavior was evidenced in the bundle.",
        "findings": [
            {
                "title": "Selector 0xa9059cbb appears to grant authorization and invoke a callback instead of performing an ERC20 transfer",
                "category": "auth",
                "evidence": "Dispatcher bytes at pc 0x56-0x60 route selector 0xa9059cbb to pc 0x2c5. That branch checks caller balance (pc 0x2c5-0x2ef), decodes a dynamic bytes payload from calldata offset 0x44 (pc 0x2f4-0x336), performs an SSTORE before any external interaction (pc 0x387), then builds calldata with selector 0x8f4ffcb1 (pc 0x396) and issues CALL at pc 0x448. By contrast, the evident balance-moving Transfer-event path is elsewhere, around pc 0x765-0x7cc. This semantic mismatch is inferred from bytecode, but the inference is strong.",
                "severity": "high",
                "locations": [
                    "selector:0xa9059cbb",
                    "pc:0x2c5",
                    "pc:0x387",
                    "pc:0x396",
                    "pc:0x448"
                ],
                "recommendation": "Do not expose non-transfer semantics behind 0xa9059cbb. If this is intended approval/callback behavior, move it to a distinct selector and keep 0xa9059cbb as a pure balance-moving transfer. Add explicit eventing and clear ABI separation so wallets/integrations cannot be tricked into granting approvals.",
                "exploit_scenario": "An integration or user that treats this contract as ERC20-compatible may call selector 0xa9059cbb expecting `transfer(address,uint256)`. In this bytecode, that selector reaches a path that decodes extra dynamic calldata, writes state, then constructs calldata headed by 0x8f4ffcb1 and CALLs a computed target. A malicious recipient/spender contract could use that callback to act on the newly granted authorization, so the caller can end up approving and interacting with an external contract instead of transferring tokens."
            },
            {
                "title": "Approval/callback path performs external CALL after state mutation with no detected guard",
                "category": "reentrancy",
                "evidence": "In the 0xa9059cbb branch, an SSTORE occurs at pc 0x387 before the external CALL at pc 0x448. `auth.guards` is empty in the artifact, and detector findings validate an untrusted computed CALL target/value path. The callsite list shows the relevant CALL at pc 1096 with `target_expression_category: computed` and `returndata_checked: null`. The two other CALLs (pc 1028 and pc 1241) are consistent with identity-precompile copies, so pc 0x448 is the security-relevant callback.",
                "severity": "medium",
                "locations": [
                    "selector:0xa9059cbb",
                    "pc:0x387",
                    "pc:0x448",
                    "pc:0x404",
                    "pc:0x4d9"
                ],
                "recommendation": "Apply checks-effects-interactions discipline: finish all validation, minimize or defer external callbacks, and add an explicit reentrancy guard around any path that both mutates authorization/accounting state and CALLs an untrusted address. If callbacks are required, isolate them behind dedicated functions with narrowly scoped state changes.",
                "exploit_scenario": "A malicious callback target can be passed into the 0xa9059cbb path. Because state is written before the external CALL, the callee can reenter during the callback and attempt follow-on actions such as `transferFrom` or other state-dependent flows while the contract is mid-execution. The exact slot names are unknown from raw bytecode, so the full impact is somewhat uncertain, but the bundle shows no guard detection and confirms a computed CALL target."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
3
EXT*/BALANCE
0
Total opcodes
1500
Flags
No heuristic flags raised.
View cast disassembly output
00000000: PUSH1 0x60
00000002: PUSH1 0x40
00000004: MSTORE
00000005: CALLDATASIZE
00000006: ISZERO
00000007: PUSH2 0x0082
0000000a: JUMPI
0000000b: PUSH1 0xe0
0000000d: PUSH1 0x02
0000000f: EXP
00000010: PUSH1 0x00
00000012: CALLDATALOAD
00000013: DIV
00000014: PUSH4 0x06fdde03
00000019: DUP2
0000001a: EQ
0000001b: PUSH2 0x008a
0000001e: JUMPI
0000001f: DUP1
00000020: PUSH4 0x1d2bca17
00000025: EQ
00000026: PUSH2 0x00e8
00000029: JUMPI
0000002a: DUP1
0000002b: PUSH4 0x23b872dd
00000030: EQ
00000031: PUSH2 0x0212
00000034: JUMPI
00000035: DUP1
00000036: PUSH4 0x313ce567
0000003b: EQ
0000003c: PUSH2 0x0244
0000003f: JUMPI
00000040: DUP1
00000041: PUSH4 0x70a08231
00000046: EQ
00000047: PUSH2 0x0250
0000004a: JUMPI
0000004b: DUP1
0000004c: PUSH4 0x95d89b41
00000051: EQ
00000052: PUSH2 0x0268
00000055: JUMPI
00000056: DUP1
00000057: PUSH4 0xa9059cbb
0000005c: EQ
0000005d: PUSH2 0x02c5
00000060: JUMPI
00000061: DUP1
00000062: PUSH4 0xcae9ca51
00000067: EQ
00000068: PUSH2 0x02f4
0000006b: JUMPI
0000006c: DUP1
0000006d: PUSH4 0xdc3080f2
00000072: EQ
00000073: PUSH2 0x0458
00000076: JUMPI
00000077: DUP1
00000078: PUSH4 0xdd62ed3e
0000007d: EQ
0000007e: PUSH2 0x047d
00000081: JUMPI
00000082: JUMPDEST
00000083: PUSH2 0x04a1
00000086: PUSH2 0x0002
00000089: JUMP
0000008a: JUMPDEST
0000008b: PUSH2 0x04a3
0000008e: PUSH1 0x00
00000090: DUP1
00000091: SLOAD
00000092: PUSH1 0x40
00000094: DUP1
00000095: MLOAD
00000096: PUSH1 0x20
00000098: PUSH1 0x02
0000009a: PUSH1 0x01
0000009c: DUP6
0000009d: AND
0000009e: ISZERO
0000009f: PUSH2 0x0100
000000a2: MUL
000000a3: PUSH1 0x00
000000a5: NOT
000000a6: ADD
000000a7: SWAP1
000000a8: SWAP5
000000a9: AND
000000aa: SWAP4
000000ab: SWAP1
000000ac: SWAP4
000000ad: DIV
000000ae: PUSH1 0x1f
000000b0: DUP2
000000b1: ADD
000000b2: DUP5
000000b3: SWAP1
000000b4: DIV
000000b5: DUP5
000000b6: MUL
000000b7: DUP3
000000b8: ADD
000000b9: DUP5
000000ba: ADD
000000bb: SWAP1
000000bc: SWAP3
000000bd: MSTORE
000000be: DUP2
000000bf: DUP2
000000c0: MSTORE
000000c1: SWAP3
000000c2: SWAP2
000000c3: DUP4
000000c4: ADD
000000c5: DUP3
000000c6: DUP3
000000c7: DUP1
000000c8: ISZERO
000000c9: PUSH2 0x0565
000000cc: JUMPI
000000cd: DUP1
000000ce: PUSH1 0x1f
000000d0: LT
000000d1: PUSH2 0x053a
000000d4: JUMPI
000000d5: PUSH2 0x0100
000000d8: DUP1
000000d9: DUP4
000000da: SLOAD
000000db: DIV
000000dc: MUL
000000dd: DUP4
000000de: MSTORE
000000df: SWAP2
000000e0: PUSH1 0x20
000000e2: ADD
000000e3: SWAP2
000000e4: PUSH2 0x0565
000000e7: JUMP
000000e8: JUMPDEST
000000e9: PUSH1 0x40
000000eb: DUP1
000000ec: MLOAD
000000ed: PUSH1 0x20
000000ef: PUSH1 0x24
000000f1: DUP1
000000f2: CALLDATALOAD
000000f3: PUSH1 0x04
000000f5: DUP2
000000f6: DUP2
000000f7: ADD
000000f8: CALLDATALOAD
000000f9: PUSH1 0x1f
000000fb: DUP2
000000fc: ADD
000000fd: DUP6
000000fe: SWAP1
000000ff: DIV
00000100: DUP6
00000101: MUL
00000102: DUP7
00000103: ADD
00000104: DUP6
00000105: ADD
00000106: SWAP1
00000107: SWAP7
00000108: MSTORE
00000109: DUP6
0000010a: DUP6
0000010b: MSTORE
0000010c: PUSH2 0x04a1
0000010f: SWAP6
00000110: DUP2
00000111: CALLDATALOAD
00000112: SWAP6
00000113: SWAP2
00000114: SWAP5
00000115: PUSH1 0x44
00000117: SWAP5
00000118: SWAP3
00000119: SWAP4
0000011a: SWAP1
0000011b: SWAP3
0000011c: ADD
0000011d: SWAP2
0000011e: DUP2
0000011f: SWAP1
00000120: DUP5
00000121: ADD
00000122: DUP4
00000123: DUP3
00000124: DUP1
00000125: DUP3
00000126: DUP5
00000127: CALLDATACOPY
00000128: POP
00000129: POP
0000012a: PUSH1 0x40
0000012c: DUP1
0000012d: MLOAD
0000012e: PUSH1 0x20
00000130: PUSH1 0x64
00000132: CALLDATALOAD
00000133: DUP1
00000134: DUP12
00000135: ADD
00000136: CALLDATALOAD
00000137: PUSH1 0x1f
00000139: DUP2
0000013a: ADD
0000013b: DUP4
0000013c: SWAP1
0000013d: DIV
0000013e: DUP4
0000013f: MUL
00000140: DUP5
00000141: ADD
00000142: DUP4
00000143: ADD
00000144: SWAP1
00000145: SWAP5
00000146: MSTORE
00000147: DUP4
00000148: DUP4
00000149: MSTORE
0000014a: SWAP8
0000014b: SWAP10
0000014c: SWAP9
0000014d: CALLDATALOAD
0000014e: SWAP9
0000014f: SWAP8
00000150: PUSH1 0x84
00000152: SWAP8
00000153: POP
00000154: SWAP2
00000155: SWAP6
00000156: POP
00000157: PUSH1 0x24
00000159: SWAP2
0000015a: SWAP1
0000015b: SWAP2
0000015c: ADD
0000015d: SWAP4
0000015e: POP
0000015f: SWAP1
00000160: SWAP2
00000161: POP
00000162: DUP2
00000163: SWAP1
00000164: DUP5
00000165: ADD
00000166: DUP4
00000167: DUP3
00000168: DUP1
00000169: DUP3
0000016a: DUP5
0000016b: CALLDATACOPY
0000016c: POP
0000016d: SWAP5
0000016e: SWAP7
0000016f: POP
00000170: POP
00000171: POP
00000172: POP
00000173: POP
00000174: POP
00000175: POP
00000176: PUSH1 0x01
00000178: PUSH1 0xa0
0000017a: PUSH1 0x02
0000017c: EXP
0000017d: SUB
0000017e: CALLER
0000017f: AND
00000180: PUSH1 0x00
00000182: SWAP1
00000183: DUP2
00000184: MSTORE
00000185: PUSH1 0x03
00000187: PUSH1 0x20
00000189: SWAP1
0000018a: DUP2
0000018b: MSTORE
0000018c: PUSH1 0x40
0000018e: DUP3
0000018f: KECCAK256
00000190: DUP7
00000191: SWAP1
00000192: SSTORE
00000193: DUP2
00000194: SLOAD
00000195: DUP6
00000196: MLOAD
00000197: DUP4
00000198: DUP1
00000199: MSTORE
0000019a: PUSH1 0x02
0000019c: PUSH1 0x01
0000019e: DUP4
0000019f: AND
000001a0: ISZERO
000001a1: PUSH2 0x0100
000001a4: MUL
000001a5: PUSH1 0x00
000001a7: NOT
000001a8: ADD
000001a9: SWAP1
000001aa: SWAP3
000001ab: AND
000001ac: SWAP2
000001ad: SWAP1
000001ae: SWAP2
000001af: DIV
000001b0: PUSH1 0x1f
000001b2: SWAP1
000001b3: DUP2
000001b4: ADD
000001b5: DUP4
000001b6: SWAP1
000001b7: DIV
000001b8: PUSH32 0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563
000001d9: SWAP1
000001da: DUP2
000001db: ADD
000001dc: SWAP4
000001dd: SWAP1
000001de: SWAP2
000001df: SWAP1
000001e0: DUP9
000001e1: ADD
000001e2: SWAP1
000001e3: DUP4
000001e4: SWAP1
000001e5: LT
000001e6: PUSH2 0x066d
000001e9: JUMPI
000001ea: DUP1
000001eb: MLOAD
000001ec: PUSH1 0xff
000001ee: NOT
000001ef: AND
000001f0: DUP4
000001f1: DUP1
000001f2: ADD
000001f3: OR
000001f4: DUP6
000001f5: SSTORE
000001f6: JUMPDEST
000001f7: POP
000001f8: PUSH2 0x069d
000001fb: SWAP3
000001fc: SWAP2
000001fd: POP
000001fe: JUMPDEST
000001ff: DUP1
00000200: DUP3
00000201: GT
00000202: ISZERO
00000203: PUSH2 0x06f6
00000206: JUMPI
00000207: PUSH1 0x00
00000209: DUP2
0000020a: SSTORE
0000020b: PUSH1 0x01
0000020d: ADD
0000020e: PUSH2 0x01fe
00000211: JUMP
00000212: JUMPDEST
00000213: PUSH2 0x0511
00000216: PUSH1 0x04
00000218: CALLDATALOAD
00000219: PUSH1 0x24
0000021b: CALLDATALOAD
0000021c: PUSH1 0x44
0000021e: CALLDATALOAD
0000021f: PUSH1 0x01
00000221: PUSH1 0xa0
00000223: PUSH1 0x02
00000225: EXP
00000226: SUB
00000227: DUP4
00000228: AND
00000229: PUSH1 0x00
0000022b: SWAP1
0000022c: DUP2
0000022d: MSTORE
0000022e: PUSH1 0x03
00000230: PUSH1 0x20
00000232: MSTORE
00000233: PUSH1 0x40
00000235: DUP2
00000236: KECCAK256
00000237: SLOAD
00000238: DUP3
00000239: SWAP1
0000023a: LT
0000023b: ISZERO
0000023c: PUSH2 0x056d
0000023f: JUMPI
00000240: PUSH2 0x0002
00000243: JUMP
00000244: JUMPDEST
00000245: PUSH2 0x0523
00000248: PUSH1 0x02
0000024a: SLOAD
0000024b: PUSH1 0xff
0000024d: AND
0000024e: DUP2
0000024f: JUMP
00000250: JUMPDEST
00000251: PUSH2 0x0511
00000254: PUSH1 0x04
00000256: CALLDATALOAD
00000257: PUSH1 0x03
00000259: PUSH1 0x20
0000025b: MSTORE
0000025c: PUSH1 0x00
0000025e: SWAP1
0000025f: DUP2
00000260: MSTORE
00000261: PUSH1 0x40
00000263: SWAP1
00000264: KECCAK256
00000265: SLOAD
00000266: DUP2
00000267: JUMP
00000268: JUMPDEST
00000269: PUSH2 0x04a3
0000026c: PUSH1 0x01
0000026e: DUP1
0000026f: SLOAD
00000270: PUSH1 0x40
00000272: DUP1
00000273: MLOAD
00000274: PUSH1 0x20
00000276: PUSH1 0x02
00000278: DUP5
00000279: DUP7
0000027a: AND
0000027b: ISZERO
0000027c: PUSH2 0x0100
0000027f: MUL
00000280: PUSH1 0x00
00000282: NOT
00000283: ADD
00000284: SWAP1
00000285: SWAP5
00000286: AND
00000287: SWAP4
00000288: SWAP1
00000289: SWAP4
0000028a: DIV
0000028b: PUSH1 0x1f
0000028d: DUP2
0000028e: ADD
0000028f: DUP5
00000290: SWAP1
00000291: DIV
00000292: DUP5
00000293: MUL
00000294: DUP3
00000295: ADD
00000296: DUP5
00000297: ADD
00000298: SWAP1
00000299: SWAP3
0000029a: MSTORE
0000029b: DUP2
0000029c: DUP2
0000029d: MSTORE
0000029e: SWAP3
0000029f: SWAP2
000002a0: DUP4
000002a1: ADD
000002a2: DUP3
000002a3: DUP3
000002a4: DUP1
000002a5: ISZERO
000002a6: PUSH2 0x0565
000002a9: JUMPI
000002aa: DUP1
000002ab: PUSH1 0x1f
000002ad: LT
000002ae: PUSH2 0x053a
000002b1: JUMPI
000002b2: PUSH2 0x0100
000002b5: DUP1
000002b6: DUP4
000002b7: SLOAD
000002b8: DIV
000002b9: MUL
000002ba: DUP4
000002bb: MSTORE
000002bc: SWAP2
000002bd: PUSH1 0x20
000002bf: ADD
000002c0: SWAP2
000002c1: PUSH2 0x0565
000002c4: JUMP
000002c5: JUMPDEST
000002c6: PUSH2 0x04a1
000002c9: PUSH1 0x04
000002cb: CALLDATALOAD
000002cc: PUSH1 0x24
000002ce: CALLDATALOAD
000002cf: PUSH1 0x01
000002d1: PUSH1 0xa0
000002d3: PUSH1 0x02
000002d5: EXP
000002d6: SUB
000002d7: CALLER
000002d8: AND
000002d9: PUSH1 0x00
000002db: SWAP1
000002dc: DUP2
000002dd: MSTORE
000002de: PUSH1 0x03
000002e0: PUSH1 0x20
000002e2: MSTORE
000002e3: PUSH1 0x40
000002e5: SWAP1
000002e6: KECCAK256
000002e7: SLOAD
000002e8: DUP2
000002e9: SWAP1
000002ea: LT
000002eb: ISZERO
000002ec: PUSH2 0x073e
000002ef: JUMPI
000002f0: PUSH2 0x0002
000002f3: JUMP
000002f4: JUMPDEST
000002f5: PUSH1 0x40
000002f7: DUP1
000002f8: MLOAD
000002f9: PUSH1 0x20
000002fb: PUSH1 0x44
000002fd: CALLDATALOAD
000002fe: PUSH1 0x04
00000300: DUP2
00000301: DUP2
00000302: ADD
00000303: CALLDATALOAD
00000304: PUSH1 0x1f
00000306: DUP2
00000307: ADD
00000308: DUP5
00000309: SWAP1
0000030a: DIV
0000030b: DUP5
0000030c: MUL
0000030d: DUP6
0000030e: ADD
0000030f: DUP5
00000310: ADD
00000311: SWAP1
00000312: SWAP6
00000313: MSTORE
00000314: DUP5
00000315: DUP5
00000316: MSTORE
00000317: PUSH2 0x0511
0000031a: SWAP5
0000031b: DUP2
0000031c: CALLDATALOAD
0000031d: SWAP5
0000031e: PUSH1 0x24
00000320: DUP1
00000321: CALLDATALOAD
00000322: SWAP6
00000323: SWAP4
00000324: SWAP5
00000325: PUSH1 0x64
00000327: SWAP5
00000328: SWAP3
00000329: SWAP4
0000032a: SWAP2
0000032b: ADD
0000032c: SWAP2
0000032d: DUP2
0000032e: SWAP1
0000032f: DUP5
00000330: ADD
00000331: DUP4
00000332: DUP3
00000333: DUP1
00000334: DUP3
00000335: DUP5
00000336: CALLDATACOPY
00000337: POP
00000338: SWAP5
00000339: SWAP7
0000033a: POP
0000033b: POP
0000033c: POP
0000033d: POP
0000033e: POP
0000033f: POP
00000340: POP
00000341: PUSH1 0x00
00000343: PUSH1 0x00
00000345: DUP4
00000346: PUSH1 0x04
00000348: PUSH1 0x00
0000034a: POP
0000034b: PUSH1 0x00
0000034d: CALLER
0000034e: PUSH1 0x01
00000350: PUSH1 0xa0
00000352: PUSH1 0x02
00000354: EXP
00000355: SUB
00000356: AND
00000357: DUP2
00000358: MSTORE
00000359: PUSH1 0x20
0000035b: ADD
0000035c: SWAP1
0000035d: DUP2
0000035e: MSTORE
0000035f: PUSH1 0x20
00000361: ADD
00000362: PUSH1 0x00
00000364: KECCAK256
00000365: PUSH1 0x00
00000367: POP
00000368: PUSH1 0x00
0000036a: DUP8
0000036b: PUSH1 0x01
0000036d: PUSH1 0xa0
0000036f: PUSH1 0x02
00000371: EXP
00000372: SUB
00000373: AND
00000374: DUP2
00000375: MSTORE
00000376: PUSH1 0x20
00000378: ADD
00000379: SWAP1
0000037a: DUP2
0000037b: MSTORE
0000037c: PUSH1 0x20
0000037e: ADD
0000037f: PUSH1 0x00
00000381: KECCAK256
00000382: PUSH1 0x00
00000384: POP
00000385: DUP2
00000386: SWAP1
00000387: SSTORE
00000388: POP
00000389: DUP5
0000038a: SWAP1
0000038b: POP
0000038c: DUP1
0000038d: PUSH1 0x01
0000038f: PUSH1 0xa0
00000391: PUSH1 0x02
00000393: EXP
00000394: SUB
00000395: AND
00000396: PUSH4 0x8f4ffcb1
0000039b: CALLER
0000039c: DUP7
0000039d: ADDRESS
0000039e: DUP8
0000039f: PUSH1 0x40
000003a1: MLOAD
000003a2: DUP6
000003a3: PUSH1 0xe0
000003a5: PUSH1 0x02
000003a7: EXP
000003a8: MUL
000003a9: DUP2
000003aa: MSTORE
000003ab: PUSH1 0x04
000003ad: ADD
000003ae: DUP1
000003af: DUP6
000003b0: PUSH1 0x01
000003b2: PUSH1 0xa0
000003b4: PUSH1 0x02
000003b6: EXP
000003b7: SUB
000003b8: AND
000003b9: DUP2
000003ba: MSTORE
000003bb: PUSH1 0x20
000003bd: ADD
000003be: DUP5
000003bf: DUP2
000003c0: MSTORE
000003c1: PUSH1 0x20
000003c3: ADD
000003c4: DUP4
000003c5: PUSH1 0x01
000003c7: PUSH1 0xa0
000003c9: PUSH1 0x02
000003cb: EXP
000003cc: SUB
000003cd: AND
000003ce: DUP2
000003cf: MSTORE
000003d0: PUSH1 0x20
000003d2: ADD
000003d3: DUP1
000003d4: PUSH1 0x20
000003d6: ADD
000003d7: DUP3
000003d8: DUP2
000003d9: SUB
000003da: DUP3
000003db: MSTORE
000003dc: DUP4
000003dd: DUP2
000003de: DUP2
000003df: MLOAD
000003e0: DUP2
000003e1: MSTORE
000003e2: PUSH1 0x20
000003e4: ADD
000003e5: SWAP2
000003e6: POP
000003e7: DUP1
000003e8: MLOAD
000003e9: SWAP1
000003ea: PUSH1 0x20
000003ec: ADD
000003ed: SWAP1
000003ee: DUP1
000003ef: DUP4
000003f0: DUP4
000003f1: DUP3
000003f2: SWAP1
000003f3: PUSH1 0x00
000003f5: PUSH1 0x04
000003f7: PUSH1 0x20
000003f9: DUP5
000003fa: PUSH1 0x1f
000003fc: ADD
000003fd: DIV
000003fe: PUSH1 0x0f
00000400: MUL
00000401: PUSH1 0x03
00000403: ADD
00000404: CALL
00000405: POP
00000406: SWAP1
00000407: POP
00000408: SWAP1
00000409: DUP2
0000040a: ADD
0000040b: SWAP1
0000040c: PUSH1 0x1f
0000040e: AND
0000040f: DUP1
00000410: ISZERO
00000411: PUSH2 0x042e
00000414: JUMPI
00000415: DUP1
00000416: DUP3
00000417: SUB
00000418: DUP1
00000419: MLOAD
0000041a: PUSH1 0x01
0000041c: DUP4
0000041d: PUSH1 0x20
0000041f: SUB
00000420: PUSH2 0x0100
00000423: EXP
00000424: SUB
00000425: NOT
00000426: AND
00000427: DUP2
00000428: MSTORE
00000429: PUSH1 0x20
0000042b: ADD
0000042c: SWAP2
0000042d: POP
0000042e: JUMPDEST
0000042f: POP
00000430: SWAP6
00000431: POP
00000432: POP
00000433: POP
00000434: POP
00000435: POP
00000436: POP
00000437: PUSH1 0x00
00000439: PUSH1 0x40
0000043b: MLOAD
0000043c: DUP1
0000043d: DUP4
0000043e: SUB
0000043f: DUP2
00000440: PUSH1 0x00
00000442: DUP8
00000443: PUSH2 0x61da
00000446: GAS
00000447: SUB
00000448: CALL
00000449: ISZERO
0000044a: PUSH2 0x0002
0000044d: JUMPI
0000044e: POP
0000044f: POP
00000450: POP
00000451: POP
00000452: SWAP4
00000453: SWAP3
00000454: POP
00000455: POP
00000456: POP
00000457: JUMP
00000458: JUMPDEST
00000459: PUSH1 0x05
0000045b: PUSH1 0x20
0000045d: SWAP1
0000045e: DUP2
0000045f: MSTORE
00000460: PUSH1 0x04
00000462: CALLDATALOAD
00000463: PUSH1 0x00
00000465: SWAP1
00000466: DUP2
00000467: MSTORE
00000468: PUSH1 0x40
0000046a: DUP1
0000046b: DUP3
0000046c: KECCAK256
0000046d: SWAP1
0000046e: SWAP3
0000046f: MSTORE
00000470: PUSH1 0x24
00000472: CALLDATALOAD
00000473: DUP2
00000474: MSTORE
00000475: KECCAK256
00000476: SLOAD
00000477: PUSH2 0x0511
0000047a: SWAP1
0000047b: DUP2
0000047c: JUMP
0000047d: JUMPDEST
0000047e: PUSH1 0x04
00000480: PUSH1 0x20
00000482: DUP2
00000483: DUP2
00000484: MSTORE
00000485: SWAP1
00000486: CALLDATALOAD
00000487: PUSH1 0x00
00000489: SWAP1
0000048a: DUP2
0000048b: MSTORE
0000048c: PUSH1 0x40
0000048e: DUP1
0000048f: DUP3
00000490: KECCAK256
00000491: SWAP1
00000492: SWAP3
00000493: MSTORE
00000494: PUSH1 0x24
00000496: CALLDATALOAD
00000497: DUP2
00000498: MSTORE
00000499: KECCAK256
0000049a: SLOAD
0000049b: PUSH2 0x0511
0000049e: SWAP1
0000049f: DUP2
000004a0: JUMP
000004a1: JUMPDEST
000004a2: STOP
000004a3: JUMPDEST
000004a4: PUSH1 0x40
000004a6: MLOAD
000004a7: DUP1
000004a8: DUP1
000004a9: PUSH1 0x20
000004ab: ADD
000004ac: DUP3
000004ad: DUP2
000004ae: SUB
000004af: DUP3
000004b0: MSTORE
000004b1: DUP4
000004b2: DUP2
000004b3: DUP2
000004b4: MLOAD
000004b5: DUP2
000004b6: MSTORE
000004b7: PUSH1 0x20
000004b9: ADD
000004ba: SWAP2
000004bb: POP
000004bc: DUP1
000004bd: MLOAD
000004be: SWAP1
000004bf: PUSH1 0x20
000004c1: ADD
000004c2: SWAP1
000004c3: DUP1
000004c4: DUP4
000004c5: DUP4
000004c6: DUP3
000004c7: SWAP1
000004c8: PUSH1 0x00
000004ca: PUSH1 0x04
000004cc: PUSH1 0x20
000004ce: DUP5
000004cf: PUSH1 0x1f
000004d1: ADD
000004d2: DIV
000004d3: PUSH1 0x0f
000004d5: MUL
000004d6: PUSH1 0x03
000004d8: ADD
000004d9: CALL
000004da: POP
000004db: SWAP1
000004dc: POP
000004dd: SWAP1
000004de: DUP2
000004df: ADD
000004e0: SWAP1
000004e1: PUSH1 0x1f
000004e3: AND
000004e4: DUP1
000004e5: ISZERO
000004e6: PUSH2 0x0503
000004e9: JUMPI
000004ea: DUP1
000004eb: DUP3
000004ec: SUB
000004ed: DUP1
000004ee: MLOAD
000004ef: PUSH1 0x01
000004f1: DUP4
000004f2: PUSH1 0x20
000004f4: SUB
000004f5: PUSH2 0x0100
000004f8: EXP
000004f9: SUB
000004fa: NOT
000004fb: AND
000004fc: DUP2
000004fd: MSTORE
000004fe: PUSH1 0x20
00000500: ADD
00000501: SWAP2
00000502: POP
00000503: JUMPDEST
00000504: POP
00000505: SWAP3
00000506: POP
00000507: POP
00000508: POP
00000509: PUSH1 0x40
0000050b: MLOAD
0000050c: DUP1
0000050d: SWAP2
0000050e: SUB
0000050f: SWAP1
00000510: RETURN
00000511: JUMPDEST
00000512: PUSH1 0x40
00000514: DUP1
00000515: MLOAD
00000516: SWAP2
00000517: DUP3
00000518: MSTORE
00000519: MLOAD
0000051a: SWAP1
0000051b: DUP2
0000051c: SWAP1
0000051d: SUB
0000051e: PUSH1 0x20
00000520: ADD
00000521: SWAP1
00000522: RETURN
00000523: JUMPDEST
00000524: PUSH1 0x40
00000526: DUP1
00000527: MLOAD
00000528: PUSH1 0xff
0000052a: SWAP3
0000052b: SWAP1
0000052c: SWAP3
0000052d: AND
0000052e: DUP3
0000052f: MSTORE
00000530: MLOAD
00000531: SWAP1
00000532: DUP2
00000533: SWAP1
00000534: SUB
00000535: PUSH1 0x20
00000537: ADD
00000538: SWAP1
00000539: RETURN
0000053a: JUMPDEST
0000053b: DUP3
0000053c: ADD
0000053d: SWAP2
0000053e: SWAP1
0000053f: PUSH1 0x00
00000541: MSTORE
00000542: PUSH1 0x20
00000544: PUSH1 0x00
00000546: KECCAK256
00000547: SWAP1
00000548: JUMPDEST
00000549: DUP2
0000054a: SLOAD
0000054b: DUP2
0000054c: MSTORE
0000054d: SWAP1
0000054e: PUSH1 0x01
00000550: ADD
00000551: SWAP1
00000552: PUSH1 0x20
00000554: ADD
00000555: DUP1
00000556: DUP4
00000557: GT
00000558: PUSH2 0x0548
0000055b: JUMPI
0000055c: DUP3
0000055d: SWAP1
0000055e: SUB
0000055f: PUSH1 0x1f
00000561: AND
00000562: DUP3
00000563: ADD
00000564: SWAP2
00000565: JUMPDEST
00000566: POP
00000567: POP
00000568: POP
00000569: POP
0000056a: POP
0000056b: DUP2
0000056c: JUMP
0000056d: JUMPDEST
0000056e: PUSH1 0x01
00000570: PUSH1 0xa0
00000572: PUSH1 0x02
00000574: EXP
00000575: SUB
00000576: DUP4
00000577: AND
00000578: PUSH1 0x00
0000057a: SWAP1
0000057b: DUP2
0000057c: MSTORE
0000057d: PUSH1 0x03
0000057f: PUSH1 0x20
00000581: MSTORE
00000582: PUSH1 0x40
00000584: SWAP1
00000585: KECCAK256
00000586: SLOAD
00000587: DUP3
00000588: DUP2
00000589: ADD
0000058a: LT
0000058b: ISZERO
0000058c: PUSH2 0x0594
0000058f: JUMPI
00000590: PUSH2 0x0002
00000593: JUMP
00000594: JUMPDEST
00000595: PUSH1 0x01
00000597: PUSH1 0xa0
00000599: PUSH1 0x02
0000059b: EXP
0000059c: SUB
0000059d: DUP5
0000059e: DUP2
0000059f: AND
000005a0: PUSH1 0x00
000005a2: DUP2
000005a3: DUP2
000005a4: MSTORE
000005a5: PUSH1 0x04
000005a7: PUSH1 0x20
000005a9: SWAP1
000005aa: DUP2
000005ab: MSTORE
000005ac: PUSH1 0x40
000005ae: DUP1
000005af: DUP4
000005b0: KECCAK256
000005b1: CALLER
000005b2: SWAP6
000005b3: SWAP1
000005b4: SWAP6
000005b5: AND
000005b6: DUP1
000005b7: DUP5
000005b8: MSTORE
000005b9: SWAP5
000005ba: DUP3
000005bb: MSTORE
000005bc: DUP1
000005bd: DUP4
000005be: KECCAK256
000005bf: SLOAD
000005c0: SWAP4
000005c1: DUP4
000005c2: MSTORE
000005c3: PUSH1 0x05
000005c5: DUP3
000005c6: MSTORE
000005c7: DUP1
000005c8: DUP4
000005c9: KECCAK256
000005ca: SWAP5
000005cb: DUP4
000005cc: MSTORE
000005cd: SWAP4
000005ce: SWAP1
000005cf: MSTORE
000005d0: SWAP2
000005d1: SWAP1
000005d2: SWAP2
000005d3: KECCAK256
000005d4: SLOAD
000005d5: DUP4
000005d6: ADD
000005d7: GT
000005d8: ISZERO
000005d9: PUSH2 0x05e1
000005dc: JUMPI
000005dd: PUSH2 0x0002
000005e0: JUMP
000005e1: JUMPDEST
000005e2: PUSH1 0x01
000005e4: PUSH1 0xa0
000005e6: PUSH1 0x02
000005e8: EXP
000005e9: SUB
000005ea: DUP5
000005eb: DUP2
000005ec: AND
000005ed: PUSH1 0x00
000005ef: DUP2
000005f0: DUP2
000005f1: MSTORE
000005f2: PUSH1 0x03
000005f4: PUSH1 0x20
000005f6: SWAP1
000005f7: DUP2
000005f8: MSTORE
000005f9: PUSH1 0x40
000005fb: DUP1
000005fc: DUP4
000005fd: KECCAK256
000005fe: DUP1
000005ff: SLOAD
00000600: DUP9
00000601: SWAP1
00000602: SUB
00000603: SWAP1
00000604: SSTORE
00000605: DUP8
00000606: DUP6
00000607: AND
00000608: DUP1
00000609: DUP5
0000060a: MSTORE
0000060b: DUP2
0000060c: DUP5
0000060d: KECCAK256
0000060e: DUP1
0000060f: SLOAD
00000610: DUP10
00000611: ADD
00000612: SWAP1
00000613: SSTORE
00000614: SWAP4
00000615: DUP4
00000616: MSTORE
00000617: PUSH1 0x05
00000619: DUP3
0000061a: MSTORE
0000061b: DUP1
0000061c: DUP4
0000061d: KECCAK256
0000061e: CALLER
0000061f: SWAP6
00000620: SWAP1
00000621: SWAP6
00000622: AND
00000623: DUP1
00000624: DUP5
00000625: MSTORE
00000626: SWAP5
00000627: DUP3
00000628: MSTORE
00000629: SWAP2
0000062a: DUP3
0000062b: SWAP1
0000062c: KECCAK256
0000062d: DUP1
0000062e: SLOAD
0000062f: DUP8
00000630: ADD
00000631: SWAP1
00000632: SSTORE
00000633: DUP2
00000634: MLOAD
00000635: DUP7
00000636: DUP2
00000637: MSTORE
00000638: SWAP2
00000639: MLOAD
0000063a: SWAP3
0000063b: SWAP4
0000063c: SWAP3
0000063d: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
0000065e: SWAP3
0000065f: DUP2
00000660: SWAP1
00000661: SUB
00000662: SWAP1
00000663: SWAP2
00000664: ADD
00000665: SWAP1
00000666: LOG3
00000667: SWAP4
00000668: SWAP3
00000669: POP
0000066a: POP
0000066b: POP
0000066c: JUMP
0000066d: JUMPDEST
0000066e: DUP3
0000066f: DUP1
00000670: ADD
00000671: PUSH1 0x01
00000673: ADD
00000674: DUP6
00000675: SSTORE
00000676: DUP3
00000677: ISZERO
00000678: PUSH2 0x01f6
0000067b: JUMPI
0000067c: SWAP2
0000067d: DUP3
0000067e: ADD
0000067f: JUMPDEST
00000680: DUP3
00000681: DUP2
00000682: GT
00000683: ISZERO
00000684: PUSH2 0x01f6
00000687: JUMPI
00000688: DUP3
00000689: MLOAD
0000068a: DUP3
0000068b: PUSH1 0x00
0000068d: POP
0000068e: SSTORE
0000068f: SWAP2
00000690: PUSH1 0x20
00000692: ADD
00000693: SWAP2
00000694: SWAP1
00000695: PUSH1 0x01
00000697: ADD
00000698: SWAP1
00000699: PUSH2 0x067f
0000069c: JUMP
0000069d: JUMPDEST
0000069e: POP
0000069f: POP
000006a0: DUP1
000006a1: PUSH1 0x01
000006a3: PUSH1 0x00
000006a5: POP
000006a6: SWAP1
000006a7: DUP1
000006a8: MLOAD
000006a9: SWAP1
000006aa: PUSH1 0x20
000006ac: ADD
000006ad: SWAP1
000006ae: DUP3
000006af: DUP1
000006b0: SLOAD
000006b1: PUSH1 0x01
000006b3: DUP2
000006b4: PUSH1 0x01
000006b6: AND
000006b7: ISZERO
000006b8: PUSH2 0x0100
000006bb: MUL
000006bc: SUB
000006bd: AND
000006be: PUSH1 0x02
000006c0: SWAP1
000006c1: DIV
000006c2: SWAP1
000006c3: PUSH1 0x00
000006c5: MSTORE
000006c6: PUSH1 0x20
000006c8: PUSH1 0x00
000006ca: KECCAK256
000006cb: SWAP1
000006cc: PUSH1 0x1f
000006ce: ADD
000006cf: PUSH1 0x20
000006d1: SWAP1
000006d2: DIV
000006d3: DUP2
000006d4: ADD
000006d5: SWAP3
000006d6: DUP3
000006d7: PUSH1 0x1f
000006d9: LT
000006da: PUSH2 0x06fa
000006dd: JUMPI
000006de: DUP1
000006df: MLOAD
000006e0: PUSH1 0xff
000006e2: NOT
000006e3: AND
000006e4: DUP4
000006e5: DUP1
000006e6: ADD
000006e7: OR
000006e8: DUP6
000006e9: SSTORE
000006ea: JUMPDEST
000006eb: POP
000006ec: PUSH2 0x072a
000006ef: SWAP3
000006f0: SWAP2
000006f1: POP
000006f2: PUSH2 0x01fe
000006f5: JUMP
000006f6: JUMPDEST
000006f7: POP
000006f8: SWAP1
000006f9: JUMP
000006fa: JUMPDEST
000006fb: DUP3
000006fc: DUP1
000006fd: ADD
000006fe: PUSH1 0x01
00000700: ADD
00000701: DUP6
00000702: SSTORE
00000703: DUP3
00000704: ISZERO
00000705: PUSH2 0x06ea
00000708: JUMPI
00000709: SWAP2
0000070a: DUP3
0000070b: ADD
0000070c: JUMPDEST
0000070d: DUP3
0000070e: DUP2
0000070f: GT
00000710: ISZERO
00000711: PUSH2 0x06ea
00000714: JUMPI
00000715: DUP3
00000716: MLOAD
00000717: DUP3
00000718: PUSH1 0x00
0000071a: POP
0000071b: SSTORE
0000071c: SWAP2
0000071d: PUSH1 0x20
0000071f: ADD
00000720: SWAP2
00000721: SWAP1
00000722: PUSH1 0x01
00000724: ADD
00000725: SWAP1
00000726: PUSH2 0x070c
00000729: JUMP
0000072a: JUMPDEST
0000072b: POP
0000072c: POP
0000072d: PUSH1 0x02
0000072f: DUP1
00000730: SLOAD
00000731: PUSH1 0xff
00000733: NOT
00000734: AND
00000735: DUP4
00000736: OR
00000737: SWAP1
00000738: SSTORE
00000739: POP
0000073a: POP
0000073b: POP
0000073c: POP
0000073d: JUMP
0000073e: JUMPDEST
0000073f: PUSH1 0x01
00000741: PUSH1 0xa0
00000743: PUSH1 0x02
00000745: EXP
00000746: SUB
00000747: DUP3
00000748: AND
00000749: PUSH1 0x00
0000074b: SWAP1
0000074c: DUP2
0000074d: MSTORE
0000074e: PUSH1 0x03
00000750: PUSH1 0x20
00000752: MSTORE
00000753: PUSH1 0x40
00000755: SWAP1
00000756: KECCAK256
00000757: SLOAD
00000758: DUP2
00000759: DUP2
0000075a: ADD
0000075b: LT
0000075c: ISZERO
0000075d: PUSH2 0x0765
00000760: JUMPI
00000761: PUSH2 0x0002
00000764: JUMP
00000765: JUMPDEST
00000766: PUSH1 0x01
00000768: PUSH1 0xa0
0000076a: PUSH1 0x02
0000076c: EXP
0000076d: SUB
0000076e: CALLER
0000076f: DUP2
00000770: AND
00000771: PUSH1 0x00
00000773: DUP2
00000774: DUP2
00000775: MSTORE
00000776: PUSH1 0x03
00000778: PUSH1 0x20
0000077a: SWAP1
0000077b: DUP2
0000077c: MSTORE
0000077d: PUSH1 0x40
0000077f: DUP1
00000780: DUP4
00000781: KECCAK256
00000782: DUP1
00000783: SLOAD
00000784: DUP8
00000785: SWAP1
00000786: SUB
00000787: SWAP1
00000788: SSTORE
00000789: SWAP4
0000078a: DUP7
0000078b: AND
0000078c: DUP1
0000078d: DUP4
0000078e: MSTORE
0000078f: SWAP2
00000790: DUP5
00000791: SWAP1
00000792: KECCAK256
00000793: DUP1
00000794: SLOAD
00000795: DUP7
00000796: ADD
00000797: SWAP1
00000798: SSTORE
00000799: DUP4
0000079a: MLOAD
0000079b: DUP6
0000079c: DUP2
0000079d: MSTORE
0000079e: SWAP4
0000079f: MLOAD
000007a0: SWAP2
000007a1: SWAP4
000007a2: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
000007c3: SWAP3
000007c4: SWAP1
000007c5: DUP2
000007c6: SWAP1
000007c7: SUB
000007c8: SWAP1
000007c9: SWAP2
000007ca: ADD
000007cb: SWAP1
000007cc: LOG3
000007cd: POP
000007ce: POP
000007cf: JUMP
View stderr
Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment.

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high other detector Untrusted CALL target/value reachable 60 yes yes
view
trace_id: 0x67a2c62fd0e7b09d083bf30845ac3dd47357d36abe5bc3e87930a3c7e8e8849f
call_targets: 0x0000000000000000000000000000000000000004, 0x5fa85a5d220be1391eaeb66542f7e0afd6e461a9
target_varies: yes
classification: target_varies
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "confirmed",
    "attempts": 1,
    "trace_id": "0x67a2c62fd0e7b09d083bf30845ac3dd47357d36abe5bc3e87930a3c7e8e8849f",
    "confirmed": true,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x0000000000000000000000000000000000000004",
        "0x5fa85a5d220be1391eaeb66542f7e0afd6e461a9"
    ],
    "matched_probe": null,
    "target_varies": true,
    "classification": "target_varies"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0x06fdde03",
            "selector": "0x06fdde03",
            "calldata_variants": [
                "0x06fdde03",
                "0x06fdde030000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x1d2bca17",
            "selector": "0x1d2bca17",
            "calldata_variants": [
                "0x1d2bca17",
                "0x1d2bca170000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x23b872dd",
            "selector": "0x23b872dd",
            "calldata_variants": [
                "0x23b872dd",
                "0x23b872dd0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x313ce567",
            "selector": "0x313ce567",
            "calldata_variants": [
                "0x313ce567",
                "0x313ce5670000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x70a08231",
            "selector": "0x70a08231",
            "calldata_variants": [
                "0x70a08231",
                "0x70a082310000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x95d89b41",
            "selector": "0x95d89b41",
            "calldata_variants": [
                "0x95d89b41",
                "0x95d89b410000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa9059cbb",
            "selector": "0xa9059cbb",
            "calldata_variants": [
                "0xa9059cbb",
                "0xa9059cbb0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xcae9ca51",
            "selector": "0xcae9ca51",
            "calldata_variants": [
                "0xcae9ca51",
                "0xcae9ca510000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 1028,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 1096,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 1241,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 3,
    "guards_detected": [],
    "untrusted_call_count": 3
}
high other detector ETH value transfer possible 55 yes yes
view
trace_id: 0x67a2c62fd0e7b09d083bf30845ac3dd47357d36abe5bc3e87930a3c7e8e8849f
call_targets: 0x0000000000000000000000000000000000000004, 0x5fa85a5d220be1391eaeb66542f7e0afd6e461a9
target_varies: yes
classification: target_varies
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "confirmed",
    "attempts": 1,
    "trace_id": "0x67a2c62fd0e7b09d083bf30845ac3dd47357d36abe5bc3e87930a3c7e8e8849f",
    "confirmed": true,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x0000000000000000000000000000000000000004",
        "0x5fa85a5d220be1391eaeb66542f7e0afd6e461a9"
    ],
    "matched_probe": null,
    "target_varies": true,
    "classification": "target_varies"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0x06fdde03",
            "selector": "0x06fdde03",
            "calldata_variants": [
                "0x06fdde03",
                "0x06fdde030000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x1d2bca17",
            "selector": "0x1d2bca17",
            "calldata_variants": [
                "0x1d2bca17",
                "0x1d2bca170000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x23b872dd",
            "selector": "0x23b872dd",
            "calldata_variants": [
                "0x23b872dd",
                "0x23b872dd0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x313ce567",
            "selector": "0x313ce567",
            "calldata_variants": [
                "0x313ce567",
                "0x313ce5670000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x70a08231",
            "selector": "0x70a08231",
            "calldata_variants": [
                "0x70a08231",
                "0x70a082310000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x95d89b41",
            "selector": "0x95d89b41",
            "calldata_variants": [
                "0x95d89b41",
                "0x95d89b410000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa9059cbb",
            "selector": "0xa9059cbb",
            "calldata_variants": [
                "0xa9059cbb",
                "0xa9059cbb0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xcae9ca51",
            "selector": "0xcae9ca51",
            "calldata_variants": [
                "0xcae9ca51",
                "0xcae9ca510000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 1028,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 1096,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 1241,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 3,
    "guards_detected": []
}
high auth codex Selector 0xa9059cbb appears to grant authorization and invoke a callback instead of performing an ERC20 transfer 85 no
view
evidence_json
{
    "evidence": "Dispatcher bytes at pc 0x56-0x60 route selector 0xa9059cbb to pc 0x2c5. That branch checks caller balance (pc 0x2c5-0x2ef), decodes a dynamic bytes payload from calldata offset 0x44 (pc 0x2f4-0x336), performs an SSTORE before any external interaction (pc 0x387), then builds calldata with selector 0x8f4ffcb1 (pc 0x396) and issues CALL at pc 0x448. By contrast, the evident balance-moving Transfer-event path is elsewhere, around pc 0x765-0x7cc. This semantic mismatch is inferred from bytecode, but the inference is strong.",
    "locations": [
        "selector:0xa9059cbb",
        "pc:0x2c5",
        "pc:0x387",
        "pc:0x396",
        "pc:0x448"
    ],
    "recommendation": "Do not expose non-transfer semantics behind 0xa9059cbb. If this is intended approval/callback behavior, move it to a distinct selector and keep 0xa9059cbb as a pure balance-moving transfer. Add explicit eventing and clear ABI separation so wallets/integrations cannot be tricked into granting approvals.",
    "exploit_scenario": "An integration or user that treats this contract as ERC20-compatible may call selector 0xa9059cbb expecting `transfer(address,uint256)`. In this bytecode, that selector reaches a path that decodes extra dynamic calldata, writes state, then constructs calldata headed by 0x8f4ffcb1 and CALLs a computed target. A malicious recipient/spender contract could use that callback to act on the newly granted authorization, so the caller can end up approving and interacting with an external contract instead of transferring tokens."
}
medium reentrancy codex Approval/callback path performs external CALL after state mutation with no detected guard 75 no
view
evidence_json
{
    "evidence": "In the 0xa9059cbb branch, an SSTORE occurs at pc 0x387 before the external CALL at pc 0x448. `auth.guards` is empty in the artifact, and detector findings validate an untrusted computed CALL target/value path. The callsite list shows the relevant CALL at pc 1096 with `target_expression_category: computed` and `returndata_checked: null`. The two other CALLs (pc 1028 and pc 1241) are consistent with identity-precompile copies, so pc 0x448 is the security-relevant callback.",
    "locations": [
        "selector:0xa9059cbb",
        "pc:0x387",
        "pc:0x448",
        "pc:0x404",
        "pc:0x4d9"
    ],
    "recommendation": "Apply checks-effects-interactions discipline: finish all validation, minimize or defer external callbacks, and add an explicit reentrancy guard around any path that both mutates authorization/accounting state and CALLs an untrusted address. If callbacks are required, isolate them behind dedicated functions with narrowly scoped state changes.",
    "exploit_scenario": "A malicious callback target can be passed into the 0xa9059cbb path. Because state is written before the external CALL, the callee can reenter during the callback and attempt follow-on actions such as `transferFrom` or other state-dependent flows while the contract is mid-execution. The exact slot names are unknown from raw bytecode, so the full impact is somewhat uncertain, but the bundle shows no guard detection and confirms a computed CALL target."
}