019b3836-3d2f-7228-a456-cb5fe5dd8c99
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 4683 | artifact.fetch | complete | 1 / 3 | 3 months ago |
| 4684 | tool.cast_disasm | complete | 1 / 3 | 3 months ago |
| 48024 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 48025 | capability.graph | complete | 1 / 3 | 1 week ago |
| 48026 | detector.run | complete | 1 / 3 | 1 week ago |
| 48027 | validation.fork | complete | 1 / 3 | 1 week ago |
| 113286 | report.consolidate | complete | 1 / 6 | 1 week ago |
No slither job recorded yet.
{"no_findings":false,"summary":"Bytecode appears to implement an ETH-backed ERC20-style wrapper with `deposit`, `withdraw`, ERC20 transfers, and `approveAndCall`. No proxy/delegatecall paths were evidenced, and the raw ETH send paths appear to debit storage before calling out. Two conservative issues remain: a standard allowance-race pattern and a supply-accounting invariant break because `totalSupply()` is derived from raw ETH balance.","findings":[{"severity":"medium","category":"auth","title":"Allowance overwrite race in `approve` and `approveAndCall`","exploit_scenario":"A holder changes a spender allowance from `N` to `M` using `approve` or `approveAndCall`. A malicious spender can front-run with `transferFrom(..., N)` before the new approval lands, then still use the fresh `M` allowance afterward, effectively spending more than the holder intended. In the `approveAndCall` path, the newly written allowance is also live before the external callback returns.","recommendation":"Do not support overwrite-style approvals without mitigation. Require setting allowance to zero before a new non-zero value, or add `increaseAllowance` / `decreaseAllowance` style flows and deprecate direct allowance replacement.","evidence":"Selector inference is best-effort, but `0x095ea7b3` matches ERC20 `approve(address,uint256)` and `0x3177029f` matches `approveAndCall(address,uint256)`. Both flow through the allowance-write routine beginning at pc `0xfd`, where the nested allowance mapping is written with `SSTORE` and no visible zero-check or compare-to-current-allowance guard precedes the write. The `approveAndCall` path then performs an external callback at pc `0x753` using selector `0x4889ca88` (`receiveApproval(address,uint256,address)`), so the just-written allowance is immediately usable.","locations":["selector:0x095ea7b3","selector:0x3177029f","pc:0xfd","pc:0x6f7"]},{"severity":"low","category":"math","title":"`totalSupply()` is tied to raw ETH balance, so forced ETH can desynchronize accounting","exploit_scenario":"An attacker can force ETH into the contract (for example via `SELFDESTRUCT`). The contract's ETH balance rises, so `totalSupply()` rises as well, but no holder balance is minted. This can break the invariant that total supply equals the sum of account balances, confuse integrations that rely on supply-based accounting, and leave unsolicited ETH permanently trapped.","recommendation":"Track minted supply in storage and update it only on explicit deposit/withdraw flows, or provide a controlled reconciliation/sweep mechanism for unsolicited ETH.","evidence":"`totalSupply()` (`0x18160ddd`) resolves to the routine at pc `0x168`, which executes `ADDRESS ... BALANCE` and returns the contract's ETH balance directly. By contrast, `balanceOf()` (`0x70a08231`) reads from a storage mapping at pc `0x21a`. Because supply is not read from the same storage accounting as balances, unsolicited ETH changes reported supply without changing any user balance.","locations":["selector:0x18160ddd","selector:0x70a08231","pc:0x168","pc:0x21a"]}]}
OpenAI Codex v0.118.0 (research preview)
--------
workdir: /tmp/codex-93zqp0qz
model: gpt-5.4
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: none
session id: 019d5c1c-b224-7902-a784-1660d7c6aae4
--------
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 in /tmp/codex-93zqp0qz
succeeded in 0ms:
/tmp/codex-93zqp0qz
exec
/bin/bash -lc 'rg --files' in /tmp/codex-93zqp0qz
succeeded in 0ms:
BYTECODE_BUNDLE.json
codex-output-schema.json
exec
/bin/bash -lc "sed -n '1,240p' BYTECODE_BUNDLE.json" in /tmp/codex-93zqp0qz
succeeded in 0ms:
{
"analysis_artifact": {
"address": "0x89d64bc7e46bdc49a89652ae9bb167418cbad62e",
"artifact_hash": "0xe0e854153ddbb34e9fa574298856161e49e49549bc84cabce519f1c0fd4c6a51",
"artifact_json": {
"auth": {
"guards": []
},
"basic_blocks": [
{
"end_pc": 10,
"hash": "0xfd342fab7341c089cd1fdef11e74566bbd7ffa7ac4f4f86648f0fae109a15a10",
"opcodes": [
"PUSH1",
"PUSH1",
"MSTORE",
"CALLDATASIZE",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 0
},
{
"end_pc": 30,
"hash": "0xc70ed12c4a201f457352f1081faa541ad2d0e9ed873ab7189672a232c2981e6e",
"opcodes": [
"PUSH1",
"PUSH1",
"EXP",
"PUSH1",
"CALLDATALOAD",
"DIV",
"PUSH4",
"OP_81",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 11
},
{
"end_pc": 41,
"hash": "0x7e830c354d9fcd430f148fd268924919107311ec603ed3fbc87b87c4e1960564",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 31
},
{
"end_pc": 52,
"hash": "0xd93be9c242e8e8bcd06a655e8f68dbb5d8b907aa242921a0944db45226824ede",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 42
},
{
"end_pc": 63,
"hash": "0xf975181aea2edf6392f2b3e648aae3b0eace6c9389a7f27039b8efc5164a8e38",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 53
},
{
"end_pc": 74,
"hash": "0xec201f7d160fbd74016021109fe77370b8438cfcac697314b86ae1c86d82f322",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 64
},
{
"end_pc": 85,
"hash": "0x636002e5a697d1dcd5c7931ece61b7c0d48436ac628d59c5a408a2e9400f02c9",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 75
},
{
"end_pc": 96,
"hash": "0x1328f6b524d1fc36b2c4512aefec0e45764a7f6db1d8ad7899f090873660046c",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 86
},
{
"end_pc": 107,
"hash": "0xbed031604407871b61edd7cace58d1544f4d0e479ecef720d39d40effd3f01ba",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 97
},
{
"end_pc": 118,
"hash": "0x9a18ece7c39b64a99ade84949dd684558280dede1d8bd61d5592d509da2ecdf9",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 108
},
{
"end_pc": 129,
"hash": "0xf4a506fa8e4cd123298dd1063f7f7960970ff32247692ba09cd00617ae4d7701",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 119
},
{
"end_pc": 140,
"hash": "0xfe8115500eabb4976688d94720b09a11c50561226f88e28dc6085e1c3b7d9791",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 130
},
{
"end_pc": 151,
"hash": "0xf4626f76328297acbd5909aa163add93b5e7603addd96eac28c1154711ae7a0f",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 141
},
{
"end_pc": 162,
"hash": "0x56266f7e1e593719a66a4f6ccd4a22ca545b776461e75f102cec6cf0fdb8af8a",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 152
},
{
"end_pc": 173,
"hash": "0x769b3c458606538f51b01c3a1ddb9e79d095c5a8c92ee881d3cbb93a3806a311",
"opcodes": [
"OP_80",
"PUSH4",
"EQ",
"PUSH2",
"JUMPI"
],
"start_pc": 163
},
{
"end_pc": 184,
"hash": "0x4416f9665fccfe1ee7f38dc8ab8b488e6db613488bc47fe8580c9536aa735fcd",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH2",
"PUSH2",
"JUMP"
],
"start_pc": 174
},
{
"end_pc": 242,
"hash": "0x071567ff5fa5a6290fa5438f77074089b30029b7b43196c80a1b8d02630ee578",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"OP_80",
"MLOAD",
"OP_80",
"OP_82",
"ADD",
"OP_90",
"OP_91",
"MSTORE",
"PUSH1",
"OP_81",
"MSTORE",
"PUSH32",
"PUSH1",
"OP_82",
"ADD",
"MSTORE",
"OP_81",
"JUMP"
],
"start_pc": 185
},
{
"end_pc": 252,
"hash": "0x28d0b72d37c730c9759802fa6751518184abfa2759f8fb9284a97b4fb1d9dc45",
exec
/bin/bash -lc "sed -n '241,520p' BYTECODE_BUNDLE.json" in /tmp/codex-93zqp0qz
succeeded in 0ms:
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
"CALLDATALOAD"
],
"start_pc": 243
},
{
"end_pc": 352,
"hash": "0xa0e8446f5149d3823eb8442cc85acb41e3388421994271f4b5d94e60cb087520",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"CALLER",
"OP_81",
"AND",
"PUSH1",
"OP_81",
"OP_81",
"MSTORE",
"PUSH1",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"OP_80",
"OP_83",
"SHA3",
"OP_94",
"OP_87",
"AND",
"OP_80",
"OP_84",
"MSTORE",
"OP_94",
"OP_82",
"MSTORE",
"OP_80",
"OP_83",
"SHA3",
"OP_86",
"OP_90",
"SSTORE",
"OP_80",
"MLOAD",
"OP_86",
"OP_81",
"MSTORE",
"OP_90",
"MLOAD",
"OP_92",
"OP_94",
"OP_93",
"OP_92",
"PUSH32",
"OP_92",
"OP_91",
"OP_81",
"OP_90",
"SUB",
"OP_90",
"OP_91",
"ADD",
"OP_90",
"OP_A3",
"POP",
"PUSH1"
],
"start_pc": 253
},
{
"end_pc": 359,
"hash": "0x4d8bc2247ad8010c8edddb205dc0b06c427898328b9ffcd9e26831d9047ccdb4",
"opcodes": [
"JUMPDEST",
"OP_92",
"OP_91",
"POP",
"POP",
"JUMP"
],
"start_pc": 354
},
{
"end_pc": 371,
"hash": "0x05a734d8a18a90e66c505d9ccef00d4fcb9dcc52429aa0b6eacde4f178b80623",
"opcodes": [
"JUMPDEST",
"ADDRESS",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"BALANCE"
],
"start_pc": 360
},
{
"end_pc": 389,
"hash": "0x6e7a83245d3f639a8b56ba426e8a885e6e31aa3f2c7c6ef524518ae6803c6bf2",
"opcodes": [
"JUMPDEST",
"PUSH1",
"OP_80",
"MLOAD",
"OP_91",
"OP_82",
"MSTORE",
"MLOAD",
"OP_90",
"OP_81",
"OP_90",
"SUB",
"PUSH1",
"ADD",
"OP_90",
"RETURN"
],
"start_pc": 372
},
{
"end_pc": 402,
"hash": "0x897d04a880ed47744257ed84a58a6143f90b19fa7c35e80bbb7a7b3e04319369",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
"CALLDATALOAD"
],
"start_pc": 390
},
{
"end_pc": 449,
"hash": "0x2e73799c2b3388bea73d5a1e0cc1fb601235956fc815eb2c5071af5b5dd3245a",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_83",
"OP_81",
"AND",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"OP_80",
"OP_83",
"SHA3",
"CALLER",
"OP_90",
"OP_94",
"AND",
"OP_83",
"MSTORE",
"OP_92",
"OP_90",
"MSTORE",
"OP_90",
"OP_81",
"SHA3",
"SLOAD",
"PUSH2",
"OP_90",
"OP_83"
],
"start_pc": 403
},
{
"end_pc": 458,
"hash": "0x7eea9569e8d05f23ebbc4a6bb56103080a8d3eae4a100019c916325485f9222f",
"opcodes": [
"JUMPDEST",
"OP_80",
"OP_82",
"LT",
"ISZERO",
"PUSH2",
"JUMP"
],
"start_pc": 450
},
{
"end_pc": 465,
"hash": "0x7c13111516c714346733c1ab2ce3c1a8f61022418d8d95498f1f64723f1c59ec",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"CALLDATALOAD"
],
"start_pc": 459
},
{
"end_pc": 496,
"hash": "0xd92416a5b810761d87694f668182f11f85800a637c00f7ba9e8f777749c7662c",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH1",
"OP_90",
"OP_81",
"SHA3",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"CALLER",
"AND",
"OP_82",
"MSTORE",
"PUSH1",
"OP_82",
"OP_90",
"MSTORE",
"SLOAD",
"PUSH2",
"OP_90",
"OP_83"
],
"start_pc": 466
},
{
"end_pc": 508,
"hash": "0xde6918f4f615d59610c0df3236e55c923e484c7e1a9821f376a5e52a507be4bf",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH2",
"OP_83",
"OP_83",
"PUSH2",
"JUMP"
],
"start_pc": 497
},
{
"end_pc": 516,
"hash": "0x26334aca6ad69bb178aad6c13033c6110beb858ae04af261a955758a8ce044a5",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"OP_81",
"JUMP"
],
"start_pc": 509
},
{
"end_pc": 537,
"hash": "0x2c52e56d3386fb994d86a22180c2b3a0bf05945d054e4763123c9d37ba4d120f",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
exec
/bin/bash -lc "sed -n '521,800p' BYTECODE_BUNDLE.json" in /tmp/codex-93zqp0qz
succeeded in 0ms:
"CALLDATALOAD",
"PUSH1",
"PUSH2",
"OP_83",
"OP_83",
"PUSH2",
"JUMP"
],
"start_pc": 517
},
{
"end_pc": 569,
"hash": "0xc00a4352d1c1dd17e5763fb056e28afe15ce4626fe15df711672832f8dac65f6",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_81",
"AND",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"OP_81",
"OP_90",
"MSTORE",
"PUSH1",
"OP_90",
"SHA3",
"SLOAD"
],
"start_pc": 538
},
{
"end_pc": 574,
"hash": "0x333696bb916c914e5eda6a103eb651058293a77b6db1f1384dfe163a972e7c37",
"opcodes": [
"JUMPDEST",
"OP_91",
"OP_90",
"POP",
"JUMP"
],
"start_pc": 570
},
{
"end_pc": 632,
"hash": "0x7971888f38d9199c190d342cc99b737435818c9561d8c57ef164649d408a385b",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"OP_80",
"MLOAD",
"OP_80",
"OP_82",
"ADD",
"OP_90",
"OP_91",
"MSTORE",
"PUSH1",
"OP_81",
"MSTORE",
"PUSH32",
"PUSH1",
"OP_82",
"ADD",
"MSTORE",
"OP_81",
"JUMP"
],
"start_pc": 575
},
{
"end_pc": 670,
"hash": "0xa34e61fb1fb0a52f84fa1ba76ade029b9a4955fc174b2050d2ce3f16353743f3",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
"ADDRESS",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"OP_83",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"EQ",
"OP_80",
"PUSH2",
"JUMPI"
],
"start_pc": 633
},
{
"end_pc": 684,
"hash": "0xf7764b6b920f5196f69a817e1acc11dcd46b96c870d7ce46bf63a9f8494302ee",
"opcodes": [
"POP",
"OP_82",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"PUSH1",
"EQ"
],
"start_pc": 671
},
{
"end_pc": 690,
"hash": "0xaf23793769a8057a0cb0e7ef5b2f54434eb5440a24d76831783779eb73f982f7",
"opcodes": [
"JUMPDEST",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 685
},
{
"end_pc": 698,
"hash": "0x41b9235c231c48a79764052a52d0615a16765ad41aad15379ebe05f9a5e5f417",
"opcodes": [
"PUSH2",
"OP_82",
"PUSH2",
"JUMP"
],
"start_pc": 691
},
{
"end_pc": 735,
"hash": "0x96b5efda6c1108192dd2d71f0f222f3b9ca2317a57c397281804f972d925a006",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"CALLER",
"AND",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"OP_81",
"OP_90",
"MSTORE",
"PUSH1",
"OP_90",
"SHA3",
"SLOAD",
"PUSH2",
"OP_90",
"PUSH2",
"JUMP"
],
"start_pc": 699
},
{
"end_pc": 750,
"hash": "0x78001396a596948e9b3ccf2b07fa1bcb3bd0175a90d144823a039fd0ace4a952",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH8",
"OP_81",
"JUMP"
],
"start_pc": 736
},
{
"end_pc": 752,
"hash": "0x61e13f8bf1a1cb34d48bb5361bbcf49e7b618f6411399a7f97f10243fa536b3a",
"opcodes": [
"JUMPDEST",
"PUSH2"
],
"start_pc": 751
},
{
"end_pc": 785,
"hash": "0x6cf9df8598c411c244cd06f30ec88941a320520cc6b8281886b9a110f7cbc564",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"CALLER",
"AND",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"OP_81",
"OP_90",
"MSTORE",
"PUSH1",
"OP_90",
"SHA3",
"SLOAD",
"PUSH2",
"OP_90",
"CALLVALUE"
],
"start_pc": 755
},
{
"end_pc": 803,
"hash": "0xa3dc20337019f44a380d910e02ac78acc985ee2b9573afe6fd7a9d468f253460",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH2",
"OP_83",
"OP_83",
"OP_81",
"OP_81",
"ADD",
"OP_82",
"OP_90",
"GT",
"PUSH2",
"JUMP"
],
"start_pc": 786
},
{
"end_pc": 855,
"hash": "0xf49d017af4521fd1514fc0913a273d502140eee57ed5f32a1b858f7eb68b6976",
"opcodes": [
"JUMPDEST",
"PUSH2",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
"CALLDATALOAD",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_82",
"OP_81",
"AND",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"PUSH1",
"OP_90",
"OP_81",
exec
/bin/bash -lc "sed -n '801,1080p' BYTECODE_BUNDLE.json" in /tmp/codex-93zqp0qz
succeeded in 0ms:
"MSTORE",
"PUSH1",
"OP_80",
"OP_83",
"SHA3",
"OP_93",
"OP_85",
"AND",
"OP_83",
"MSTORE",
"OP_92",
"OP_90",
"MSTORE",
"SHA3",
"SLOAD",
"PUSH2",
"JUMP"
],
"start_pc": 804
},
{
"end_pc": 857,
"hash": "0xdc4ff9509e72f588ac609e805c2b0a607c059fc386152a84b2646cc3ecf475c8",
"opcodes": [
"JUMPDEST",
"STOP"
],
"start_pc": 856
},
{
"end_pc": 859,
"hash": "0x958058fc31de007fb13f9a24445d43f9f9b5e47a55e26d9b6ae3f80c15966753",
"opcodes": [
"JUMPDEST",
"JUMP"
],
"start_pc": 858
},
{
"end_pc": 930,
"hash": "0x312db89ede37ccd528c81b052d5771c79cdffa2deffd58291af1138445f87c4d",
"opcodes": [
"JUMPDEST",
"PUSH1",
"MLOAD",
"OP_80",
"OP_80",
"PUSH1",
"ADD",
"OP_82",
"OP_81",
"SUB",
"OP_82",
"MSTORE",
"OP_83",
"OP_81",
"OP_81",
"MLOAD",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"OP_91",
"POP",
"OP_80",
"MLOAD",
"OP_90",
"PUSH1",
"ADD",
"OP_90",
"OP_80",
"OP_83",
"OP_83",
"OP_82",
"OP_90",
"PUSH1",
"PUSH1",
"PUSH1",
"OP_84",
"PUSH1",
"ADD",
"DIV",
"PUSH1",
"MUL",
"PUSH1",
"ADD",
"CALL",
"POP",
"OP_90",
"POP",
"OP_90",
"OP_81",
"ADD",
"OP_90",
"PUSH1",
"AND",
"OP_80",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 860
},
{
"end_pc": 955,
"hash": "0x15bc4685886b0559e4ca82eebb6bd925cbc72f578f620b4bf5dd4da4917772d8",
"opcodes": [
"OP_80",
"OP_82",
"SUB",
"OP_80",
"MLOAD",
"PUSH1",
"OP_83",
"PUSH1",
"SUB",
"PUSH2",
"EXP",
"SUB",
"NOT",
"AND",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"OP_91",
"POP"
],
"start_pc": 931
},
{
"end_pc": 969,
"hash": "0xe49bc88a2b041ffacb2c9a056dc12e9accbe4b67b938f618d59324cd9e0c9469",
"opcodes": [
"JUMPDEST",
"POP",
"OP_92",
"POP",
"POP",
"POP",
"PUSH1",
"MLOAD",
"OP_80",
"OP_91",
"SUB",
"OP_90",
"RETURN"
],
"start_pc": 956
},
{
"end_pc": 991,
"hash": "0x2056ec4e73cd45ded28623f1fde31b7199b7014a57f169e8e00523fb35bbaea5",
"opcodes": [
"JUMPDEST",
"PUSH1",
"OP_80",
"MLOAD",
"PUSH1",
"OP_90",
"OP_92",
"AND",
"OP_82",
"MSTORE",
"MLOAD",
"OP_90",
"OP_81",
"OP_90",
"SUB",
"PUSH1",
"ADD",
"OP_90",
"RETURN"
],
"start_pc": 970
},
{
"end_pc": 1073,
"hash": "0x72ed84ee73cafd25449d7b1d9b6455a741af74fdf6d58d98d4e476e0451b2a67",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"CALLER",
"AND",
"PUSH1",
"OP_81",
"OP_81",
"MSTORE",
"PUSH1",
"OP_81",
"OP_81",
"MSTORE",
"PUSH1",
"OP_91",
"OP_82",
"OP_90",
"SHA3",
"OP_93",
"OP_90",
"OP_93",
"SSTORE",
"OP_80",
"MLOAD",
"CALLVALUE",
"OP_81",
"MSTORE",
"OP_90",
"MLOAD",
"OP_91",
"OP_92",
"PUSH32",
"OP_92",
"OP_91",
"OP_82",
"OP_90",
"SUB",
"ADD",
"OP_90",
"OP_A2",
"JUMP"
],
"start_pc": 992
},
{
"end_pc": 1076,
"hash": "0x9ef29df57e5689b5ffe35acb31952e4725fe312bb3d3697db7b52302cfdf6a46",
"opcodes": [
"JUMPDEST",
"POP",
"JUMP"
],
"start_pc": 1074
},
{
"end_pc": 1132,
"hash": "0x0b9008bc0355c08b31635ef87aa26d385010c46ad2b357f12871a3a66fa0c417",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"CALLER",
"AND",
"PUSH1",
"OP_81",
"OP_81",
"MSTORE",
"PUSH1",
"OP_81",
"OP_90",
"MSTORE",
"PUSH1",
"OP_80",
"OP_82",
"SHA3",
"OP_93",
"OP_90",
"OP_93",
"SSTORE",
"OP_91",
"MLOAD",
"OP_90",
"OP_91",
"OP_90",
"OP_84",
"OP_90",
"OP_82",
"OP_81",
"OP_81",
"OP_81",
"OP_85",
"OP_88",
"OP_83",
"CALL",
exec
/bin/bash -lc "sed -n '1081,1360p' BYTECODE_BUNDLE.json" in /tmp/codex-93zqp0qz
succeeded in 0ms:
"OP_93",
"POP",
"POP",
"POP",
"POP",
"ISZERO",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 1077
},
{
"end_pc": 1168,
"hash": "0x605b10d86a93ca758bb554c4adaba666da47700c984bb9b32179784057ad3912",
"opcodes": [
"CALLER",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"GAS",
"PUSH1",
"MLOAD",
"OP_84",
"OP_90",
"PUSH1",
"OP_81",
"OP_81",
"OP_81",
"OP_85",
"OP_88",
"OP_88",
"CALL",
"OP_93",
"POP",
"POP",
"POP",
"POP",
"ISZERO",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 1133
},
{
"end_pc": 1172,
"hash": "0xc0d1af9b6a213f7e750526dcf639e4f406ef287846d83c54abc7f4eba244fe2b",
"opcodes": [
"PUSH2",
"JUMP"
],
"start_pc": 1169
},
{
"end_pc": 1243,
"hash": "0xd7aa5bc978adceb44b414535a4ea6c862da7a107e78b1e2fdcd04aaede5f888f",
"opcodes": [
"JUMPDEST",
"PUSH1",
"OP_80",
"MLOAD",
"OP_83",
"OP_81",
"MSTORE",
"OP_90",
"MLOAD",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"CALLER",
"AND",
"OP_91",
"PUSH32",
"OP_91",
"OP_90",
"OP_81",
"OP_90",
"SUB",
"PUSH1",
"ADD",
"OP_90",
"OP_A2",
"POP",
"PUSH1",
"PUSH2",
"JUMP"
],
"start_pc": 1173
},
{
"end_pc": 1278,
"hash": "0x089f9f5b8aa1243157adb6b313477a46472fcd12552df98504a0e988c9a0ae03",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"CALLER",
"AND",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"OP_81",
"OP_90",
"MSTORE",
"PUSH1",
"OP_90",
"SHA3",
"SLOAD",
"PUSH2",
"OP_90",
"OP_83",
"PUSH2",
"JUMP"
],
"start_pc": 1244
},
{
"end_pc": 1285,
"hash": "0x2467103003d7205a14a1cd9b04fa5f36db1d6277f7e0b2da22926d9f34b93c17",
"opcodes": [
"JUMPDEST",
"OP_90",
"POP",
"PUSH2",
"JUMP"
],
"start_pc": 1279
},
{
"end_pc": 1332,
"hash": "0x5c00f5737c77f9f4d02f0fa5f175c3c6bc232a2ec00aa30440920c42af0788f2",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"CALLER",
"OP_81",
"AND",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"OP_81",
"OP_90",
"MSTORE",
"PUSH1",
"OP_80",
"OP_82",
"SHA3",
"OP_93",
"OP_90",
"OP_93",
"SSTORE",
"OP_90",
"OP_85",
"AND",
"OP_81",
"MSTORE",
"SHA3",
"SLOAD",
"PUSH2",
"OP_90",
"OP_83",
"PUSH2",
"JUMP"
],
"start_pc": 1286
},
{
"end_pc": 1426,
"hash": "0x254afd3f69bef8f8867c8ef785507d63df140f93f3104ab19762f688e7ea0ee3",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_84",
"OP_81",
"AND",
"PUSH1",
"OP_81",
"OP_81",
"MSTORE",
"PUSH1",
"OP_81",
"OP_81",
"MSTORE",
"PUSH1",
"OP_91",
"OP_82",
"OP_90",
"SHA3",
"OP_94",
"OP_90",
"OP_94",
"SSTORE",
"OP_80",
"MLOAD",
"OP_86",
"OP_81",
"MSTORE",
"OP_90",
"MLOAD",
"OP_91",
"OP_93",
"CALLER",
"OP_90",
"OP_93",
"AND",
"OP_92",
"PUSH32",
"OP_92",
"OP_91",
"OP_82",
"OP_90",
"SUB",
"ADD",
"OP_90",
"OP_A3",
"POP",
"PUSH1",
"PUSH2",
"JUMP"
],
"start_pc": 1333
},
{
"end_pc": 1433,
"hash": "0xc1904f503499c50de4a20027e0e4d53d1c7486432f275aef056171cf4757f1b9",
"opcodes": [
"JUMPDEST",
"ISZERO",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 1427
},
{
"end_pc": 1437,
"hash": "0xfe8b836b2690efb4cf848a3fb768a0bca3b52ad98f740fc82496251685f9391d",
"opcodes": [
"PUSH2",
"JUMP"
],
"start_pc": 1434
},
{
"end_pc": 1464,
"hash": "0x74455ac233703f4848faadb5cfc7e31bd85145f589527867ee38256cea5cf6c5",
"opcodes": [
"JUMPDEST",
"ADDRESS",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"OP_83",
"PUSH1",
"PUSH1",
"PUSH1",
exec
/bin/bash -lc "sed -n '1361,1640p' BYTECODE_BUNDLE.json" in /tmp/codex-93zqp0qz
succeeded in 0ms:
"EXP",
"SUB",
"AND",
"EQ",
"OP_80",
"PUSH2",
"JUMPI"
],
"start_pc": 1438
},
{
"end_pc": 1478,
"hash": "0x6037c78b2adba608b0fc8f39844844fe2e614fdbb8ea002f4bd8cdc5dd8e5dc3",
"opcodes": [
"POP",
"OP_82",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"PUSH1",
"EQ"
],
"start_pc": 1465
},
{
"end_pc": 1484,
"hash": "0xcce1e76c478effbd68785a68ef98e1e19e86bfd242da3d679a6acd466b0d71e7",
"opcodes": [
"JUMPDEST",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 1479
},
{
"end_pc": 1494,
"hash": "0x5b92363071616b81c1699d2c1fd2497d1dc702d611e099a966190c75208347ec",
"opcodes": [
"PUSH2",
"OP_84",
"CALLER",
"OP_84",
"PUSH2",
"JUMP"
],
"start_pc": 1485
},
{
"end_pc": 1529,
"hash": "0xdcec2b8889c096d15bccb00bfe1e7d5d0a036b5f4571ff2b5d7d7672b2b78c57",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_84",
"AND",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"OP_81",
"OP_90",
"MSTORE",
"PUSH1",
"OP_90",
"SHA3",
"SLOAD",
"PUSH2",
"OP_90",
"OP_83",
"PUSH2",
"JUMP"
],
"start_pc": 1495
},
{
"end_pc": 1536,
"hash": "0x01d0916ca4c807f9e618604ff31061511c8becc09126fff21a75877ad0d9d891",
"opcodes": [
"JUMPDEST",
"ISZERO",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 1530
},
{
"end_pc": 1540,
"hash": "0x8b35c27770753c27328f72051e22d4d6d5ebbe70b744db2218707bfa4c973249",
"opcodes": [
"PUSH2",
"JUMP"
],
"start_pc": 1537
},
{
"end_pc": 1549,
"hash": "0x8d1a9725de8b94a06d952cf3dccf7a60a056f613405cd3fca587c1c51a959081",
"opcodes": [
"JUMPDEST",
"PUSH2",
"OP_82",
"PUSH2",
"JUMP"
],
"start_pc": 1541
},
{
"end_pc": 1555,
"hash": "0x9d20ebdb5bbadaff599163ef7678bcd68dad7612349358e4a4c4097fb9046e75",
"opcodes": [
"JUMPDEST",
"POP",
"PUSH2",
"JUMP"
],
"start_pc": 1550
},
{
"end_pc": 1655,
"hash": "0x03f178a0d725d3fc887a88b283abfbb20f1ce5bd57d3aeef93ca7623d69d67b5",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_85",
"OP_81",
"AND",
"PUSH1",
"OP_81",
"OP_81",
"MSTORE",
"PUSH1",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"OP_80",
"OP_83",
"SHA3",
"CALLER",
"OP_86",
"AND",
"OP_84",
"MSTORE",
"OP_82",
"MSTORE",
"OP_91",
"OP_82",
"OP_90",
"SHA3",
"OP_94",
"OP_90",
"OP_94",
"SSTORE",
"OP_80",
"MLOAD",
"OP_86",
"OP_81",
"MSTORE",
"OP_90",
"MLOAD",
"OP_92",
"OP_87",
"AND",
"OP_93",
"OP_91",
"OP_92",
"PUSH32",
"OP_92",
"OP_91",
"OP_81",
"OP_90",
"SUB",
"OP_90",
"OP_91",
"ADD",
"OP_90",
"OP_A3"
],
"start_pc": 1556
},
{
"end_pc": 1665,
"hash": "0xdef2bcb2d1300ee7fa3a28ddd7e171d7ba12903ade81308390db778b24be6f13",
"opcodes": [
"JUMPDEST",
"POP",
"PUSH1",
"OP_93",
"OP_92",
"POP",
"POP",
"POP",
"JUMP"
],
"start_pc": 1656
},
{
"end_pc": 1712,
"hash": "0x8774022cd9ef10070574bbad2d978c697880d350de8abb94dd49a171fc880efd",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_85",
"OP_81",
"AND",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"OP_81",
"OP_90",
"MSTORE",
"PUSH1",
"OP_80",
"OP_82",
"SHA3",
"OP_93",
"OP_90",
"OP_93",
"SSTORE",
"OP_90",
"OP_85",
"AND",
"OP_81",
"MSTORE",
"SHA3",
"SLOAD",
"PUSH2",
"OP_90",
"OP_83",
"PUSH2",
"JUMP"
],
"start_pc": 1666
},
{
"end_pc": 1776,
"hash": "0x94be26d5ec0cb15d2f8d1b94eeb8b329125edfab390999ecafff54563dd65e6b",
"opcodes": [
"JUMPDEST",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"OP_84",
"OP_81",
"AND",
"PUSH1",
"OP_90",
"OP_81",
"MSTORE",
"PUSH1",
"OP_81",
"OP_81",
"MSTORE",
"PUSH1",
"OP_80",
"OP_83",
"SHA3",
exec
/bin/bash -lc "sed -n '1641,1920p' BYTECODE_BUNDLE.json" in /tmp/codex-93zqp0qz
succeeded in 0ms:
"OP_94",
"OP_90",
"OP_94",
"SSTORE",
"OP_87",
"OP_83",
"AND",
"OP_82",
"MSTORE",
"PUSH1",
"OP_81",
"MSTORE",
"OP_83",
"OP_82",
"SHA3",
"CALLER",
"OP_90",
"OP_93",
"AND",
"OP_82",
"MSTORE",
"OP_91",
"OP_90",
"OP_91",
"MSTORE",
"SHA3",
"SLOAD",
"PUSH2",
"OP_90",
"OP_83",
"PUSH2",
"JUMP"
],
"start_pc": 1713
},
{
"end_pc": 1782,
"hash": "0x61c72ab0caceb09cc0b426883f21c7ceec3d7f4fd9a1e5746887b49041e98311",
"opcodes": [
"JUMPDEST",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 1777
},
{
"end_pc": 1880,
"hash": "0x099a5c7e13ad74081a3d99f9f8a36e14df6ef8af1f8445aa9175a27abe3b063e",
"opcodes": [
"OP_82",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"PUSH4",
"CALLER",
"OP_84",
"ADDRESS",
"PUSH1",
"MLOAD",
"OP_84",
"PUSH1",
"PUSH1",
"EXP",
"MUL",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"OP_80",
"OP_84",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"OP_83",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"OP_82",
"PUSH1",
"PUSH1",
"PUSH1",
"EXP",
"SUB",
"AND",
"OP_81",
"MSTORE",
"PUSH1",
"ADD",
"OP_93",
"POP",
"POP",
"POP",
"POP",
"PUSH1",
"PUSH1",
"MLOAD",
"OP_80",
"OP_83",
"SUB",
"OP_81",
"PUSH1",
"OP_87",
"PUSH2",
"GAS",
"SUB",
"CALL",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 1783
},
{
"end_pc": 1891,
"hash": "0x6b77a513738c8aa55a68438c6caac1bc2b96c7bfbb1e8e873c87c5f4c895aae7",
"opcodes": [
"POP",
"POP",
"POP",
"PUSH1",
"OP_90",
"POP",
"PUSH2",
"JUMP"
],
"start_pc": 1881
},
{
"end_pc": 1896,
"hash": "0x89569bb11d637e430071517748af0bb04384b8c9d2e4f93dd5a9c14bf39c912e",
"opcodes": [
"JUMPDEST",
"PUSH2",
"JUMP"
],
"start_pc": 1892
},
{
"end_pc": 1903,
"hash": "0xc17258eedf558b32572a06ce5f7d05f9a632347f4486cf414fc8ee1de9db80f1",
"opcodes": [
"JUMPDEST",
"ISZERO",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 1897
},
{
"end_pc": 1907,
"hash": "0x8d8c043f82ba2e7cdc531625ff102db4a56fbe189a0e9c6c9c4f4ee7815ca44a",
"opcodes": [
"PUSH2",
"JUMP"
],
"start_pc": 1904
},
{
"end_pc": 1916,
"hash": "0x555b0722918dcc578185df7bac7f11ee486e593aa7fd9905036a9b754e97bcc4",
"opcodes": [
"JUMPDEST",
"POP",
"OP_81",
"OP_81",
"ADD",
"PUSH2",
"JUMP"
],
"start_pc": 1908
},
{
"end_pc": 1923,
"hash": "0x196249de90782f90680dcbf33cba2f6223e1dc222471a8df5f1b94346aa05a67",
"opcodes": [
"JUMPDEST",
"ISZERO",
"ISZERO",
"PUSH2",
"JUMPI"
],
"start_pc": 1917
},
{
"end_pc": 1927,
"hash": "0xbf07d4712faf2391ad37cae99b09f548286e5f2f10c155f718e42d5da8d2682f",
"opcodes": [
"PUSH2",
"JUMP"
],
"start_pc": 1924
},
{
"end_pc": 1936,
"hash": "0x6dcf4e7c8ac1bac1475b61bfecbb3d8156b2be48f720986c3954485286e73b00",
"opcodes": [
"JUMPDEST",
"POP",
"OP_80",
"OP_82",
"SUB",
"PUSH2",
"JUMP"
],
"start_pc": 1928
}
],
"callsites": [
{
"opcode": "CALL",
"pc": 914,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1121,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1157,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1875,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
}
],
"cfg_edges": [
{
"from": "bb:0",
"to": "bb:174",
"type": "control_flow"
},
{
"from": "bb:0",
"to": "bb:11",
"type": "control_flow_fallthrough"
},
{
"from": "bb:11",
"to": "bb:185",
"type": "control_flow"
},
{
"from": "bb:11",
"to": "bb:31",
"type": "control_flow_fallthrough"
},
{
"from": "bb:31",
"to": "bb:243",
"type": "control_flow"
},
{
"from": "bb:31",
"to": "bb:42",
"type": "control_flow_fallthrough"
exec
/bin/bash -lc "rg -n 'selector|storage|detector|evidence|proxy|slot|delegate|implementation|findings|functions|events' BYTECODE_BUNDLE.json" in /tmp/codex-93zqp0qz
succeeded in 0ms:
2349: "dispatcher_type": "selector_jump_table",
2353: "selector": "0x06fdde03"
2357: "selector": "0x095ea7b3"
2361: "selector": "0x18160ddd"
2365: "selector": "0x23b872dd"
2369: "selector": "0x2e1a7d4d"
2373: "selector": "0x313ce567"
2377: "selector": "0x3177029f"
2381: "selector": "0x70a08231"
2385: "selector": "0x95d89b41"
2389: "selector": "0xa9059cbb"
2393: "selector": "0xbe040fb0"
2397: "selector": "0xc2930f91"
2401: "selector": "0xd0e30db0"
2405: "selector": "0xdd62ed3e"
2408: "functions": [
2414: "selector": "0x06fdde03",
2417: "delegatecall": 0,
2421: "storage": {
2423: "slots": [],
2432: "selector": "0x095ea7b3",
2435: "delegatecall": 0,
2439: "storage": {
2441: "slots": [],
2450: "selector": "0x18160ddd",
2453: "delegatecall": 0,
2457: "storage": {
2459: "slots": [],
2468: "selector": "0x23b872dd",
2471: "delegatecall": 0,
2475: "storage": {
2477: "slots": [],
2486: "selector": "0x2e1a7d4d",
2489: "delegatecall": 0,
2493: "storage": {
2495: "slots": [],
2504: "selector": "0x313ce567",
2507: "delegatecall": 0,
2511: "storage": {
2513: "slots": [],
2522: "selector": "0x3177029f",
2525: "delegatecall": 0,
2529: "storage": {
2531: "slots": [],
2540: "selector": "0x70a08231",
2543: "delegatecall": 0,
2547: "storage": {
2549: "slots": [],
2558: "selector": "0x95d89b41",
2561: "delegatecall": 0,
2565: "storage": {
2567: "slots": [],
2576: "selector": "0xa9059cbb",
2579: "delegatecall": 0,
2583: "storage": {
2585: "slots": [],
2594: "selector": "0xbe040fb0",
2597: "delegatecall": 0,
2601: "storage": {
2603: "slots": [],
2612: "selector": "0xc2930f91",
2615: "delegatecall": 0,
2619: "storage": {
2621: "slots": [],
2630: "selector": "0xd0e30db0",
2633: "delegatecall": 0,
2637: "storage": {
2639: "slots": [],
2648: "selector": "0xdd62ed3e",
2651: "delegatecall": 0,
2655: "storage": {
2657: "slots": [],
2662: "selectors": [
2682: "delegatecall": 0,
2685: "upgrade_slot_write_suspected": false
2687: "storage": {
2690: "slots": [],
2721: "implementation_address": null,
2722: "is_proxy": false,
3922: "selector": "0x06fdde03",
3928: "selector": "0x095ea7b3",
3934: "selector": "0x18160ddd",
3940: "selector": "0x23b872dd",
3946: "selector": "0x2e1a7d4d",
3952: "selector": "0x313ce567",
3958: "selector": "0x3177029f",
3964: "selector": "0x70a08231",
3970: "selector": "0x95d89b41",
3976: "selector": "0xa9059cbb",
3982: "selector": "0xbe040fb0",
3988: "selector": "0xc2930f91",
3994: "selector": "0xd0e30db0",
4000: "selector": "0xdd62ed3e",
4010: "detector_findings": [
4013: "evidence_json": {
4066: "evidence_json": {
4120: "delegatecall_count": 0,
exec
/bin/bash -lc "sed -n '2340,2715p' BYTECODE_BUNDLE.json" in /tmp/codex-93zqp0qz
succeeded in 0ms:
"type": "control_flow_fallthrough"
},
{
"from": "bb:1928",
"to": "bb:354",
"type": "control_flow"
}
],
"cfg_hash": "0x4e4cb74ef62829796a68af939ca76f84656bf4a6f7a47f020532f3b87ed1580c",
"dispatcher_type": "selector_jump_table",
"function_entries": [
{
"entry_pc": null,
"selector": "0x06fdde03"
},
{
"entry_pc": 404098525,
"selector": "0x095ea7b3"
},
{
"entry_pc": 599290589,
"selector": "0x18160ddd"
},
{
"entry_pc": 773487949,
"selector": "0x23b872dd"
},
{
"entry_pc": 826074471,
"selector": "0x2e1a7d4d"
},
{
"entry_pc": 829883039,
"selector": "0x313ce567"
},
{
"entry_pc": 1889567281,
"selector": "0x3177029f"
},
{
"entry_pc": 2514000705,
"selector": "0x70a08231"
},
{
"entry_pc": 2835717307,
"selector": "0x95d89b41"
},
{
"entry_pc": 3187937200,
"selector": "0xa9059cbb"
},
{
"entry_pc": 3264417681,
"selector": "0xbe040fb0"
},
{
"entry_pc": 3504541104,
"selector": "0xc2930f91"
},
{
"entry_pc": 3714247998,
"selector": "0xd0e30db0"
},
{
"entry_pc": 856,
"selector": "0xdd62ed3e"
}
],
"functions": [
{
"auth": {
"guards": []
},
"entry_pc": null,
"selector": "0x06fdde03",
"sinks": {
"call": 4,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 11,
"slots": [],
"writes": 8
}
},
{
"auth": {
"guards": []
},
"entry_pc": 404098525,
"selector": "0x095ea7b3",
"sinks": {
"call": 4,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 11,
"slots": [],
"writes": 8
}
},
{
"auth": {
"guards": []
},
"entry_pc": 599290589,
"selector": "0x18160ddd",
"sinks": {
"call": 4,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 11,
"slots": [],
"writes": 8
}
},
{
"auth": {
"guards": []
},
"entry_pc": 773487949,
"selector": "0x23b872dd",
"sinks": {
"call": 4,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 11,
"slots": [],
"writes": 8
}
},
{
"auth": {
"guards": []
},
"entry_pc": 826074471,
"selector": "0x2e1a7d4d",
"sinks": {
"call": 4,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 11,
"slots": [],
"writes": 8
}
},
{
"auth": {
"guards": []
},
"entry_pc": 829883039,
"selector": "0x313ce567",
"sinks": {
"call": 4,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 11,
"slots": [],
"writes": 8
}
},
{
"auth": {
"guards": []
},
"entry_pc": 1889567281,
"selector": "0x3177029f",
"sinks": {
"call": 4,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 11,
"slots": [],
"writes": 8
}
},
{
"auth": {
"guards": []
},
"entry_pc": 2514000705,
"selector": "0x70a08231",
"sinks": {
"call": 4,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 11,
"slots": [],
"writes": 8
}
},
{
"auth": {
"guards": []
},
"entry_pc": 2835717307,
"selector": "0x95d89b41",
"sinks": {
"call": 4,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 11,
"slots": [],
"writes": 8
}
},
{
"auth": {
"guards": []
},
"entry_pc": 3187937200,
"selector": "0xa9059cbb",
"sinks": {
"call": 4,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 11,
"slots": [],
"writes": 8
}
},
{
"auth": {
"guards": []
},
"entry_pc": 3264417681,
"selector": "0xbe040fb0",
"sinks": {
"call": 4,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 11,
"slots": [],
"writes": 8
}
},
{
"auth": {
"guards": []
},
"entry_pc": 3504541104,
"selector": "0xc2930f91",
"sinks": {
"call": 4,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 11,
"slots": [],
"writes": 8
}
},
{
"auth": {
"guards": []
},
"entry_pc": 3714247998,
"selector": "0xd0e30db0",
"sinks": {
"call": 4,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 11,
"slots": [],
"writes": 8
}
},
{
"auth": {
"guards": []
},
"entry_pc": 856,
"selector": "0xdd62ed3e",
"sinks": {
"call": 4,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0
},
"storage": {
"reads": 11,
"slots": [],
"writes": 8
}
}
],
"selectors": [
"0x06fdde03",
"0x095ea7b3",
"0x18160ddd",
"0x23b872dd",
"0x2e1a7d4d",
"0x313ce567",
"0x3177029f",
"0x70a08231",
"0x95d89b41",
"0xa9059cbb",
"0xbe040fb0",
"0xc2930f91",
"0xd0e30db0",
"0xdd62ed3e"
],
"sinks": {
"call": 4,
"create": 0,
"create2": 0,
"delegatecall": 0,
"selfdestruct": 0,
"staticcall": 0,
"upgrade_slot_write_suspected": false
},
"storage": {
"keccak_count": 24,
"reads": 11,
"slots": [],
"writes": 8
},
"version": "analysis_artifact_v1"
},
"block_number": null,
"chain_id": 1,
"codehash": "0x6a7f89334b0591d89510e73bbda2d71e7ad8ad436dd894e5afd6c5ebe494048a",
"created_at": "2026-04-04T19:57:44.000000Z",
"id": 2507,
"updated_at": "2026-04-04T19:57:44.000000Z",
"version": "analysis_artifact_v1"
},
"analysis_run": {
"address": "0x89d64bc7e46bdc49a89652ae9bb167418cbad62e",
"block_number": null,
"chain_id": 1,
"child_links": [],
"created_at": "2025-12-19T20:03:57.000000Z",
"id": "019b3836-3d2f-7228-a456-cb5fe5dd8c99",
"parent_links": [],
"status": "running",
"updated_at": "2026-04-04T19:57:44.000000Z"
},
"artifact": {
"codehash": "0x6a7f89334b0591d89510e73bbda2d71e7ad8ad436dd894e5afd6c5ebe494048a",
exec
/bin/bash -lc "sed -n '4010,4160p' BYTECODE_BUNDLE.json" in /tmp/codex-93zqp0qz
succeeded in 0ms:
"detector_findings": [
{
"confidence": 60,
"evidence_json": {
"call_count": 4,
"examples": [
{
"opcode": "CALL",
"pc": 914,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1121,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1157,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
}
],
"guards_detected": [],
"untrusted_call_count": 4
},
"normalized_json": {
"sink": "CALL"
},
"severity": "high",
"title": "Untrusted CALL target/value reachable",
"validated": true,
"validation_json": {
"attempts": 1,
"call_targets": [
"0x0000000000000000000000000000000000000004",
"0x89d64bc7e46bdc49a89652ae9bb167418cbad62e"
],
"classification": "target_varies",
"confirmed": true,
"errors": 0,
"matched_probe": null,
"sink": "CALL",
"status": "confirmed",
"target_varies": true,
"trace_id": "0x84bccb220bfdaddbac5d69282c6b12bb55609855784ce83310628aa3bcf202e6",
"trace_mode": "callTracer"
}
},
{
"confidence": 55,
"evidence_json": {
"eth_value_calls": 4,
"examples": [
{
"opcode": "CALL",
"pc": 914,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1121,
"returndata_checked": null,
"target_expression_category": "computed",
"value_expression_category": "computed"
},
{
"opcode": "CALL",
"pc": 1157,
"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",
"0x89d64bc7e46bdc49a89652ae9bb167418cbad62e"
],
"classification": "target_varies",
"confirmed": true,
"errors": 0,
"matched_probe": null,
"sink": "CALL",
"status": "confirmed",
"target_varies": true,
"trace_id": "0x84bccb220bfdaddbac5d69282c6b12bb55609855784ce83310628aa3bcf202e6",
"trace_mode": "callTracer"
}
}
],
"heuristics_summary": {
"create2_count": 0,
"delegatecall_count": 0,
"flags": [],
"selfdestruct_count": 0
}
}
exec
/bin/bash -lc "sed -n '2716,4010p' BYTECODE_BUNDLE.json" in /tmp/codex-93zqp0qz
succeeded in 0ms:
"compiler_json": {
"etherscan": {
"skipped": true
}
},
"implementation_address": null,
"is_proxy": false,
"runtime_bytecode": {
"full": "0x606060405236156100ae5760e060020a600035046306fdde0381146100b9578063095ea7b3146100f357806318160ddd1461016857806323b872dd146101865780632e1a7d4d146101cb578063313ce567146101fd5780633177029f1461020557806370a082311461021a57806395d89b411461023f578063a9059cbb14610279578063be040fb0146102bb578063c2930f91146102e0578063d0e30db0146102ef578063dd62ed3e14610324575b61035861035a6102f3565b61035c60408051808201909152601181527f457468657220546f6b656e2050726f7879000000000000000000000000000000602082015281565b6101746004356024355b600160a060020a03338116600081815260016020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b30600160a060020a0316315b60408051918252519081900360200190f35b6101746004356024356044355b600160a060020a0383811660009081526001602090815260408083203390941683529290529081205461059390835b80821015610162565b6101746004355b60406000908120600160a060020a033316825260208290525461043590835b600061077d83836101c2565b6103ca601281565b61017460043560243560006106f183836100fd565b610174600435600160a060020a0381166000908152602081905260409020545b919050565b61035c60408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015281565b610174600435602435600030600160a060020a031683600160a060020a031614806102ad575082600160a060020a03166000145b156104dc576104ff826101d2565b610358600160a060020a033316600090815260208190526040902054610432906101d2565b610174670de0b6b3a764000081565b6103585b600160a060020a0333166000908152602081905260409020546103e090345b60006107698383818101829011610162565b610174600435602435600160a060020a03828116600090815260016020908152604080832093851683529290522054610162565b005b565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156103bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6040805160ff9092168252519081900360200190f35b600160a060020a03331660008181526020818152604091829020939093558051348152905191927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c92918290030190a2565b50565b600160a060020a033316600081815260208190526040808220939093559151909190849082818181858883f1935050505015156104955733600160a060020a03165a60405184906000818181858888f19350505050151561049557610002565b604080518381529051600160a060020a033316917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250600161023a565b600160a060020a03331660009081526020819052604090205461050690836101f1565b9050610162565b600160a060020a0333811660009081526020819052604080822093909355908516815220546105359083610312565b600160a060020a03848116600081815260208181526040918290209490945580518681529051919333909316927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3506001610162565b151561059e57610002565b30600160a060020a031683600160a060020a031614806105c7575082600160a060020a03166000145b156105d7576105fa843384610193565b600160a060020a03841660009081526020819052604090205461068290836101f1565b151561060557610002565b61060e826101d2565b50610678565b600160a060020a038581166000818152600160209081526040808320338616845282529182902094909455805186815290519287169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35b5060019392505050565b600160a060020a0385811660009081526020819052604080822093909355908516815220546106b19083610312565b600160a060020a038481166000908152602081815260408083209490945587831682526001815283822033909316825291909152205461061490836101f1565b156107645782600160a060020a0316634889ca883384306040518460e060020a0281526004018084600160a060020a0316815260200183815260200182600160a060020a0316815260200193505050506000604051808303816000876161da5a03f1156100025750505060019050610162565b610002565b151561077457610002565b50818101610162565b151561078857610002565b5080820361016256",
"head": null,
"length": 3876,
"tail": null,
"truncated": false
},
"verified_source": false
},
"capability_graph": {
"address": "0x89d64bc7e46bdc49a89652ae9bb167418cbad62e",
"block_number": null,
"chain_id": 1,
"codehash": "0x6a7f89334b0591d89510e73bbda2d71e7ad8ad436dd894e5afd6c5ebe494048a",
"created_at": "2026-04-04T19:57:45.000000Z",
"graph_hash": "0xba4fb519ba52f679fb6610b3e90cbfaa70d0a0f5f890a57d51246a13d1cd5718",
"graph_json": {
"edges": [
{
"from": "bb:0",
"to": "bb:174",
"type": "control_flow"
},
{
"from": "bb:0",
"to": "bb:11",
"type": "control_flow_fallthrough"
},
{
"from": "bb:11",
"to": "bb:185",
"type": "control_flow"
},
{
"from": "bb:11",
"to": "bb:31",
"type": "control_flow_fallthrough"
},
{
"from": "bb:31",
"to": "bb:243",
"type": "control_flow"
},
{
"from": "bb:31",
"to": "bb:42",
"type": "control_flow_fallthrough"
},
{
"from": "bb:42",
"to": "bb:360",
"type": "control_flow"
},
{
"from": "bb:42",
"to": "bb:53",
"type": "control_flow_fallthrough"
},
{
"from": "bb:53",
"to": "bb:390",
"type": "control_flow"
},
{
"from": "bb:53",
"to": "bb:64",
"type": "control_flow_fallthrough"
},
{
"from": "bb:64",
"to": "bb:459",
"type": "control_flow"
},
{
"from": "bb:64",
"to": "bb:75",
"type": "control_flow_fallthrough"
},
{
"from": "bb:75",
"to": "bb:509",
"type": "control_flow"
},
{
"from": "bb:75",
"to": "bb:86",
"type": "control_flow_fallthrough"
},
{
"from": "bb:86",
"to": "bb:517",
"type": "control_flow"
},
{
"from": "bb:86",
"to": "bb:97",
"type": "control_flow_fallthrough"
},
{
"from": "bb:97",
"to": "bb:538",
"type": "control_flow"
},
{
"from": "bb:97",
"to": "bb:108",
"type": "control_flow_fallthrough"
},
{
"from": "bb:108",
"to": "bb:575",
"type": "control_flow"
},
{
"from": "bb:108",
"to": "bb:119",
"type": "control_flow_fallthrough"
},
{
"from": "bb:119",
"to": "bb:633",
"type": "control_flow"
},
{
"from": "bb:119",
"to": "bb:130",
"type": "control_flow_fallthrough"
},
{
"from": "bb:130",
"to": "bb:699",
"type": "control_flow"
},
{
"from": "bb:130",
"to": "bb:141",
"type": "control_flow_fallthrough"
},
{
"from": "bb:141",
"to": "bb:736",
"type": "control_flow"
},
{
"from": "bb:141",
"to": "bb:152",
"type": "control_flow_fallthrough"
},
{
"from": "bb:152",
"to": "bb:751",
"type": "control_flow"
},
{
"from": "bb:152",
"to": "bb:163",
"type": "control_flow_fallthrough"
},
{
"from": "bb:163",
"to": "bb:804",
"type": "control_flow"
},
{
"from": "bb:163",
"to": "bb:174",
"type": "control_flow_fallthrough"
},
{
"from": "bb:174",
"to": "bb:755",
"type": "control_flow"
},
{
"from": "bb:243",
"to": "bb:253",
"type": "control_flow_fallthrough"
},
{
"from": "bb:253",
"to": "bb:354",
"type": "control_flow_fallthrough"
},
{
"from": "bb:360",
"to": "bb:372",
"type": "control_flow_fallthrough"
},
{
"from": "bb:390",
"to": "bb:403",
"type": "control_flow_fallthrough"
},
{
"from": "bb:403",
"to": "bb:450",
"type": "control_flow_fallthrough"
},
{
"from": "bb:450",
"to": "bb:354",
"type": "control_flow"
},
{
"from": "bb:459",
"to": "bb:466",
"type": "control_flow_fallthrough"
},
{
"from": "bb:466",
"to": "bb:497",
"type": "control_flow_fallthrough"
},
{
"from": "bb:497",
"to": "bb:450",
"type": "control_flow"
},
{
"from": "bb:517",
"to": "bb:253",
"type": "control_flow"
},
{
"from": "bb:538",
"to": "bb:570",
"type": "control_flow_fallthrough"
},
{
"from": "bb:633",
"to": "bb:685",
"type": "control_flow"
},
{
"from": "bb:633",
"to": "bb:671",
"type": "control_flow_fallthrough"
},
{
"from": "bb:671",
"to": "bb:685",
"type": "control_flow_fallthrough"
},
{
"from": "bb:685",
"to": "bb:1244",
"type": "control_flow"
},
{
"from": "bb:685",
"to": "bb:691",
"type": "control_flow_fallthrough"
},
{
"from": "bb:691",
"to": "bb:466",
"type": "control_flow"
},
{
"from": "bb:699",
"to": "bb:466",
"type": "control_flow"
},
{
"from": "bb:751",
"to": "bb:755",
"type": "control_flow_fallthrough"
},
{
"from": "bb:755",
"to": "bb:786",
"type": "control_flow_fallthrough"
},
{
"from": "bb:786",
"to": "bb:354",
"type": "control_flow"
},
{
"from": "bb:804",
"to": "bb:354",
"type": "control_flow"
},
{
"from": "bb:860",
"to": "bb:956",
"type": "control_flow"
},
{
"from": "bb:860",
"to": "bb:931",
"type": "control_flow_fallthrough"
},
{
"from": "bb:931",
"to": "bb:956",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1077",
"to": "bb:1173",
"type": "control_flow"
},
{
"from": "bb:1077",
"to": "bb:1133",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1133",
"to": "bb:1173",
"type": "control_flow"
},
{
"from": "bb:1133",
"to": "bb:1169",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1173",
"to": "bb:570",
"type": "control_flow"
},
{
"from": "bb:1244",
"to": "bb:497",
"type": "control_flow"
},
{
"from": "bb:1279",
"to": "bb:354",
"type": "control_flow"
},
{
"from": "bb:1286",
"to": "bb:786",
"type": "control_flow"
},
{
"from": "bb:1333",
"to": "bb:354",
"type": "control_flow"
},
{
"from": "bb:1427",
"to": "bb:1438",
"type": "control_flow"
},
{
"from": "bb:1427",
"to": "bb:1434",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1438",
"to": "bb:1479",
"type": "control_flow"
},
{
"from": "bb:1438",
"to": "bb:1465",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1465",
"to": "bb:1479",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1479",
"to": "bb:1495",
"type": "control_flow"
},
{
"from": "bb:1479",
"to": "bb:1485",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1485",
"to": "bb:403",
"type": "control_flow"
},
{
"from": "bb:1495",
"to": "bb:497",
"type": "control_flow"
},
{
"from": "bb:1530",
"to": "bb:1541",
"type": "control_flow"
},
{
"from": "bb:1530",
"to": "bb:1537",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1541",
"to": "bb:466",
"type": "control_flow"
},
{
"from": "bb:1550",
"to": "bb:1656",
"type": "control_flow"
},
{
"from": "bb:1556",
"to": "bb:1656",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1666",
"to": "bb:786",
"type": "control_flow"
},
{
"from": "bb:1713",
"to": "bb:497",
"type": "control_flow"
},
{
"from": "bb:1777",
"to": "bb:1892",
"type": "control_flow"
},
{
"from": "bb:1777",
"to": "bb:1783",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1783",
"to": "bb:1881",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1881",
"to": "bb:354",
"type": "control_flow"
},
{
"from": "bb:1897",
"to": "bb:1908",
"type": "control_flow"
},
{
"from": "bb:1897",
"to": "bb:1904",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1908",
"to": "bb:354",
"type": "control_flow"
},
{
"from": "bb:1917",
"to": "bb:1928",
"type": "control_flow"
},
{
"from": "bb:1917",
"to": "bb:1924",
"type": "control_flow_fallthrough"
},
{
"from": "bb:1928",
"to": "bb:354",
"type": "control_flow"
},
{
"from": "fn:0x095ea7b3",
"to": "bb:404098525",
"type": "entry"
},
{
"from": "fn:0x18160ddd",
"to": "bb:599290589",
"type": "entry"
},
{
"from": "fn:0x23b872dd",
"to": "bb:773487949",
"type": "entry"
},
{
"from": "fn:0x2e1a7d4d",
"to": "bb:826074471",
"type": "entry"
},
{
"from": "fn:0x313ce567",
"to": "bb:829883039",
"type": "entry"
},
{
"from": "fn:0x3177029f",
"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:3187937200",
"type": "entry"
},
{
"from": "fn:0xbe040fb0",
"to": "bb:3264417681",
"type": "entry"
},
{
"from": "fn:0xc2930f91",
"to": "bb:3504541104",
"type": "entry"
},
{
"from": "fn:0xd0e30db0",
"to": "bb:3714247998",
"type": "entry"
},
{
"from": "fn:0xdd62ed3e",
"to": "bb:856",
"type": "entry"
},
{
"from": "bb:860",
"to": "call:914",
"type": "contains"
},
{
"from": "call:914",
"to": "sink:call",
"type": "capability"
},
{
"from": "bb:1077",
"to": "call:1121",
"type": "contains"
},
{
"from": "call:1121",
"to": "sink:call",
"type": "capability"
},
{
"from": "bb:1133",
"to": "call:1157",
"type": "contains"
},
{
"from": "call:1157",
"to": "sink:call",
"type": "capability"
},
{
"from": "bb:1783",
"to": "call:1875",
"type": "contains"
},
{
"from": "call:1875",
"to": "sink:call",
"type": "capability"
}
],
"nodes": [
{
"end_pc": 10,
"hash": "0xfd342fab7341c089cd1fdef11e74566bbd7ffa7ac4f4f86648f0fae109a15a10",
"id": "bb:0",
"start_pc": 0,
"type": "basic_block"
},
{
"end_pc": 30,
"hash": "0xc70ed12c4a201f457352f1081faa541ad2d0e9ed873ab7189672a232c2981e6e",
"id": "bb:11",
"start_pc": 11,
"type": "basic_block"
},
{
"end_pc": 41,
"hash": "0x7e830c354d9fcd430f148fd268924919107311ec603ed3fbc87b87c4e1960564",
"id": "bb:31",
"start_pc": 31,
"type": "basic_block"
},
{
"end_pc": 52,
"hash": "0xd93be9c242e8e8bcd06a655e8f68dbb5d8b907aa242921a0944db45226824ede",
"id": "bb:42",
"start_pc": 42,
"type": "basic_block"
},
{
"end_pc": 63,
"hash": "0xf975181aea2edf6392f2b3e648aae3b0eace6c9389a7f27039b8efc5164a8e38",
"id": "bb:53",
"start_pc": 53,
"type": "basic_block"
},
{
"end_pc": 74,
"hash": "0xec201f7d160fbd74016021109fe77370b8438cfcac697314b86ae1c86d82f322",
"id": "bb:64",
"start_pc": 64,
"type": "basic_block"
},
{
"end_pc": 85,
"hash": "0x636002e5a697d1dcd5c7931ece61b7c0d48436ac628d59c5a408a2e9400f02c9",
"id": "bb:75",
"start_pc": 75,
"type": "basic_block"
},
{
"end_pc": 96,
"hash": "0x1328f6b524d1fc36b2c4512aefec0e45764a7f6db1d8ad7899f090873660046c",
"id": "bb:86",
"start_pc": 86,
"type": "basic_block"
},
{
"end_pc": 107,
"hash": "0xbed031604407871b61edd7cace58d1544f4d0e479ecef720d39d40effd3f01ba",
"id": "bb:97",
"start_pc": 97,
"type": "basic_block"
},
{
"end_pc": 118,
"hash": "0x9a18ece7c39b64a99ade84949dd684558280dede1d8bd61d5592d509da2ecdf9",
"id": "bb:108",
"start_pc": 108,
"type": "basic_block"
},
{
"end_pc": 129,
"hash": "0xf4a506fa8e4cd123298dd1063f7f7960970ff32247692ba09cd00617ae4d7701",
"id": "bb:119",
"start_pc": 119,
"type": "basic_block"
},
{
"end_pc": 140,
"hash": "0xfe8115500eabb4976688d94720b09a11c50561226f88e28dc6085e1c3b7d9791",
"id": "bb:130",
"start_pc": 130,
"type": "basic_block"
},
{
"end_pc": 151,
"hash": "0xf4626f76328297acbd5909aa163add93b5e7603addd96eac28c1154711ae7a0f",
"id": "bb:141",
"start_pc": 141,
"type": "basic_block"
},
{
"end_pc": 162,
"hash": "0x56266f7e1e593719a66a4f6ccd4a22ca545b776461e75f102cec6cf0fdb8af8a",
"id": "bb:152",
"start_pc": 152,
"type": "basic_block"
},
{
"end_pc": 173,
"hash": "0x769b3c458606538f51b01c3a1ddb9e79d095c5a8c92ee881d3cbb93a3806a311",
"id": "bb:163",
"start_pc": 163,
"type": "basic_block"
},
{
"end_pc": 184,
"hash": "0x4416f9665fccfe1ee7f38dc8ab8b488e6db613488bc47fe8580c9536aa735fcd",
"id": "bb:174",
"start_pc": 174,
"type": "basic_block"
},
{
"end_pc": 242,
"hash": "0x071567ff5fa5a6290fa5438f77074089b30029b7b43196c80a1b8d02630ee578",
"id": "bb:185",
"start_pc": 185,
"type": "basic_block"
},
{
"end_pc": 252,
"hash": "0x28d0b72d37c730c9759802fa6751518184abfa2759f8fb9284a97b4fb1d9dc45",
"id": "bb:243",
"start_pc": 243,
"type": "basic_block"
},
{
"end_pc": 352,
"hash": "0xa0e8446f5149d3823eb8442cc85acb41e3388421994271f4b5d94e60cb087520",
"id": "bb:253",
"start_pc": 253,
"type": "basic_block"
},
{
"end_pc": 359,
"hash": "0x4d8bc2247ad8010c8edddb205dc0b06c427898328b9ffcd9e26831d9047ccdb4",
"id": "bb:354",
"start_pc": 354,
"type": "basic_block"
},
{
"end_pc": 371,
"hash": "0x05a734d8a18a90e66c505d9ccef00d4fcb9dcc52429aa0b6eacde4f178b80623",
"id": "bb:360",
"start_pc": 360,
"type": "basic_block"
},
{
"end_pc": 389,
"hash": "0x6e7a83245d3f639a8b56ba426e8a885e6e31aa3f2c7c6ef524518ae6803c6bf2",
"id": "bb:372",
"start_pc": 372,
"type": "basic_block"
},
{
"end_pc": 402,
"hash": "0x897d04a880ed47744257ed84a58a6143f90b19fa7c35e80bbb7a7b3e04319369",
"id": "bb:390",
"start_pc": 390,
"type": "basic_block"
},
{
"end_pc": 449,
"hash": "0x2e73799c2b3388bea73d5a1e0cc1fb601235956fc815eb2c5071af5b5dd3245a",
"id": "bb:403",
"start_pc": 403,
"type": "basic_block"
},
{
"end_pc": 458,
"hash": "0x7eea9569e8d05f23ebbc4a6bb56103080a8d3eae4a100019c916325485f9222f",
"id": "bb:450",
"start_pc": 450,
"type": "basic_block"
},
{
"end_pc": 465,
"hash": "0x7c13111516c714346733c1ab2ce3c1a8f61022418d8d95498f1f64723f1c59ec",
"id": "bb:459",
"start_pc": 459,
"type": "basic_block"
},
{
"end_pc": 496,
"hash": "0xd92416a5b810761d87694f668182f11f85800a637c00f7ba9e8f777749c7662c",
"id": "bb:466",
"start_pc": 466,
"type": "basic_block"
},
{
"end_pc": 508,
"hash": "0xde6918f4f615d59610c0df3236e55c923e484c7e1a9821f376a5e52a507be4bf",
"id": "bb:497",
"start_pc": 497,
"type": "basic_block"
},
{
"end_pc": 516,
"hash": "0x26334aca6ad69bb178aad6c13033c6110beb858ae04af261a955758a8ce044a5",
"id": "bb:509",
"start_pc": 509,
"type": "basic_block"
},
{
"end_pc": 537,
"hash": "0x2c52e56d3386fb994d86a22180c2b3a0bf05945d054e4763123c9d37ba4d120f",
"id": "bb:517",
"start_pc": 517,
"type": "basic_block"
},
{
"end_pc": 569,
"hash": "0xc00a4352d1c1dd17e5763fb056e28afe15ce4626fe15df711672832f8dac65f6",
"id": "bb:538",
"start_pc": 538,
"type": "basic_block"
},
{
"end_pc": 574,
"hash": "0x333696bb916c914e5eda6a103eb651058293a77b6db1f1384dfe163a972e7c37",
"id": "bb:570",
"start_pc": 570,
"type": "basic_block"
},
{
"end_pc": 632,
"hash": "0x7971888f38d9199c190d342cc99b737435818c9561d8c57ef164649d408a385b",
"id": "bb:575",
"start_pc": 575,
"type": "basic_block"
},
{
"end_pc": 670,
"hash": "0xa34e61fb1fb0a52f84fa1ba76ade029b9a4955fc174b2050d2ce3f16353743f3",
"id": "bb:633",
"start_pc": 633,
"type": "basic_block"
},
{
"end_pc": 684,
"hash": "0xf7764b6b920f5196f69a817e1acc11dcd46b96c870d7ce46bf63a9f8494302ee",
"id": "bb:671",
"start_pc": 671,
"type": "basic_block"
},
{
"end_pc": 690,
"hash": "0xaf23793769a8057a0cb0e7ef5b2f54434eb5440a24d76831783779eb73f982f7",
"id": "bb:685",
"start_pc": 685,
"type": "basic_block"
},
{
"end_pc": 698,
"hash": "0x41b9235c231c48a79764052a52d0615a16765ad41aad15379ebe05f9a5e5f417",
"id": "bb:691",
"start_pc": 691,
"type": "basic_block"
},
{
"end_pc": 735,
"hash": "0x96b5efda6c1108192dd2d71f0f222f3b9ca2317a57c397281804f972d925a006",
"id": "bb:699",
"start_pc": 699,
"type": "basic_block"
},
{
"end_pc": 750,
"hash": "0x78001396a596948e9b3ccf2b07fa1bcb3bd0175a90d144823a039fd0ace4a952",
"id": "bb:736",
"start_pc": 736,
"type": "basic_block"
},
{
"end_pc": 752,
"hash": "0x61e13f8bf1a1cb34d48bb5361bbcf49e7b618f6411399a7f97f10243fa536b3a",
"id": "bb:751",
"start_pc": 751,
"type": "basic_block"
},
{
"end_pc": 785,
"hash": "0x6cf9df8598c411c244cd06f30ec88941a320520cc6b8281886b9a110f7cbc564",
"id": "bb:755",
"start_pc": 755,
"type": "basic_block"
},
{
"end_pc": 803,
"hash": "0xa3dc20337019f44a380d910e02ac78acc985ee2b9573afe6fd7a9d468f253460",
"id": "bb:786",
"start_pc": 786,
"type": "basic_block"
},
{
"end_pc": 855,
"hash": "0xf49d017af4521fd1514fc0913a273d502140eee57ed5f32a1b858f7eb68b6976",
"id": "bb:804",
"start_pc": 804,
"type": "basic_block"
},
{
"end_pc": 857,
"hash": "0xdc4ff9509e72f588ac609e805c2b0a607c059fc386152a84b2646cc3ecf475c8",
"id": "bb:856",
"start_pc": 856,
"type": "basic_block"
},
{
"end_pc": 859,
"hash": "0x958058fc31de007fb13f9a24445d43f9f9b5e47a55e26d9b6ae3f80c15966753",
"id": "bb:858",
"start_pc": 858,
"type": "basic_block"
},
{
"end_pc": 930,
"hash": "0x312db89ede37ccd528c81b052d5771c79cdffa2deffd58291af1138445f87c4d",
"id": "bb:860",
"start_pc": 860,
"type": "basic_block"
},
{
"end_pc": 955,
"hash": "0x15bc4685886b0559e4ca82eebb6bd925cbc72f578f620b4bf5dd4da4917772d8",
"id": "bb:931",
"start_pc": 931,
"type": "basic_block"
},
{
"end_pc": 969,
"hash": "0xe49bc88a2b041ffacb2c9a056dc12e9accbe4b67b938f618d59324cd9e0c9469",
"id": "bb:956",
"start_pc": 956,
"type": "basic_block"
},
{
"end_pc": 991,
"hash": "0x2056ec4e73cd45ded28623f1fde31b7199b7014a57f169e8e00523fb35bbaea5",
"id": "bb:970",
"start_pc": 970,
"type": "basic_block"
},
{
"end_pc": 1073,
"hash": "0x72ed84ee73cafd25449d7b1d9b6455a741af74fdf6d58d98d4e476e0451b2a67",
"id": "bb:992",
"start_pc": 992,
"type": "basic_block"
},
{
"end_pc": 1076,
"hash": "0x9ef29df57e5689b5ffe35acb31952e4725fe312bb3d3697db7b52302cfdf6a46",
"id": "bb:1074",
"start_pc": 1074,
"type": "basic_block"
},
{
"end_pc": 1132,
"hash": "0x0b9008bc0355c08b31635ef87aa26d385010c46ad2b357f12871a3a66fa0c417",
"id": "bb:1077",
"start_pc": 1077,
"type": "basic_block"
},
{
"end_pc": 1168,
"hash": "0x605b10d86a93ca758bb554c4adaba666da47700c984bb9b32179784057ad3912",
"id": "bb:1133",
"start_pc": 1133,
"type": "basic_block"
},
{
"end_pc": 1172,
"hash": "0xc0d1af9b6a213f7e750526dcf639e4f406ef287846d83c54abc7f4eba244fe2b",
"id": "bb:1169",
"start_pc": 1169,
"type": "basic_block"
},
{
"end_pc": 1243,
"hash": "0xd7aa5bc978adceb44b414535a4ea6c862da7a107e78b1e2fdcd04aaede5f888f",
"id": "bb:1173",
"start_pc": 1173,
"type": "basic_block"
},
{
"end_pc": 1278,
"hash": "0x089f9f5b8aa1243157adb6b313477a46472fcd12552df98504a0e988c9a0ae03",
"id": "bb:1244",
"start_pc": 1244,
"type": "basic_block"
},
{
"end_pc": 1285,
"hash": "0x2467103003d7205a14a1cd9b04fa5f36db1d6277f7e0b2da22926d9f34b93c17",
"id": "bb:1279",
"start_pc": 1279,
"type": "basic_block"
},
{
"end_pc": 1332,
"hash": "0x5c00f5737c77f9f4d02f0fa5f175c3c6bc232a2ec00aa30440920c42af0788f2",
"id": "bb:1286",
"start_pc": 1286,
"type": "basic_block"
},
{
"end_pc": 1426,
"hash": "0x254afd3f69bef8f8867c8ef785507d63df140f93f3104ab19762f688e7ea0ee3",
"id": "bb:1333",
"start_pc": 1333,
"type": "basic_block"
},
{
"end_pc": 1433,
"hash": "0xc1904f503499c50de4a20027e0e4d53d1c7486432f275aef056171cf4757f1b9",
"id": "bb:1427",
"start_pc": 1427,
"type": "basic_block"
},
{
"end_pc": 1437,
"hash": "0xfe8b836b2690efb4cf848a3fb768a0bca3b52ad98f740fc82496251685f9391d",
"id": "bb:1434",
"start_pc": 1434,
"type": "basic_block"
},
{
"end_pc": 1464,
"hash": "0x74455ac233703f4848faadb5cfc7e31bd85145f589527867ee38256cea5cf6c5",
"id": "bb:1438",
"start_pc": 1438,
"type": "basic_block"
},
{
"end_pc": 1478,
"hash": "0x6037c78b2adba608b0fc8f39844844fe2e614fdbb8ea002f4bd8cdc5dd8e5dc3",
"id": "bb:1465",
"start_pc": 1465,
"type": "basic_block"
},
{
"end_pc": 1484,
"hash": "0xcce1e76c478effbd68785a68ef98e1e19e86bfd242da3d679a6acd466b0d71e7",
"id": "bb:1479",
"start_pc": 1479,
"type": "basic_block"
},
{
"end_pc": 1494,
"hash": "0x5b92363071616b81c1699d2c1fd2497d1dc702d611e099a966190c75208347ec",
"id": "bb:1485",
"start_pc": 1485,
"type": "basic_block"
},
{
"end_pc": 1529,
"hash": "0xdcec2b8889c096d15bccb00bfe1e7d5d0a036b5f4571ff2b5d7d7672b2b78c57",
"id": "bb:1495",
"start_pc": 1495,
"type": "basic_block"
},
{
"end_pc": 1536,
"hash": "0x01d0916ca4c807f9e618604ff31061511c8becc09126fff21a75877ad0d9d891",
"id": "bb:1530",
"start_pc": 1530,
"type": "basic_block"
},
{
"end_pc": 1540,
"hash": "0x8b35c27770753c27328f72051e22d4d6d5ebbe70b744db2218707bfa4c973249",
"id": "bb:1537",
"start_pc": 1537,
"type": "basic_block"
},
{
"end_pc": 1549,
"hash": "0x8d1a9725de8b94a06d952cf3dccf7a60a056f613405cd3fca587c1c51a959081",
"id": "bb:1541",
"start_pc": 1541,
"type": "basic_block"
},
{
"end_pc": 1555,
"hash": "0x9d20ebdb5bbadaff599163ef7678bcd68dad7612349358e4a4c4097fb9046e75",
"id": "bb:1550",
"start_pc": 1550,
"type": "basic_block"
},
{
"end_pc": 1655,
"hash": "0x03f178a0d725d3fc887a88b283abfbb20f1ce5bd57d3aeef93ca7623d69d67b5",
"id": "bb:1556",
"start_pc": 1556,
"type": "basic_block"
},
{
"end_pc": 1665,
"hash": "0xdef2bcb2d1300ee7fa3a28ddd7e171d7ba12903ade81308390db778b24be6f13",
"id": "bb:1656",
"start_pc": 1656,
"type": "basic_block"
},
{
"end_pc": 1712,
"hash": "0x8774022cd9ef10070574bbad2d978c697880d350de8abb94dd49a171fc880efd",
"id": "bb:1666",
"start_pc": 1666,
"type": "basic_block"
},
{
"end_pc": 1776,
"hash": "0x94be26d5ec0cb15d2f8d1b94eeb8b329125edfab390999ecafff54563dd65e6b",
"id": "bb:1713",
"start_pc": 1713,
"type": "basic_block"
},
{
"end_pc": 1782,
"hash": "0x61c72ab0caceb09cc0b426883f21c7ceec3d7f4fd9a1e5746887b49041e98311",
"id": "bb:1777",
"start_pc": 1777,
"type": "basic_block"
},
{
"end_pc": 1880,
"hash": "0x099a5c7e13ad74081a3d99f9f8a36e14df6ef8af1f8445aa9175a27abe3b063e",
"id": "bb:1783",
"start_pc": 1783,
"type": "basic_block"
},
{
"end_pc": 1891,
"hash": "0x6b77a513738c8aa55a68438c6caac1bc2b96c7bfbb1e8e873c87c5f4c895aae7",
"id": "bb:1881",
"start_pc": 1881,
"type": "basic_block"
},
{
"end_pc": 1896,
"hash": "0x89569bb11d637e430071517748af0bb04384b8c9d2e4f93dd5a9c14bf39c912e",
"id": "bb:1892",
"start_pc": 1892,
"type": "basic_block"
},
{
"end_pc": 1903,
"hash": "0xc17258eedf558b32572a06ce5f7d05f9a632347f4486cf414fc8ee1de9db80f1",
"id": "bb:1897",
"start_pc": 1897,
"type": "basic_block"
},
{
"end_pc": 1907,
"hash": "0x8d8c043f82ba2e7cdc531625ff102db4a56fbe189a0e9c6c9c4f4ee7815ca44a",
"id": "bb:1904",
"start_pc": 1904,
"type": "basic_block"
},
{
"end_pc": 1916,
"hash": "0x555b0722918dcc578185df7bac7f11ee486e593aa7fd9905036a9b754e97bcc4",
"id": "bb:1908",
"start_pc": 1908,
"type": "basic_block"
},
{
"end_pc": 1923,
"hash": "0x196249de90782f90680dcbf33cba2f6223e1dc222471a8df5f1b94346aa05a67",
"id": "bb:1917",
"start_pc": 1917,
"type": "basic_block"
},
{
"end_pc": 1927,
"hash": "0xbf07d4712faf2391ad37cae99b09f548286e5f2f10c155f718e42d5da8d2682f",
"id": "bb:1924",
"start_pc": 1924,
"type": "basic_block"
},
{
"end_pc": 1936,
"hash": "0x6dcf4e7c8ac1bac1475b61bfecbb3d8156b2be48f720986c3954485286e73b00",
"id": "bb:1928",
"start_pc": 1928,
"type": "basic_block"
},
{
"id": "call:914",
"opcode": "CALL",
"pc": 914,
"type": "callsite"
},
{
"id": "call:1121",
"opcode": "CALL",
"pc": 1121,
"type": "callsite"
},
{
"id": "call:1157",
"opcode": "CALL",
"pc": 1157,
"type": "callsite"
},
{
"id": "call:1875",
"opcode": "CALL",
"pc": 1875,
"type": "callsite"
},
{
"id": "sink:call",
"type": "sink"
},
{
"entry_pc": null,
"id": "fn:0x06fdde03",
"selector": "0x06fdde03",
"type": "function"
},
{
"entry_pc": 404098525,
"id": "fn:0x095ea7b3",
"selector": "0x095ea7b3",
"type": "function"
},
{
"entry_pc": 599290589,
"id": "fn:0x18160ddd",
"selector": "0x18160ddd",
"type": "function"
},
{
"entry_pc": 773487949,
"id": "fn:0x23b872dd",
"selector": "0x23b872dd",
"type": "function"
},
{
"entry_pc": 826074471,
"id": "fn:0x2e1a7d4d",
"selector": "0x2e1a7d4d",
"type": "function"
},
{
"entry_pc": 829883039,
"id": "fn:0x313ce567",
"selector": "0x313ce567",
"type": "function"
},
{
"entry_pc": 1889567281,
"id": "fn:0x3177029f",
"selector": "0x3177029f",
"type": "function"
},
{
"entry_pc": 2514000705,
"id": "fn:0x70a08231",
"selector": "0x70a08231",
"type": "function"
},
{
"entry_pc": 2835717307,
"id": "fn:0x95d89b41",
"selector": "0x95d89b41",
"type": "function"
},
{
"entry_pc": 3187937200,
"id": "fn:0xa9059cbb",
"selector": "0xa9059cbb",
"type": "function"
},
{
"entry_pc": 3264417681,
"id": "fn:0xbe040fb0",
"selector": "0xbe040fb0",
"type": "function"
},
{
"entry_pc": 3504541104,
"id": "fn:0xc2930f91",
"selector": "0xc2930f91",
"type": "function"
},
{
"entry_pc": 3714247998,
"id": "fn:0xd0e30db0",
"selector": "0xd0e30db0",
"type": "function"
},
{
"entry_pc": 856,
"id": "fn:0xdd62ed3e",
"selector": "0xdd62ed3e",
"type": "function"
}
],
"version": "capability_graph_v1"
},
"id": 2506,
"updated_at": "2026-04-04T19:57:45.000000Z",
"version": "capability_graph_v1"
},
"detector_findings": [
exec
/bin/bash -lc "node -e 'const fs=require(\"fs\");const j=JSON.parse(fs.readFileSync(\"BYTECODE_BUNDLE.json\",\"utf8\"));const ops=j.analysis_artifact.artifact_json.basic_blocks.flatMap(bb=>bb.opcodes.map((op,i)=>({pc:bb.start_pc+i,op,bb:bb.start_pc}))); for (const pc of [860,914,992,1077,1121,1133,1157,1173,1244,1286,1333,1438,1495,1556,1666,1713,1783,1875]) { const s=ops.filter(x=>x.pc>=pc-8&&x.pc<=pc+8); console.log(\"--- pc\",pc); for(const x of s) console.log(x.pc,x.op,\"bb\",x.bb); }'" in /tmp/codex-93zqp0qz
succeeded in 0ms:
--- pc 860
856 JUMPDEST bb 856
857 STOP bb 856
858 JUMPDEST bb 858
859 JUMP bb 858
860 JUMPDEST bb 860
861 PUSH1 bb 860
862 MLOAD bb 860
863 OP_80 bb 860
864 OP_80 bb 860
865 PUSH1 bb 860
866 ADD bb 860
867 OP_82 bb 860
868 OP_81 bb 860
--- pc 914
906 OP_90 bb 860
907 POP bb 860
908 OP_90 bb 860
909 OP_81 bb 860
910 ADD bb 860
911 OP_90 bb 860
912 PUSH1 bb 860
913 AND bb 860
914 OP_80 bb 860
915 ISZERO bb 860
916 PUSH2 bb 860
917 JUMPI bb 860
--- pc 992
984 SUB bb 970
985 PUSH1 bb 970
986 ADD bb 970
987 OP_90 bb 970
988 RETURN bb 970
992 JUMPDEST bb 992
993 PUSH1 bb 992
994 PUSH1 bb 992
995 PUSH1 bb 992
996 EXP bb 992
997 SUB bb 992
998 CALLER bb 992
999 AND bb 992
1000 PUSH1 bb 992
--- pc 1077
1074 JUMPDEST bb 1074
1075 POP bb 1074
1076 JUMP bb 1074
1077 JUMPDEST bb 1077
1078 PUSH1 bb 1077
1079 PUSH1 bb 1077
1080 PUSH1 bb 1077
1081 EXP bb 1077
1082 SUB bb 1077
1083 CALLER bb 1077
1084 AND bb 1077
1085 PUSH1 bb 1077
--- pc 1121
1113 OP_88 bb 1077
1114 OP_83 bb 1077
1115 CALL bb 1077
1116 OP_93 bb 1077
1117 POP bb 1077
1118 POP bb 1077
1119 POP bb 1077
1120 POP bb 1077
1121 ISZERO bb 1077
1122 ISZERO bb 1077
1123 PUSH2 bb 1077
1124 JUMPI bb 1077
--- pc 1133
1133 CALLER bb 1133
1134 PUSH1 bb 1133
1135 PUSH1 bb 1133
1136 PUSH1 bb 1133
1137 EXP bb 1133
1138 SUB bb 1133
1139 AND bb 1133
1140 GAS bb 1133
1141 PUSH1 bb 1133
--- pc 1157
1149 OP_85 bb 1133
1150 OP_88 bb 1133
1151 OP_88 bb 1133
1152 CALL bb 1133
1153 OP_93 bb 1133
1154 POP bb 1133
1155 POP bb 1133
1156 POP bb 1133
1157 POP bb 1133
1158 ISZERO bb 1133
1159 ISZERO bb 1133
1160 PUSH2 bb 1133
1161 JUMPI bb 1133
--- pc 1173
1169 PUSH2 bb 1169
1170 JUMP bb 1169
1173 JUMPDEST bb 1173
1174 PUSH1 bb 1173
1175 OP_80 bb 1173
1176 MLOAD bb 1173
1177 OP_83 bb 1173
1178 OP_81 bb 1173
1179 MSTORE bb 1173
1180 OP_90 bb 1173
1181 MLOAD bb 1173
--- pc 1244
1244 JUMPDEST bb 1244
1245 PUSH1 bb 1244
1246 PUSH1 bb 1244
1247 PUSH1 bb 1244
1248 EXP bb 1244
1249 SUB bb 1244
1250 CALLER bb 1244
1251 AND bb 1244
1252 PUSH1 bb 1244
--- pc 1286
1279 JUMPDEST bb 1279
1280 OP_90 bb 1279
1281 POP bb 1279
1282 PUSH2 bb 1279
1283 JUMP bb 1279
1286 JUMPDEST bb 1286
1287 PUSH1 bb 1286
1288 PUSH1 bb 1286
1289 PUSH1 bb 1286
1290 EXP bb 1286
1291 SUB bb 1286
1292 CALLER bb 1286
1293 OP_81 bb 1286
1294 AND bb 1286
--- pc 1333
1333 JUMPDEST bb 1333
1334 PUSH1 bb 1333
1335 PUSH1 bb 1333
1336 PUSH1 bb 1333
1337 EXP bb 1333
1338 SUB bb 1333
1339 OP_84 bb 1333
1340 OP_81 bb 1333
1341 AND bb 1333
--- pc 1438
1430 PUSH2 bb 1427
1431 JUMPI bb 1427
1434 PUSH2 bb 1434
1435 JUMP bb 1434
1438 JUMPDEST bb 1438
1439 ADDRESS bb 1438
1440 PUSH1 bb 1438
1441 PUSH1 bb 1438
1442 PUSH1 bb 1438
1443 EXP bb 1438
1444 SUB bb 1438
1445 AND bb 1438
1446 OP_83 bb 1438
--- pc 1495
1487 CALLER bb 1485
1488 OP_84 bb 1485
1489 PUSH2 bb 1485
1490 JUMP bb 1485
1495 JUMPDEST bb 1495
1496 PUSH1 bb 1495
1497 PUSH1 bb 1495
1498 PUSH1 bb 1495
1499 EXP bb 1495
1500 SUB bb 1495
1501 OP_84 bb 1495
1502 AND bb 1495
1503 PUSH1 bb 1495
--- pc 1556
1550 JUMPDEST bb 1550
1551 POP bb 1550
1552 PUSH2 bb 1550
1553 JUMP bb 1550
1556 JUMPDEST bb 1556
1557 PUSH1 bb 1556
1558 PUSH1 bb 1556
1559 PUSH1 bb 1556
1560 EXP bb 1556
1561 SUB bb 1556
1562 OP_85 bb 1556
1563 OP_81 bb 1556
1564 AND bb 1556
--- pc 1666
1658 PUSH1 bb 1656
1659 OP_93 bb 1656
1660 OP_92 bb 1656
1661 POP bb 1656
1662 POP bb 1656
1663 POP bb 1656
1664 JUMP bb 1656
1666 JUMPDEST bb 1666
1667 PUSH1 bb 1666
1668 PUSH1 bb 1666
1669 PUSH1 bb 1666
1670 EXP bb 1666
1671 SUB bb 1666
1672 OP_85 bb 1666
1673 OP_81 bb 1666
1674 AND bb 1666
--- pc 1713
1713 JUMPDEST bb 1713
1714 PUSH1 bb 1713
1715 PUSH1 bb 1713
1716 PUSH1 bb 1713
1717 EXP bb 1713
1718 SUB bb 1713
1719 OP_84 bb 1713
1720 OP_81 bb 1713
1721 AND bb 1713
--- pc 1783
1777 JUMPDEST bb 1777
1778 ISZERO bb 1777
1779 PUSH2 bb 1777
1780 JUMPI bb 1777
1783 OP_82 bb 1783
1784 PUSH1 bb 1783
1785 PUSH1 bb 1783
1786 PUSH1 bb 1783
1787 EXP bb 1783
1788 SUB bb 1783
1789 AND bb 1783
1790 PUSH4 bb 1783
1791 CALLER bb 1783
--- pc 1875
1881 POP bb 1881
1882 POP bb 1881
1883 POP bb 1881
exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const hex=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8')).artifact.runtime_bytecode.full.slice(2);
const names={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',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'};
for(let i=1;i<=16;i++){names[0x5f+i]='PUSH'+i;names[0x7f+i]='DUP'+i;names[0x8f+i]='SWAP'+i;}
for(let i=0;i<5;i++)names[0xa0+i]='LOG'+i;
let pc=0; const ops=[];
for(let i=0;i<hex.length;){const op=parseInt(hex.slice(i,i+2),16); let imm=''; let len=1; if(op>=0x60&&op<=0x7f){const n=op-0x5f; imm=hex.slice(i+2,i+2+2*n); len=1+n;} ops.push({pc, op, name:names[op]||('OP_'+op.toString(16)), imm}); i+=2*len; pc+=len;}
const interesting=[0,11,174,185,243,253,354,360,390,403,450,459,466,497,509,517,538,575,633,699,755,804,860,992,1077,1133,1173,1244,1286,1333,1438,1495,1556,1666,1713,1783,1892];
for(const start of interesting){
console.log('\\n=== from pc',start,'===');
for(const o of ops.filter(x=>x.pc>=start && x.pc<start+80)) console.log(String(o.pc).padStart(4),o.name,o.imm||'');
}
NODE" in /tmp/codex-93zqp0qz
succeeded in 0ms:
=== from pc 0 ===
0 PUSH1 60
2 PUSH1 40
4 MSTORE
5 CALLDATASIZE
6 ISZERO
7 PUSH2 00ae
10 JUMPI
11 PUSH1 e0
13 PUSH1 02
15 EXP
16 PUSH1 00
18 CALLDATALOAD
19 DIV
20 PUSH4 06fdde03
25 DUP2
26 EQ
27 PUSH2 00b9
30 JUMPI
31 DUP1
32 PUSH4 095ea7b3
37 EQ
38 PUSH2 00f3
41 JUMPI
42 DUP1
43 PUSH4 18160ddd
48 EQ
49 PUSH2 0168
52 JUMPI
53 DUP1
54 PUSH4 23b872dd
59 EQ
60 PUSH2 0186
63 JUMPI
64 DUP1
65 PUSH4 2e1a7d4d
70 EQ
71 PUSH2 01cb
74 JUMPI
75 DUP1
76 PUSH4 313ce567
=== from pc 11 ===
11 PUSH1 e0
13 PUSH1 02
15 EXP
16 PUSH1 00
18 CALLDATALOAD
19 DIV
20 PUSH4 06fdde03
25 DUP2
26 EQ
27 PUSH2 00b9
30 JUMPI
31 DUP1
32 PUSH4 095ea7b3
37 EQ
38 PUSH2 00f3
41 JUMPI
42 DUP1
43 PUSH4 18160ddd
48 EQ
49 PUSH2 0168
52 JUMPI
53 DUP1
54 PUSH4 23b872dd
59 EQ
60 PUSH2 0186
63 JUMPI
64 DUP1
65 PUSH4 2e1a7d4d
70 EQ
71 PUSH2 01cb
74 JUMPI
75 DUP1
76 PUSH4 313ce567
81 EQ
82 PUSH2 01fd
85 JUMPI
86 DUP1
87 PUSH4 3177029f
=== from pc 174 ===
174 JUMPDEST
175 PUSH2 0358
178 PUSH2 035a
181 PUSH2 02f3
184 JUMP
185 JUMPDEST
186 PUSH2 035c
189 PUSH1 40
191 DUP1
192 MLOAD
193 DUP1
194 DUP3
195 ADD
196 SWAP1
197 SWAP2
198 MSTORE
199 PUSH1 11
201 DUP2
202 MSTORE
203 OP_7f 457468657220546f6b656e2050726f7879000000000000000000000000000000
236 PUSH1 20
238 DUP3
239 ADD
240 MSTORE
241 DUP2
242 JUMP
243 JUMPDEST
244 PUSH2 0174
247 PUSH1 04
249 CALLDATALOAD
250 PUSH1 24
252 CALLDATALOAD
253 JUMPDEST
=== from pc 185 ===
185 JUMPDEST
186 PUSH2 035c
189 PUSH1 40
191 DUP1
192 MLOAD
193 DUP1
194 DUP3
195 ADD
196 SWAP1
197 SWAP2
198 MSTORE
199 PUSH1 11
201 DUP2
202 MSTORE
203 OP_7f 457468657220546f6b656e2050726f7879000000000000000000000000000000
236 PUSH1 20
238 DUP3
239 ADD
240 MSTORE
241 DUP2
242 JUMP
243 JUMPDEST
244 PUSH2 0174
247 PUSH1 04
249 CALLDATALOAD
250 PUSH1 24
252 CALLDATALOAD
253 JUMPDEST
254 PUSH1 01
256 PUSH1 a0
258 PUSH1 02
260 EXP
261 SUB
262 CALLER
263 DUP2
264 AND
=== from pc 243 ===
243 JUMPDEST
244 PUSH2 0174
247 PUSH1 04
249 CALLDATALOAD
250 PUSH1 24
252 CALLDATALOAD
253 JUMPDEST
254 PUSH1 01
256 PUSH1 a0
258 PUSH1 02
260 EXP
261 SUB
262 CALLER
263 DUP2
264 AND
265 PUSH1 00
267 DUP2
268 DUP2
269 MSTORE
270 PUSH1 01
272 PUSH1 20
274 SWAP1
275 DUP2
276 MSTORE
277 PUSH1 40
279 DUP1
280 DUP4
281 SHA3
282 SWAP5
283 DUP8
284 AND
285 DUP1
286 DUP5
287 MSTORE
288 SWAP5
289 DUP3
290 MSTORE
291 DUP1
292 DUP4
293 SHA3
294 DUP7
295 SWAP1
296 SSTORE
297 DUP1
298 MLOAD
299 DUP7
300 DUP2
301 MSTORE
302 SWAP1
303 MLOAD
304 SWAP3
305 SWAP5
306 SWAP4
307 SWAP3
308 OP_7f 8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925
=== from pc 253 ===
253 JUMPDEST
254 PUSH1 01
256 PUSH1 a0
258 PUSH1 02
260 EXP
261 SUB
262 CALLER
263 DUP2
264 AND
265 PUSH1 00
267 DUP2
268 DUP2
269 MSTORE
270 PUSH1 01
272 PUSH1 20
274 SWAP1
275 DUP2
276 MSTORE
277 PUSH1 40
279 DUP1
280 DUP4
281 SHA3
282 SWAP5
283 DUP8
284 AND
285 DUP1
286 DUP5
287 MSTORE
288 SWAP5
289 DUP3
290 MSTORE
291 DUP1
292 DUP4
293 SHA3
294 DUP7
295 SWAP1
296 SSTORE
297 DUP1
298 MLOAD
299 DUP7
300 DUP2
301 MSTORE
302 SWAP1
303 MLOAD
304 SWAP3
305 SWAP5
306 SWAP4
307 SWAP3
308 OP_7f 8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925
=== from pc 354 ===
354 JUMPDEST
355 SWAP3
356 SWAP2
357 POP
358 POP
359 JUMP
360 JUMPDEST
361 ADDRESS
362 PUSH1 01
364 PUSH1 a0
366 PUSH1 02
368 EXP
369 SUB
370 AND
371 BALANCE
372 JUMPDEST
373 PUSH1 40
375 DUP1
376 MLOAD
377 SWAP2
378 DUP3
379 MSTORE
380 MLOAD
381 SWAP1
382 DUP2
383 SWAP1
384 SUB
385 PUSH1 20
387 ADD
388 SWAP1
389 RETURN
390 JUMPDEST
391 PUSH2 0174
394 PUSH1 04
396 CALLDATALOAD
397 PUSH1 24
399 CALLDATALOAD
400 PUSH1 44
402 CALLDATALOAD
403 JUMPDEST
404 PUSH1 01
406 PUSH1 a0
408 PUSH1 02
410 EXP
411 SUB
412 DUP4
413 DUP2
414 AND
415 PUSH1 00
417 SWAP1
418 DUP2
419 MSTORE
420 PUSH1 01
422 PUSH1 20
424 SWAP1
425 DUP2
426 MSTORE
427 PUSH1 40
429 DUP1
430 DUP4
431 SHA3
432 CALLER
433 SWAP1
=== from pc 360 ===
360 JUMPDEST
361 ADDRESS
362 PUSH1 01
364 PUSH1 a0
366 PUSH1 02
368 EXP
369 SUB
370 AND
371 BALANCE
372 JUMPDEST
373 PUSH1 40
375 DUP1
376 MLOAD
377 SWAP2
378 DUP3
379 MSTORE
380 MLOAD
381 SWAP1
382 DUP2
383 SWAP1
384 SUB
385 PUSH1 20
387 ADD
388 SWAP1
389 RETURN
390 JUMPDEST
391 PUSH2 0174
394 PUSH1 04
396 CALLDATALOAD
397 PUSH1 24
399 CALLDATALOAD
400 PUSH1 44
402 CALLDATALOAD
403 JUMPDEST
404 PUSH1 01
406 PUSH1 a0
408 PUSH1 02
410 EXP
411 SUB
412 DUP4
413 DUP2
414 AND
415 PUSH1 00
417 SWAP1
418 DUP2
419 MSTORE
420 PUSH1 01
422 PUSH1 20
424 SWAP1
425 DUP2
426 MSTORE
427 PUSH1 40
429 DUP1
430 DUP4
431 SHA3
432 CALLER
433 SWAP1
434 SWAP5
435 AND
436 DUP4
437 MSTORE
438 SWAP3
439 SWAP1
=== from pc 390 ===
390 JUMPDEST
391 PUSH2 0174
394 PUSH1 04
396 CALLDATALOAD
397 PUSH1 24
399 CALLDATALOAD
400 PUSH1 44
402 CALLDATALOAD
403 JUMPDEST
404 PUSH1 01
406 PUSH1 a0
408 PUSH1 02
410 EXP
411 SUB
412 DUP4
413 DUP2
414 AND
415 PUSH1 00
417 SWAP1
418 DUP2
419 MSTORE
420 PUSH1 01
422 PUSH1 20
424 SWAP1
425 DUP2
426 MSTORE
427 PUSH1 40
429 DUP1
430 DUP4
431 SHA3
432 CALLER
433 SWAP1
434 SWAP5
435 AND
436 DUP4
437 MSTORE
438 SWAP3
439 SWAP1
440 MSTORE
441 SWAP1
442 DUP2
443 SHA3
444 SLOAD
445 PUSH2 0593
448 SWAP1
449 DUP4
450 JUMPDEST
451 DUP1
452 DUP3
453 LT
454 ISZERO
455 PUSH2 0162
458 JUMP
459 JUMPDEST
460 PUSH2 0174
463 PUSH1 04
465 CALLDATALOAD
466 JUMPDEST
467 PUSH1 40
469 PUSH1 00
=== from pc 403 ===
403 JUMPDEST
404 PUSH1 01
406 PUSH1 a0
408 PUSH1 02
410 EXP
411 SUB
412 DUP4
413 DUP2
414 AND
415 PUSH1 00
417 SWAP1
418 DUP2
419 MSTORE
420 PUSH1 01
422 PUSH1 20
424 SWAP1
425 DUP2
426 MSTORE
427 PUSH1 40
429 DUP1
430 DUP4
431 SHA3
432 CALLER
433 SWAP1
434 SWAP5
435 AND
436 DUP4
437 MSTORE
438 SWAP3
439 SWAP1
440 MSTORE
441 SWAP1
442 DUP2
443 SHA3
444 SLOAD
445 PUSH2 0593
448 SWAP1
449 DUP4
450 JUMPDEST
451 DUP1
452 DUP3
453 LT
454 ISZERO
455 PUSH2 0162
458 JUMP
459 JUMPDEST
460 PUSH2 0174
463 PUSH1 04
465 CALLDATALOAD
466 JUMPDEST
467 PUSH1 40
469 PUSH1 00
471 SWAP1
472 DUP2
473 SHA3
474 PUSH1 01
476 PUSH1 a0
478 PUSH1 02
480 EXP
481 SUB
482 CALLER
=== from pc 450 ===
450 JUMPDEST
451 DUP1
452 DUP3
453 LT
454 ISZERO
455 PUSH2 0162
458 JUMP
459 JUMPDEST
460 PUSH2 0174
463 PUSH1 04
465 CALLDATALOAD
466 JUMPDEST
467 PUSH1 40
469 PUSH1 00
471 SWAP1
472 DUP2
473 SHA3
474 PUSH1 01
476 PUSH1 a0
478 PUSH1 02
480 EXP
481 SUB
482 CALLER
483 AND
484 DUP3
485 MSTORE
486 PUSH1 20
488 DUP3
489 SWAP1
490 MSTORE
491 SLOAD
492 PUSH2 0435
495 SWAP1
496 DUP4
497 JUMPDEST
498 PUSH1 00
500 PUSH2 077d
503 DUP4
504 DUP4
505 PUSH2 01c2
508 JUMP
509 JUMPDEST
510 PUSH2 03ca
513 PUSH1 12
515 DUP2
516 JUMP
517 JUMPDEST
518 PUSH2 0174
521 PUSH1 04
523 CALLDATALOAD
524 PUSH1 24
526 CALLDATALOAD
527 PUSH1 00
529 PUSH2 06f1
=== from pc 459 ===
459 JUMPDEST
460 PUSH2 0174
463 PUSH1 04
465 CALLDATALOAD
466 JUMPDEST
467 PUSH1 40
469 PUSH1 00
471 SWAP1
472 DUP2
473 SHA3
474 PUSH1 01
476 PUSH1 a0
478 PUSH1 02
480 EXP
481 SUB
482 CALLER
483 AND
484 DUP3
485 MSTORE
486 PUSH1 20
488 DUP3
489 SWAP1
490 MSTORE
491 SLOAD
492 PUSH2 0435
495 SWAP1
496 DUP4
497 JUMPDEST
498 PUSH1 00
500 PUSH2 077d
503 DUP4
504 DUP4
505 PUSH2 01c2
508 JUMP
509 JUMPDEST
510 PUSH2 03ca
513 PUSH1 12
515 DUP2
516 JUMP
517 JUMPDEST
518 PUSH2 0174
521 PUSH1 04
523 CALLDATALOAD
524 PUSH1 24
526 CALLDATALOAD
527 PUSH1 00
529 PUSH2 06f1
532 DUP4
533 DUP4
534 PUSH2 00fd
537 JUMP
538 JUMPDEST
=== from pc 466 ===
466 JUMPDEST
467 PUSH1 40
469 PUSH1 00
471 SWAP1
472 DUP2
473 SHA3
474 PUSH1 01
476 PUSH1 a0
478 PUSH1 02
480 EXP
481 SUB
482 CALLER
483 AND
484 DUP3
485 MSTORE
486 PUSH1 20
488 DUP3
489 SWAP1
490 MSTORE
491 SLOAD
492 PUSH2 0435
495 SWAP1
496 DUP4
497 JUMPDEST
498 PUSH1 00
500 PUSH2 077d
503 DUP4
504 DUP4
505 PUSH2 01c2
508 JUMP
509 JUMPDEST
510 PUSH2 03ca
513 PUSH1 12
515 DUP2
516 JUMP
517 JUMPDEST
518 PUSH2 0174
521 PUSH1 04
523 CALLDATALOAD
524 PUSH1 24
526 CALLDATALOAD
527 PUSH1 00
529 PUSH2 06f1
532 DUP4
533 DUP4
534 PUSH2 00fd
537 JUMP
538 JUMPDEST
539 PUSH2 0174
542 PUSH1 04
544 CALLDATALOAD
545 PUSH1 01
=== from pc 497 ===
497 JUMPDEST
498 PUSH1 00
500 PUSH2 077d
503 DUP4
504 DUP4
505 PUSH2 01c2
508 JUMP
509 JUMPDEST
510 PUSH2 03ca
513 PUSH1 12
515 DUP2
516 JUMP
517 JUMPDEST
518 PUSH2 0174
521 PUSH1 04
523 CALLDATALOAD
524 PUSH1 24
526 CALLDATALOAD
527 PUSH1 00
529 PUSH2 06f1
532 DUP4
533 DUP4
534 PUSH2 00fd
537 JUMP
538 JUMPDEST
539 PUSH2 0174
542 PUSH1 04
544 CALLDATALOAD
545 PUSH1 01
547 PUSH1 a0
549 PUSH1 02
551 EXP
552 SUB
553 DUP2
554 AND
555 PUSH1 00
557 SWAP1
558 DUP2
559 MSTORE
560 PUSH1 20
562 DUP2
563 SWAP1
564 MSTORE
565 PUSH1 40
567 SWAP1
568 SHA3
569 SLOAD
570 JUMPDEST
571 SWAP2
572 SWAP1
573 POP
574 JUMP
575 JUMPDEST
576 PUSH2 035c
=== from pc 509 ===
509 JUMPDEST
510 PUSH2 03ca
513 PUSH1 12
515 DUP2
516 JUMP
517 JUMPDEST
518 PUSH2 0174
521 PUSH1 04
523 CALLDATALOAD
524 PUSH1 24
526 CALLDATALOAD
527 PUSH1 00
529 PUSH2 06f1
532 DUP4
533 DUP4
534 PUSH2 00fd
537 JUMP
538 JUMPDEST
539 PUSH2 0174
542 PUSH1 04
544 CALLDATALOAD
545 PUSH1 01
547 PUSH1 a0
549 PUSH1 02
551 EXP
552 SUB
553 DUP2
554 AND
555 PUSH1 00
557 SWAP1
558 DUP2
559 MSTORE
560 PUSH1 20
562 DUP2
563 SWAP1
564 MSTORE
565 PUSH1 40
567 SWAP1
568 SHA3
569 SLOAD
570 JUMPDEST
571 SWAP2
572 SWAP1
573 POP
574 JUMP
575 JUMPDEST
576 PUSH2 035c
579 PUSH1 40
581 DUP1
582 MLOAD
583 DUP1
584 DUP3
585 ADD
586 SWAP1
587 SWAP2
588 MSTORE
=== from pc 517 ===
517 JUMPDEST
518 PUSH2 0174
521 PUSH1 04
523 CALLDATALOAD
524 PUSH1 24
526 CALLDATALOAD
527 PUSH1 00
529 PUSH2 06f1
532 DUP4
533 DUP4
534 PUSH2 00fd
537 JUMP
538 JUMPDEST
539 PUSH2 0174
542 PUSH1 04
544 CALLDATALOAD
545 PUSH1 01
547 PUSH1 a0
549 PUSH1 02
551 EXP
552 SUB
553 DUP2
554 AND
555 PUSH1 00
557 SWAP1
558 DUP2
559 MSTORE
560 PUSH1 20
562 DUP2
563 SWAP1
564 MSTORE
565 PUSH1 40
567 SWAP1
568 SHA3
569 SLOAD
570 JUMPDEST
571 SWAP2
572 SWAP1
573 POP
574 JUMP
575 JUMPDEST
576 PUSH2 035c
579 PUSH1 40
581 DUP1
582 MLOAD
583 DUP1
584 DUP3
585 ADD
586 SWAP1
587 SWAP2
588 MSTORE
589 PUSH1 03
591 DUP2
592 MSTORE
593 OP_7f 4554480000000000000000000000000000000000000000000000000000000000
=== from pc 538 ===
538 JUMPDEST
539 PUSH2 0174
542 PUSH1 04
544 CALLDATALOAD
545 PUSH1 01
547 PUSH1 a0
549 PUSH1 02
551 EXP
552 SUB
553 DUP2
554 AND
555 PUSH1 00
557 SWAP1
558 DUP2
559 MSTORE
560 PUSH1 20
562 DUP2
563 SWAP1
564 MSTORE
565 PUSH1 40
567 SWAP1
568 SHA3
569 SLOAD
570 JUMPDEST
571 SWAP2
572 SWAP1
573 POP
574 JUMP
575 JUMPDEST
576 PUSH2 035c
579 PUSH1 40
581 DUP1
582 MLOAD
583 DUP1
584 DUP3
585 ADD
586 SWAP1
587 SWAP2
588 MSTORE
589 PUSH1 03
591 DUP2
592 MSTORE
593 OP_7f 4554480000000000000000000000000000000000000000000000000000000000
=== from pc 575 ===
575 JUMPDEST
576 PUSH2 035c
579 PUSH1 40
581 DUP1
582 MLOAD
583 DUP1
584 DUP3
585 ADD
586 SWAP1
587 SWAP2
588 MSTORE
589 PUSH1 03
591 DUP2
592 MSTORE
593 OP_7f 4554480000000000000000000000000000000000000000000000000000000000
626 PUSH1 20
628 DUP3
629 ADD
630 MSTORE
631 DUP2
632 JUMP
633 JUMPDEST
634 PUSH2 0174
637 PUSH1 04
639 CALLDATALOAD
640 PUSH1 24
642 CALLDATALOAD
643 PUSH1 00
645 ADDRESS
646 PUSH1 01
648 PUSH1 a0
650 PUSH1 02
652 EXP
653 SUB
654 AND
=== from pc 633 ===
633 JUMPDEST
634 PUSH2 0174
637 PUSH1 04
639 CALLDATALOAD
640 PUSH1 24
642 CALLDATALOAD
643 PUSH1 00
645 ADDRESS
646 PUSH1 01
648 PUSH1 a0
650 PUSH1 02
652 EXP
653 SUB
654 AND
655 DUP4
656 PUSH1 01
658 PUSH1 a0
660 PUSH1 02
662 EXP
663 SUB
664 AND
665 EQ
666 DUP1
667 PUSH2 02ad
670 JUMPI
671 POP
672 DUP3
673 PUSH1 01
675 PUSH1 a0
677 PUSH1 02
679 EXP
680 SUB
681 AND
682 PUSH1 00
684 EQ
685 JUMPDEST
686 ISZERO
687 PUSH2 04dc
690 JUMPI
691 PUSH2 04ff
694 DUP3
695 PUSH2 01d2
698 JUMP
699 JUMPDEST
700 PUSH2 0358
703 PUSH1 01
705 PUSH1 a0
707 PUSH1 02
709 EXP
710 SUB
711 CALLER
712 AND
=== from pc 699 ===
699 JUMPDEST
700 PUSH2 0358
703 PUSH1 01
705 PUSH1 a0
707 PUSH1 02
709 EXP
710 SUB
711 CALLER
712 AND
713 PUSH1 00
715 SWAP1
716 DUP2
717 MSTORE
718 PUSH1 20
720 DUP2
721 SWAP1
722 MSTORE
723 PUSH1 40
725 SWAP1
726 SHA3
727 SLOAD
728 PUSH2 0432
731 SWAP1
732 PUSH2 01d2
735 JUMP
736 JUMPDEST
737 PUSH2 0174
740 PUSH8 0de0b6b3a7640000
749 DUP2
750 JUMP
751 JUMPDEST
752 PUSH2 0358
755 JUMPDEST
756 PUSH1 01
758 PUSH1 a0
760 PUSH1 02
762 EXP
763 SUB
764 CALLER
765 AND
766 PUSH1 00
768 SWAP1
769 DUP2
770 MSTORE
771 PUSH1 20
773 DUP2
774 SWAP1
775 MSTORE
776 PUSH1 40
778 SWAP1
=== from pc 755 ===
755 JUMPDEST
756 PUSH1 01
758 PUSH1 a0
760 PUSH1 02
762 EXP
763 SUB
764 CALLER
765 AND
766 PUSH1 00
768 SWAP1
769 DUP2
770 MSTORE
771 PUSH1 20
773 DUP2
774 SWAP1
775 MSTORE
776 PUSH1 40
778 SWAP1
779 SHA3
780 SLOAD
781 PUSH2 03e0
784 SWAP1
785 CALLVALUE
786 JUMPDEST
787 PUSH1 00
789 PUSH2 0769
792 DUP4
793 DUP4
794 DUP2
795 DUP2
796 ADD
797 DUP3
798 SWAP1
799 GT
800 PUSH2 0162
803 JUMP
804 JUMPDEST
805 PUSH2 0174
808 PUSH1 04
810 CALLDATALOAD
811 PUSH1 24
813 CALLDATALOAD
814 PUSH1 01
816 PUSH1 a0
818 PUSH1 02
820 EXP
821 SUB
822 DUP3
823 DUP2
824 AND
825 PUSH1 00
827 SWAP1
828 DUP2
829 MSTORE
830 PUSH1 01
832 PUSH1 20
834 SWAP1
=== from pc 804 ===
804 JUMPDEST
805 PUSH2 0174
808 PUSH1 04
810 CALLDATALOAD
811 PUSH1 24
813 CALLDATALOAD
814 PUSH1 01
816 PUSH1 a0
818 PUSH1 02
820 EXP
821 SUB
822 DUP3
823 DUP2
824 AND
825 PUSH1 00
827 SWAP1
828 DUP2
829 MSTORE
830 PUSH1 01
832 PUSH1 20
834 SWAP1
835 DUP2
836 MSTORE
837 PUSH1 40
839 DUP1
840 DUP4
841 SHA3
842 SWAP4
843 DUP6
844 AND
845 DUP4
846 MSTORE
847 SWAP3
848 SWAP1
849 MSTORE
850 SHA3
851 SLOAD
852 PUSH2 0162
855 JUMP
856 JUMPDEST
857 STOP
858 JUMPDEST
859 JUMP
860 JUMPDEST
861 PUSH1 40
863 MLOAD
864 DUP1
865 DUP1
866 PUSH1 20
868 ADD
869 DUP3
870 DUP2
871 SUB
872 DUP3
873 MSTORE
874 DUP4
875 DUP2
876 DUP2
877 MLOAD
878 DUP2
879 MSTORE
880 PUSH1 20
882 ADD
883 SWAP2
=== from pc 860 ===
860 JUMPDEST
861 PUSH1 40
863 MLOAD
864 DUP1
865 DUP1
866 PUSH1 20
868 ADD
869 DUP3
870 DUP2
871 SUB
872 DUP3
873 MSTORE
874 DUP4
875 DUP2
876 DUP2
877 MLOAD
878 DUP2
879 MSTORE
880 PUSH1 20
882 ADD
883 SWAP2
884 POP
885 DUP1
886 MLOAD
887 SWAP1
888 PUSH1 20
890 ADD
891 SWAP1
892 DUP1
893 DUP4
894 DUP4
895 DUP3
896 SWAP1
897 PUSH1 00
899 PUSH1 04
901 PUSH1 20
903 DUP5
904 PUSH1 1f
906 ADD
907 DIV
908 PUSH1 0f
910 MUL
911 PUSH1 03
913 ADD
914 CALL
915 POP
916 SWAP1
917 POP
918 SWAP1
919 DUP2
920 ADD
921 SWAP1
922 PUSH1 1f
924 AND
925 DUP1
926 ISZERO
927 PUSH2 03bc
930 JUMPI
931 DUP1
932 DUP3
933 SUB
934 DUP1
935 MLOAD
936 PUSH1 01
938 DUP4
939 PUSH1 20
=== from pc 992 ===
992 JUMPDEST
993 PUSH1 01
995 PUSH1 a0
997 PUSH1 02
999 EXP
1000 SUB
1001 CALLER
1002 AND
1003 PUSH1 00
1005 DUP2
1006 DUP2
1007 MSTORE
1008 PUSH1 20
1010 DUP2
1011 DUP2
1012 MSTORE
1013 PUSH1 40
1015 SWAP2
1016 DUP3
1017 SWAP1
1018 SHA3
1019 SWAP4
1020 SWAP1
1021 SWAP4
1022 SSTORE
1023 DUP1
1024 MLOAD
1025 CALLVALUE
1026 DUP2
1027 MSTORE
1028 SWAP1
1029 MLOAD
1030 SWAP2
1031 SWAP3
1032 OP_7f e1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c
1065 SWAP3
1066 SWAP2
1067 DUP3
1068 SWAP1
1069 SUB
1070 ADD
1071 SWAP1
=== from pc 1077 ===
1077 JUMPDEST
1078 PUSH1 01
1080 PUSH1 a0
1082 PUSH1 02
1084 EXP
1085 SUB
1086 CALLER
1087 AND
1088 PUSH1 00
1090 DUP2
1091 DUP2
1092 MSTORE
1093 PUSH1 20
1095 DUP2
1096 SWAP1
1097 MSTORE
1098 PUSH1 40
1100 DUP1
1101 DUP3
1102 SHA3
1103 SWAP4
1104 SWAP1
1105 SWAP4
1106 SSTORE
1107 SWAP2
1108 MLOAD
1109 SWAP1
1110 SWAP2
1111 SWAP1
1112 DUP5
1113 SWAP1
1114 DUP3
1115 DUP2
1116 DUP2
1117 DUP2
1118 DUP6
1119 DUP9
1120 DUP4
1121 CALL
1122 SWAP4
1123 POP
1124 POP
1125 POP
1126 POP
1127 ISZERO
1128 ISZERO
1129 PUSH2 0495
1132 JUMPI
1133 CALLER
1134 PUSH1 01
1136 PUSH1 a0
1138 PUSH1 02
1140 EXP
1141 SUB
1142 AND
1143 GAS
1144 PUSH1 40
1146 MLOAD
1147 DUP5
1148 SWAP1
1149 PUSH1 00
1151 DUP2
1152 DUP2
1153 DUP2
1154 DUP6
1155 DUP9
1156 DUP9
=== from pc 1133 ===
1133 CALLER
1134 PUSH1 01
1136 PUSH1 a0
1138 PUSH1 02
1140 EXP
1141 SUB
1142 AND
1143 GAS
1144 PUSH1 40
1146 MLOAD
1147 DUP5
1148 SWAP1
1149 PUSH1 00
1151 DUP2
1152 DUP2
1153 DUP2
1154 DUP6
1155 DUP9
1156 DUP9
1157 CALL
1158 SWAP4
1159 POP
1160 POP
1161 POP
1162 POP
1163 ISZERO
1164 ISZERO
1165 PUSH2 0495
1168 JUMPI
1169 PUSH2 0002
1172 JUMP
1173 JUMPDEST
1174 PUSH1 40
1176 DUP1
1177 MLOAD
1178 DUP4
1179 DUP2
1180 MSTORE
1181 SWAP1
1182 MLOAD
1183 PUSH1 01
1185 PUSH1 a0
1187 PUSH1 02
1189 EXP
1190 SUB
1191 CALLER
1192 AND
1193 SWAP2
1194 OP_7f 7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65
=== from pc 1173 ===
1173 JUMPDEST
1174 PUSH1 40
1176 DUP1
1177 MLOAD
1178 DUP4
1179 DUP2
1180 MSTORE
1181 SWAP1
1182 MLOAD
1183 PUSH1 01
1185 PUSH1 a0
1187 PUSH1 02
1189 EXP
1190 SUB
1191 CALLER
1192 AND
1193 SWAP2
1194 OP_7f 7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65
1227 SWAP2
1228 SWAP1
1229 DUP2
1230 SWAP1
1231 SUB
1232 PUSH1 20
1234 ADD
1235 SWAP1
1236 LOG2
1237 POP
1238 PUSH1 01
1240 PUSH2 023a
1243 JUMP
1244 JUMPDEST
1245 PUSH1 01
1247 PUSH1 a0
1249 PUSH1 02
1251 EXP
1252 SUB
=== from pc 1244 ===
1244 JUMPDEST
1245 PUSH1 01
1247 PUSH1 a0
1249 PUSH1 02
1251 EXP
1252 SUB
1253 CALLER
1254 AND
1255 PUSH1 00
1257 SWAP1
1258 DUP2
1259 MSTORE
1260 PUSH1 20
1262 DUP2
1263 SWAP1
1264 MSTORE
1265 PUSH1 40
1267 SWAP1
1268 SHA3
1269 SLOAD
1270 PUSH2 0506
1273 SWAP1
1274 DUP4
1275 PUSH2 01f1
1278 JUMP
1279 JUMPDEST
1280 SWAP1
1281 POP
1282 PUSH2 0162
1285 JUMP
1286 JUMPDEST
1287 PUSH1 01
1289 PUSH1 a0
1291 PUSH1 02
1293 EXP
1294 SUB
1295 CALLER
1296 DUP2
1297 AND
1298 PUSH1 00
1300 SWAP1
1301 DUP2
1302 MSTORE
1303 PUSH1 20
1305 DUP2
1306 SWAP1
1307 MSTORE
1308 PUSH1 40
1310 DUP1
1311 DUP3
1312 SHA3
1313 SWAP4
1314 SWAP1
1315 SWAP4
1316 SSTORE
1317 SWAP1
1318 DUP6
1319 AND
1320 DUP2
1321 MSTORE
1322 SHA3
1323 SLOAD
=== from pc 1286 ===
1286 JUMPDEST
1287 PUSH1 01
1289 PUSH1 a0
1291 PUSH1 02
1293 EXP
1294 SUB
1295 CALLER
1296 DUP2
1297 AND
1298 PUSH1 00
1300 SWAP1
1301 DUP2
1302 MSTORE
1303 PUSH1 20
1305 DUP2
1306 SWAP1
1307 MSTORE
1308 PUSH1 40
1310 DUP1
1311 DUP3
1312 SHA3
1313 SWAP4
1314 SWAP1
1315 SWAP4
1316 SSTORE
1317 SWAP1
1318 DUP6
1319 AND
1320 DUP2
1321 MSTORE
1322 SHA3
1323 SLOAD
1324 PUSH2 0535
1327 SWAP1
1328 DUP4
1329 PUSH2 0312
1332 JUMP
1333 JUMPDEST
1334 PUSH1 01
1336 PUSH1 a0
1338 PUSH1 02
1340 EXP
1341 SUB
1342 DUP5
1343 DUP2
1344 AND
1345 PUSH1 00
1347 DUP2
1348 DUP2
1349 MSTORE
1350 PUSH1 20
1352 DUP2
1353 DUP2
1354 MSTORE
1355 PUSH1 40
1357 SWAP2
1358 DUP3
1359 SWAP1
1360 SHA3
1361 SWAP5
1362 SWAP1
1363 SWAP5
1364 SSTORE
1365 DUP1
=== from pc 1333 ===
1333 JUMPDEST
1334 PUSH1 01
1336 PUSH1 a0
1338 PUSH1 02
1340 EXP
1341 SUB
1342 DUP5
1343 DUP2
1344 AND
1345 PUSH1 00
1347 DUP2
1348 DUP2
1349 MSTORE
1350 PUSH1 20
1352 DUP2
1353 DUP2
1354 MSTORE
1355 PUSH1 40
1357 SWAP2
1358 DUP3
1359 SWAP1
1360 SHA3
1361 SWAP5
1362 SWAP1
1363 SWAP5
1364 SSTORE
1365 DUP1
1366 MLOAD
1367 DUP7
1368 DUP2
1369 MSTORE
1370 SWAP1
1371 MLOAD
1372 SWAP2
1373 SWAP4
1374 CALLER
1375 SWAP1
1376 SWAP4
1377 AND
1378 SWAP3
1379 OP_7f ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
1412 SWAP3
=== from pc 1438 ===
1438 JUMPDEST
1439 ADDRESS
1440 PUSH1 01
1442 PUSH1 a0
1444 PUSH1 02
1446 EXP
1447 SUB
1448 AND
1449 DUP4
1450 PUSH1 01
1452 PUSH1 a0
1454 PUSH1 02
1456 EXP
1457 SUB
1458 AND
1459 EQ
1460 DUP1
1461 PUSH2 05c7
1464 JUMPI
1465 POP
1466 DUP3
1467 PUSH1 01
1469 PUSH1 a0
1471 PUSH1 02
1473 EXP
1474 SUB
1475 AND
1476 PUSH1 00
1478 EQ
1479 JUMPDEST
1480 ISZERO
1481 PUSH2 05d7
1484 JUMPI
1485 PUSH2 05fa
1488 DUP5
1489 CALLER
1490 DUP5
1491 PUSH2 0193
1494 JUMP
1495 JUMPDEST
1496 PUSH1 01
1498 PUSH1 a0
1500 PUSH1 02
1502 EXP
1503 SUB
1504 DUP5
1505 AND
1506 PUSH1 00
1508 SWAP1
1509 DUP2
1510 MSTORE
1511 PUSH1 20
1513 DUP2
1514 SWAP1
1515 MSTORE
1516 PUSH1 40
=== from pc 1495 ===
1495 JUMPDEST
1496 PUSH1 01
1498 PUSH1 a0
1500 PUSH1 02
1502 EXP
1503 SUB
1504 DUP5
1505 AND
1506 PUSH1 00
1508 SWAP1
1509 DUP2
1510 MSTORE
1511 PUSH1 20
1513 DUP2
1514 SWAP1
1515 MSTORE
1516 PUSH1 40
1518 SWAP1
1519 SHA3
1520 SLOAD
1521 PUSH2 0682
1524 SWAP1
1525 DUP4
1526 PUSH2 01f1
1529 JUMP
1530 JUMPDEST
1531 ISZERO
1532 ISZERO
1533 PUSH2 0605
1536 JUMPI
1537 PUSH2 0002
1540 JUMP
1541 JUMPDEST
1542 PUSH2 060e
1545 DUP3
1546 PUSH2 01d2
1549 JUMP
1550 JUMPDEST
1551 POP
1552 PUSH2 0678
1555 JUMP
1556 JUMPDEST
1557 PUSH1 01
1559 PUSH1 a0
1561 PUSH1 02
1563 EXP
1564 SUB
1565 DUP6
1566 DUP2
1567 AND
1568 PUSH1 00
1570 DUP2
1571 DUP2
1572 MSTORE
1573 PUSH1 01
=== from pc 1556 ===
1556 JUMPDEST
1557 PUSH1 01
1559 PUSH1 a0
1561 PUSH1 02
1563 EXP
1564 SUB
1565 DUP6
1566 DUP2
1567 AND
1568 PUSH1 00
1570 DUP2
1571 DUP2
1572 MSTORE
1573 PUSH1 01
1575 PUSH1 20
1577 SWAP1
1578 DUP2
1579 MSTORE
1580 PUSH1 40
1582 DUP1
1583 DUP4
1584 SHA3
1585 CALLER
1586 DUP7
1587 AND
1588 DUP5
1589 MSTORE
1590 DUP3
1591 MSTORE
1592 SWAP2
1593 DUP3
1594 SWAP1
1595 SHA3
1596 SWAP5
1597 SWAP1
1598 SWAP5
1599 SSTORE
1600 DUP1
1601 MLOAD
1602 DUP7
1603 DUP2
1604 MSTORE
1605 SWAP1
1606 MLOAD
1607 SWAP3
1608 DUP8
1609 AND
1610 SWAP4
1611 SWAP2
1612 SWAP3
1613 OP_7f ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
=== from pc 1666 ===
1666 JUMPDEST
1667 PUSH1 01
1669 PUSH1 a0
1671 PUSH1 02
1673 EXP
1674 SUB
1675 DUP6
1676 DUP2
1677 AND
1678 PUSH1 00
1680 SWAP1
1681 DUP2
1682 MSTORE
1683 PUSH1 20
1685 DUP2
1686 SWAP1
1687 MSTORE
1688 PUSH1 40
1690 DUP1
1691 DUP3
1692 SHA3
1693 SWAP4
1694 SWAP1
1695 SWAP4
1696 SSTORE
1697 SWAP1
1698 DUP6
1699 AND
1700 DUP2
1701 MSTORE
1702 SHA3
1703 SLOAD
1704 PUSH2 06b1
1707 SWAP1
1708 DUP4
1709 PUSH2 0312
1712 JUMP
1713 JUMPDEST
1714 PUSH1 01
1716 PUSH1 a0
1718 PUSH1 02
1720 EXP
1721 SUB
1722 DUP5
1723 DUP2
1724 AND
1725 PUSH1 00
1727 SWAP1
1728 DUP2
1729 MSTORE
1730 PUSH1 20
1732 DUP2
1733 DUP2
1734 MSTORE
1735 PUSH1 40
1737 DUP1
1738 DUP4
1739 SHA3
1740 SWAP5
1741 SWAP1
1742 SWAP5
1743 SSTORE
1744 DUP8
1745 DUP4
=== from pc 1713 ===
1713 JUMPDEST
1714 PUSH1 01
1716 PUSH1 a0
1718 PUSH1 02
1720 EXP
1721 SUB
1722 DUP5
1723 DUP2
1724 AND
1725 PUSH1 00
1727 SWAP1
1728 DUP2
1729 MSTORE
1730 PUSH1 20
1732 DUP2
1733 DUP2
1734 MSTORE
1735 PUSH1 40
1737 DUP1
1738 DUP4
1739 SHA3
1740 SWAP5
1741 SWAP1
1742 SWAP5
1743 SSTORE
1744 DUP8
1745 DUP4
1746 AND
1747 DUP3
1748 MSTORE
1749 PUSH1 01
1751 DUP2
1752 MSTORE
1753 DUP4
1754 DUP3
1755 SHA3
1756 CALLER
1757 SWAP1
1758 SWAP4
1759 AND
1760 DUP3
1761 MSTORE
1762 SWAP2
1763 SWAP1
1764 SWAP2
1765 MSTORE
1766 SHA3
1767 SLOAD
1768 PUSH2 0614
1771 SWAP1
1772 DUP4
1773 PUSH2 01f1
1776 JUMP
1777 JUMPDEST
1778 ISZERO
1779 PUSH2 0764
1782 JUMPI
1783 DUP3
1784 PUSH1 01
1786 PUSH1 a0
1788 PUSH1 02
1790 EXP
1791 SUB
1792 AND
=== from pc 1783 ===
1783 DUP3
1784 PUSH1 01
1786 PUSH1 a0
1788 PUSH1 02
1790 EXP
1791 SUB
1792 AND
1793 PUSH4 4889ca88
1798 CALLER
1799 DUP5
1800 ADDRESS
1801 PUSH1 40
1803 MLOAD
1804 DUP5
1805 PUSH1 e0
1807 PUSH1 02
1809 EXP
1810 MUL
1811 DUP2
1812 MSTORE
1813 PUSH1 04
1815 ADD
1816 DUP1
1817 DUP5
1818 PUSH1 01
1820 PUSH1 a0
1822 PUSH1 02
1824 EXP
1825 SUB
1826 AND
1827 DUP2
1828 MSTORE
1829 PUSH1 20
1831 ADD
1832 DUP4
1833 DUP2
1834 MSTORE
1835 PUSH1 20
1837 ADD
1838 DUP3
1839 PUSH1 01
1841 PUSH1 a0
1843 PUSH1 02
1845 EXP
1846 SUB
1847 AND
1848 DUP2
1849 MSTORE
1850 PUSH1 20
1852 ADD
1853 SWAP4
1854 POP
1855 POP
1856 POP
1857 POP
1858 PUSH1 00
1860 PUSH1 40
1862 MLOAD
=== from pc 1892 ===
1892 JUMPDEST
1893 PUSH2 0002
1896 JUMP
1897 JUMPDEST
1898 ISZERO
1899 ISZERO
1900 PUSH2 0774
1903 JUMPI
1904 PUSH2 0002
1907 JUMP
1908 JUMPDEST
1909 POP
1910 DUP2
1911 DUP2
1912 ADD
1913 PUSH2 0162
1916 JUMP
1917 JUMPDEST
1918 ISZERO
1919 ISZERO
1920 PUSH2 0788
1923 JUMPI
1924 PUSH2 0002
1927 JUMP
1928 JUMPDEST
1929 POP
1930 DUP1
1931 DUP3
1932 SUB
1933 PUSH2 0162
1936 JUMP
exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const hex=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8')).artifact.runtime_bytecode.full.slice(2);
const names={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',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf1:'CALL',0xf3:'RETURN'};for(let i=1;i<=32;i++)names[0x5f+i]='PUSH'+i;for(let i=1;i<=16;i++){names[0x7f+i]='DUP'+i;names[0x8f+i]='SWAP'+i;}for(let i=0;i<5;i++)names[0xa0+i]='LOG'+i;
let pc=0, ops=[];for(let i=0;i<hex.length;){const op=parseInt(hex.slice(i,i+2),16);let imm='';let len=1;if(op>=0x60&&op<=0x7f){const n=op-0x5f;imm=hex.slice(i+2,i+2+2*n);len=1+n;}ops.push({pc,name:names[op]||('0x'+op.toString(16)),imm});i+=len*2;pc+=len;}
for(const o of ops.filter(x=>x.pc>=75&&x.pc<174)) console.log(o.pc,o.name,o.imm);
NODE" in /tmp/codex-93zqp0qz
succeeded in 0ms:
75 DUP1
76 PUSH4 313ce567
81 EQ
82 PUSH2 01fd
85 JUMPI
86 DUP1
87 PUSH4 3177029f
92 EQ
93 PUSH2 0205
96 JUMPI
97 DUP1
98 PUSH4 70a08231
103 EQ
104 PUSH2 021a
107 JUMPI
108 DUP1
109 PUSH4 95d89b41
114 EQ
115 PUSH2 023f
118 JUMPI
119 DUP1
120 PUSH4 a9059cbb
125 EQ
126 PUSH2 0279
129 JUMPI
130 DUP1
131 PUSH4 be040fb0
136 EQ
137 PUSH2 02bb
140 JUMPI
141 DUP1
142 PUSH4 c2930f91
147 EQ
148 PUSH2 02e0
151 JUMPI
152 DUP1
153 PUSH4 d0e30db0
158 EQ
159 PUSH2 02ef
162 JUMPI
163 DUP1
164 PUSH4 dd62ed3e
169 EQ
170 PUSH2 0324
173 JUMPI
exec
/bin/bash -lc "node - <<'NODE'
const sigs=['tokenFallback(address,uint256,bytes)','tokenFallback(address,uint,bytes)','receiveApproval(address,uint256,address,bytes)','onTokenTransfer(address,uint256,bytes)','onTokenReceived(address,uint256,bytes)','onTokenTransfer(address,uint256,address)','receiveEther(uint256)','receiveApproval(address,uint256,address)','tokenRecipient(address,uint256,address)'];
(async()=>{let keccak;try{({keccak256,toUtf8Bytes}=require('ethers')); for(const s of sigs) console.log(s, keccak256(toUtf8Bytes(s)).slice(0,10));}catch(e){console.error('ethers missing',e.message)}})();
NODE" in /tmp/codex-93zqp0qz
succeeded in 0ms:
ethers missing Cannot find module 'ethers'
Require stack:
- /tmp/codex-93zqp0qz/[stdin]
exec
/bin/bash -lc 'which evm || which cast || which hevm || which forge || which python3' in /tmp/codex-93zqp0qz
succeeded in 0ms:
/home/noahkuhn/.foundry/bin/cast
exec
/bin/bash -lc "cast sig 'transferAndCall(address,uint256,bytes)' && cast sig 'transferAndCall(address,uint256)' && cast sig 'approveAndCall(address,uint256)' && cast sig 'approveAndCall(address,uint256,bytes)' && cast sig 'withdrawAll()' && cast sig 'deposit()' && cast sig 'withdrawAllTo(address)' && cast sig 'withdrawTo(address,uint256)' && cast sig 'withdrawAndCall(address,uint256)'" in /tmp/codex-93zqp0qz
succeeded in 0ms:
0x4000aea0
0x1296ee62
0x3177029f
0xcae9ca51
0x853828b6
0xd0e30db0
0xca9add8f
0x205c2878
0x88d94007
exec
/bin/bash -lc "cast sig 'withdrawAll()' && cast sig 'withdrawAllTo(address)' && cast sig 'withdrawTo(address,uint256)' && cast sig 'transferAndCall(address,uint256)' && cast sig 'transferAndCall(address,uint256,bytes)' && cast sig 'transfer(address,uint256,bytes)' && cast sig 'transferFrom(address,address,uint256,bytes)' && cast sig 'depositTo(address)' && cast sig 'approveAndCall(address,uint256,bytes)' && cast sig 'transferAndCall(address,uint256,address)'" in /tmp/codex-93zqp0qz
succeeded in 0ms:
0x853828b6
0xca9add8f
0x205c2878
0x1296ee62
0x4000aea0
0xbe45fd62
0xab67aa58
0xb760faf9
0xcae9ca51
0xf58969e2
exec
/bin/bash -lc "cast sig 'receiveApproval(address,uint256,address)' && cast sig 'receiveApproval(address,uint256,address,bytes)' && cast sig 'onApprove(address,uint256,address)' && cast sig 'tokenCallback(address,uint256,address)' && cast sig 'tokenRecipient(address,uint256,address)'" in /tmp/codex-93zqp0qz
succeeded in 0ms:
0x4889ca88
0x8f4ffcb1
0x788ac8d8
0x329f3195
0x05812ed7
exec
/bin/bash -lc "cast sig 'withdraw(address,uint256)' && cast sig 'withdrawTo(address,uint256)' && cast sig 'transferTo(address,uint256)' && cast sig 'deposit(address,uint256)' && cast sig 'transfer(address,uint256,bytes)' && cast sig 'transferToAddress(address,uint256)' && cast sig 'move(address,uint256)' && cast sig 'burn(uint256)' && cast sig 'burn(address,uint256)' && cast sig 'depositTo(address,uint256)'" in /tmp/codex-93zqp0qz
succeeded in 0ms:
0xf3fef3a3
0x205c2878
0x2ccb1b30
0x47e7ef24
0xbe45fd62
0xacef6037
0x987ff31c
0x42966c68
0x9dc29fac
0xffaad6a5
exec
/bin/bash -lc 'cast 4byte 0xbe040fb0 || true; cast 4byte 0xc2930f91 || true; cast 4byte 0x4889ca88 || true' in /tmp/codex-93zqp0qz
succeeded in 0ms:
Error: error sending request for url (https://api.4byte.sourcify.dev/signature-database/v1/lookup?function=0xbe040fb0)
Context:
- Error #0: client error (Connect)
- Error #1: dns error
- Error #2: failed to lookup address information: Temporary failure in name resolution
Error: error sending request for url (https://api.4byte.sourcify.dev/signature-database/v1/lookup?function=0xc2930f91)
Context:
- Error #0: client error (Connect)
- Error #1: dns error
- Error #2: failed to lookup address information: Temporary failure in name resolution
Error: error sending request for url (https://api.4byte.sourcify.dev/signature-database/v1/lookup?function=0x4889ca88)
Context:
- Error #0: client error (Connect)
- Error #1: dns error
- Error #2: failed to lookup address information: Temporary failure in name resolution
exec
/bin/bash -lc "cast sig 'push(address,uint256)' && cast sig 'pull(address,uint256)' && cast sig 'move(address,address,uint256)' && cast sig 'mint(uint256)' && cast sig 'burn(address,uint256)' && cast sig 'mint(address,uint256)' && cast sig 'approve(address)'" in /tmp/codex-93zqp0qz
succeeded in 113ms:
0x40c10f19
0xdaea85c5
codex
{"no_findings":false,"summary":"Bytecode appears to implement an ETH-backed ERC20-style wrapper with `deposit`, `withdraw`, ERC20 transfers, and `approveAndCall`. No proxy/delegatecall paths were evidenced, and the raw ETH send paths appear to debit storage before calling out. Two conservative issues remain: a standard allowance-race pattern and a supply-accounting invariant break because `totalSupply()` is derived from raw ETH balance.","findings":[{"severity":"medium","category":"auth","title":"Allowance overwrite race in `approve` and `approveAndCall`","exploit_scenario":"A holder changes a spender allowance from `N` to `M` using `approve` or `approveAndCall`. A malicious spender can front-run with `transferFrom(..., N)` before the new approval lands, then still use the fresh `M` allowance afterward, effectively spending more than the holder intended. In the `approveAndCall` path, the newly written allowance is also live before the external callback returns.","recommendation":"Do not support overwrite-style approvals without mitigation. Require setting allowance to zero before a new non-zero value, or add `increaseAllowance` / `decreaseAllowance` style flows and deprecate direct allowance replacement.","evidence":"Selector inference is best-effort, but `0x095ea7b3` matches ERC20 `approve(address,uint256)` and `0x3177029f` matches `approveAndCall(address,uint256)`. Both flow through the allowance-write routine beginning at pc `0xfd`, where the nested allowance mapping is written with `SSTORE` and no visible zero-check or compare-to-current-allowance guard precedes the write. The `approveAndCall` path then performs an external callback at pc `0x753` using selector `0x4889ca88` (`receiveApproval(address,uint256,address)`), so the just-written allowance is immediately usable.","locations":["selector:0x095ea7b3","selector:0x3177029f","pc:0xfd","pc:0x6f7"]},{"severity":"low","category":"math","title":"`totalSupply()` is tied to raw ETH balance, so forced ETH can desynchronize accounting","exploit_scenario":"An attacker can force ETH into the contract (for example via `SELFDESTRUCT`). The contract's ETH balance rises, so `totalSupply()` rises as well, but no holder balance is minted. This can break the invariant that total supply equals the sum of account balances, confuse integrations that rely on supply-based accounting, and leave unsolicited ETH permanently trapped.","recommendation":"Track minted supply in storage and update it only on explicit deposit/withdraw flows, or provide a controlled reconciliation/sweep mechanism for unsolicited ETH.","evidence":"`totalSupply()` (`0x18160ddd`) resolves to the routine at pc `0x168`, which executes `ADDRESS ... BALANCE` and returns the contract's ETH balance directly. By contrast, `balanceOf()` (`0x70a08231`) reads from a storage mapping at pc `0x21a`. Because supply is not read from the same storage accounting as balances, unsolicited ETH changes reported supply without changing any user balance.","locations":["selector:0x18160ddd","selector:0x70a08231","pc:0x168","pc:0x21a"]}]}
tokens used
93,789
{
"codex": {
"ran_at": "2026-04-05T05:32:56.023794+00:00",
"returncode": 0
},
"project": {
"mode": "bytecode",
"bytecode_length": 3876,
"bytecode_truncated": false,
"capability_graph_present": true,
"analysis_artifact_present": true
},
"summary": "Bytecode appears to implement an ETH-backed ERC20-style wrapper with `deposit`, `withdraw`, ERC20 transfers, and `approveAndCall`. No proxy/delegatecall paths were evidenced, and the raw ETH send paths appear to debit storage before calling out. Two conservative issues remain: a standard allowance-race pattern and a supply-accounting invariant break because `totalSupply()` is derived from raw ETH balance.",
"raw_final": {
"summary": "Bytecode appears to implement an ETH-backed ERC20-style wrapper with `deposit`, `withdraw`, ERC20 transfers, and `approveAndCall`. No proxy/delegatecall paths were evidenced, and the raw ETH send paths appear to debit storage before calling out. Two conservative issues remain: a standard allowance-race pattern and a supply-accounting invariant break because `totalSupply()` is derived from raw ETH balance.",
"findings": [
{
"title": "Allowance overwrite race in `approve` and `approveAndCall`",
"category": "auth",
"evidence": "Selector inference is best-effort, but `0x095ea7b3` matches ERC20 `approve(address,uint256)` and `0x3177029f` matches `approveAndCall(address,uint256)`. Both flow through the allowance-write routine beginning at pc `0xfd`, where the nested allowance mapping is written with `SSTORE` and no visible zero-check or compare-to-current-allowance guard precedes the write. The `approveAndCall` path then performs an external callback at pc `0x753` using selector `0x4889ca88` (`receiveApproval(address,uint256,address)`), so the just-written allowance is immediately usable.",
"severity": "medium",
"locations": [
"selector:0x095ea7b3",
"selector:0x3177029f",
"pc:0xfd",
"pc:0x6f7"
],
"recommendation": "Do not support overwrite-style approvals without mitigation. Require setting allowance to zero before a new non-zero value, or add `increaseAllowance` / `decreaseAllowance` style flows and deprecate direct allowance replacement.",
"exploit_scenario": "A holder changes a spender allowance from `N` to `M` using `approve` or `approveAndCall`. A malicious spender can front-run with `transferFrom(..., N)` before the new approval lands, then still use the fresh `M` allowance afterward, effectively spending more than the holder intended. In the `approveAndCall` path, the newly written allowance is also live before the external callback returns."
},
{
"title": "`totalSupply()` is tied to raw ETH balance, so forced ETH can desynchronize accounting",
"category": "math",
"evidence": "`totalSupply()` (`0x18160ddd`) resolves to the routine at pc `0x168`, which executes `ADDRESS ... BALANCE` and returns the contract's ETH balance directly. By contrast, `balanceOf()` (`0x70a08231`) reads from a storage mapping at pc `0x21a`. Because supply is not read from the same storage accounting as balances, unsolicited ETH changes reported supply without changing any user balance.",
"severity": "low",
"locations": [
"selector:0x18160ddd",
"selector:0x70a08231",
"pc:0x168",
"pc:0x21a"
],
"recommendation": "Track minted supply in storage and update it only on explicit deposit/withdraw flows, or provide a controlled reconciliation/sweep mechanism for unsolicited ETH.",
"exploit_scenario": "An attacker can force ETH into the contract (for example via `SELFDESTRUCT`). The contract's ETH balance rises, so `totalSupply()` rises as well, but no holder balance is minted. This can break the invariant that total supply equals the sum of account balances, confuse integrations that rely on supply-based accounting, and leave unsolicited ETH permanently trapped."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x60 00000002: PUSH1 0x40 00000004: MSTORE 00000005: CALLDATASIZE 00000006: ISZERO 00000007: PUSH2 0x00ae 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 0x00b9 0000001e: JUMPI 0000001f: DUP1 00000020: PUSH4 0x095ea7b3 00000025: EQ 00000026: PUSH2 0x00f3 00000029: JUMPI 0000002a: DUP1 0000002b: PUSH4 0x18160ddd 00000030: EQ 00000031: PUSH2 0x0168 00000034: JUMPI 00000035: DUP1 00000036: PUSH4 0x23b872dd 0000003b: EQ 0000003c: PUSH2 0x0186 0000003f: JUMPI 00000040: DUP1 00000041: PUSH4 0x2e1a7d4d 00000046: EQ 00000047: PUSH2 0x01cb 0000004a: JUMPI 0000004b: DUP1 0000004c: PUSH4 0x313ce567 00000051: EQ 00000052: PUSH2 0x01fd 00000055: JUMPI 00000056: DUP1 00000057: PUSH4 0x3177029f 0000005c: EQ 0000005d: PUSH2 0x0205 00000060: JUMPI 00000061: DUP1 00000062: PUSH4 0x70a08231 00000067: EQ 00000068: PUSH2 0x021a 0000006b: JUMPI 0000006c: DUP1 0000006d: PUSH4 0x95d89b41 00000072: EQ 00000073: PUSH2 0x023f 00000076: JUMPI 00000077: DUP1 00000078: PUSH4 0xa9059cbb 0000007d: EQ 0000007e: PUSH2 0x0279 00000081: JUMPI 00000082: DUP1 00000083: PUSH4 0xbe040fb0 00000088: EQ 00000089: PUSH2 0x02bb 0000008c: JUMPI 0000008d: DUP1 0000008e: PUSH4 0xc2930f91 00000093: EQ 00000094: PUSH2 0x02e0 00000097: JUMPI 00000098: DUP1 00000099: PUSH4 0xd0e30db0 0000009e: EQ 0000009f: PUSH2 0x02ef 000000a2: JUMPI 000000a3: DUP1 000000a4: PUSH4 0xdd62ed3e 000000a9: EQ 000000aa: PUSH2 0x0324 000000ad: JUMPI 000000ae: JUMPDEST 000000af: PUSH2 0x0358 000000b2: PUSH2 0x035a 000000b5: PUSH2 0x02f3 000000b8: JUMP 000000b9: JUMPDEST 000000ba: PUSH2 0x035c 000000bd: PUSH1 0x40 000000bf: DUP1 000000c0: MLOAD 000000c1: DUP1 000000c2: DUP3 000000c3: ADD 000000c4: SWAP1 000000c5: SWAP2 000000c6: MSTORE 000000c7: PUSH1 0x11 000000c9: DUP2 000000ca: MSTORE 000000cb: PUSH32 0x457468657220546f6b656e2050726f7879000000000000000000000000000000 000000ec: PUSH1 0x20 000000ee: DUP3 000000ef: ADD 000000f0: MSTORE 000000f1: DUP2 000000f2: JUMP 000000f3: JUMPDEST 000000f4: PUSH2 0x0174 000000f7: PUSH1 0x04 000000f9: CALLDATALOAD 000000fa: PUSH1 0x24 000000fc: CALLDATALOAD 000000fd: JUMPDEST 000000fe: PUSH1 0x01 00000100: PUSH1 0xa0 00000102: PUSH1 0x02 00000104: EXP 00000105: SUB 00000106: CALLER 00000107: DUP2 00000108: AND 00000109: PUSH1 0x00 0000010b: DUP2 0000010c: DUP2 0000010d: MSTORE 0000010e: PUSH1 0x01 00000110: PUSH1 0x20 00000112: SWAP1 00000113: DUP2 00000114: MSTORE 00000115: PUSH1 0x40 00000117: DUP1 00000118: DUP4 00000119: KECCAK256 0000011a: SWAP5 0000011b: DUP8 0000011c: AND 0000011d: DUP1 0000011e: DUP5 0000011f: MSTORE 00000120: SWAP5 00000121: DUP3 00000122: MSTORE 00000123: DUP1 00000124: DUP4 00000125: KECCAK256 00000126: DUP7 00000127: SWAP1 00000128: SSTORE 00000129: DUP1 0000012a: MLOAD 0000012b: DUP7 0000012c: DUP2 0000012d: MSTORE 0000012e: SWAP1 0000012f: MLOAD 00000130: SWAP3 00000131: SWAP5 00000132: SWAP4 00000133: SWAP3 00000134: PUSH32 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925 00000155: SWAP3 00000156: SWAP2 00000157: DUP2 00000158: SWAP1 00000159: SUB 0000015a: SWAP1 0000015b: SWAP2 0000015c: ADD 0000015d: SWAP1 0000015e: LOG3 0000015f: POP 00000160: PUSH1 0x01 00000162: JUMPDEST 00000163: SWAP3 00000164: SWAP2 00000165: POP 00000166: POP 00000167: JUMP 00000168: JUMPDEST 00000169: ADDRESS 0000016a: PUSH1 0x01 0000016c: PUSH1 0xa0 0000016e: PUSH1 0x02 00000170: EXP 00000171: SUB 00000172: AND 00000173: BALANCE 00000174: JUMPDEST 00000175: PUSH1 0x40 00000177: DUP1 00000178: MLOAD 00000179: SWAP2 0000017a: DUP3 0000017b: MSTORE 0000017c: MLOAD 0000017d: SWAP1 0000017e: DUP2 0000017f: SWAP1 00000180: SUB 00000181: PUSH1 0x20 00000183: ADD 00000184: SWAP1 00000185: RETURN 00000186: JUMPDEST 00000187: PUSH2 0x0174 0000018a: PUSH1 0x04 0000018c: CALLDATALOAD 0000018d: PUSH1 0x24 0000018f: CALLDATALOAD 00000190: PUSH1 0x44 00000192: CALLDATALOAD 00000193: JUMPDEST 00000194: PUSH1 0x01 00000196: PUSH1 0xa0 00000198: PUSH1 0x02 0000019a: EXP 0000019b: SUB 0000019c: DUP4 0000019d: DUP2 0000019e: AND 0000019f: PUSH1 0x00 000001a1: SWAP1 000001a2: DUP2 000001a3: MSTORE 000001a4: PUSH1 0x01 000001a6: PUSH1 0x20 000001a8: SWAP1 000001a9: DUP2 000001aa: MSTORE 000001ab: PUSH1 0x40 000001ad: DUP1 000001ae: DUP4 000001af: KECCAK256 000001b0: CALLER 000001b1: SWAP1 000001b2: SWAP5 000001b3: AND 000001b4: DUP4 000001b5: MSTORE 000001b6: SWAP3 000001b7: SWAP1 000001b8: MSTORE 000001b9: SWAP1 000001ba: DUP2 000001bb: KECCAK256 000001bc: SLOAD 000001bd: PUSH2 0x0593 000001c0: SWAP1 000001c1: DUP4 000001c2: JUMPDEST 000001c3: DUP1 000001c4: DUP3 000001c5: LT 000001c6: ISZERO 000001c7: PUSH2 0x0162 000001ca: JUMP 000001cb: JUMPDEST 000001cc: PUSH2 0x0174 000001cf: PUSH1 0x04 000001d1: CALLDATALOAD 000001d2: JUMPDEST 000001d3: PUSH1 0x40 000001d5: PUSH1 0x00 000001d7: SWAP1 000001d8: DUP2 000001d9: KECCAK256 000001da: PUSH1 0x01 000001dc: PUSH1 0xa0 000001de: PUSH1 0x02 000001e0: EXP 000001e1: SUB 000001e2: CALLER 000001e3: AND 000001e4: DUP3 000001e5: MSTORE 000001e6: PUSH1 0x20 000001e8: DUP3 000001e9: SWAP1 000001ea: MSTORE 000001eb: SLOAD 000001ec: PUSH2 0x0435 000001ef: SWAP1 000001f0: DUP4 000001f1: JUMPDEST 000001f2: PUSH1 0x00 000001f4: PUSH2 0x077d 000001f7: DUP4 000001f8: DUP4 000001f9: PUSH2 0x01c2 000001fc: JUMP 000001fd: JUMPDEST 000001fe: PUSH2 0x03ca 00000201: PUSH1 0x12 00000203: DUP2 00000204: JUMP 00000205: JUMPDEST 00000206: PUSH2 0x0174 00000209: PUSH1 0x04 0000020b: CALLDATALOAD 0000020c: PUSH1 0x24 0000020e: CALLDATALOAD 0000020f: PUSH1 0x00 00000211: PUSH2 0x06f1 00000214: DUP4 00000215: DUP4 00000216: PUSH2 0x00fd 00000219: JUMP 0000021a: JUMPDEST 0000021b: PUSH2 0x0174 0000021e: PUSH1 0x04 00000220: CALLDATALOAD 00000221: PUSH1 0x01 00000223: PUSH1 0xa0 00000225: PUSH1 0x02 00000227: EXP 00000228: SUB 00000229: DUP2 0000022a: AND 0000022b: PUSH1 0x00 0000022d: SWAP1 0000022e: DUP2 0000022f: MSTORE 00000230: PUSH1 0x20 00000232: DUP2 00000233: SWAP1 00000234: MSTORE 00000235: PUSH1 0x40 00000237: SWAP1 00000238: KECCAK256 00000239: SLOAD 0000023a: JUMPDEST 0000023b: SWAP2 0000023c: SWAP1 0000023d: POP 0000023e: JUMP 0000023f: JUMPDEST 00000240: PUSH2 0x035c 00000243: PUSH1 0x40 00000245: DUP1 00000246: MLOAD 00000247: DUP1 00000248: DUP3 00000249: ADD 0000024a: SWAP1 0000024b: SWAP2 0000024c: MSTORE 0000024d: PUSH1 0x03 0000024f: DUP2 00000250: MSTORE 00000251: PUSH32 0x4554480000000000000000000000000000000000000000000000000000000000 00000272: PUSH1 0x20 00000274: DUP3 00000275: ADD 00000276: MSTORE 00000277: DUP2 00000278: JUMP 00000279: JUMPDEST 0000027a: PUSH2 0x0174 0000027d: PUSH1 0x04 0000027f: CALLDATALOAD 00000280: PUSH1 0x24 00000282: CALLDATALOAD 00000283: PUSH1 0x00 00000285: ADDRESS 00000286: PUSH1 0x01 00000288: PUSH1 0xa0 0000028a: PUSH1 0x02 0000028c: EXP 0000028d: SUB 0000028e: AND 0000028f: DUP4 00000290: PUSH1 0x01 00000292: PUSH1 0xa0 00000294: PUSH1 0x02 00000296: EXP 00000297: SUB 00000298: AND 00000299: EQ 0000029a: DUP1 0000029b: PUSH2 0x02ad 0000029e: JUMPI 0000029f: POP 000002a0: DUP3 000002a1: PUSH1 0x01 000002a3: PUSH1 0xa0 000002a5: PUSH1 0x02 000002a7: EXP 000002a8: SUB 000002a9: AND 000002aa: PUSH1 0x00 000002ac: EQ 000002ad: JUMPDEST 000002ae: ISZERO 000002af: PUSH2 0x04dc 000002b2: JUMPI 000002b3: PUSH2 0x04ff 000002b6: DUP3 000002b7: PUSH2 0x01d2 000002ba: JUMP 000002bb: JUMPDEST 000002bc: PUSH2 0x0358 000002bf: PUSH1 0x01 000002c1: PUSH1 0xa0 000002c3: PUSH1 0x02 000002c5: EXP 000002c6: SUB 000002c7: CALLER 000002c8: AND 000002c9: PUSH1 0x00 000002cb: SWAP1 000002cc: DUP2 000002cd: MSTORE 000002ce: PUSH1 0x20 000002d0: DUP2 000002d1: SWAP1 000002d2: MSTORE 000002d3: PUSH1 0x40 000002d5: SWAP1 000002d6: KECCAK256 000002d7: SLOAD 000002d8: PUSH2 0x0432 000002db: SWAP1 000002dc: PUSH2 0x01d2 000002df: JUMP 000002e0: JUMPDEST 000002e1: PUSH2 0x0174 000002e4: PUSH8 0x0de0b6b3a7640000 000002ed: DUP2 000002ee: JUMP 000002ef: JUMPDEST 000002f0: PUSH2 0x0358 000002f3: JUMPDEST 000002f4: PUSH1 0x01 000002f6: PUSH1 0xa0 000002f8: PUSH1 0x02 000002fa: EXP 000002fb: SUB 000002fc: CALLER 000002fd: AND 000002fe: PUSH1 0x00 00000300: SWAP1 00000301: DUP2 00000302: MSTORE 00000303: PUSH1 0x20 00000305: DUP2 00000306: SWAP1 00000307: MSTORE 00000308: PUSH1 0x40 0000030a: SWAP1 0000030b: KECCAK256 0000030c: SLOAD 0000030d: PUSH2 0x03e0 00000310: SWAP1 00000311: CALLVALUE 00000312: JUMPDEST 00000313: PUSH1 0x00 00000315: PUSH2 0x0769 00000318: DUP4 00000319: DUP4 0000031a: DUP2 0000031b: DUP2 0000031c: ADD 0000031d: DUP3 0000031e: SWAP1 0000031f: GT 00000320: PUSH2 0x0162 00000323: JUMP 00000324: JUMPDEST 00000325: PUSH2 0x0174 00000328: PUSH1 0x04 0000032a: CALLDATALOAD 0000032b: PUSH1 0x24 0000032d: CALLDATALOAD 0000032e: PUSH1 0x01 00000330: PUSH1 0xa0 00000332: PUSH1 0x02 00000334: EXP 00000335: SUB 00000336: DUP3 00000337: DUP2 00000338: AND 00000339: PUSH1 0x00 0000033b: SWAP1 0000033c: DUP2 0000033d: MSTORE 0000033e: PUSH1 0x01 00000340: PUSH1 0x20 00000342: SWAP1 00000343: DUP2 00000344: MSTORE 00000345: PUSH1 0x40 00000347: DUP1 00000348: DUP4 00000349: KECCAK256 0000034a: SWAP4 0000034b: DUP6 0000034c: AND 0000034d: DUP4 0000034e: MSTORE 0000034f: SWAP3 00000350: SWAP1 00000351: MSTORE 00000352: KECCAK256 00000353: SLOAD 00000354: PUSH2 0x0162 00000357: JUMP 00000358: JUMPDEST 00000359: STOP 0000035a: JUMPDEST 0000035b: JUMP 0000035c: JUMPDEST 0000035d: PUSH1 0x40 0000035f: MLOAD 00000360: DUP1 00000361: DUP1 00000362: PUSH1 0x20 00000364: ADD 00000365: DUP3 00000366: DUP2 00000367: SUB 00000368: DUP3 00000369: MSTORE 0000036a: DUP4 0000036b: DUP2 0000036c: DUP2 0000036d: MLOAD 0000036e: DUP2 0000036f: MSTORE 00000370: PUSH1 0x20 00000372: ADD 00000373: SWAP2 00000374: POP 00000375: DUP1 00000376: MLOAD 00000377: SWAP1 00000378: PUSH1 0x20 0000037a: ADD 0000037b: SWAP1 0000037c: DUP1 0000037d: DUP4 0000037e: DUP4 0000037f: DUP3 00000380: SWAP1 00000381: PUSH1 0x00 00000383: PUSH1 0x04 00000385: PUSH1 0x20 00000387: DUP5 00000388: PUSH1 0x1f 0000038a: ADD 0000038b: DIV 0000038c: PUSH1 0x0f 0000038e: MUL 0000038f: PUSH1 0x03 00000391: ADD 00000392: CALL 00000393: POP 00000394: SWAP1 00000395: POP 00000396: SWAP1 00000397: DUP2 00000398: ADD 00000399: SWAP1 0000039a: PUSH1 0x1f 0000039c: AND 0000039d: DUP1 0000039e: ISZERO 0000039f: PUSH2 0x03bc 000003a2: JUMPI 000003a3: DUP1 000003a4: DUP3 000003a5: SUB 000003a6: DUP1 000003a7: MLOAD 000003a8: PUSH1 0x01 000003aa: DUP4 000003ab: PUSH1 0x20 000003ad: SUB 000003ae: PUSH2 0x0100 000003b1: EXP 000003b2: SUB 000003b3: NOT 000003b4: AND 000003b5: DUP2 000003b6: MSTORE 000003b7: PUSH1 0x20 000003b9: ADD 000003ba: SWAP2 000003bb: POP 000003bc: JUMPDEST 000003bd: POP 000003be: SWAP3 000003bf: POP 000003c0: POP 000003c1: POP 000003c2: PUSH1 0x40 000003c4: MLOAD 000003c5: DUP1 000003c6: SWAP2 000003c7: SUB 000003c8: SWAP1 000003c9: RETURN 000003ca: JUMPDEST 000003cb: PUSH1 0x40 000003cd: DUP1 000003ce: MLOAD 000003cf: PUSH1 0xff 000003d1: SWAP1 000003d2: SWAP3 000003d3: AND 000003d4: DUP3 000003d5: MSTORE 000003d6: MLOAD 000003d7: SWAP1 000003d8: DUP2 000003d9: SWAP1 000003da: SUB 000003db: PUSH1 0x20 000003dd: ADD 000003de: SWAP1 000003df: RETURN 000003e0: JUMPDEST 000003e1: PUSH1 0x01 000003e3: PUSH1 0xa0 000003e5: PUSH1 0x02 000003e7: EXP 000003e8: SUB 000003e9: CALLER 000003ea: AND 000003eb: PUSH1 0x00 000003ed: DUP2 000003ee: DUP2 000003ef: MSTORE 000003f0: PUSH1 0x20 000003f2: DUP2 000003f3: DUP2 000003f4: MSTORE 000003f5: PUSH1 0x40 000003f7: SWAP2 000003f8: DUP3 000003f9: SWAP1 000003fa: KECCAK256 000003fb: SWAP4 000003fc: SWAP1 000003fd: SWAP4 000003fe: SSTORE 000003ff: DUP1 00000400: MLOAD 00000401: CALLVALUE 00000402: DUP2 00000403: MSTORE 00000404: SWAP1 00000405: MLOAD 00000406: SWAP2 00000407: SWAP3 00000408: PUSH32 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c 00000429: SWAP3 0000042a: SWAP2 0000042b: DUP3 0000042c: SWAP1 0000042d: SUB 0000042e: ADD 0000042f: SWAP1 00000430: LOG2 00000431: JUMP 00000432: JUMPDEST 00000433: POP 00000434: JUMP 00000435: JUMPDEST 00000436: PUSH1 0x01 00000438: PUSH1 0xa0 0000043a: PUSH1 0x02 0000043c: EXP 0000043d: SUB 0000043e: CALLER 0000043f: AND 00000440: PUSH1 0x00 00000442: DUP2 00000443: DUP2 00000444: MSTORE 00000445: PUSH1 0x20 00000447: DUP2 00000448: SWAP1 00000449: MSTORE 0000044a: PUSH1 0x40 0000044c: DUP1 0000044d: DUP3 0000044e: KECCAK256 0000044f: SWAP4 00000450: SWAP1 00000451: SWAP4 00000452: SSTORE 00000453: SWAP2 00000454: MLOAD 00000455: SWAP1 00000456: SWAP2 00000457: SWAP1 00000458: DUP5 00000459: SWAP1 0000045a: DUP3 0000045b: DUP2 0000045c: DUP2 0000045d: DUP2 0000045e: DUP6 0000045f: DUP9 00000460: DUP4 00000461: CALL 00000462: SWAP4 00000463: POP 00000464: POP 00000465: POP 00000466: POP 00000467: ISZERO 00000468: ISZERO 00000469: PUSH2 0x0495 0000046c: JUMPI 0000046d: CALLER 0000046e: PUSH1 0x01 00000470: PUSH1 0xa0 00000472: PUSH1 0x02 00000474: EXP 00000475: SUB 00000476: AND 00000477: GAS 00000478: PUSH1 0x40 0000047a: MLOAD 0000047b: DUP5 0000047c: SWAP1 0000047d: PUSH1 0x00 0000047f: DUP2 00000480: DUP2 00000481: DUP2 00000482: DUP6 00000483: DUP9 00000484: DUP9 00000485: CALL 00000486: SWAP4 00000487: POP 00000488: POP 00000489: POP 0000048a: POP 0000048b: ISZERO 0000048c: ISZERO 0000048d: PUSH2 0x0495 00000490: JUMPI 00000491: PUSH2 0x0002 00000494: JUMP 00000495: JUMPDEST 00000496: PUSH1 0x40 00000498: DUP1 00000499: MLOAD 0000049a: DUP4 0000049b: DUP2 0000049c: MSTORE 0000049d: SWAP1 0000049e: MLOAD 0000049f: PUSH1 0x01 000004a1: PUSH1 0xa0 000004a3: PUSH1 0x02 000004a5: EXP 000004a6: SUB 000004a7: CALLER 000004a8: AND 000004a9: SWAP2 000004aa: PUSH32 0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65 000004cb: SWAP2 000004cc: SWAP1 000004cd: DUP2 000004ce: SWAP1 000004cf: SUB 000004d0: PUSH1 0x20 000004d2: ADD 000004d3: SWAP1 000004d4: LOG2 000004d5: POP 000004d6: PUSH1 0x01 000004d8: PUSH2 0x023a 000004db: JUMP 000004dc: JUMPDEST 000004dd: PUSH1 0x01 000004df: PUSH1 0xa0 000004e1: PUSH1 0x02 000004e3: EXP 000004e4: SUB 000004e5: CALLER 000004e6: AND 000004e7: PUSH1 0x00 000004e9: SWAP1 000004ea: DUP2 000004eb: MSTORE 000004ec: PUSH1 0x20 000004ee: DUP2 000004ef: SWAP1 000004f0: MSTORE 000004f1: PUSH1 0x40 000004f3: SWAP1 000004f4: KECCAK256 000004f5: SLOAD 000004f6: PUSH2 0x0506 000004f9: SWAP1 000004fa: DUP4 000004fb: PUSH2 0x01f1 000004fe: JUMP 000004ff: JUMPDEST 00000500: SWAP1 00000501: POP 00000502: PUSH2 0x0162 00000505: JUMP 00000506: JUMPDEST 00000507: PUSH1 0x01 00000509: PUSH1 0xa0 0000050b: PUSH1 0x02 0000050d: EXP 0000050e: SUB 0000050f: CALLER 00000510: DUP2 00000511: AND 00000512: PUSH1 0x00 00000514: SWAP1 00000515: DUP2 00000516: MSTORE 00000517: PUSH1 0x20 00000519: DUP2 0000051a: SWAP1 0000051b: MSTORE 0000051c: PUSH1 0x40 0000051e: DUP1 0000051f: DUP3 00000520: KECCAK256 00000521: SWAP4 00000522: SWAP1 00000523: SWAP4 00000524: SSTORE 00000525: SWAP1 00000526: DUP6 00000527: AND 00000528: DUP2 00000529: MSTORE 0000052a: KECCAK256 0000052b: SLOAD 0000052c: PUSH2 0x0535 0000052f: SWAP1 00000530: DUP4 00000531: PUSH2 0x0312 00000534: JUMP 00000535: JUMPDEST 00000536: PUSH1 0x01 00000538: PUSH1 0xa0 0000053a: PUSH1 0x02 0000053c: EXP 0000053d: SUB 0000053e: DUP5 0000053f: DUP2 00000540: AND 00000541: PUSH1 0x00 00000543: DUP2 00000544: DUP2 00000545: MSTORE 00000546: PUSH1 0x20 00000548: DUP2 00000549: DUP2 0000054a: MSTORE 0000054b: PUSH1 0x40 0000054d: SWAP2 0000054e: DUP3 0000054f: SWAP1 00000550: KECCAK256 00000551: SWAP5 00000552: SWAP1 00000553: SWAP5 00000554: SSTORE 00000555: DUP1 00000556: MLOAD 00000557: DUP7 00000558: DUP2 00000559: MSTORE 0000055a: SWAP1 0000055b: MLOAD 0000055c: SWAP2 0000055d: SWAP4 0000055e: CALLER 0000055f: SWAP1 00000560: SWAP4 00000561: AND 00000562: SWAP3 00000563: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef 00000584: SWAP3 00000585: SWAP2 00000586: DUP3 00000587: SWAP1 00000588: SUB 00000589: ADD 0000058a: SWAP1 0000058b: LOG3 0000058c: POP 0000058d: PUSH1 0x01 0000058f: PUSH2 0x0162 00000592: JUMP 00000593: JUMPDEST 00000594: ISZERO 00000595: ISZERO 00000596: PUSH2 0x059e 00000599: JUMPI 0000059a: PUSH2 0x0002 0000059d: JUMP 0000059e: JUMPDEST 0000059f: ADDRESS 000005a0: PUSH1 0x01 000005a2: PUSH1 0xa0 000005a4: PUSH1 0x02 000005a6: EXP 000005a7: SUB 000005a8: AND 000005a9: DUP4 000005aa: PUSH1 0x01 000005ac: PUSH1 0xa0 000005ae: PUSH1 0x02 000005b0: EXP 000005b1: SUB 000005b2: AND 000005b3: EQ 000005b4: DUP1 000005b5: PUSH2 0x05c7 000005b8: JUMPI 000005b9: POP 000005ba: DUP3 000005bb: PUSH1 0x01 000005bd: PUSH1 0xa0 000005bf: PUSH1 0x02 000005c1: EXP 000005c2: SUB 000005c3: AND 000005c4: PUSH1 0x00 000005c6: EQ 000005c7: JUMPDEST 000005c8: ISZERO 000005c9: PUSH2 0x05d7 000005cc: JUMPI 000005cd: PUSH2 0x05fa 000005d0: DUP5 000005d1: CALLER 000005d2: DUP5 000005d3: PUSH2 0x0193 000005d6: JUMP 000005d7: JUMPDEST 000005d8: PUSH1 0x01 000005da: PUSH1 0xa0 000005dc: PUSH1 0x02 000005de: EXP 000005df: SUB 000005e0: DUP5 000005e1: AND 000005e2: PUSH1 0x00 000005e4: SWAP1 000005e5: DUP2 000005e6: MSTORE 000005e7: PUSH1 0x20 000005e9: DUP2 000005ea: SWAP1 000005eb: MSTORE 000005ec: PUSH1 0x40 000005ee: SWAP1 000005ef: KECCAK256 000005f0: SLOAD 000005f1: PUSH2 0x0682 000005f4: SWAP1 000005f5: DUP4 000005f6: PUSH2 0x01f1 000005f9: JUMP 000005fa: JUMPDEST 000005fb: ISZERO 000005fc: ISZERO 000005fd: PUSH2 0x0605 00000600: JUMPI 00000601: PUSH2 0x0002 00000604: JUMP 00000605: JUMPDEST 00000606: PUSH2 0x060e 00000609: DUP3 0000060a: PUSH2 0x01d2 0000060d: JUMP 0000060e: JUMPDEST 0000060f: POP 00000610: PUSH2 0x0678 00000613: JUMP 00000614: JUMPDEST 00000615: PUSH1 0x01 00000617: PUSH1 0xa0 00000619: PUSH1 0x02 0000061b: EXP 0000061c: SUB 0000061d: DUP6 0000061e: DUP2 0000061f: AND 00000620: PUSH1 0x00 00000622: DUP2 00000623: DUP2 00000624: MSTORE 00000625: PUSH1 0x01 00000627: PUSH1 0x20 00000629: SWAP1 0000062a: DUP2 0000062b: MSTORE 0000062c: PUSH1 0x40 0000062e: DUP1 0000062f: DUP4 00000630: KECCAK256 00000631: CALLER 00000632: DUP7 00000633: AND 00000634: DUP5 00000635: MSTORE 00000636: DUP3 00000637: MSTORE 00000638: SWAP2 00000639: DUP3 0000063a: SWAP1 0000063b: KECCAK256 0000063c: SWAP5 0000063d: SWAP1 0000063e: SWAP5 0000063f: SSTORE 00000640: DUP1 00000641: MLOAD 00000642: DUP7 00000643: DUP2 00000644: MSTORE 00000645: SWAP1 00000646: MLOAD 00000647: SWAP3 00000648: DUP8 00000649: AND 0000064a: SWAP4 0000064b: SWAP2 0000064c: SWAP3 0000064d: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef 0000066e: SWAP3 0000066f: SWAP2 00000670: DUP2 00000671: SWAP1 00000672: SUB 00000673: SWAP1 00000674: SWAP2 00000675: ADD 00000676: SWAP1 00000677: LOG3 00000678: JUMPDEST 00000679: POP 0000067a: PUSH1 0x01 0000067c: SWAP4 0000067d: SWAP3 0000067e: POP 0000067f: POP 00000680: POP 00000681: JUMP 00000682: JUMPDEST 00000683: PUSH1 0x01 00000685: PUSH1 0xa0 00000687: PUSH1 0x02 00000689: EXP 0000068a: SUB 0000068b: DUP6 0000068c: DUP2 0000068d: AND 0000068e: PUSH1 0x00 00000690: SWAP1 00000691: DUP2 00000692: MSTORE 00000693: PUSH1 0x20 00000695: DUP2 00000696: SWAP1 00000697: MSTORE 00000698: PUSH1 0x40 0000069a: DUP1 0000069b: DUP3 0000069c: KECCAK256 0000069d: SWAP4 0000069e: SWAP1 0000069f: SWAP4 000006a0: SSTORE 000006a1: SWAP1 000006a2: DUP6 000006a3: AND 000006a4: DUP2 000006a5: MSTORE 000006a6: KECCAK256 000006a7: SLOAD 000006a8: PUSH2 0x06b1 000006ab: SWAP1 000006ac: DUP4 000006ad: PUSH2 0x0312 000006b0: JUMP 000006b1: JUMPDEST 000006b2: PUSH1 0x01 000006b4: PUSH1 0xa0 000006b6: PUSH1 0x02 000006b8: EXP 000006b9: SUB 000006ba: DUP5 000006bb: DUP2 000006bc: AND 000006bd: PUSH1 0x00 000006bf: SWAP1 000006c0: DUP2 000006c1: MSTORE 000006c2: PUSH1 0x20 000006c4: DUP2 000006c5: DUP2 000006c6: MSTORE 000006c7: PUSH1 0x40 000006c9: DUP1 000006ca: DUP4 000006cb: KECCAK256 000006cc: SWAP5 000006cd: SWAP1 000006ce: SWAP5 000006cf: SSTORE 000006d0: DUP8 000006d1: DUP4 000006d2: AND 000006d3: DUP3 000006d4: MSTORE 000006d5: PUSH1 0x01 000006d7: DUP2 000006d8: MSTORE 000006d9: DUP4 000006da: DUP3 000006db: KECCAK256 000006dc: CALLER 000006dd: SWAP1 000006de: SWAP4 000006df: AND 000006e0: DUP3 000006e1: MSTORE 000006e2: SWAP2 000006e3: SWAP1 000006e4: SWAP2 000006e5: MSTORE 000006e6: KECCAK256 000006e7: SLOAD 000006e8: PUSH2 0x0614 000006eb: SWAP1 000006ec: DUP4 000006ed: PUSH2 0x01f1 000006f0: JUMP 000006f1: JUMPDEST 000006f2: ISZERO 000006f3: PUSH2 0x0764 000006f6: JUMPI 000006f7: DUP3 000006f8: PUSH1 0x01 000006fa: PUSH1 0xa0 000006fc: PUSH1 0x02 000006fe: EXP 000006ff: SUB 00000700: AND 00000701: PUSH4 0x4889ca88 00000706: CALLER 00000707: DUP5 00000708: ADDRESS 00000709: PUSH1 0x40 0000070b: MLOAD 0000070c: DUP5 0000070d: PUSH1 0xe0 0000070f: PUSH1 0x02 00000711: EXP 00000712: MUL 00000713: DUP2 00000714: MSTORE 00000715: PUSH1 0x04 00000717: ADD 00000718: DUP1 00000719: DUP5 0000071a: PUSH1 0x01 0000071c: PUSH1 0xa0 0000071e: PUSH1 0x02 00000720: EXP 00000721: SUB 00000722: AND 00000723: DUP2 00000724: MSTORE 00000725: PUSH1 0x20 00000727: ADD 00000728: DUP4 00000729: DUP2 0000072a: MSTORE 0000072b: PUSH1 0x20 0000072d: ADD 0000072e: DUP3 0000072f: PUSH1 0x01 00000731: PUSH1 0xa0 00000733: PUSH1 0x02 00000735: EXP 00000736: SUB 00000737: AND 00000738: DUP2 00000739: MSTORE 0000073a: PUSH1 0x20 0000073c: ADD 0000073d: SWAP4 0000073e: POP 0000073f: POP 00000740: POP 00000741: POP 00000742: PUSH1 0x00 00000744: PUSH1 0x40 00000746: MLOAD 00000747: DUP1 00000748: DUP4 00000749: SUB 0000074a: DUP2 0000074b: PUSH1 0x00 0000074d: DUP8 0000074e: PUSH2 0x61da 00000751: GAS 00000752: SUB 00000753: CALL 00000754: ISZERO 00000755: PUSH2 0x0002 00000758: JUMPI 00000759: POP 0000075a: POP 0000075b: POP 0000075c: PUSH1 0x01 0000075e: SWAP1 0000075f: POP 00000760: PUSH2 0x0162 00000763: JUMP 00000764: JUMPDEST 00000765: PUSH2 0x0002 00000768: JUMP 00000769: JUMPDEST 0000076a: ISZERO 0000076b: ISZERO 0000076c: PUSH2 0x0774 0000076f: JUMPI 00000770: PUSH2 0x0002 00000773: JUMP 00000774: JUMPDEST 00000775: POP 00000776: DUP2 00000777: DUP2 00000778: ADD 00000779: PUSH2 0x0162 0000077c: JUMP 0000077d: JUMPDEST 0000077e: ISZERO 0000077f: ISZERO 00000780: PUSH2 0x0788 00000783: JUMPI 00000784: PUSH2 0x0002 00000787: JUMP 00000788: JUMPDEST 00000789: POP 0000078a: DUP1 0000078b: DUP3 0000078c: SUB 0000078d: PUSH2 0x0162 00000790: JUMP
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.
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | Untrusted CALL target/value reachable | 60 | yes | yes |
viewtrace_id: 0x84bccb220bfdaddbac5d69282c6b12bb55609855784ce83310628aa3bcf202e6
call_targets:
0x0000000000000000000000000000000000000004, 0x89d64bc7e46bdc49a89652ae9bb167418cbad62e
target_varies:
yes
classification:
target_varies
validation_json{
"sink": "CALL",
"errors": 0,
"status": "confirmed",
"attempts": 1,
"trace_id": "0x84bccb220bfdaddbac5d69282c6b12bb55609855784ce83310628aa3bcf202e6",
"confirmed": true,
"trace_mode": "callTracer",
"call_targets": [
"0x0000000000000000000000000000000000000004",
"0x89d64bc7e46bdc49a89652ae9bb167418cbad62e"
],
"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": "0x095ea7b3",
"selector": "0x095ea7b3",
"calldata_variants": [
"0x095ea7b3",
"0x095ea7b30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x18160ddd",
"selector": "0x18160ddd",
"calldata_variants": [
"0x18160ddd",
"0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x23b872dd",
"selector": "0x23b872dd",
"calldata_variants": [
"0x23b872dd",
"0x23b872dd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2e1a7d4d",
"selector": "0x2e1a7d4d",
"calldata_variants": [
"0x2e1a7d4d",
"0x2e1a7d4d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x313ce567",
"selector": "0x313ce567",
"calldata_variants": [
"0x313ce567",
"0x313ce5670000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3177029f",
"selector": "0x3177029f",
"calldata_variants": [
"0x3177029f",
"0x3177029f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x70a08231",
"selector": "0x70a08231",
"calldata_variants": [
"0x70a08231",
"0x70a082310000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 914,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1121,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1157,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 4,
"guards_detected": [],
"untrusted_call_count": 4
}
|
| high | other | detector | ETH value transfer possible | 55 | yes | yes |
viewtrace_id: 0x84bccb220bfdaddbac5d69282c6b12bb55609855784ce83310628aa3bcf202e6
call_targets:
0x0000000000000000000000000000000000000004, 0x89d64bc7e46bdc49a89652ae9bb167418cbad62e
target_varies:
yes
classification:
target_varies
validation_json{
"sink": "CALL",
"errors": 0,
"status": "confirmed",
"attempts": 1,
"trace_id": "0x84bccb220bfdaddbac5d69282c6b12bb55609855784ce83310628aa3bcf202e6",
"confirmed": true,
"trace_mode": "callTracer",
"call_targets": [
"0x0000000000000000000000000000000000000004",
"0x89d64bc7e46bdc49a89652ae9bb167418cbad62e"
],
"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": "0x095ea7b3",
"selector": "0x095ea7b3",
"calldata_variants": [
"0x095ea7b3",
"0x095ea7b30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x18160ddd",
"selector": "0x18160ddd",
"calldata_variants": [
"0x18160ddd",
"0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x23b872dd",
"selector": "0x23b872dd",
"calldata_variants": [
"0x23b872dd",
"0x23b872dd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2e1a7d4d",
"selector": "0x2e1a7d4d",
"calldata_variants": [
"0x2e1a7d4d",
"0x2e1a7d4d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x313ce567",
"selector": "0x313ce567",
"calldata_variants": [
"0x313ce567",
"0x313ce5670000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3177029f",
"selector": "0x3177029f",
"calldata_variants": [
"0x3177029f",
"0x3177029f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x70a08231",
"selector": "0x70a08231",
"calldata_variants": [
"0x70a08231",
"0x70a082310000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 914,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1121,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1157,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 4,
"guards_detected": []
}
|
| medium | auth | codex | Allowance overwrite race in `approve` and `approveAndCall` | 75 | no | — |
viewevidence_json{
"evidence": "Selector inference is best-effort, but `0x095ea7b3` matches ERC20 `approve(address,uint256)` and `0x3177029f` matches `approveAndCall(address,uint256)`. Both flow through the allowance-write routine beginning at pc `0xfd`, where the nested allowance mapping is written with `SSTORE` and no visible zero-check or compare-to-current-allowance guard precedes the write. The `approveAndCall` path then performs an external callback at pc `0x753` using selector `0x4889ca88` (`receiveApproval(address,uint256,address)`), so the just-written allowance is immediately usable.",
"locations": [
"selector:0x095ea7b3",
"selector:0x3177029f",
"pc:0xfd",
"pc:0x6f7"
],
"recommendation": "Do not support overwrite-style approvals without mitigation. Require setting allowance to zero before a new non-zero value, or add `increaseAllowance` / `decreaseAllowance` style flows and deprecate direct allowance replacement.",
"exploit_scenario": "A holder changes a spender allowance from `N` to `M` using `approve` or `approveAndCall`. A malicious spender can front-run with `transferFrom(..., N)` before the new approval lands, then still use the fresh `M` allowance afterward, effectively spending more than the holder intended. In the `approveAndCall` path, the newly written allowance is also live before the external callback returns."
}
|
| low | math | codex | `totalSupply()` is tied to raw ETH balance, so forced ETH can desynchronize accounting | 65 | no | — |
viewevidence_json{
"evidence": "`totalSupply()` (`0x18160ddd`) resolves to the routine at pc `0x168`, which executes `ADDRESS ... BALANCE` and returns the contract's ETH balance directly. By contrast, `balanceOf()` (`0x70a08231`) reads from a storage mapping at pc `0x21a`. Because supply is not read from the same storage accounting as balances, unsolicited ETH changes reported supply without changing any user balance.",
"locations": [
"selector:0x18160ddd",
"selector:0x70a08231",
"pc:0x168",
"pc:0x21a"
],
"recommendation": "Track minted supply in storage and update it only on explicit deposit/withdraw flows, or provide a controlled reconciliation/sweep mechanism for unsolicited ETH.",
"exploit_scenario": "An attacker can force ETH into the contract (for example via `SELFDESTRUCT`). The contract's ETH balance rises, so `totalSupply()` rises as well, but no holder balance is minted. This can break the invariant that total supply equals the sum of account balances, confuse integrations that rely on supply-based accounting, and leave unsolicited ETH permanently trapped."
}
|