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

Analysis Run

7450153f-7c91-4384-9071-59cc3b2b264a

complete
Chain ID
1
Address
Block Number
Created
Tue, Dec 30, 2025 3:22 AM
Review Summary

What survived the funnel

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

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

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
30680 report.consolidate complete 1 / 1 3 months ago
75076 artifact.fetch complete 1 / 3 1 week ago
75077 tool.cast_disasm complete 1 / 3 1 week ago
75078 analysis.bundle complete 1 / 3 1 week ago
75079 capability.graph complete 1 / 3 1 week ago
75080 detector.run complete 1 / 3 1 week ago
75081 validation.fork complete 1 / 3 1 week ago

Artifact

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

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 1
Findings
1
No findings?
no
Summary
Found 1 low-severity access control issue where operator privileges persist across ownership transfers.
View stderr
[codex:1518361] OpenAI Codex v0.77.0 (research preview)
[codex:1518361] --------
[codex:1518361] workdir: /tmp/codex-multi-f9gsu1ks
[codex:1518361] model: gpt-5.2-codex
[codex:1518361] provider: openai
[codex:1518361] approval: never
[codex:1518361] sandbox: read-only
[codex:1518361] reasoning effort: xhigh
[codex:1518361] reasoning summaries: auto
[codex:1518361] session id: 019b6d45-0013-7660-8c11-5653e6b26990
[codex:1518361] --------
[codex:1518361] user
[codex:1518361] You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
[codex:1518361] Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
[codex:1518361] accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
[codex:1518361] 
[codex:1518361] Scope rules:
[codex:1518361] - You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party `contracts/**/*.sol` files.
[codex:1518361] - Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
[codex:1518361] 
[codex:1518361] Output MUST be valid JSON matching the provided schema.
[codex:1518361] - If you find nothing meaningful: set no_findings=true and findings=[].
[codex:1518361] - Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
[codex:1518361] 
[codex:1518361] Output constraints (IMPORTANT):
[codex:1518361] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:1518361] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:1518361] mcp startup: no servers
[codex:1518361] 
[codex:1518361] thinking
[codex:1518361] **Reading AUDIT_BUNDLE.txt**
[codex:1518361] exec
[codex:1518361] /bin/bash -lc ls in /tmp/codex-multi-f9gsu1ks succeeded in 5ms:
[codex:1518361] AUDIT_BUNDLE.txt
[codex:1518361] codex-output-schema.json
[codex:1518361] contracts
[codex:1518361] exec
[codex:1518361] /bin/bash -lc 'rg --files' in /tmp/codex-multi-f9gsu1ks succeeded in 8ms:
[codex:1518361] codex-output-schema.json
[codex:1518361] AUDIT_BUNDLE.txt
[codex:1518361] contracts/contracts/TokenBatchTransfer.sol
[codex:1518361] contracts/@openzeppelin/contracts/math/SafeMath.sol
[codex:1518361] contracts/@openzeppelin/contracts/access/Ownable.sol
[codex:1518361] contracts/@openzeppelin/contracts/token/ERC20/IERC20.sol
[codex:1518361] contracts/@openzeppelin/contracts/token/ERC20/ERC20.sol
[codex:1518361] contracts/@openzeppelin/contracts/utils/Context.sol
[codex:1518361] 
[codex:1518361] thinking
[codex:1518361] **Reading AUDIT_BUNDLE.txt**
[codex:1518361] exec
[codex:1518361] /bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-multi-f9gsu1ks succeeded in 6ms:
[codex:1518361] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:1518361] 
[codex:1518361] ================================================================================
[codex:1518361] FILE: contracts/@openzeppelin/contracts/access/Ownable.sol
[codex:1518361] ================================================================================
[codex:1518361] // SPDX-License-Identifier: MIT
[codex:1518361] 
[codex:1518361] pragma solidity >=0.6.0 <0.8.0;
[codex:1518361] 
[codex:1518361] import "../utils/Context.sol";
[codex:1518361] /**
[codex:1518361]  * @dev Contract module which provides a basic access control mechanism, where
[codex:1518361]  * there is an account (an owner) that can be granted exclusive access to
[codex:1518361]  * specific functions.
[codex:1518361]  *
[codex:1518361]  * By default, the owner account will be the one that deploys the contract. This
[codex:1518361]  * can later be changed with {transferOwnership}.
[codex:1518361]  *
[codex:1518361]  * This module is used through inheritance. It will make available the modifier
[codex:1518361]  * `onlyOwner`, which can be applied to your functions to restrict their use to
[codex:1518361] 
[codex:1518361] thinking
[codex:1518361] **Analyzing TokenBatchTransfer security**
[codex:1518361] exec
[codex:1518361] /bin/bash -lc 'nl -ba contracts/contracts/TokenBatchTransfer.sol' in /tmp/codex-multi-f9gsu1ks succeeded in 6ms:
[codex:1518361]      1	pragma solidity ^0.6.0;
[codex:1518361]      2	
[codex:1518361]      3	import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
[codex:1518361]      4	import "@openzeppelin/contracts/math/SafeMath.sol";
[codex:1518361]      5	import "@openzeppelin/contracts/access/Ownable.sol";
[codex:1518361]      6	
[codex:1518361]      7	contract TokenBatchTransfer is Ownable {
[codex:1518361]      8	
[codex:1518361]      9	    using SafeMath for uint256;
[codex:1518361]     10	
[codex:1518361]     11	    ERC20 public token; // Address of token contract
[codex:1518361]     12	    address public transferOperator; // Address to manage the Transfers
[codex:1518361]     13	
[codex:1518361]     14	    // Modifiers
[codex:1518361]     15	    modifier onlyOperator() {
[codex:1518361]     16	        require(
[codex:1518361]     17	            msg.sender == transferOperator,
[codex:1518361]     18	            "Only operator can call this function."
[codex:1518361]     19	        );
[codex:1518361]     20	        _;
[codex:1518361] 
[codex:1518361] 
[codex:1518361] thinking
[codex:1518361] **Summarizing security findings and analysis**
[codex:1518361] 
[codex:1518361] I'll carefully review the token batch transfer contract for potential vulnerabilities, focusing on access control, reentrancy, and ERC20 compatibility issues. There’s a notable low-severity footgun where the operator role isn’t reset on ownership transfer, potentially letting the previous owner still withdraw tokens unexpectedly. Other concerns like missing zero address checks or token standard compatibility seem informational rather than exploitable. Overall, the issues look minimal but worth flagging to the user for awareness.
[codex:1518361] thinking
[codex:1518361] **Preparing structured vulnerability report**
[codex:1518361] 
[codex:1518361] I'm assembling a JSON report that highlights the key low-severity access control issue: the operator role isn't revoked on ownership transfer, which can let a previous owner still move funds unexpectedly. I'll ensure the JSON includes severity, category, a clear exploit scenario, recommendation, and precise code locations. The summary will reflect this one meaningful finding, adhering strictly to the output schema.
[codex:1518361] exec
[codex:1518361] /bin/bash -lc 'cat codex-output-schema.json' in /tmp/codex-multi-f9gsu1ks succeeded in 6ms:
[codex:1518361] {"type": "object", "additionalProperties": false, "required": ["no_findings", "summary", "findings"], "properties": {"no_findings": {"type": "boolean"}, "summary": {"type": "string"}, "findings": {"type": "array", "items": {"type": "object", "additionalProperties": false, "required": ["severity", "category", "title", "evidence", "locations", "exploit_scenario", "recommendation"], "properties": {"severity": {"type": "string", "enum": ["info", "low", "medium", "high", "critical"]}, "category": {"type": "string", "enum": ["access_control", "reentrancy", "math", "oracle", "upgradeability", "auth", "other"]}, "title": {"type": "string"}, "exploit_scenario": {"type": "string"}, "recommendation": {"type": "string"}, "evidence": {"type": "string"}, "locations": {"type": "array", "items": {"type": "string"}}}}}}}
[codex:1518361] 
[codex:1518361] thinking
[codex:1518361] **Generating JSON report for access control issue**
[codex:1518361] 
[codex:1518361] I’m putting together a clean JSON object summarizing a low-severity access control concern where operator privileges persist after ownership transfer. It includes a concise summary, a detailed finding with severity, exploit scenario, recommendation, evidence, and five relevant source locations. I’m making sure the output is valid JSON with proper escaping and no extra commentary.
[codex:1518361] codex
[codex:1518361] {"no_findings":false,"summary":"Found 1 low-severity access control issue where operator privileges persist across ownership transfers.","findings":[{"severity":"low","category":"access_control","title":"Operator privileges persist after ownership transfer","exploit_scenario":"Alice deploys the contract and is both owner and operator. She later transfers ownership to Bob (e.g., to hand over the airdrop). Because transferOperator is unchanged, Alice still passes onlyOperator and can call withdrawToken or batchTransfer to drain or redirect tokens, even though she is no longer owner.","recommendation":"When ownership changes, also update or revoke the operator role (e.g., set transferOperator = newOwner inside a custom ownership transfer flow) or allow the owner to set operator to address(0) to disable the role until a new operator is chosen.","evidence":"transferOperator is set in the constructor and only updated via updateOperator; withdrawToken and batchTransfer gate on onlyOperator without checking ownership.","locations":["contracts/contracts/TokenBatchTransfer.sol:11","contracts/contracts/TokenBatchTransfer.sol:23","contracts/contracts/TokenBatchTransfer.sol:35","contracts/contracts/TokenBatchTransfer.sol:45","contracts/contracts/TokenBatchTransfer.sol:57"]}]}
[codex:1518361] tokens used
[codex:1518361] 18,264
[codex:1518361] {"no_findings":false,"summary":"Found 1 low-severity access control issue where operator privileges persist across ownership transfers.","findings":[{"severity":"low","category":"access_control","title":"Operator privileges persist after ownership transfer","exploit_scenario":"Alice deploys the contract and is both owner and operator. She later transfers ownership to Bob (e.g., to hand over the airdrop). Because transferOperator is unchanged, Alice still passes onlyOperator and can call withdrawToken or batchTransfer to drain or redirect tokens, even though she is no longer owner.","recommendation":"When ownership changes, also update or revoke the operator role (e.g., set transferOperator = newOwner inside a custom ownership transfer flow) or allow the owner to set operator to address(0) to disable the role until a new operator is chosen.","evidence":"transferOperator is set in the constructor and only updated via updateOperator; withdrawToken and batchTransfer gate on onlyOperator without checking ownership.","locations":["contracts/contracts/TokenBatchTransfer.sol:11","contracts/contracts/TokenBatchTransfer.sol:23","contracts/contracts/TokenBatchTransfer.sol:35","contracts/contracts/TokenBatchTransfer.sol:45","contracts/contracts/TokenBatchTransfer.sol:57"]}]}
Metadata
{
    "codex": {
        "ran_at": "2025-12-30T03:22:32.309939+00:00",
        "returncode": 0
    },
    "summary": "Found 1 low-severity access control issue where operator privileges persist across ownership transfers.",
    "raw_final": {
        "summary": "Found 1 low-severity access control issue where operator privileges persist across ownership transfers.",
        "findings": [
            {
                "title": "Operator privileges persist after ownership transfer",
                "category": "access_control",
                "evidence": "transferOperator is set in the constructor and only updated via updateOperator; withdrawToken and batchTransfer gate on onlyOperator without checking ownership.",
                "severity": "low",
                "locations": [
                    "contracts/contracts/TokenBatchTransfer.sol:11",
                    "contracts/contracts/TokenBatchTransfer.sol:23",
                    "contracts/contracts/TokenBatchTransfer.sol:35",
                    "contracts/contracts/TokenBatchTransfer.sol:45",
                    "contracts/contracts/TokenBatchTransfer.sol:57"
                ],
                "recommendation": "When ownership changes, also update or revoke the operator role (e.g., set transferOperator = newOwner inside a custom ownership transfer flow) or allow the owner to set operator to address(0) to disable the role until a new operator is chosen.",
                "exploit_scenario": "Alice deploys the contract and is both owner and operator. She later transfers ownership to Bob (e.g., to hand over the airdrop). Because transferOperator is unchanged, Alice still passes onlyOperator and can call withdrawToken or batchTransfer to drain or redirect tokens, even though she is no longer owner."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
3
EXT*/BALANCE
3
Total opcodes
1425
Flags
No heuristic flags raised.
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: CALLVALUE
00000006: DUP1
00000007: ISZERO
00000008: PUSH2 0x0010
0000000b: JUMPI
0000000c: PUSH1 0x00
0000000e: DUP1
0000000f: REVERT
00000010: JUMPDEST
00000011: POP
00000012: PUSH1 0x04
00000014: CALLDATASIZE
00000015: LT
00000016: PUSH2 0x0088
00000019: JUMPI
0000001a: PUSH1 0x00
0000001c: CALLDATALOAD
0000001d: PUSH1 0xe0
0000001f: SHR
00000020: DUP1
00000021: PUSH4 0xac7475ed
00000026: GT
00000027: PUSH2 0x005b
0000002a: JUMPI
0000002b: DUP1
0000002c: PUSH4 0xac7475ed
00000031: EQ
00000032: PUSH2 0x019a
00000035: JUMPI
00000036: DUP1
00000037: PUSH4 0xd0835895
0000003c: EQ
0000003d: PUSH2 0x01c0
00000040: JUMPI
00000041: DUP1
00000042: PUSH4 0xf2fde38b
00000047: EQ
00000048: PUSH2 0x01c8
0000004b: JUMPI
0000004c: DUP1
0000004d: PUSH4 0xfc0c546a
00000052: EQ
00000053: PUSH2 0x01ee
00000056: JUMPI
00000057: PUSH2 0x0088
0000005a: JUMP
0000005b: JUMPDEST
0000005c: DUP1
0000005d: PUSH4 0x50baa622
00000062: EQ
00000063: PUSH2 0x008d
00000066: JUMPI
00000067: DUP1
00000068: PUSH4 0x715018a6
0000006d: EQ
0000006e: PUSH2 0x00ac
00000071: JUMPI
00000072: DUP1
00000073: PUSH4 0x88d695b2
00000078: EQ
00000079: PUSH2 0x00b4
0000007c: JUMPI
0000007d: DUP1
0000007e: PUSH4 0x8da5cb5b
00000083: EQ
00000084: PUSH2 0x0176
00000087: JUMPI
00000088: JUMPDEST
00000089: PUSH1 0x00
0000008b: DUP1
0000008c: REVERT
0000008d: JUMPDEST
0000008e: PUSH2 0x00aa
00000091: PUSH1 0x04
00000093: DUP1
00000094: CALLDATASIZE
00000095: SUB
00000096: PUSH1 0x20
00000098: DUP2
00000099: LT
0000009a: ISZERO
0000009b: PUSH2 0x00a3
0000009e: JUMPI
0000009f: PUSH1 0x00
000000a1: DUP1
000000a2: REVERT
000000a3: JUMPDEST
000000a4: POP
000000a5: CALLDATALOAD
000000a6: PUSH2 0x01f6
000000a9: JUMP
000000aa: JUMPDEST
000000ab: STOP
000000ac: JUMPDEST
000000ad: PUSH2 0x00aa
000000b0: PUSH2 0x03e6
000000b3: JUMP
000000b4: JUMPDEST
000000b5: PUSH2 0x00aa
000000b8: PUSH1 0x04
000000ba: DUP1
000000bb: CALLDATASIZE
000000bc: SUB
000000bd: PUSH1 0x40
000000bf: DUP2
000000c0: LT
000000c1: ISZERO
000000c2: PUSH2 0x00ca
000000c5: JUMPI
000000c6: PUSH1 0x00
000000c8: DUP1
000000c9: REVERT
000000ca: JUMPDEST
000000cb: DUP2
000000cc: ADD
000000cd: SWAP1
000000ce: PUSH1 0x20
000000d0: DUP2
000000d1: ADD
000000d2: DUP2
000000d3: CALLDATALOAD
000000d4: PUSH5 0x0100000000
000000da: DUP2
000000db: GT
000000dc: ISZERO
000000dd: PUSH2 0x00e5
000000e0: JUMPI
000000e1: PUSH1 0x00
000000e3: DUP1
000000e4: REVERT
000000e5: JUMPDEST
000000e6: DUP3
000000e7: ADD
000000e8: DUP4
000000e9: PUSH1 0x20
000000eb: DUP3
000000ec: ADD
000000ed: GT
000000ee: ISZERO
000000ef: PUSH2 0x00f7
000000f2: JUMPI
000000f3: PUSH1 0x00
000000f5: DUP1
000000f6: REVERT
000000f7: JUMPDEST
000000f8: DUP1
000000f9: CALLDATALOAD
000000fa: SWAP1
000000fb: PUSH1 0x20
000000fd: ADD
000000fe: SWAP2
000000ff: DUP5
00000100: PUSH1 0x20
00000102: DUP4
00000103: MUL
00000104: DUP5
00000105: ADD
00000106: GT
00000107: PUSH5 0x0100000000
0000010d: DUP4
0000010e: GT
0000010f: OR
00000110: ISZERO
00000111: PUSH2 0x0119
00000114: JUMPI
00000115: PUSH1 0x00
00000117: DUP1
00000118: REVERT
00000119: JUMPDEST
0000011a: SWAP2
0000011b: SWAP4
0000011c: SWAP1
0000011d: SWAP3
0000011e: SWAP1
0000011f: SWAP2
00000120: PUSH1 0x20
00000122: DUP2
00000123: ADD
00000124: SWAP1
00000125: CALLDATALOAD
00000126: PUSH5 0x0100000000
0000012c: DUP2
0000012d: GT
0000012e: ISZERO
0000012f: PUSH2 0x0137
00000132: JUMPI
00000133: PUSH1 0x00
00000135: DUP1
00000136: REVERT
00000137: JUMPDEST
00000138: DUP3
00000139: ADD
0000013a: DUP4
0000013b: PUSH1 0x20
0000013d: DUP3
0000013e: ADD
0000013f: GT
00000140: ISZERO
00000141: PUSH2 0x0149
00000144: JUMPI
00000145: PUSH1 0x00
00000147: DUP1
00000148: REVERT
00000149: JUMPDEST
0000014a: DUP1
0000014b: CALLDATALOAD
0000014c: SWAP1
0000014d: PUSH1 0x20
0000014f: ADD
00000150: SWAP2
00000151: DUP5
00000152: PUSH1 0x20
00000154: DUP4
00000155: MUL
00000156: DUP5
00000157: ADD
00000158: GT
00000159: PUSH5 0x0100000000
0000015f: DUP4
00000160: GT
00000161: OR
00000162: ISZERO
00000163: PUSH2 0x016b
00000166: JUMPI
00000167: PUSH1 0x00
00000169: DUP1
0000016a: REVERT
0000016b: JUMPDEST
0000016c: POP
0000016d: SWAP1
0000016e: SWAP3
0000016f: POP
00000170: SWAP1
00000171: POP
00000172: PUSH2 0x04a4
00000175: JUMP
00000176: JUMPDEST
00000177: PUSH2 0x017e
0000017a: PUSH2 0x0651
0000017d: JUMP
0000017e: JUMPDEST
0000017f: PUSH1 0x40
00000181: DUP1
00000182: MLOAD
00000183: PUSH1 0x01
00000185: PUSH1 0x01
00000187: PUSH1 0xa0
00000189: SHL
0000018a: SUB
0000018b: SWAP1
0000018c: SWAP3
0000018d: AND
0000018e: DUP3
0000018f: MSTORE
00000190: MLOAD
00000191: SWAP1
00000192: DUP2
00000193: SWAP1
00000194: SUB
00000195: PUSH1 0x20
00000197: ADD
00000198: SWAP1
00000199: RETURN
0000019a: JUMPDEST
0000019b: PUSH2 0x00aa
0000019e: PUSH1 0x04
000001a0: DUP1
000001a1: CALLDATASIZE
000001a2: SUB
000001a3: PUSH1 0x20
000001a5: DUP2
000001a6: LT
000001a7: ISZERO
000001a8: PUSH2 0x01b0
000001ab: JUMPI
000001ac: PUSH1 0x00
000001ae: DUP1
000001af: REVERT
000001b0: JUMPDEST
000001b1: POP
000001b2: CALLDATALOAD
000001b3: PUSH1 0x01
000001b5: PUSH1 0x01
000001b7: PUSH1 0xa0
000001b9: SHL
000001ba: SUB
000001bb: AND
000001bc: PUSH2 0x0660
000001bf: JUMP
000001c0: JUMPDEST
000001c1: PUSH2 0x017e
000001c4: PUSH2 0x0783
000001c7: JUMP
000001c8: JUMPDEST
000001c9: PUSH2 0x00aa
000001cc: PUSH1 0x04
000001ce: DUP1
000001cf: CALLDATASIZE
000001d0: SUB
000001d1: PUSH1 0x20
000001d3: DUP2
000001d4: LT
000001d5: ISZERO
000001d6: PUSH2 0x01de
000001d9: JUMPI
000001da: PUSH1 0x00
000001dc: DUP1
000001dd: REVERT
000001de: JUMPDEST
000001df: POP
000001e0: CALLDATALOAD
000001e1: PUSH1 0x01
000001e3: PUSH1 0x01
000001e5: PUSH1 0xa0
000001e7: SHL
000001e8: SUB
000001e9: AND
000001ea: PUSH2 0x0792
000001ed: JUMP
000001ee: JUMPDEST
000001ef: PUSH2 0x017e
000001f2: PUSH2 0x08a6
000001f5: JUMP
000001f6: JUMPDEST
000001f7: PUSH1 0x02
000001f9: SLOAD
000001fa: PUSH1 0x01
000001fc: PUSH1 0x01
000001fe: PUSH1 0xa0
00000200: SHL
00000201: SUB
00000202: AND
00000203: CALLER
00000204: EQ
00000205: PUSH2 0x023f
00000208: JUMPI
00000209: PUSH1 0x40
0000020b: MLOAD
0000020c: PUSH3 0x461bcd
00000210: PUSH1 0xe5
00000212: SHL
00000213: DUP2
00000214: MSTORE
00000215: PUSH1 0x04
00000217: ADD
00000218: DUP1
00000219: DUP1
0000021a: PUSH1 0x20
0000021c: ADD
0000021d: DUP3
0000021e: DUP2
0000021f: SUB
00000220: DUP3
00000221: MSTORE
00000222: PUSH1 0x25
00000224: DUP2
00000225: MSTORE
00000226: PUSH1 0x20
00000228: ADD
00000229: DUP1
0000022a: PUSH2 0x0956
0000022d: PUSH1 0x25
0000022f: SWAP2
00000230: CODECOPY
00000231: PUSH1 0x40
00000233: ADD
00000234: SWAP2
00000235: POP
00000236: POP
00000237: PUSH1 0x40
00000239: MLOAD
0000023a: DUP1
0000023b: SWAP2
0000023c: SUB
0000023d: SWAP1
0000023e: REVERT
0000023f: JUMPDEST
00000240: PUSH1 0x01
00000242: SLOAD
00000243: PUSH1 0x40
00000245: DUP1
00000246: MLOAD
00000247: PUSH4 0x70a08231
0000024c: PUSH1 0xe0
0000024e: SHL
0000024f: DUP2
00000250: MSTORE
00000251: ADDRESS
00000252: PUSH1 0x04
00000254: DUP3
00000255: ADD
00000256: MSTORE
00000257: SWAP1
00000258: MLOAD
00000259: DUP4
0000025a: SWAP3
0000025b: PUSH1 0x01
0000025d: PUSH1 0x01
0000025f: PUSH1 0xa0
00000261: SHL
00000262: SUB
00000263: AND
00000264: SWAP2
00000265: PUSH4 0x70a08231
0000026a: SWAP2
0000026b: PUSH1 0x24
0000026d: DUP1
0000026e: DUP4
0000026f: ADD
00000270: SWAP3
00000271: PUSH1 0x20
00000273: SWAP3
00000274: SWAP2
00000275: SWAP1
00000276: DUP3
00000277: SWAP1
00000278: SUB
00000279: ADD
0000027a: DUP2
0000027b: DUP7
0000027c: DUP1
0000027d: EXTCODESIZE
0000027e: ISZERO
0000027f: DUP1
00000280: ISZERO
00000281: PUSH2 0x0289
00000284: JUMPI
00000285: PUSH1 0x00
00000287: DUP1
00000288: REVERT
00000289: JUMPDEST
0000028a: POP
0000028b: GAS
0000028c: STATICCALL
0000028d: ISZERO
0000028e: DUP1
0000028f: ISZERO
00000290: PUSH2 0x029d
00000293: JUMPI
00000294: RETURNDATASIZE
00000295: PUSH1 0x00
00000297: DUP1
00000298: RETURNDATACOPY
00000299: RETURNDATASIZE
0000029a: PUSH1 0x00
0000029c: REVERT
0000029d: JUMPDEST
0000029e: POP
0000029f: POP
000002a0: POP
000002a1: POP
000002a2: PUSH1 0x40
000002a4: MLOAD
000002a5: RETURNDATASIZE
000002a6: PUSH1 0x20
000002a8: DUP2
000002a9: LT
000002aa: ISZERO
000002ab: PUSH2 0x02b3
000002ae: JUMPI
000002af: PUSH1 0x00
000002b1: DUP1
000002b2: REVERT
000002b3: JUMPDEST
000002b4: POP
000002b5: MLOAD
000002b6: LT
000002b7: ISZERO
000002b8: PUSH2 0x02f2
000002bb: JUMPI
000002bc: PUSH1 0x40
000002be: MLOAD
000002bf: PUSH3 0x461bcd
000002c3: PUSH1 0xe5
000002c5: SHL
000002c6: DUP2
000002c7: MSTORE
000002c8: PUSH1 0x04
000002ca: ADD
000002cb: DUP1
000002cc: DUP1
000002cd: PUSH1 0x20
000002cf: ADD
000002d0: DUP3
000002d1: DUP2
000002d2: SUB
000002d3: DUP3
000002d4: MSTORE
000002d5: PUSH1 0x22
000002d7: DUP2
000002d8: MSTORE
000002d9: PUSH1 0x20
000002db: ADD
000002dc: DUP1
000002dd: PUSH2 0x0934
000002e0: PUSH1 0x22
000002e2: SWAP2
000002e3: CODECOPY
000002e4: PUSH1 0x40
000002e6: ADD
000002e7: SWAP2
000002e8: POP
000002e9: POP
000002ea: PUSH1 0x40
000002ec: MLOAD
000002ed: DUP1
000002ee: SWAP2
000002ef: SUB
000002f0: SWAP1
000002f1: REVERT
000002f2: JUMPDEST
000002f3: PUSH1 0x01
000002f5: SLOAD
000002f6: PUSH1 0x40
000002f8: DUP1
000002f9: MLOAD
000002fa: PUSH4 0xa9059cbb
000002ff: PUSH1 0xe0
00000301: SHL
00000302: DUP2
00000303: MSTORE
00000304: CALLER
00000305: PUSH1 0x04
00000307: DUP3
00000308: ADD
00000309: MSTORE
0000030a: PUSH1 0x24
0000030c: DUP2
0000030d: ADD
0000030e: DUP5
0000030f: SWAP1
00000310: MSTORE
00000311: SWAP1
00000312: MLOAD
00000313: PUSH1 0x01
00000315: PUSH1 0x01
00000317: PUSH1 0xa0
00000319: SHL
0000031a: SUB
0000031b: SWAP1
0000031c: SWAP3
0000031d: AND
0000031e: SWAP2
0000031f: PUSH4 0xa9059cbb
00000324: SWAP2
00000325: PUSH1 0x44
00000327: DUP1
00000328: DUP3
00000329: ADD
0000032a: SWAP3
0000032b: PUSH1 0x20
0000032d: SWAP3
0000032e: SWAP1
0000032f: SWAP2
00000330: SWAP1
00000331: DUP3
00000332: SWAP1
00000333: SUB
00000334: ADD
00000335: DUP2
00000336: PUSH1 0x00
00000338: DUP8
00000339: DUP1
0000033a: EXTCODESIZE
0000033b: ISZERO
0000033c: DUP1
0000033d: ISZERO
0000033e: PUSH2 0x0346
00000341: JUMPI
00000342: PUSH1 0x00
00000344: DUP1
00000345: REVERT
00000346: JUMPDEST
00000347: POP
00000348: GAS
00000349: CALL
0000034a: ISZERO
0000034b: DUP1
0000034c: ISZERO
0000034d: PUSH2 0x035a
00000350: JUMPI
00000351: RETURNDATASIZE
00000352: PUSH1 0x00
00000354: DUP1
00000355: RETURNDATACOPY
00000356: RETURNDATASIZE
00000357: PUSH1 0x00
00000359: REVERT
0000035a: JUMPDEST
0000035b: POP
0000035c: POP
0000035d: POP
0000035e: POP
0000035f: PUSH1 0x40
00000361: MLOAD
00000362: RETURNDATASIZE
00000363: PUSH1 0x20
00000365: DUP2
00000366: LT
00000367: ISZERO
00000368: PUSH2 0x0370
0000036b: JUMPI
0000036c: PUSH1 0x00
0000036e: DUP1
0000036f: REVERT
00000370: JUMPDEST
00000371: POP
00000372: MLOAD
00000373: PUSH2 0x03ad
00000376: JUMPI
00000377: PUSH1 0x40
00000379: MLOAD
0000037a: PUSH3 0x461bcd
0000037e: PUSH1 0xe5
00000380: SHL
00000381: DUP2
00000382: MSTORE
00000383: PUSH1 0x04
00000385: ADD
00000386: DUP1
00000387: DUP1
00000388: PUSH1 0x20
0000038a: ADD
0000038b: DUP3
0000038c: DUP2
0000038d: SUB
0000038e: DUP3
0000038f: MSTORE
00000390: PUSH1 0x2d
00000392: DUP2
00000393: MSTORE
00000394: PUSH1 0x20
00000396: ADD
00000397: DUP1
00000398: PUSH2 0x08e0
0000039b: PUSH1 0x2d
0000039d: SWAP2
0000039e: CODECOPY
0000039f: PUSH1 0x40
000003a1: ADD
000003a2: SWAP2
000003a3: POP
000003a4: POP
000003a5: PUSH1 0x40
000003a7: MLOAD
000003a8: DUP1
000003a9: SWAP2
000003aa: SUB
000003ab: SWAP1
000003ac: REVERT
000003ad: JUMPDEST
000003ae: PUSH1 0x40
000003b0: DUP1
000003b1: MLOAD
000003b2: DUP3
000003b3: DUP2
000003b4: MSTORE
000003b5: SWAP1
000003b6: MLOAD
000003b7: CALLER
000003b8: SWAP2
000003b9: PUSH32 0x992ee874049a42cae0757a765cd7f641b6028cc35c3478bde8330bf417c3a7a9
000003da: SWAP2
000003db: SWAP1
000003dc: DUP2
000003dd: SWAP1
000003de: SUB
000003df: PUSH1 0x20
000003e1: ADD
000003e2: SWAP1
000003e3: LOG2
000003e4: POP
000003e5: JUMP
000003e6: JUMPDEST
000003e7: PUSH2 0x03ee
000003ea: PUSH2 0x08b5
000003ed: JUMP
000003ee: JUMPDEST
000003ef: PUSH1 0x01
000003f1: PUSH1 0x01
000003f3: PUSH1 0xa0
000003f5: SHL
000003f6: SUB
000003f7: AND
000003f8: PUSH2 0x03ff
000003fb: PUSH2 0x0651
000003fe: JUMP
000003ff: JUMPDEST
00000400: PUSH1 0x01
00000402: PUSH1 0x01
00000404: PUSH1 0xa0
00000406: SHL
00000407: SUB
00000408: AND
00000409: EQ
0000040a: PUSH2 0x045a
0000040d: JUMPI
0000040e: PUSH1 0x40
00000410: DUP1
00000411: MLOAD
00000412: PUSH3 0x461bcd
00000416: PUSH1 0xe5
00000418: SHL
00000419: DUP2
0000041a: MSTORE
0000041b: PUSH1 0x20
0000041d: PUSH1 0x04
0000041f: DUP3
00000420: ADD
00000421: DUP2
00000422: SWAP1
00000423: MSTORE
00000424: PUSH1 0x24
00000426: DUP3
00000427: ADD
00000428: MSTORE
00000429: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
0000044a: PUSH1 0x44
0000044c: DUP3
0000044d: ADD
0000044e: MSTORE
0000044f: SWAP1
00000450: MLOAD
00000451: SWAP1
00000452: DUP2
00000453: SWAP1
00000454: SUB
00000455: PUSH1 0x64
00000457: ADD
00000458: SWAP1
00000459: REVERT
0000045a: JUMPDEST
0000045b: PUSH1 0x00
0000045d: DUP1
0000045e: SLOAD
0000045f: PUSH1 0x40
00000461: MLOAD
00000462: PUSH1 0x01
00000464: PUSH1 0x01
00000466: PUSH1 0xa0
00000468: SHL
00000469: SUB
0000046a: SWAP1
0000046b: SWAP2
0000046c: AND
0000046d: SWAP1
0000046e: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
0000048f: SWAP1
00000490: DUP4
00000491: SWAP1
00000492: LOG3
00000493: PUSH1 0x00
00000495: DUP1
00000496: SLOAD
00000497: PUSH1 0x01
00000499: PUSH1 0x01
0000049b: PUSH1 0xa0
0000049d: SHL
0000049e: SUB
0000049f: NOT
000004a0: AND
000004a1: SWAP1
000004a2: SSTORE
000004a3: JUMP
000004a4: JUMPDEST
000004a5: PUSH1 0x02
000004a7: SLOAD
000004a8: PUSH1 0x01
000004aa: PUSH1 0x01
000004ac: PUSH1 0xa0
000004ae: SHL
000004af: SUB
000004b0: AND
000004b1: CALLER
000004b2: EQ
000004b3: PUSH2 0x04ed
000004b6: JUMPI
000004b7: PUSH1 0x40
000004b9: MLOAD
000004ba: PUSH3 0x461bcd
000004be: PUSH1 0xe5
000004c0: SHL
000004c1: DUP2
000004c2: MSTORE
000004c3: PUSH1 0x04
000004c5: ADD
000004c6: DUP1
000004c7: DUP1
000004c8: PUSH1 0x20
000004ca: ADD
000004cb: DUP3
000004cc: DUP2
000004cd: SUB
000004ce: DUP3
000004cf: MSTORE
000004d0: PUSH1 0x25
000004d2: DUP2
000004d3: MSTORE
000004d4: PUSH1 0x20
000004d6: ADD
000004d7: DUP1
000004d8: PUSH2 0x0956
000004db: PUSH1 0x25
000004dd: SWAP2
000004de: CODECOPY
000004df: PUSH1 0x40
000004e1: ADD
000004e2: SWAP2
000004e3: POP
000004e4: POP
000004e5: PUSH1 0x40
000004e7: MLOAD
000004e8: DUP1
000004e9: SWAP2
000004ea: SUB
000004eb: SWAP1
000004ec: REVERT
000004ed: JUMPDEST
000004ee: DUP3
000004ef: DUP2
000004f0: EQ
000004f1: PUSH2 0x0541
000004f4: JUMPI
000004f5: PUSH1 0x40
000004f7: DUP1
000004f8: MLOAD
000004f9: PUSH3 0x461bcd
000004fd: PUSH1 0xe5
000004ff: SHL
00000500: DUP2
00000501: MSTORE
00000502: PUSH1 0x20
00000504: PUSH1 0x04
00000506: DUP3
00000507: ADD
00000508: MSTORE
00000509: PUSH1 0x18
0000050b: PUSH1 0x24
0000050d: DUP3
0000050e: ADD
0000050f: MSTORE
00000510: PUSH32 0x496e76616c696420696e70757420706172616d65746572730000000000000000
00000531: PUSH1 0x44
00000533: DUP3
00000534: ADD
00000535: MSTORE
00000536: SWAP1
00000537: MLOAD
00000538: SWAP1
00000539: DUP2
0000053a: SWAP1
0000053b: SUB
0000053c: PUSH1 0x64
0000053e: ADD
0000053f: SWAP1
00000540: REVERT
00000541: JUMPDEST
00000542: PUSH1 0x00
00000544: JUMPDEST
00000545: DUP4
00000546: DUP2
00000547: LT
00000548: ISZERO
00000549: PUSH2 0x064a
0000054c: JUMPI
0000054d: PUSH1 0x01
0000054f: SLOAD
00000550: PUSH1 0x01
00000552: PUSH1 0x01
00000554: PUSH1 0xa0
00000556: SHL
00000557: SUB
00000558: AND
00000559: PUSH4 0xa9059cbb
0000055e: DUP7
0000055f: DUP7
00000560: DUP5
00000561: DUP2
00000562: DUP2
00000563: LT
00000564: PUSH2 0x0569
00000567: JUMPI
00000568: INVALID
00000569: JUMPDEST
0000056a: SWAP1
0000056b: POP
0000056c: PUSH1 0x20
0000056e: MUL
0000056f: ADD
00000570: CALLDATALOAD
00000571: PUSH1 0x01
00000573: PUSH1 0x01
00000575: PUSH1 0xa0
00000577: SHL
00000578: SUB
00000579: AND
0000057a: DUP6
0000057b: DUP6
0000057c: DUP6
0000057d: DUP2
0000057e: DUP2
0000057f: LT
00000580: PUSH2 0x0585
00000583: JUMPI
00000584: INVALID
00000585: JUMPDEST
00000586: SWAP1
00000587: POP
00000588: PUSH1 0x20
0000058a: MUL
0000058b: ADD
0000058c: CALLDATALOAD
0000058d: PUSH1 0x40
0000058f: MLOAD
00000590: DUP4
00000591: PUSH4 0xffffffff
00000596: AND
00000597: PUSH1 0xe0
00000599: SHL
0000059a: DUP2
0000059b: MSTORE
0000059c: PUSH1 0x04
0000059e: ADD
0000059f: DUP1
000005a0: DUP4
000005a1: PUSH1 0x01
000005a3: PUSH1 0x01
000005a5: PUSH1 0xa0
000005a7: SHL
000005a8: SUB
000005a9: AND
000005aa: PUSH1 0x01
000005ac: PUSH1 0x01
000005ae: PUSH1 0xa0
000005b0: SHL
000005b1: SUB
000005b2: AND
000005b3: DUP2
000005b4: MSTORE
000005b5: PUSH1 0x20
000005b7: ADD
000005b8: DUP3
000005b9: DUP2
000005ba: MSTORE
000005bb: PUSH1 0x20
000005bd: ADD
000005be: SWAP3
000005bf: POP
000005c0: POP
000005c1: POP
000005c2: PUSH1 0x20
000005c4: PUSH1 0x40
000005c6: MLOAD
000005c7: DUP1
000005c8: DUP4
000005c9: SUB
000005ca: DUP2
000005cb: PUSH1 0x00
000005cd: DUP8
000005ce: DUP1
000005cf: EXTCODESIZE
000005d0: ISZERO
000005d1: DUP1
000005d2: ISZERO
000005d3: PUSH2 0x05db
000005d6: JUMPI
000005d7: PUSH1 0x00
000005d9: DUP1
000005da: REVERT
000005db: JUMPDEST
000005dc: POP
000005dd: GAS
000005de: CALL
000005df: ISZERO
000005e0: DUP1
000005e1: ISZERO
000005e2: PUSH2 0x05ef
000005e5: JUMPI
000005e6: RETURNDATASIZE
000005e7: PUSH1 0x00
000005e9: DUP1
000005ea: RETURNDATACOPY
000005eb: RETURNDATASIZE
000005ec: PUSH1 0x00
000005ee: REVERT
000005ef: JUMPDEST
000005f0: POP
000005f1: POP
000005f2: POP
000005f3: POP
000005f4: PUSH1 0x40
000005f6: MLOAD
000005f7: RETURNDATASIZE
000005f8: PUSH1 0x20
000005fa: DUP2
000005fb: LT
000005fc: ISZERO
000005fd: PUSH2 0x0605
00000600: JUMPI
00000601: PUSH1 0x00
00000603: DUP1
00000604: REVERT
00000605: JUMPDEST
00000606: POP
00000607: MLOAD
00000608: PUSH2 0x0642
0000060b: JUMPI
0000060c: PUSH1 0x40
0000060e: MLOAD
0000060f: PUSH3 0x461bcd
00000613: PUSH1 0xe5
00000615: SHL
00000616: DUP2
00000617: MSTORE
00000618: PUSH1 0x04
0000061a: ADD
0000061b: DUP1
0000061c: DUP1
0000061d: PUSH1 0x20
0000061f: ADD
00000620: DUP3
00000621: DUP2
00000622: SUB
00000623: DUP3
00000624: MSTORE
00000625: PUSH1 0x27
00000627: DUP2
00000628: MSTORE
00000629: PUSH1 0x20
0000062b: ADD
0000062c: DUP1
0000062d: PUSH2 0x090d
00000630: PUSH1 0x27
00000632: SWAP2
00000633: CODECOPY
00000634: PUSH1 0x40
00000636: ADD
00000637: SWAP2
00000638: POP
00000639: POP
0000063a: PUSH1 0x40
0000063c: MLOAD
0000063d: DUP1
0000063e: SWAP2
0000063f: SUB
00000640: SWAP1
00000641: REVERT
00000642: JUMPDEST
00000643: PUSH1 0x01
00000645: ADD
00000646: PUSH2 0x0544
00000649: JUMP
0000064a: JUMPDEST
0000064b: POP
0000064c: POP
0000064d: POP
0000064e: POP
0000064f: POP
00000650: JUMP
00000651: JUMPDEST
00000652: PUSH1 0x00
00000654: SLOAD
00000655: PUSH1 0x01
00000657: PUSH1 0x01
00000659: PUSH1 0xa0
0000065b: SHL
0000065c: SUB
0000065d: AND
0000065e: SWAP1
0000065f: JUMP
00000660: JUMPDEST
00000661: PUSH2 0x0668
00000664: PUSH2 0x08b5
00000667: JUMP
00000668: JUMPDEST
00000669: PUSH1 0x01
0000066b: PUSH1 0x01
0000066d: PUSH1 0xa0
0000066f: SHL
00000670: SUB
00000671: AND
00000672: PUSH2 0x0679
00000675: PUSH2 0x0651
00000678: JUMP
00000679: JUMPDEST
0000067a: PUSH1 0x01
0000067c: PUSH1 0x01
0000067e: PUSH1 0xa0
00000680: SHL
00000681: SUB
00000682: AND
00000683: EQ
00000684: PUSH2 0x06d4
00000687: JUMPI
00000688: PUSH1 0x40
0000068a: DUP1
0000068b: MLOAD
0000068c: PUSH3 0x461bcd
00000690: PUSH1 0xe5
00000692: SHL
00000693: DUP2
00000694: MSTORE
00000695: PUSH1 0x20
00000697: PUSH1 0x04
00000699: DUP3
0000069a: ADD
0000069b: DUP2
0000069c: SWAP1
0000069d: MSTORE
0000069e: PUSH1 0x24
000006a0: DUP3
000006a1: ADD
000006a2: MSTORE
000006a3: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
000006c4: PUSH1 0x44
000006c6: DUP3
000006c7: ADD
000006c8: MSTORE
000006c9: SWAP1
000006ca: MLOAD
000006cb: SWAP1
000006cc: DUP2
000006cd: SWAP1
000006ce: SUB
000006cf: PUSH1 0x64
000006d1: ADD
000006d2: SWAP1
000006d3: REVERT
000006d4: JUMPDEST
000006d5: PUSH1 0x01
000006d7: PUSH1 0x01
000006d9: PUSH1 0xa0
000006db: SHL
000006dc: SUB
000006dd: DUP2
000006de: AND
000006df: PUSH2 0x072f
000006e2: JUMPI
000006e3: PUSH1 0x40
000006e5: DUP1
000006e6: MLOAD
000006e7: PUSH3 0x461bcd
000006eb: PUSH1 0xe5
000006ed: SHL
000006ee: DUP2
000006ef: MSTORE
000006f0: PUSH1 0x20
000006f2: PUSH1 0x04
000006f4: DUP3
000006f5: ADD
000006f6: MSTORE
000006f7: PUSH1 0x18
000006f9: PUSH1 0x24
000006fb: DUP3
000006fc: ADD
000006fd: MSTORE
000006fe: PUSH32 0x496e76616c6964206f70657261746f7220616464726573730000000000000000
0000071f: PUSH1 0x44
00000721: DUP3
00000722: ADD
00000723: MSTORE
00000724: SWAP1
00000725: MLOAD
00000726: SWAP1
00000727: DUP2
00000728: SWAP1
00000729: SUB
0000072a: PUSH1 0x64
0000072c: ADD
0000072d: SWAP1
0000072e: REVERT
0000072f: JUMPDEST
00000730: PUSH1 0x02
00000732: DUP1
00000733: SLOAD
00000734: PUSH1 0x01
00000736: PUSH1 0x01
00000738: PUSH1 0xa0
0000073a: SHL
0000073b: SUB
0000073c: DUP4
0000073d: AND
0000073e: PUSH1 0x01
00000740: PUSH1 0x01
00000742: PUSH1 0xa0
00000744: SHL
00000745: SUB
00000746: NOT
00000747: SWAP1
00000748: SWAP2
00000749: AND
0000074a: DUP2
0000074b: OR
0000074c: SWAP1
0000074d: SWAP2
0000074e: SSTORE
0000074f: PUSH1 0x40
00000751: DUP1
00000752: MLOAD
00000753: SWAP2
00000754: DUP3
00000755: MSTORE
00000756: MLOAD
00000757: PUSH32 0xda12ee837e6978172aaf54b16145ffe08414fd8710092ef033c71b8eb6ec189a
00000778: SWAP2
00000779: DUP2
0000077a: SWAP1
0000077b: SUB
0000077c: PUSH1 0x20
0000077e: ADD
0000077f: SWAP1
00000780: LOG1
00000781: POP
00000782: JUMP
00000783: JUMPDEST
00000784: PUSH1 0x02
00000786: SLOAD
00000787: PUSH1 0x01
00000789: PUSH1 0x01
0000078b: PUSH1 0xa0
0000078d: SHL
0000078e: SUB
0000078f: AND
00000790: DUP2
00000791: JUMP
00000792: JUMPDEST
00000793: PUSH2 0x079a
00000796: PUSH2 0x08b5
00000799: JUMP
0000079a: JUMPDEST
0000079b: PUSH1 0x01
0000079d: PUSH1 0x01
0000079f: PUSH1 0xa0
000007a1: SHL
000007a2: SUB
000007a3: AND
000007a4: PUSH2 0x07ab
000007a7: PUSH2 0x0651
000007aa: JUMP
000007ab: JUMPDEST
000007ac: PUSH1 0x01
000007ae: PUSH1 0x01
000007b0: PUSH1 0xa0
000007b2: SHL
000007b3: SUB
000007b4: AND
000007b5: EQ
000007b6: PUSH2 0x0806
000007b9: JUMPI
000007ba: PUSH1 0x40
000007bc: DUP1
000007bd: MLOAD
000007be: PUSH3 0x461bcd
000007c2: PUSH1 0xe5
000007c4: SHL
000007c5: DUP2
000007c6: MSTORE
000007c7: PUSH1 0x20
000007c9: PUSH1 0x04
000007cb: DUP3
000007cc: ADD
000007cd: DUP2
000007ce: SWAP1
000007cf: MSTORE
000007d0: PUSH1 0x24
000007d2: DUP3
000007d3: ADD
000007d4: MSTORE
000007d5: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
000007f6: PUSH1 0x44
000007f8: DUP3
000007f9: ADD
000007fa: MSTORE
000007fb: SWAP1
000007fc: MLOAD
000007fd: SWAP1
000007fe: DUP2
000007ff: SWAP1
00000800: SUB
00000801: PUSH1 0x64
00000803: ADD
00000804: SWAP1
00000805: REVERT
00000806: JUMPDEST
00000807: PUSH1 0x01
00000809: PUSH1 0x01
0000080b: PUSH1 0xa0
0000080d: SHL
0000080e: SUB
0000080f: DUP2
00000810: AND
00000811: PUSH2 0x084b
00000814: JUMPI
00000815: PUSH1 0x40
00000817: MLOAD
00000818: PUSH3 0x461bcd
0000081c: PUSH1 0xe5
0000081e: SHL
0000081f: DUP2
00000820: MSTORE
00000821: PUSH1 0x04
00000823: ADD
00000824: DUP1
00000825: DUP1
00000826: PUSH1 0x20
00000828: ADD
00000829: DUP3
0000082a: DUP2
0000082b: SUB
0000082c: DUP3
0000082d: MSTORE
0000082e: PUSH1 0x26
00000830: DUP2
00000831: MSTORE
00000832: PUSH1 0x20
00000834: ADD
00000835: DUP1
00000836: PUSH2 0x08ba
00000839: PUSH1 0x26
0000083b: SWAP2
0000083c: CODECOPY
0000083d: PUSH1 0x40
0000083f: ADD
00000840: SWAP2
00000841: POP
00000842: POP
00000843: PUSH1 0x40
00000845: MLOAD
00000846: DUP1
00000847: SWAP2
00000848: SUB
00000849: SWAP1
0000084a: REVERT
0000084b: JUMPDEST
0000084c: PUSH1 0x00
0000084e: DUP1
0000084f: SLOAD
00000850: PUSH1 0x40
00000852: MLOAD
00000853: PUSH1 0x01
00000855: PUSH1 0x01
00000857: PUSH1 0xa0
00000859: SHL
0000085a: SUB
0000085b: DUP1
0000085c: DUP6
0000085d: AND
0000085e: SWAP4
0000085f: SWAP3
00000860: AND
00000861: SWAP2
00000862: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
00000883: SWAP2
00000884: LOG3
00000885: PUSH1 0x00
00000887: DUP1
00000888: SLOAD
00000889: PUSH1 0x01
0000088b: PUSH1 0x01
0000088d: PUSH1 0xa0
0000088f: SHL
00000890: SUB
00000891: NOT
00000892: AND
00000893: PUSH1 0x01
00000895: PUSH1 0x01
00000897: PUSH1 0xa0
00000899: SHL
0000089a: SUB
0000089b: SWAP3
0000089c: SWAP1
0000089d: SWAP3
0000089e: AND
0000089f: SWAP2
000008a0: SWAP1
000008a1: SWAP2
000008a2: OR
000008a3: SWAP1
000008a4: SSTORE
000008a5: JUMP
000008a6: JUMPDEST
000008a7: PUSH1 0x01
000008a9: SLOAD
000008aa: PUSH1 0x01
000008ac: PUSH1 0x01
000008ae: PUSH1 0xa0
000008b0: SHL
000008b1: SUB
000008b2: AND
000008b3: DUP2
000008b4: JUMP
000008b5: JUMPDEST
000008b6: CALLER
000008b7: SWAP1
000008b8: JUMP
000008b9: INVALID
000008ba: UNKNOWN(0x4F)
000008bb: PUSH24 0x6e61626c653a206e6577206f776e65722069732074686520
000008d4: PUSH27 0x65726f2061646472657373556e61626c6520746f207472616e7366
000008f0: PUSH6 0x7220746f6b65
000008f7: PUSH15 0x20746f20746865206f776e65722061
00000907: PUSH4 0x636f756e
0000090c: PUSH21 0x556e61626c6520746f207472616e7366657220746f
00000922: PUSH12 0x656e20746f20746865206163
0000092f: PUSH4 0x6f756e74
00000934: UNKNOWN(0x4E)
00000935: PUSH16 0x7420656e6f7567682062616c616e6365
00000946: KECCAK256
00000947: PUSH10 0x6e2074686520636f6e74
00000952: PUSH19 0x6163744f6e6c79206f70657261746f72206361
00000966: PUSH15 0x2063616c6c20746869732066756e63
00000976: PUSH21 0x696f6e2ea26469706673582212206b94b0de213b51
0000098c: UNKNOWN(0xCC)
0000098d: TLOAD
0000098e: ADDMOD
0000098f: PUSH21 0xe4e215bf7300489645a4e902dd1ad7c0f64d7af8d8
000009a5: PUSH5 0x736f6c6343
000009ab: STOP
000009ac: MOD
000009ad: MUL
000009ae: STOP
000009af: CALLER

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high other detector Untrusted CALL target/value reachable 60 no no
view
trace_id: 0x03468f19d7607191d3939ad0296f427d244227c8b1da2f43b5d19221b0b3b4c0
call_targets: 0x7ffe1ec3b0733e6455c790c6bbf8579e9552566b
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x03468f19d7607191d3939ad0296f427d244227c8b1da2f43b5d19221b0b3b4c0",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x7ffe1ec3b0733e6455c790c6bbf8579e9552566b"
    ],
    "matched_probe": null,
    "target_varies": false,
    "classification": "constant_target"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0xac7475ed",
            "selector": "0xac7475ed",
            "calldata_variants": [
                "0xac7475ed",
                "0xac7475ed0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd0835895",
            "selector": "0xd0835895",
            "calldata_variants": [
                "0xd0835895",
                "0xd08358950000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf2fde38b",
            "selector": "0xf2fde38b",
            "calldata_variants": [
                "0xf2fde38b",
                "0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfc0c546a",
            "selector": "0xfc0c546a",
            "calldata_variants": [
                "0xfc0c546a",
                "0xfc0c546a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x50baa622",
            "selector": "0x50baa622",
            "calldata_variants": [
                "0x50baa622",
                "0x50baa6220000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x715018a6",
            "selector": "0x715018a6",
            "calldata_variants": [
                "0x715018a6",
                "0x715018a60000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x88d695b2",
            "selector": "0x88d695b2",
            "calldata_variants": [
                "0x88d695b2",
                "0x88d695b20000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x8da5cb5b",
            "selector": "0x8da5cb5b",
            "calldata_variants": [
                "0x8da5cb5b",
                "0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 841,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 1502,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 2,
    "guards_detected": [],
    "untrusted_call_count": 2
}
high other detector ETH value transfer possible 55 no no
view
trace_id: 0x03468f19d7607191d3939ad0296f427d244227c8b1da2f43b5d19221b0b3b4c0
call_targets: 0x7ffe1ec3b0733e6455c790c6bbf8579e9552566b
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x03468f19d7607191d3939ad0296f427d244227c8b1da2f43b5d19221b0b3b4c0",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x7ffe1ec3b0733e6455c790c6bbf8579e9552566b"
    ],
    "matched_probe": null,
    "target_varies": false,
    "classification": "constant_target"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0xac7475ed",
            "selector": "0xac7475ed",
            "calldata_variants": [
                "0xac7475ed",
                "0xac7475ed0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd0835895",
            "selector": "0xd0835895",
            "calldata_variants": [
                "0xd0835895",
                "0xd08358950000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf2fde38b",
            "selector": "0xf2fde38b",
            "calldata_variants": [
                "0xf2fde38b",
                "0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfc0c546a",
            "selector": "0xfc0c546a",
            "calldata_variants": [
                "0xfc0c546a",
                "0xfc0c546a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x50baa622",
            "selector": "0x50baa622",
            "calldata_variants": [
                "0x50baa622",
                "0x50baa6220000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x715018a6",
            "selector": "0x715018a6",
            "calldata_variants": [
                "0x715018a6",
                "0x715018a60000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x88d695b2",
            "selector": "0x88d695b2",
            "calldata_variants": [
                "0x88d695b2",
                "0x88d695b20000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x8da5cb5b",
            "selector": "0x8da5cb5b",
            "calldata_variants": [
                "0x8da5cb5b",
                "0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 841,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 1502,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 2,
    "guards_detected": []
}
low access_control codex Operator privileges persist after ownership transfer 65 no
view
evidence_json
{
    "evidence": "transferOperator is set in the constructor and only updated via updateOperator; withdrawToken and batchTransfer gate on onlyOperator without checking ownership.",
    "locations": [
        "contracts/contracts/TokenBatchTransfer.sol:11",
        "contracts/contracts/TokenBatchTransfer.sol:23",
        "contracts/contracts/TokenBatchTransfer.sol:35",
        "contracts/contracts/TokenBatchTransfer.sol:45",
        "contracts/contracts/TokenBatchTransfer.sol:57"
    ],
    "recommendation": "When ownership changes, also update or revoke the operator role (e.g., set transferOperator = newOwner inside a custom ownership transfer flow) or allow the owner to set operator to address(0) to disable the role until a new operator is chosen.",
    "exploit_scenario": "Alice deploys the contract and is both owner and operator. She later transfers ownership to Bob (e.g., to hand over the airdrop). Because transferOperator is unchanged, Alice still passes onlyOperator and can call withdrawToken or batchTransfer to drain or redirect tokens, even though she is no longer owner."
}