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

Analysis Run

7274b3df-d91b-4045-b726-0de8607e38de

complete
Chain ID
1
Address
Block Number
Created
Tue, Dec 30, 2025 7:53 PM
Review Summary

What survived the funnel

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

Confirmed
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
30748 report.consolidate complete 1 / 1 3 months ago
75484 artifact.fetch complete 1 / 3 1 week ago
75485 tool.cast_disasm complete 1 / 3 1 week ago
75486 analysis.bundle complete 1 / 3 1 week ago
75487 capability.graph complete 1 / 3 1 week ago
75488 detector.run complete 1 / 3 1 week ago
75489 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 logic issue: clawback cannot execute for non-expiring campaigns when protocol fee is zero, potentially locking unclaimed funds.
View stderr
[codex:1072658] OpenAI Codex v0.77.0 (research preview)
[codex:1072658] --------
[codex:1072658] workdir: /tmp/codex-multi-p4zzvhn5
[codex:1072658] model: gpt-5.2-codex
[codex:1072658] provider: openai
[codex:1072658] approval: never
[codex:1072658] sandbox: read-only
[codex:1072658] reasoning effort: xhigh
[codex:1072658] reasoning summaries: auto
[codex:1072658] session id: 019b70d0-11d5-7340-8a58-4ea49ead78a1
[codex:1072658] --------
[codex:1072658] user
[codex:1072658] You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
[codex:1072658] Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
[codex:1072658] accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
[codex:1072658] 
[codex:1072658] Scope rules:
[codex:1072658] - You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party `contracts/**/*.sol` files.
[codex:1072658] - Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
[codex:1072658] 
[codex:1072658] Output MUST be valid JSON matching the provided schema.
[codex:1072658] - If you find nothing meaningful: set no_findings=true and findings=[].
[codex:1072658] - Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
[codex:1072658] 
[codex:1072658] Output constraints (IMPORTANT):
[codex:1072658] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:1072658] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:1072658] mcp startup: no servers
[codex:1072658] 
[codex:1072658] thinking
[codex:1072658] **Preparing to read skill instructions**
[codex:1072658] exec
[codex:1072658] /bin/bash -lc ls in /tmp/codex-multi-p4zzvhn5 succeeded in 5ms:
[codex:1072658] AUDIT_BUNDLE.txt
[codex:1072658] codex-output-schema.json
[codex:1072658] contracts
[codex:1072658] 
[codex:1072658] thinking
[codex:1072658] **Reading AUDIT_BUNDLE.txt contents**
[codex:1072658] exec
[codex:1072658] /bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-multi-p4zzvhn5 succeeded in 6ms:
[codex:1072658] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:1072658] 
[codex:1072658] ================================================================================
[codex:1072658] FILE: contracts/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol
[codex:1072658] ================================================================================
[codex:1072658] // SPDX-License-Identifier: MIT
[codex:1072658] // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)
[codex:1072658] 
[codex:1072658] pragma solidity ^0.8.0;
[codex:1072658] 
[codex:1072658] /**
[codex:1072658]  * @dev Interface of the ERC20 standard as defined in the EIP.
[codex:1072658]  */
[codex:1072658] interface IERC20 {
[codex:1072658]     /**
[codex:1072658]      * @dev Emitted when `value` tokens are moved from one account (`from`) to
[codex:1072658]      * another (`to`).
[codex:1072658]      *
[codex:1072658]      * Note that `value` may be zero.
[codex:1072658]      */
[codex:1072658] 
[codex:1072658] thinking
[codex:1072658] **Planning first-party contract analysis**
[codex:1072658] exec
[codex:1072658] /bin/bash -lc 'rg -n "''^FILE: contracts/src" AUDIT_BUNDLE.txt' in /tmp/codex-multi-p4zzvhn5 succeeded in 7ms:
[codex:1072658] 5462:FILE: contracts/src/SablierV2MerkleStreamerLL.sol
[codex:1072658] 5570:FILE: contracts/src/abstracts/SablierV2MerkleStreamer.sol
[codex:1072658] 5722:FILE: contracts/src/interfaces/ISablierV2MerkleStreamer.sol
[codex:1072658] 5805:FILE: contracts/src/interfaces/ISablierV2MerkleStreamerLL.sol
[codex:1072658] 5857:FILE: contracts/src/libraries/Errors.sol
[codex:1072658] 
[codex:1072658] thinking
[codex:1072658] **Analyzing first-party files for vulnerabilities**
[codex:1072658] exec
[codex:1072658] /bin/bash -lc "sed -n '5460,5625p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-p4zzvhn5 succeeded in 6ms:
[codex:1072658] 
[codex:1072658] ================================================================================
[codex:1072658] FILE: contracts/src/SablierV2MerkleStreamerLL.sol
[codex:1072658] ================================================================================
[codex:1072658] // SPDX-License-Identifier: GPL-3.0-or-later
[codex:1072658] pragma solidity >=0.8.19;
[codex:1072658] 
[codex:1072658] import { BitMaps } from "@openzeppelin/contracts/utils/structs/BitMaps.sol";
[codex:1072658] import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
[codex:1072658] import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
[codex:1072658] import { ISablierV2LockupLinear } from "@sablier/v2-core/src/interfaces/ISablierV2LockupLinear.sol";
[codex:1072658] import { Broker, LockupLinear } from "@sablier/v2-core/src/types/DataTypes.sol";
[codex:1072658] import { ud } from "@prb/math/src/UD60x18.sol";
[codex:1072658] 
[codex:1072658] import { SablierV2MerkleStreamer } from "./abstracts/SablierV2MerkleStreamer.sol";
[codex:1072658] import { ISablierV2MerkleStreamerLL } from "./interfaces/ISablierV2MerkleStreamerLL.sol";
[codex:1072658] 
[codex:1072658] /// @title SablierV2MerkleStreamerLL
[codex:1072658] /// @notice See the documentation in {ISablierV2MerkleStreamerLL}.
[codex:1072658] contract SablierV2MerkleStreamerLL is
[codex:1072658] exec
[codex:1072658] /bin/bash -lc "sed -n '5625,5795p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-p4zzvhn5 succeeded in 6ms:
[codex:1072658]                                     CONSTRUCTOR
[codex:1072658]     //////////////////////////////////////////////////////////////////////////*/
[codex:1072658] 
[codex:1072658]     /// @dev Constructs the contract by initializing the immutable state variables.
[codex:1072658]     constructor(
[codex:1072658]         address initialAdmin,
[codex:1072658]         IERC20 asset,
[codex:1072658]         ISablierV2Lockup lockup,
[codex:1072658]         bytes32 merkleRoot,
[codex:1072658]         uint40 expiration,
[codex:1072658]         bool cancelable,
[codex:1072658]         bool transferable
[codex:1072658]     ) {
[codex:1072658]         admin = initialAdmin;
[codex:1072658]         ASSET = asset;
[codex:1072658]         LOCKUP = lockup;
[codex:1072658]         MERKLE_ROOT = merkleRoot;
[codex:1072658]         EXPIRATION = expiration;
[codex:1072658]         CANCELABLE = cancelable;
[codex:1072658]         TRANSFERABLE = transferable;
[codex:1072658] exec
[codex:1072658] /bin/bash -lc "sed -n '5795,5895p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-p4zzvhn5 succeeded in 5ms:
[codex:1072658]     /// Requirements:
[codex:1072658]     /// - The caller must be the admin.
[codex:1072658]     /// - The campaign must either be expired or not have an expiration.
[codex:1072658]     ///
[codex:1072658]     /// @param to The address to receive the tokens.
[codex:1072658]     /// @param amount The amount of tokens to claw back.
[codex:1072658]     function clawback(address to, uint128 amount) external;
[codex:1072658] }
[codex:1072658] 
[codex:1072658] ================================================================================
[codex:1072658] FILE: contracts/src/interfaces/ISablierV2MerkleStreamerLL.sol
[codex:1072658] ================================================================================
[codex:1072658] // SPDX-License-Identifier: GPL-3.0-or-later
[codex:1072658] pragma solidity >=0.8.19;
[codex:1072658] 
[codex:1072658] import { ISablierV2LockupLinear } from "@sablier/v2-core/src/interfaces/ISablierV2LockupLinear.sol";
[codex:1072658] 
[codex:1072658] import { ISablierV2MerkleStreamer } from "./ISablierV2MerkleStreamer.sol";
[codex:1072658] 
[codex:1072658] /// @title ISablierV2MerkleStreamerLL
[codex:1072658] 
[codex:1072658] thinking
[codex:1072658] **Analyzing contract vulnerabilities and risks**
[codex:1072658] 
[codex:1072658] I’m carefully examining key concerns like reentrancy, access control, and external calls in the SablierV2MerkleStreamerLL contract, focusing on claim and clawback functions, admin roles, and token approvals. I'm noting that the claim function marks state before external calls to mitigate reentrancy, but lack of restrictions on callers could have implications. Also, the clawback logic has a subtle bug that might lock funds if expiration is zero and protocol fees are zero, representing an accounting/invariant risk rather than a direct exploit. The unlimited token approval to a third-party lockup contract presents a risk if that contract is compromised or upgradeable. Overall, I’m assessing each potential vulnerability against expected behavior and external dependencies to flag real risks and potential misconfigurations.
[codex:1072658] exec
[codex:1072658] /bin/bash -lc "nl -ba contracts/src/abstracts/SablierV2MerkleStreamer.sol | sed -n '40,140p'" in /tmp/codex-multi-p4zzvhn5 succeeded in 7ms:
[codex:1072658]     40	    /// @inheritdoc ISablierV2MerkleStreamer
[codex:1072658]     41	    bytes32 public immutable override MERKLE_ROOT;
[codex:1072658]     42	
[codex:1072658]     43	    /// @inheritdoc ISablierV2MerkleStreamer
[codex:1072658]     44	    bool public immutable override TRANSFERABLE;
[codex:1072658]     45	
[codex:1072658]     46	    /*//////////////////////////////////////////////////////////////////////////
[codex:1072658]     47	                                  INTERNAL STORAGE
[codex:1072658]     48	    //////////////////////////////////////////////////////////////////////////*/
[codex:1072658]     49	
[codex:1072658]     50	    /// @dev Packed booleans that record the history of claims.
[codex:1072658]     51	    BitMaps.BitMap internal _claimedBitMap;
[codex:1072658]     52	
[codex:1072658]     53	    /*//////////////////////////////////////////////////////////////////////////
[codex:1072658]     54	                                    CONSTRUCTOR
[codex:1072658]     55	    //////////////////////////////////////////////////////////////////////////*/
[codex:1072658]     56	
[codex:1072658]     57	    /// @dev Constructs the contract by initializing the immutable state variables.
[codex:1072658]     58	    constructor(
[codex:1072658]     59	        address initialAdmin,
[codex:1072658] 
[codex:1072658] thinking
[codex:1072658] **Checking for line numbers in key functions**
[codex:1072658] exec
[codex:1072658] /bin/bash -lc "nl -ba contracts/src/SablierV2MerkleStreamerLL.sol | sed -n '60,180p'" in /tmp/codex-multi-p4zzvhn5 succeeded in 6ms:
[codex:1072658]     60	    }
[codex:1072658]     61	
[codex:1072658]     62	    /*//////////////////////////////////////////////////////////////////////////
[codex:1072658]     63	                         USER-FACING NON-CONSTANT FUNCTIONS
[codex:1072658]     64	    //////////////////////////////////////////////////////////////////////////*/
[codex:1072658]     65	
[codex:1072658]     66	    /// @inheritdoc ISablierV2MerkleStreamerLL
[codex:1072658]     67	    function claim(
[codex:1072658]     68	        uint256 index,
[codex:1072658]     69	        address recipient,
[codex:1072658]     70	        uint128 amount,
[codex:1072658]     71	        bytes32[] calldata merkleProof
[codex:1072658]     72	    )
[codex:1072658]     73	        external
[codex:1072658]     74	        override
[codex:1072658]     75	        returns (uint256 streamId)
[codex:1072658]     76	    {
[codex:1072658]     77	        // Generate the Merkle tree leaf by hashing the corresponding parameters. Hashing twice prevents second
[codex:1072658]     78	        // preimage attacks.
[codex:1072658]     79	        bytes32 leaf = keccak256(bytes.concat(keccak256(abi.encode(index, recipient, amount))));
[codex:1072658] 
[codex:1072658] thinking
[codex:1072658] **Evaluating potential contract logic issues**
[codex:1072658] exec
[codex:1072658] /bin/bash -lc 'cat codex-output-schema.json' in /tmp/codex-multi-p4zzvhn5 succeeded in 5ms:
[codex:1072658] {"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:1072658] 
[codex:1072658] thinking
[codex:1072658] **Constructing detailed JSON findings**
[codex:1072658] codex
[codex:1072658] {"no_findings":false,"summary":"Found 1 low-severity logic issue: clawback cannot execute for non-expiring campaigns when protocol fee is zero, potentially locking unclaimed funds.","findings":[{"severity":"low","category":"other","title":"Non-expiring campaigns cannot be clawed back when protocol fee is zero","exploit_scenario":"If the contract is deployed with EXPIRATION = 0 (intended “no expiration”) and the protocol fee remains zero, the admin’s clawback will always revert. Any unclaimed tokens become permanently stuck in the Merkle streamer unless the protocol fee later becomes non-zero.","recommendation":"Allow clawback when EXPIRATION == 0 (no expiration), or change the condition to only require expiry when EXPIRATION != 0. For example: `if (EXPIRATION != 0 && !hasExpired() && !protocolFee.gt(ud(0))) revert`.","evidence":"`hasExpired()` returns false when EXPIRATION == 0, and `clawback` reverts whenever `!hasExpired()` and protocolFee is zero, blocking the no-expiration case.","locations":["contracts/src/abstracts/SablierV2MerkleStreamer.sol:86","contracts/src/abstracts/SablierV2MerkleStreamer.sol:95"]}]}
[codex:1072658] tokens used
[codex:1072658] 63,687
[codex:1072658] {"no_findings":false,"summary":"Found 1 low-severity logic issue: clawback cannot execute for non-expiring campaigns when protocol fee is zero, potentially locking unclaimed funds.","findings":[{"severity":"low","category":"other","title":"Non-expiring campaigns cannot be clawed back when protocol fee is zero","exploit_scenario":"If the contract is deployed with EXPIRATION = 0 (intended “no expiration”) and the protocol fee remains zero, the admin’s clawback will always revert. Any unclaimed tokens become permanently stuck in the Merkle streamer unless the protocol fee later becomes non-zero.","recommendation":"Allow clawback when EXPIRATION == 0 (no expiration), or change the condition to only require expiry when EXPIRATION != 0. For example: `if (EXPIRATION != 0 && !hasExpired() && !protocolFee.gt(ud(0))) revert`.","evidence":"`hasExpired()` returns false when EXPIRATION == 0, and `clawback` reverts whenever `!hasExpired()` and protocolFee is zero, blocking the no-expiration case.","locations":["contracts/src/abstracts/SablierV2MerkleStreamer.sol:86","contracts/src/abstracts/SablierV2MerkleStreamer.sol:95"]}]}
Metadata
{
    "codex": {
        "ran_at": "2025-12-30T19:53:27.517882+00:00",
        "returncode": 0
    },
    "summary": "Found 1 low-severity logic issue: clawback cannot execute for non-expiring campaigns when protocol fee is zero, potentially locking unclaimed funds.",
    "raw_final": {
        "summary": "Found 1 low-severity logic issue: clawback cannot execute for non-expiring campaigns when protocol fee is zero, potentially locking unclaimed funds.",
        "findings": [
            {
                "title": "Non-expiring campaigns cannot be clawed back when protocol fee is zero",
                "category": "other",
                "evidence": "`hasExpired()` returns false when EXPIRATION == 0, and `clawback` reverts whenever `!hasExpired()` and protocolFee is zero, blocking the no-expiration case.",
                "severity": "low",
                "locations": [
                    "contracts/src/abstracts/SablierV2MerkleStreamer.sol:86",
                    "contracts/src/abstracts/SablierV2MerkleStreamer.sol:95"
                ],
                "recommendation": "Allow clawback when EXPIRATION == 0 (no expiration), or change the condition to only require expiry when EXPIRATION != 0. For example: `if (EXPIRATION != 0 && !hasExpired() && !protocolFee.gt(ud(0))) revert`.",
                "exploit_scenario": "If the contract is deployed with EXPIRATION = 0 (intended \u201cno expiration\u201d) and the protocol fee remains zero, the admin\u2019s clawback will always revert. Any unclaimed tokens become permanently stuck in the Merkle streamer unless the protocol fee later becomes non-zero."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
6
EXT*/BALANCE
1
Total opcodes
1988
Flags
No heuristic flags raised.
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: DUP2
00000005: DUP2
00000006: MSTORE
00000007: PUSH1 0x04
00000009: CALLDATASIZE
0000000a: LT
0000000b: ISZERO
0000000c: PUSH2 0x0014
0000000f: JUMPI
00000010: PUSH1 0x00
00000012: DUP1
00000013: REVERT
00000014: JUMPDEST
00000015: PUSH1 0x00
00000017: SWAP2
00000018: DUP3
00000019: CALLDATALOAD
0000001a: PUSH1 0xe0
0000001c: SHR
0000001d: SWAP1
0000001e: DUP2
0000001f: PUSH4 0x1686c909
00000024: EQ
00000025: PUSH2 0x0ba1
00000028: JUMPI
00000029: POP
0000002a: DUP1
0000002b: PUSH4 0x16c3549d
00000030: EQ
00000031: PUSH2 0x0b65
00000034: JUMPI
00000035: DUP1
00000036: PUSH4 0x1bfd6814
0000003b: EQ
0000003c: PUSH2 0x0b29
0000003f: JUMPI
00000040: DUP1
00000041: PUSH4 0x3bfe03a8
00000046: EQ
00000047: PUSH2 0x0afa
0000004a: JUMPI
0000004b: DUP1
0000004c: PUSH4 0x3f31ae3f
00000051: EQ
00000052: PUSH2 0x039e
00000055: JUMPI
00000056: DUP1
00000057: PUSH4 0x4800d97f
0000005c: EQ
0000005d: PUSH2 0x034e
00000060: JUMPI
00000061: DUP1
00000062: PUSH4 0x51e75e8b
00000067: EQ
00000068: PUSH2 0x0314
0000006b: JUMPI
0000006c: DUP1
0000006d: PUSH4 0x75829def
00000072: EQ
00000073: PUSH2 0x0230
00000076: JUMPI
00000077: DUP1
00000078: PUSH4 0x845aef4b
0000007d: EQ
0000007e: PUSH2 0x01e0
00000081: JUMPI
00000082: DUP1
00000083: PUSH4 0x90e64d13
00000088: EQ
00000089: PUSH2 0x01c4
0000008c: JUMPI
0000008d: DUP1
0000008e: PUSH4 0x9e93e577
00000093: EQ
00000094: PUSH2 0x0174
00000097: JUMPI
00000098: DUP1
00000099: PUSH4 0xbb4b5734
0000009e: EQ
0000009f: PUSH2 0x0133
000000a2: JUMPI
000000a3: DUP1
000000a4: PUSH4 0xce516507
000000a9: EQ
000000aa: PUSH2 0x00f1
000000ad: JUMPI
000000ae: PUSH4 0xf851a440
000000b3: EQ
000000b4: PUSH2 0x00bc
000000b7: JUMPI
000000b8: PUSH1 0x00
000000ba: DUP1
000000bb: REVERT
000000bc: JUMPDEST
000000bd: CALLVALUE
000000be: PUSH2 0x00ed
000000c1: JUMPI
000000c2: DUP2
000000c3: PUSH1 0x03
000000c5: NOT
000000c6: CALLDATASIZE
000000c7: ADD
000000c8: SLT
000000c9: PUSH2 0x00ed
000000cc: JUMPI
000000cd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000000e2: PUSH1 0x20
000000e4: SWAP3
000000e5: SLOAD
000000e6: AND
000000e7: SWAP1
000000e8: MLOAD
000000e9: SWAP1
000000ea: DUP2
000000eb: MSTORE
000000ec: RETURN
000000ed: JUMPDEST
000000ee: POP
000000ef: DUP1
000000f0: REVERT
000000f1: JUMPDEST
000000f2: POP
000000f3: CALLVALUE
000000f4: PUSH2 0x00ed
000000f7: JUMPI
000000f8: PUSH1 0x20
000000fa: PUSH1 0x03
000000fc: NOT
000000fd: CALLDATASIZE
000000fe: ADD
000000ff: SLT
00000100: PUSH2 0x00ed
00000103: JUMPI
00000104: PUSH1 0x20
00000106: SWAP1
00000107: PUSH2 0x012a
0000010a: PUSH1 0x04
0000010c: CALLDATALOAD
0000010d: PUSH1 0xff
0000010f: PUSH1 0x01
00000111: SWAP2
00000112: DUP1
00000113: PUSH1 0x08
00000115: SHR
00000116: PUSH1 0x00
00000118: MSTORE
00000119: DUP3
0000011a: PUSH1 0x20
0000011c: MSTORE
0000011d: AND
0000011e: SHL
0000011f: PUSH1 0x40
00000121: PUSH1 0x00
00000123: KECCAK256
00000124: SLOAD
00000125: AND
00000126: ISZERO
00000127: ISZERO
00000128: SWAP1
00000129: JUMP
0000012a: JUMPDEST
0000012b: SWAP1
0000012c: MLOAD
0000012d: SWAP1
0000012e: ISZERO
0000012f: ISZERO
00000130: DUP2
00000131: MSTORE
00000132: RETURN
00000133: JUMPDEST
00000134: POP
00000135: CALLVALUE
00000136: PUSH2 0x00ed
00000139: JUMPI
0000013a: DUP2
0000013b: PUSH1 0x03
0000013d: NOT
0000013e: CALLDATASIZE
0000013f: ADD
00000140: SLT
00000141: PUSH2 0x00ed
00000144: JUMPI
00000145: PUSH1 0x20
00000147: SWAP1
00000148: MLOAD
00000149: PUSH5 0xffffffffff
0000014f: PUSH32 0x0000000000000000000000000000000000000000000000000000000066623070
00000170: AND
00000171: DUP2
00000172: MSTORE
00000173: RETURN
00000174: JUMPDEST
00000175: POP
00000176: CALLVALUE
00000177: PUSH2 0x00ed
0000017a: JUMPI
0000017b: DUP2
0000017c: PUSH1 0x03
0000017e: NOT
0000017f: CALLDATASIZE
00000180: ADD
00000181: SLT
00000182: PUSH2 0x00ed
00000185: JUMPI
00000186: PUSH1 0x20
00000188: SWAP1
00000189: MLOAD
0000018a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000019f: PUSH32 0x000000000000000000000000afb979d9afad1ad27c5eff4e27226e3ab9e5dcc9
000001c0: AND
000001c1: DUP2
000001c2: MSTORE
000001c3: RETURN
000001c4: JUMPDEST
000001c5: POP
000001c6: CALLVALUE
000001c7: PUSH2 0x00ed
000001ca: JUMPI
000001cb: DUP2
000001cc: PUSH1 0x03
000001ce: NOT
000001cf: CALLDATASIZE
000001d0: ADD
000001d1: SLT
000001d2: PUSH2 0x00ed
000001d5: JUMPI
000001d6: PUSH1 0x20
000001d8: SWAP1
000001d9: PUSH2 0x012a
000001dc: PUSH2 0x10c5
000001df: JUMP
000001e0: JUMPDEST
000001e1: POP
000001e2: CALLVALUE
000001e3: PUSH2 0x00ed
000001e6: JUMPI
000001e7: DUP2
000001e8: PUSH1 0x03
000001ea: NOT
000001eb: CALLDATASIZE
000001ec: ADD
000001ed: SLT
000001ee: PUSH2 0x00ed
000001f1: JUMPI
000001f2: PUSH1 0x20
000001f4: SWAP1
000001f5: MLOAD
000001f6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000020b: PUSH32 0x000000000000000000000000afb979d9afad1ad27c5eff4e27226e3ab9e5dcc9
0000022c: AND
0000022d: DUP2
0000022e: MSTORE
0000022f: RETURN
00000230: JUMPDEST
00000231: POP
00000232: SWAP1
00000233: CALLVALUE
00000234: PUSH2 0x0311
00000237: JUMPI
00000238: PUSH1 0x20
0000023a: PUSH1 0x03
0000023c: NOT
0000023d: CALLDATASIZE
0000023e: ADD
0000023f: SLT
00000240: PUSH2 0x0311
00000243: JUMPI
00000244: PUSH2 0x024b
00000247: PUSH2 0x0ff5
0000024a: JUMP
0000024b: JUMPDEST
0000024c: DUP2
0000024d: SLOAD
0000024e: SWAP1
0000024f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000264: SWAP1
00000265: DUP2
00000266: DUP4
00000267: AND
00000268: CALLER
00000269: DUP2
0000026a: SUB
0000026b: PUSH2 0x02c3
0000026e: JUMPI
0000026f: POP
00000270: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
00000291: SWAP4
00000292: SWAP5
00000293: POP
00000294: AND
00000295: SWAP2
00000296: DUP3
00000297: SWAP2
00000298: AND
00000299: OR
0000029a: DUP3
0000029b: SSTORE
0000029c: CALLER
0000029d: PUSH32 0xbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf80
000002be: DUP4
000002bf: DUP1
000002c0: LOG3
000002c1: DUP1
000002c2: RETURN
000002c3: JUMPDEST
000002c4: DUP6
000002c5: MLOAD
000002c6: PUSH32 0xc6cce6a400000000000000000000000000000000000000000000000000000000
000002e7: DUP2
000002e8: MSTORE
000002e9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000002fe: SWAP2
000002ff: SWAP1
00000300: SWAP2
00000301: AND
00000302: PUSH1 0x04
00000304: DUP3
00000305: ADD
00000306: MSTORE
00000307: CALLER
00000308: PUSH1 0x24
0000030a: DUP3
0000030b: ADD
0000030c: MSTORE
0000030d: PUSH1 0x44
0000030f: SWAP1
00000310: REVERT
00000311: JUMPDEST
00000312: DUP1
00000313: REVERT
00000314: JUMPDEST
00000315: POP
00000316: CALLVALUE
00000317: PUSH2 0x00ed
0000031a: JUMPI
0000031b: DUP2
0000031c: PUSH1 0x03
0000031e: NOT
0000031f: CALLDATASIZE
00000320: ADD
00000321: SLT
00000322: PUSH2 0x00ed
00000325: JUMPI
00000326: PUSH1 0x20
00000328: SWAP1
00000329: MLOAD
0000032a: PUSH32 0xd04e8fbdf6a46893f163f06dcbc1f919b2cd906ef4ee25002d11f7932410f3b7
0000034b: DUP2
0000034c: MSTORE
0000034d: RETURN
0000034e: JUMPDEST
0000034f: POP
00000350: CALLVALUE
00000351: PUSH2 0x00ed
00000354: JUMPI
00000355: DUP2
00000356: PUSH1 0x03
00000358: NOT
00000359: CALLDATASIZE
0000035a: ADD
0000035b: SLT
0000035c: PUSH2 0x00ed
0000035f: JUMPI
00000360: PUSH1 0x20
00000362: SWAP1
00000363: MLOAD
00000364: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000379: PUSH32 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
0000039a: AND
0000039b: DUP2
0000039c: MSTORE
0000039d: RETURN
0000039e: JUMPDEST
0000039f: POP
000003a0: SWAP1
000003a1: CALLVALUE
000003a2: PUSH2 0x0311
000003a5: JUMPI
000003a6: PUSH1 0x80
000003a8: PUSH1 0x03
000003aa: NOT
000003ab: CALLDATASIZE
000003ac: ADD
000003ad: SLT
000003ae: PUSH2 0x0311
000003b1: JUMPI
000003b2: PUSH1 0x04
000003b4: CALLDATALOAD
000003b5: SWAP2
000003b6: PUSH1 0x24
000003b8: CALLDATALOAD
000003b9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000003ce: DUP2
000003cf: AND
000003d0: DUP1
000003d1: SWAP2
000003d2: SUB
000003d3: PUSH2 0x0af6
000003d6: JUMPI
000003d7: PUSH1 0x44
000003d9: CALLDATALOAD
000003da: SWAP1
000003db: PUSH16 0xffffffffffffffffffffffffffffffff
000003ec: DUP3
000003ed: AND
000003ee: DUP1
000003ef: SWAP3
000003f0: SUB
000003f1: PUSH2 0x0af2
000003f4: JUMPI
000003f5: PUSH1 0x64
000003f7: CALLDATALOAD
000003f8: SWAP1
000003f9: PUSH8 0xffffffffffffffff
00000402: SWAP6
00000403: DUP7
00000404: DUP4
00000405: GT
00000406: PUSH2 0x0aee
00000409: JUMPI
0000040a: CALLDATASIZE
0000040b: PUSH1 0x23
0000040d: DUP5
0000040e: ADD
0000040f: SLT
00000410: ISZERO
00000411: PUSH2 0x0aee
00000414: JUMPI
00000415: DUP3
00000416: PUSH1 0x04
00000418: ADD
00000419: CALLDATALOAD
0000041a: DUP8
0000041b: DUP2
0000041c: GT
0000041d: PUSH2 0x09d5
00000420: JUMPI
00000421: DUP1
00000422: PUSH1 0x05
00000424: SHL
00000425: SWAP4
00000426: PUSH1 0x24
00000428: DUP6
00000429: DUP3
0000042a: ADD
0000042b: ADD
0000042c: SWAP1
0000042d: CALLDATASIZE
0000042e: DUP3
0000042f: GT
00000430: PUSH2 0x0aea
00000433: JUMPI
00000434: DUP8
00000435: MLOAD
00000436: PUSH1 0x20
00000438: DUP2
00000439: ADD
0000043a: SWAP1
0000043b: DUP6
0000043c: DUP3
0000043d: MSTORE
0000043e: DUP7
0000043f: DUP11
00000440: DUP3
00000441: ADD
00000442: MSTORE
00000443: DUP9
00000444: PUSH1 0x60
00000446: DUP3
00000447: ADD
00000448: MSTORE
00000449: PUSH1 0x60
0000044b: DUP2
0000044c: MSTORE
0000044d: PUSH2 0x0455
00000450: DUP2
00000451: PUSH2 0x1068
00000454: JUMP
00000455: JUMPDEST
00000456: MLOAD
00000457: SWAP1
00000458: KECCAK256
00000459: DUP9
0000045a: MLOAD
0000045b: PUSH1 0x20
0000045d: DUP2
0000045e: ADD
0000045f: SWAP2
00000460: DUP3
00000461: MSTORE
00000462: PUSH1 0x20
00000464: DUP2
00000465: MSTORE
00000466: PUSH2 0x046e
00000469: DUP2
0000046a: PUSH2 0x101d
0000046d: JUMP
0000046e: JUMPDEST
0000046f: MLOAD
00000470: SWAP1
00000471: KECCAK256
00000472: SWAP3
00000473: PUSH2 0x047a
00000476: PUSH2 0x10c5
00000479: JUMP
0000047a: JUMPDEST
0000047b: PUSH2 0x0a8d
0000047e: JUMPI
0000047f: PUSH2 0x04a0
00000482: DUP6
00000483: PUSH1 0xff
00000485: PUSH1 0x01
00000487: SWAP2
00000488: DUP1
00000489: PUSH1 0x08
0000048b: SHR
0000048c: PUSH1 0x00
0000048e: MSTORE
0000048f: DUP3
00000490: PUSH1 0x20
00000492: MSTORE
00000493: AND
00000494: SHL
00000495: PUSH1 0x40
00000497: PUSH1 0x00
00000499: KECCAK256
0000049a: SLOAD
0000049b: AND
0000049c: ISZERO
0000049d: ISZERO
0000049e: SWAP1
0000049f: JUMP
000004a0: JUMPDEST
000004a1: PUSH2 0x0a5d
000004a4: JUMPI
000004a5: PUSH2 0x04b3
000004a8: PUSH1 0x20
000004aa: DUP11
000004ab: MLOAD
000004ac: SWAP9
000004ad: ADD
000004ae: DUP9
000004af: PUSH2 0x1084
000004b2: JUMP
000004b3: JUMPDEST
000004b4: DUP7
000004b5: MSTORE
000004b6: PUSH1 0x24
000004b8: ADD
000004b9: PUSH1 0x20
000004bb: DUP7
000004bc: ADD
000004bd: JUMPDEST
000004be: DUP3
000004bf: DUP3
000004c0: LT
000004c1: PUSH2 0x0a4d
000004c4: JUMPI
000004c5: POP
000004c6: POP
000004c7: POP
000004c8: SWAP4
000004c9: DUP7
000004ca: SWAP5
000004cb: JUMPDEST
000004cc: DUP5
000004cd: MLOAD
000004ce: DUP7
000004cf: LT
000004d0: ISZERO
000004d1: PUSH2 0x055e
000004d4: JUMPI
000004d5: PUSH1 0x20
000004d7: DUP7
000004d8: PUSH1 0x05
000004da: SHL
000004db: DUP7
000004dc: ADD
000004dd: ADD
000004de: MLOAD
000004df: SWAP1
000004e0: DUP2
000004e1: DUP2
000004e2: LT
000004e3: PUSH1 0x00
000004e5: EQ
000004e6: PUSH2 0x0550
000004e9: JUMPI
000004ea: DUP9
000004eb: MSTORE
000004ec: PUSH1 0x20
000004ee: MSTORE
000004ef: DUP6
000004f0: DUP8
000004f1: KECCAK256
000004f2: JUMPDEST
000004f3: SWAP5
000004f4: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00000515: DUP2
00000516: EQ
00000517: PUSH2 0x0523
0000051a: JUMPI
0000051b: PUSH1 0x01
0000051d: ADD
0000051e: SWAP5
0000051f: PUSH2 0x04cb
00000522: JUMP
00000523: JUMPDEST
00000524: PUSH1 0x24
00000526: DUP9
00000527: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00000548: DUP2
00000549: MSTORE
0000054a: PUSH1 0x11
0000054c: PUSH1 0x04
0000054e: MSTORE
0000054f: REVERT
00000550: JUMPDEST
00000551: SWAP1
00000552: DUP9
00000553: MSTORE
00000554: PUSH1 0x20
00000556: MSTORE
00000557: DUP6
00000558: DUP8
00000559: KECCAK256
0000055a: PUSH2 0x04f2
0000055d: JUMP
0000055e: JUMPDEST
0000055f: SWAP2
00000560: DUP7
00000561: SWAP2
00000562: DUP10
00000563: DUP10
00000564: SWAP5
00000565: PUSH32 0xd04e8fbdf6a46893f163f06dcbc1f919b2cd906ef4ee25002d11f7932410f3b7
00000586: SUB
00000587: PUSH2 0x0a24
0000058a: JUMPI
0000058b: DUP4
0000058c: MLOAD
0000058d: PUSH32 0x5fe3b56700000000000000000000000000000000000000000000000000000000
000005ae: DUP2
000005af: MSTORE
000005b0: PUSH1 0x20
000005b2: DUP2
000005b3: PUSH1 0x04
000005b5: DUP2
000005b6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000005cb: PUSH32 0x000000000000000000000000afb979d9afad1ad27c5eff4e27226e3ab9e5dcc9
000005ec: AND
000005ed: GAS
000005ee: STATICCALL
000005ef: SWAP1
000005f0: DUP2
000005f1: ISZERO
000005f2: PUSH2 0x0a1a
000005f5: JUMPI
000005f6: DUP7
000005f7: SWAP2
000005f8: PUSH2 0x09eb
000005fb: JUMPI
000005fc: JUMPDEST
000005fd: POP
000005fe: DUP5
000005ff: MLOAD
00000600: PUSH32 0xdcf844a700000000000000000000000000000000000000000000000000000000
00000621: DUP2
00000622: MSTORE
00000623: PUSH1 0x20
00000625: DUP2
00000626: PUSH1 0x24
00000628: DUP2
00000629: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000063e: DUP1
0000063f: PUSH32 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
00000660: AND
00000661: SWAP7
00000662: DUP8
00000663: PUSH1 0x04
00000665: DUP5
00000666: ADD
00000667: MSTORE
00000668: AND
00000669: GAS
0000066a: STATICCALL
0000066b: SWAP1
0000066c: DUP2
0000066d: ISZERO
0000066e: PUSH2 0x09e1
00000671: JUMPI
00000672: DUP8
00000673: SWAP2
00000674: PUSH2 0x09ab
00000677: JUMPI
00000678: JUMPDEST
00000679: POP
0000067a: PUSH2 0x0982
0000067d: JUMPI
0000067e: DUP4
0000067f: PUSH1 0x08
00000681: SHR
00000682: DUP7
00000683: MSTORE
00000684: PUSH1 0x01
00000686: PUSH1 0x20
00000688: MSTORE
00000689: DUP5
0000068a: DUP7
0000068b: KECCAK256
0000068c: PUSH1 0x01
0000068e: PUSH1 0xff
00000690: DUP7
00000691: AND
00000692: SHL
00000693: DUP2
00000694: SLOAD
00000695: OR
00000696: SWAP1
00000697: SSTORE
00000698: DUP5
00000699: MLOAD
0000069a: SWAP1
0000069b: PUSH2 0x06a3
0000069e: DUP3
0000069f: PUSH2 0x101d
000006a2: JUMP
000006a3: JUMPDEST
000006a4: DUP7
000006a5: DUP3
000006a6: MSTORE
000006a7: DUP7
000006a8: PUSH1 0x20
000006aa: DUP4
000006ab: ADD
000006ac: MSTORE
000006ad: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000006c2: DUP8
000006c3: SLOAD
000006c4: AND
000006c5: DUP7
000006c6: MLOAD
000006c7: SWAP4
000006c8: PUSH2 0x0100
000006cb: DUP6
000006cc: ADD
000006cd: SWAP1
000006ce: DUP6
000006cf: DUP3
000006d0: LT
000006d1: SWAP1
000006d2: DUP3
000006d3: GT
000006d4: OR
000006d5: PUSH2 0x0955
000006d8: JUMPI
000006d9: DUP8
000006da: MSTORE
000006db: DUP4
000006dc: MSTORE
000006dd: DUP8
000006de: PUSH1 0x20
000006e0: DUP5
000006e1: ADD
000006e2: MSTORE
000006e3: DUP4
000006e4: DUP7
000006e5: DUP5
000006e6: ADD
000006e7: MSTORE
000006e8: PUSH1 0x60
000006ea: DUP4
000006eb: ADD
000006ec: MSTORE
000006ed: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
0000070e: ISZERO
0000070f: ISZERO
00000710: PUSH1 0x80
00000712: DUP4
00000713: ADD
00000714: MSTORE
00000715: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000001
00000736: ISZERO
00000737: ISZERO
00000738: PUSH1 0xa0
0000073a: DUP4
0000073b: ADD
0000073c: MSTORE
0000073d: DUP5
0000073e: MLOAD
0000073f: PUSH2 0x0747
00000742: DUP2
00000743: PUSH2 0x101d
00000746: JUMP
00000747: JUMPDEST
00000748: PUSH5 0xffffffffff
0000074e: PUSH1 0x02
00000750: SLOAD
00000751: DUP2
00000752: DUP2
00000753: AND
00000754: DUP4
00000755: MSTORE
00000756: PUSH1 0x28
00000758: SHR
00000759: AND
0000075a: PUSH1 0x20
0000075c: DUP3
0000075d: ADD
0000075e: MSTORE
0000075f: PUSH1 0xc0
00000761: DUP4
00000762: ADD
00000763: MSTORE
00000764: PUSH1 0xe0
00000766: DUP3
00000767: ADD
00000768: MSTORE
00000769: PUSH1 0x20
0000076b: PUSH1 0xe0
0000076d: DUP6
0000076e: MLOAD
0000076f: SWAP3
00000770: PUSH32 0xab167ccc00000000000000000000000000000000000000000000000000000000
00000791: DUP5
00000792: MSTORE
00000793: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000007a8: DUP2
000007a9: MLOAD
000007aa: AND
000007ab: PUSH1 0x04
000007ad: DUP6
000007ae: ADD
000007af: MSTORE
000007b0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000007c5: DUP4
000007c6: DUP3
000007c7: ADD
000007c8: MLOAD
000007c9: AND
000007ca: PUSH1 0x24
000007cc: DUP6
000007cd: ADD
000007ce: MSTORE
000007cf: PUSH16 0xffffffffffffffffffffffffffffffff
000007e0: DUP8
000007e1: DUP3
000007e2: ADD
000007e3: MLOAD
000007e4: AND
000007e5: PUSH1 0x44
000007e7: DUP6
000007e8: ADD
000007e9: MSTORE
000007ea: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000007ff: PUSH1 0x60
00000801: DUP3
00000802: ADD
00000803: MLOAD
00000804: AND
00000805: PUSH1 0x64
00000807: DUP6
00000808: ADD
00000809: MSTORE
0000080a: PUSH1 0x80
0000080c: DUP2
0000080d: ADD
0000080e: MLOAD
0000080f: ISZERO
00000810: ISZERO
00000811: PUSH1 0x84
00000813: DUP6
00000814: ADD
00000815: MSTORE
00000816: PUSH1 0xa0
00000818: DUP2
00000819: ADD
0000081a: MLOAD
0000081b: ISZERO
0000081c: ISZERO
0000081d: PUSH1 0xa4
0000081f: DUP6
00000820: ADD
00000821: MSTORE
00000822: PUSH5 0xffffffffff
00000828: DUP4
00000829: PUSH1 0xc0
0000082b: DUP4
0000082c: ADD
0000082d: MLOAD
0000082e: DUP3
0000082f: DUP2
00000830: MLOAD
00000831: AND
00000832: PUSH1 0xc4
00000834: DUP9
00000835: ADD
00000836: MSTORE
00000837: ADD
00000838: MLOAD
00000839: AND
0000083a: PUSH1 0xe4
0000083c: DUP6
0000083d: ADD
0000083e: MSTORE
0000083f: ADD
00000840: MLOAD
00000841: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000856: DUP2
00000857: MLOAD
00000858: AND
00000859: PUSH2 0x0104
0000085c: DUP5
0000085d: ADD
0000085e: MSTORE
0000085f: ADD
00000860: MLOAD
00000861: PUSH2 0x0124
00000864: DUP3
00000865: ADD
00000866: MSTORE
00000867: PUSH1 0x20
00000869: DUP2
0000086a: PUSH2 0x0144
0000086d: DUP2
0000086e: DUP9
0000086f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000884: PUSH32 0x000000000000000000000000afb979d9afad1ad27c5eff4e27226e3ab9e5dcc9
000008a5: AND
000008a6: GAS
000008a7: CALL
000008a8: SWAP5
000008a9: DUP6
000008aa: ISZERO
000008ab: PUSH2 0x094a
000008ae: JUMPI
000008af: DUP1
000008b0: SWAP6
000008b1: PUSH2 0x08ef
000008b4: JUMPI
000008b5: JUMPDEST
000008b6: POP
000008b7: POP
000008b8: SWAP4
000008b9: PUSH32 0x28b58397e03322f670d6b223cc863f8c148e368b8b615412e6798a641a22842d
000008da: DUP4
000008db: DUP6
000008dc: SWAP4
000008dd: PUSH1 0x20
000008df: SWAP8
000008e0: DUP3
000008e1: MLOAD
000008e2: SWAP2
000008e3: DUP3
000008e4: MSTORE
000008e5: DUP9
000008e6: DUP3
000008e7: ADD
000008e8: MSTORE
000008e9: LOG3
000008ea: MLOAD
000008eb: SWAP1
000008ec: DUP2
000008ed: MSTORE
000008ee: RETURN
000008ef: JUMPDEST
000008f0: SWAP1
000008f1: SWAP6
000008f2: SWAP2
000008f3: SWAP3
000008f4: SWAP5
000008f5: POP
000008f6: PUSH1 0x20
000008f8: DUP7
000008f9: RETURNDATASIZE
000008fa: PUSH1 0x20
000008fc: GT
000008fd: PUSH2 0x0942
00000900: JUMPI
00000901: JUMPDEST
00000902: DUP2
00000903: PUSH2 0x090e
00000906: PUSH1 0x20
00000908: SWAP4
00000909: DUP4
0000090a: PUSH2 0x1084
0000090d: JUMP
0000090e: JUMPDEST
0000090f: DUP2
00000910: ADD
00000911: SUB
00000912: SLT
00000913: PUSH2 0x0311
00000916: JUMPI
00000917: POP
00000918: SWAP4
00000919: MLOAD
0000091a: SWAP3
0000091b: SWAP1
0000091c: PUSH32 0x28b58397e03322f670d6b223cc863f8c148e368b8b615412e6798a641a22842d
0000093d: DUP4
0000093e: PUSH2 0x08b5
00000941: JUMP
00000942: JUMPDEST
00000943: RETURNDATASIZE
00000944: SWAP2
00000945: POP
00000946: PUSH2 0x0901
00000949: JUMP
0000094a: JUMPDEST
0000094b: DUP5
0000094c: MLOAD
0000094d: SWAP1
0000094e: RETURNDATASIZE
0000094f: SWAP1
00000950: DUP3
00000951: RETURNDATACOPY
00000952: RETURNDATASIZE
00000953: SWAP1
00000954: REVERT
00000955: JUMPDEST
00000956: PUSH1 0x24
00000958: DUP10
00000959: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
0000097a: DUP2
0000097b: MSTORE
0000097c: PUSH1 0x41
0000097e: PUSH1 0x04
00000980: MSTORE
00000981: REVERT
00000982: JUMPDEST
00000983: PUSH1 0x04
00000985: DUP6
00000986: MLOAD
00000987: PUSH32 0xa4432b5100000000000000000000000000000000000000000000000000000000
000009a8: DUP2
000009a9: MSTORE
000009aa: REVERT
000009ab: JUMPDEST
000009ac: SWAP1
000009ad: POP
000009ae: PUSH1 0x20
000009b0: DUP2
000009b1: RETURNDATASIZE
000009b2: PUSH1 0x20
000009b4: GT
000009b5: PUSH2 0x09d9
000009b8: JUMPI
000009b9: JUMPDEST
000009ba: DUP2
000009bb: PUSH2 0x09c6
000009be: PUSH1 0x20
000009c0: SWAP4
000009c1: DUP4
000009c2: PUSH2 0x1084
000009c5: JUMP
000009c6: JUMPDEST
000009c7: DUP2
000009c8: ADD
000009c9: SUB
000009ca: SLT
000009cb: PUSH2 0x09d5
000009ce: JUMPI
000009cf: MLOAD
000009d0: DUP9
000009d1: PUSH2 0x0678
000009d4: JUMP
000009d5: JUMPDEST
000009d6: DUP7
000009d7: DUP1
000009d8: REVERT
000009d9: JUMPDEST
000009da: RETURNDATASIZE
000009db: SWAP2
000009dc: POP
000009dd: PUSH2 0x09b9
000009e0: JUMP
000009e1: JUMPDEST
000009e2: DUP7
000009e3: MLOAD
000009e4: RETURNDATASIZE
000009e5: DUP10
000009e6: DUP3
000009e7: RETURNDATACOPY
000009e8: RETURNDATASIZE
000009e9: SWAP1
000009ea: REVERT
000009eb: JUMPDEST
000009ec: PUSH2 0x0a0d
000009ef: SWAP2
000009f0: POP
000009f1: PUSH1 0x20
000009f3: RETURNDATASIZE
000009f4: PUSH1 0x20
000009f6: GT
000009f7: PUSH2 0x0a13
000009fa: JUMPI
000009fb: JUMPDEST
000009fc: PUSH2 0x0a05
000009ff: DUP2
00000a00: DUP4
00000a01: PUSH2 0x1084
00000a04: JUMP
00000a05: JUMPDEST
00000a06: DUP2
00000a07: ADD
00000a08: SWAP1
00000a09: PUSH2 0x1102
00000a0c: JUMP
00000a0d: JUMPDEST
00000a0e: DUP8
00000a0f: PUSH2 0x05fc
00000a12: JUMP
00000a13: JUMPDEST
00000a14: POP
00000a15: RETURNDATASIZE
00000a16: PUSH2 0x09fb
00000a19: JUMP
00000a1a: JUMPDEST
00000a1b: DUP6
00000a1c: MLOAD
00000a1d: RETURNDATASIZE
00000a1e: DUP9
00000a1f: DUP3
00000a20: RETURNDATACOPY
00000a21: RETURNDATASIZE
00000a22: SWAP1
00000a23: REVERT
00000a24: JUMPDEST
00000a25: PUSH1 0x04
00000a27: DUP5
00000a28: MLOAD
00000a29: PUSH32 0xb3f3b2a600000000000000000000000000000000000000000000000000000000
00000a4a: DUP2
00000a4b: MSTORE
00000a4c: REVERT
00000a4d: JUMPDEST
00000a4e: DUP2
00000a4f: CALLDATALOAD
00000a50: DUP2
00000a51: MSTORE
00000a52: PUSH1 0x20
00000a54: SWAP2
00000a55: DUP3
00000a56: ADD
00000a57: SWAP2
00000a58: ADD
00000a59: PUSH2 0x04bd
00000a5c: JUMP
00000a5d: JUMPDEST
00000a5e: PUSH1 0x24
00000a60: DUP6
00000a61: DUP11
00000a62: MLOAD
00000a63: SWAP1
00000a64: PUSH32 0x3548783b00000000000000000000000000000000000000000000000000000000
00000a85: DUP3
00000a86: MSTORE
00000a87: PUSH1 0x04
00000a89: DUP3
00000a8a: ADD
00000a8b: MSTORE
00000a8c: REVERT
00000a8d: JUMPDEST
00000a8e: DUP9
00000a8f: MLOAD
00000a90: PUSH32 0x74b43bd000000000000000000000000000000000000000000000000000000000
00000ab1: DUP2
00000ab2: MSTORE
00000ab3: TIMESTAMP
00000ab4: PUSH1 0x04
00000ab6: DUP3
00000ab7: ADD
00000ab8: MSTORE
00000ab9: PUSH32 0x0000000000000000000000000000000000000000000000000000000066623070
00000ada: PUSH5 0xffffffffff
00000ae0: AND
00000ae1: PUSH1 0x24
00000ae3: DUP3
00000ae4: ADD
00000ae5: MSTORE
00000ae6: PUSH1 0x44
00000ae8: SWAP1
00000ae9: REVERT
00000aea: JUMPDEST
00000aeb: DUP9
00000aec: DUP1
00000aed: REVERT
00000aee: JUMPDEST
00000aef: DUP6
00000af0: DUP1
00000af1: REVERT
00000af2: JUMPDEST
00000af3: DUP4
00000af4: DUP1
00000af5: REVERT
00000af6: JUMPDEST
00000af7: DUP3
00000af8: DUP1
00000af9: REVERT
00000afa: JUMPDEST
00000afb: POP
00000afc: SWAP1
00000afd: CALLVALUE
00000afe: PUSH2 0x0311
00000b01: JUMPI
00000b02: DUP1
00000b03: PUSH1 0x03
00000b05: NOT
00000b06: CALLDATASIZE
00000b07: ADD
00000b08: SLT
00000b09: PUSH2 0x0311
00000b0c: JUMPI
00000b0d: POP
00000b0e: PUSH1 0x02
00000b10: SLOAD
00000b11: PUSH5 0xffffffffff
00000b17: DUP3
00000b18: MLOAD
00000b19: SWAP2
00000b1a: DUP2
00000b1b: DUP2
00000b1c: AND
00000b1d: DUP4
00000b1e: MSTORE
00000b1f: PUSH1 0x28
00000b21: SHR
00000b22: AND
00000b23: PUSH1 0x20
00000b25: DUP3
00000b26: ADD
00000b27: MSTORE
00000b28: RETURN
00000b29: JUMPDEST
00000b2a: POP
00000b2b: CALLVALUE
00000b2c: PUSH2 0x00ed
00000b2f: JUMPI
00000b30: DUP2
00000b31: PUSH1 0x03
00000b33: NOT
00000b34: CALLDATASIZE
00000b35: ADD
00000b36: SLT
00000b37: PUSH2 0x00ed
00000b3a: JUMPI
00000b3b: PUSH1 0x20
00000b3d: SWAP1
00000b3e: MLOAD
00000b3f: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000001
00000b60: ISZERO
00000b61: ISZERO
00000b62: DUP2
00000b63: MSTORE
00000b64: RETURN
00000b65: JUMPDEST
00000b66: POP
00000b67: CALLVALUE
00000b68: PUSH2 0x00ed
00000b6b: JUMPI
00000b6c: DUP2
00000b6d: PUSH1 0x03
00000b6f: NOT
00000b70: CALLDATASIZE
00000b71: ADD
00000b72: SLT
00000b73: PUSH2 0x00ed
00000b76: JUMPI
00000b77: PUSH1 0x20
00000b79: SWAP1
00000b7a: MLOAD
00000b7b: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
00000b9c: ISZERO
00000b9d: ISZERO
00000b9e: DUP2
00000b9f: MSTORE
00000ba0: RETURN
00000ba1: JUMPDEST
00000ba2: SWAP2
00000ba3: SWAP1
00000ba4: POP
00000ba5: CALLVALUE
00000ba6: PUSH2 0x0af6
00000ba9: JUMPI
00000baa: DUP1
00000bab: PUSH1 0x03
00000bad: NOT
00000bae: CALLDATASIZE
00000baf: ADD
00000bb0: SLT
00000bb1: PUSH2 0x0af6
00000bb4: JUMPI
00000bb5: PUSH2 0x0bbc
00000bb8: PUSH2 0x0ff5
00000bbb: JUMP
00000bbc: JUMPDEST
00000bbd: SWAP2
00000bbe: PUSH1 0x24
00000bc0: CALLDATALOAD
00000bc1: PUSH16 0xffffffffffffffffffffffffffffffff
00000bd2: DUP2
00000bd3: AND
00000bd4: DUP1
00000bd5: SWAP2
00000bd6: SUB
00000bd7: PUSH2 0x0ff1
00000bda: JUMPI
00000bdb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000bf0: SWAP2
00000bf1: DUP3
00000bf2: DUP7
00000bf3: SLOAD
00000bf4: AND
00000bf5: CALLER
00000bf6: DUP2
00000bf7: SUB
00000bf8: PUSH2 0x0fa8
00000bfb: JUMPI
00000bfc: POP
00000bfd: POP
00000bfe: DUP3
00000bff: MLOAD
00000c00: SWAP2
00000c01: PUSH32 0x5fe3b56700000000000000000000000000000000000000000000000000000000
00000c22: DUP4
00000c23: MSTORE
00000c24: PUSH1 0x20
00000c26: SWAP3
00000c27: DUP4
00000c28: DUP2
00000c29: PUSH1 0x04
00000c2b: DUP2
00000c2c: DUP6
00000c2d: PUSH32 0x000000000000000000000000afb979d9afad1ad27c5eff4e27226e3ab9e5dcc9
00000c4e: AND
00000c4f: GAS
00000c50: STATICCALL
00000c51: SWAP1
00000c52: DUP2
00000c53: ISZERO
00000c54: PUSH2 0x0f9e
00000c57: JUMPI
00000c58: DUP8
00000c59: SWAP2
00000c5a: PUSH2 0x0f81
00000c5d: JUMPI
00000c5e: JUMPDEST
00000c5f: POP
00000c60: DUP5
00000c61: MLOAD
00000c62: PUSH32 0xdcf844a700000000000000000000000000000000000000000000000000000000
00000c83: DUP2
00000c84: MSTORE
00000c85: DUP5
00000c86: DUP2
00000c87: PUSH1 0x24
00000c89: DUP2
00000c8a: DUP7
00000c8b: DUP1
00000c8c: PUSH32 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
00000cad: AND
00000cae: SWAP7
00000caf: DUP8
00000cb0: PUSH1 0x04
00000cb2: DUP5
00000cb3: ADD
00000cb4: MSTORE
00000cb5: AND
00000cb6: GAS
00000cb7: STATICCALL
00000cb8: SWAP1
00000cb9: DUP2
00000cba: ISZERO
00000cbb: PUSH2 0x0f77
00000cbe: JUMPI
00000cbf: DUP9
00000cc0: SWAP2
00000cc1: PUSH2 0x0f46
00000cc4: JUMPI
00000cc5: JUMPDEST
00000cc6: POP
00000cc7: PUSH2 0x0cce
00000cca: PUSH2 0x10c5
00000ccd: JUMP
00000cce: JUMPDEST
00000ccf: ISZERO
00000cd0: SWAP1
00000cd1: DUP2
00000cd2: PUSH2 0x0f3d
00000cd5: JUMPI
00000cd6: JUMPDEST
00000cd7: POP
00000cd8: PUSH2 0x0ee0
00000cdb: JUMPI
00000cdc: DUP5
00000cdd: MLOAD
00000cde: SWAP1
00000cdf: DUP8
00000ce0: DUP1
00000ce1: DUP5
00000ce2: DUP8
00000ce3: DUP6
00000ce4: ADD
00000ce5: SWAP10
00000ce6: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000
00000d07: DUP12
00000d08: MSTORE
00000d09: AND
00000d0a: SWAP9
00000d0b: DUP10
00000d0c: PUSH1 0x24
00000d0e: DUP7
00000d0f: ADD
00000d10: MSTORE
00000d11: DUP7
00000d12: PUSH1 0x44
00000d14: DUP7
00000d15: ADD
00000d16: MSTORE
00000d17: PUSH1 0x44
00000d19: DUP6
00000d1a: MSTORE
00000d1b: PUSH2 0x0d23
00000d1e: DUP6
00000d1f: PUSH2 0x1068
00000d22: JUMP
00000d23: JUMPDEST
00000d24: DUP9
00000d25: MLOAD
00000d26: SWAP5
00000d27: PUSH2 0x0d2f
00000d2a: DUP7
00000d2b: PUSH2 0x101d
00000d2e: JUMP
00000d2f: JUMPDEST
00000d30: DUP9
00000d31: DUP7
00000d32: MSTORE
00000d33: PUSH32 0x5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564
00000d54: DUP10
00000d55: DUP8
00000d56: ADD
00000d57: MSTORE
00000d58: MLOAD
00000d59: SWAP1
00000d5a: DUP3
00000d5b: DUP6
00000d5c: GAS
00000d5d: CALL
00000d5e: RETURNDATASIZE
00000d5f: ISZERO
00000d60: PUSH2 0x0ed2
00000d63: JUMPI
00000d64: RETURNDATASIZE
00000d65: SWAP2
00000d66: PUSH8 0xffffffffffffffff
00000d6f: DUP4
00000d70: GT
00000d71: PUSH2 0x0ea5
00000d74: JUMPI
00000d75: SWAP1
00000d76: PUSH2 0x0dbc
00000d79: SWAP4
00000d7a: SWAP3
00000d7b: SWAP2
00000d7c: DUP9
00000d7d: MLOAD
00000d7e: SWAP3
00000d7f: PUSH2 0x0daf
00000d82: DUP10
00000d83: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00000da4: PUSH1 0x1f
00000da6: DUP5
00000da7: ADD
00000da8: AND
00000da9: ADD
00000daa: DUP6
00000dab: PUSH2 0x1084
00000dae: JUMP
00000daf: JUMPDEST
00000db0: DUP4
00000db1: MSTORE
00000db2: RETURNDATASIZE
00000db3: DUP12
00000db4: DUP10
00000db5: DUP6
00000db6: ADD
00000db7: RETURNDATACOPY
00000db8: PUSH2 0x112e
00000dbb: JUMP
00000dbc: JUMPDEST
00000dbd: DUP1
00000dbe: MLOAD
00000dbf: DUP5
00000dc0: DUP2
00000dc1: ISZERO
00000dc2: SWAP2
00000dc3: DUP3
00000dc4: ISZERO
00000dc5: PUSH2 0x0e85
00000dc8: JUMPI
00000dc9: JUMPDEST
00000dca: POP
00000dcb: POP
00000dcc: SWAP1
00000dcd: POP
00000dce: ISZERO
00000dcf: PUSH2 0x0e02
00000dd2: JUMPI
00000dd3: SWAP1
00000dd4: PUSH32 0x2e9d425ba8b27655048400b366d7b6a1f7180ebdb088e06bb7389704860ffe1f
00000df5: SWAP3
00000df6: SWAP2
00000df7: DUP7
00000df8: SLOAD
00000df9: AND
00000dfa: SWAP4
00000dfb: MLOAD
00000dfc: SWAP1
00000dfd: DUP2
00000dfe: MSTORE
00000dff: LOG3
00000e00: DUP1
00000e01: RETURN
00000e02: JUMPDEST
00000e03: PUSH1 0x84
00000e05: DUP4
00000e06: DUP6
00000e07: MLOAD
00000e08: SWAP1
00000e09: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000e2a: DUP3
00000e2b: MSTORE
00000e2c: PUSH1 0x04
00000e2e: DUP3
00000e2f: ADD
00000e30: MSTORE
00000e31: PUSH1 0x2a
00000e33: PUSH1 0x24
00000e35: DUP3
00000e36: ADD
00000e37: MSTORE
00000e38: PUSH32 0x5361666545524332303a204552433230206f7065726174696f6e20646964206e
00000e59: PUSH1 0x44
00000e5b: DUP3
00000e5c: ADD
00000e5d: MSTORE
00000e5e: PUSH32 0x6f74207375636365656400000000000000000000000000000000000000000000
00000e7f: PUSH1 0x64
00000e81: DUP3
00000e82: ADD
00000e83: MSTORE
00000e84: REVERT
00000e85: JUMPDEST
00000e86: DUP4
00000e87: DUP1
00000e88: SWAP3
00000e89: SWAP4
00000e8a: POP
00000e8b: ADD
00000e8c: SUB
00000e8d: SLT
00000e8e: PUSH2 0x09d5
00000e91: JUMPI
00000e92: DUP4
00000e93: ADD
00000e94: MLOAD
00000e95: DUP1
00000e96: ISZERO
00000e97: ISZERO
00000e98: DUP2
00000e99: SUB
00000e9a: PUSH2 0x09d5
00000e9d: JUMPI
00000e9e: DUP1
00000e9f: DUP5
00000ea0: CODESIZE
00000ea1: PUSH2 0x0dc9
00000ea4: JUMP
00000ea5: JUMPDEST
00000ea6: PUSH1 0x24
00000ea8: DUP11
00000ea9: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00000eca: DUP2
00000ecb: MSTORE
00000ecc: PUSH1 0x41
00000ece: PUSH1 0x04
00000ed0: MSTORE
00000ed1: REVERT
00000ed2: JUMPDEST
00000ed3: SWAP1
00000ed4: PUSH2 0x0dbc
00000ed7: SWAP3
00000ed8: SWAP2
00000ed9: PUSH1 0x60
00000edb: SWAP2
00000edc: PUSH2 0x112e
00000edf: JUMP
00000ee0: JUMPDEST
00000ee1: DUP5
00000ee2: MLOAD
00000ee3: PUSH32 0x1351f21d00000000000000000000000000000000000000000000000000000000
00000f04: DUP2
00000f05: MSTORE
00000f06: TIMESTAMP
00000f07: PUSH1 0x04
00000f09: DUP3
00000f0a: ADD
00000f0b: MSTORE
00000f0c: PUSH32 0x0000000000000000000000000000000000000000000000000000000066623070
00000f2d: PUSH5 0xffffffffff
00000f33: AND
00000f34: PUSH1 0x24
00000f36: DUP3
00000f37: ADD
00000f38: MSTORE
00000f39: PUSH1 0x44
00000f3b: SWAP1
00000f3c: REVERT
00000f3d: JUMPDEST
00000f3e: SWAP1
00000f3f: POP
00000f40: ISZERO
00000f41: CODESIZE
00000f42: PUSH2 0x0cd6
00000f45: JUMP
00000f46: JUMPDEST
00000f47: SWAP1
00000f48: POP
00000f49: DUP5
00000f4a: DUP2
00000f4b: DUP2
00000f4c: RETURNDATASIZE
00000f4d: DUP4
00000f4e: GT
00000f4f: PUSH2 0x0f70
00000f52: JUMPI
00000f53: JUMPDEST
00000f54: PUSH2 0x0f5d
00000f57: DUP2
00000f58: DUP4
00000f59: PUSH2 0x1084
00000f5c: JUMP
00000f5d: JUMPDEST
00000f5e: DUP2
00000f5f: ADD
00000f60: SUB
00000f61: SLT
00000f62: PUSH2 0x0f6c
00000f65: JUMPI
00000f66: MLOAD
00000f67: CODESIZE
00000f68: PUSH2 0x0cc5
00000f6b: JUMP
00000f6c: JUMPDEST
00000f6d: DUP8
00000f6e: DUP1
00000f6f: REVERT
00000f70: JUMPDEST
00000f71: POP
00000f72: RETURNDATASIZE
00000f73: PUSH2 0x0f53
00000f76: JUMP
00000f77: JUMPDEST
00000f78: DUP7
00000f79: MLOAD
00000f7a: RETURNDATASIZE
00000f7b: DUP11
00000f7c: DUP3
00000f7d: RETURNDATACOPY
00000f7e: RETURNDATASIZE
00000f7f: SWAP1
00000f80: REVERT
00000f81: JUMPDEST
00000f82: PUSH2 0x0f98
00000f85: SWAP2
00000f86: POP
00000f87: DUP5
00000f88: RETURNDATASIZE
00000f89: DUP7
00000f8a: GT
00000f8b: PUSH2 0x0a13
00000f8e: JUMPI
00000f8f: PUSH2 0x0a05
00000f92: DUP2
00000f93: DUP4
00000f94: PUSH2 0x1084
00000f97: JUMP
00000f98: JUMPDEST
00000f99: CODESIZE
00000f9a: PUSH2 0x0c5e
00000f9d: JUMP
00000f9e: JUMPDEST
00000f9f: DUP6
00000fa0: MLOAD
00000fa1: RETURNDATASIZE
00000fa2: DUP10
00000fa3: DUP3
00000fa4: RETURNDATACOPY
00000fa5: RETURNDATASIZE
00000fa6: SWAP1
00000fa7: REVERT
00000fa8: JUMPDEST
00000fa9: PUSH32 0xc6cce6a400000000000000000000000000000000000000000000000000000000
00000fca: DUP3
00000fcb: MSTORE
00000fcc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000fe1: AND
00000fe2: PUSH1 0x04
00000fe4: DUP3
00000fe5: ADD
00000fe6: MSTORE
00000fe7: CALLER
00000fe8: PUSH1 0x24
00000fea: DUP3
00000feb: ADD
00000fec: MSTORE
00000fed: PUSH1 0x44
00000fef: SWAP1
00000ff0: REVERT
00000ff1: JUMPDEST
00000ff2: DUP5
00000ff3: DUP1
00000ff4: REVERT
00000ff5: JUMPDEST
00000ff6: PUSH1 0x04
00000ff8: CALLDATALOAD
00000ff9: SWAP1
00000ffa: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000100f: DUP3
00001010: AND
00001011: DUP3
00001012: SUB
00001013: PUSH2 0x1018
00001016: JUMPI
00001017: JUMP
00001018: JUMPDEST
00001019: PUSH1 0x00
0000101b: DUP1
0000101c: REVERT
0000101d: JUMPDEST
0000101e: PUSH1 0x40
00001020: DUP2
00001021: ADD
00001022: SWAP1
00001023: DUP2
00001024: LT
00001025: PUSH8 0xffffffffffffffff
0000102e: DUP3
0000102f: GT
00001030: OR
00001031: PUSH2 0x1039
00001034: JUMPI
00001035: PUSH1 0x40
00001037: MSTORE
00001038: JUMP
00001039: JUMPDEST
0000103a: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
0000105b: PUSH1 0x00
0000105d: MSTORE
0000105e: PUSH1 0x41
00001060: PUSH1 0x04
00001062: MSTORE
00001063: PUSH1 0x24
00001065: PUSH1 0x00
00001067: REVERT
00001068: JUMPDEST
00001069: PUSH1 0x80
0000106b: DUP2
0000106c: ADD
0000106d: SWAP1
0000106e: DUP2
0000106f: LT
00001070: PUSH8 0xffffffffffffffff
00001079: DUP3
0000107a: GT
0000107b: OR
0000107c: PUSH2 0x1039
0000107f: JUMPI
00001080: PUSH1 0x40
00001082: MSTORE
00001083: JUMP
00001084: JUMPDEST
00001085: SWAP1
00001086: PUSH1 0x1f
00001088: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
000010a9: SWAP2
000010aa: ADD
000010ab: AND
000010ac: DUP2
000010ad: ADD
000010ae: SWAP1
000010af: DUP2
000010b0: LT
000010b1: PUSH8 0xffffffffffffffff
000010ba: DUP3
000010bb: GT
000010bc: OR
000010bd: PUSH2 0x1039
000010c0: JUMPI
000010c1: PUSH1 0x40
000010c3: MSTORE
000010c4: JUMP
000010c5: JUMPDEST
000010c6: PUSH5 0xffffffffff
000010cc: PUSH32 0x0000000000000000000000000000000000000000000000000000000066623070
000010ed: AND
000010ee: DUP1
000010ef: ISZERO
000010f0: ISZERO
000010f1: SWAP1
000010f2: DUP2
000010f3: PUSH2 0x10fa
000010f6: JUMPI
000010f7: POP
000010f8: SWAP1
000010f9: JUMP
000010fa: JUMPDEST
000010fb: SWAP1
000010fc: POP
000010fd: TIMESTAMP
000010fe: LT
000010ff: ISZERO
00001100: SWAP1
00001101: JUMP
00001102: JUMPDEST
00001103: SWAP1
00001104: DUP2
00001105: PUSH1 0x20
00001107: SWAP2
00001108: SUB
00001109: SLT
0000110a: PUSH2 0x1018
0000110d: JUMPI
0000110e: MLOAD
0000110f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001124: DUP2
00001125: AND
00001126: DUP2
00001127: SUB
00001128: PUSH2 0x1018
0000112b: JUMPI
0000112c: SWAP1
0000112d: JUMP
0000112e: JUMPDEST
0000112f: SWAP2
00001130: SWAP3
00001131: SWAP1
00001132: ISZERO
00001133: PUSH2 0x11a9
00001136: JUMPI
00001137: POP
00001138: DUP2
00001139: MLOAD
0000113a: ISZERO
0000113b: PUSH2 0x1142
0000113e: JUMPI
0000113f: POP
00001140: SWAP1
00001141: JUMP
00001142: JUMPDEST
00001143: EXTCODESIZE
00001144: ISZERO
00001145: PUSH2 0x114b
00001148: JUMPI
00001149: SWAP1
0000114a: JUMP
0000114b: JUMPDEST
0000114c: PUSH1 0x64
0000114e: PUSH1 0x40
00001150: MLOAD
00001151: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001172: DUP2
00001173: MSTORE
00001174: PUSH1 0x20
00001176: PUSH1 0x04
00001178: DUP3
00001179: ADD
0000117a: MSTORE
0000117b: PUSH1 0x1d
0000117d: PUSH1 0x24
0000117f: DUP3
00001180: ADD
00001181: MSTORE
00001182: PUSH32 0x416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000
000011a3: PUSH1 0x44
000011a5: DUP3
000011a6: ADD
000011a7: MSTORE
000011a8: REVERT
000011a9: JUMPDEST
000011aa: DUP3
000011ab: MLOAD
000011ac: SWAP1
000011ad: SWAP2
000011ae: POP
000011af: ISZERO
000011b0: PUSH2 0x11bc
000011b3: JUMPI
000011b4: POP
000011b5: DUP1
000011b6: MLOAD
000011b7: SWAP1
000011b8: PUSH1 0x20
000011ba: ADD
000011bb: REVERT
000011bc: JUMPDEST
000011bd: PUSH1 0x40
000011bf: MLOAD
000011c0: SWAP1
000011c1: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000011e2: DUP3
000011e3: MSTORE
000011e4: DUP2
000011e5: PUSH1 0x20
000011e7: DUP1
000011e8: PUSH1 0x04
000011ea: DUP4
000011eb: ADD
000011ec: MSTORE
000011ed: DUP3
000011ee: MLOAD
000011ef: SWAP3
000011f0: DUP4
000011f1: PUSH1 0x24
000011f3: DUP5
000011f4: ADD
000011f5: MSTORE
000011f6: PUSH1 0x00
000011f8: JUMPDEST
000011f9: DUP5
000011fa: DUP2
000011fb: LT
000011fc: PUSH2 0x1239
000011ff: JUMPI
00001200: POP
00001201: POP
00001202: POP
00001203: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00001224: PUSH1 0x1f
00001226: DUP4
00001227: PUSH1 0x00
00001229: PUSH1 0x44
0000122b: DUP1
0000122c: SWAP7
0000122d: DUP7
0000122e: ADD
0000122f: ADD
00001230: MSTORE
00001231: ADD
00001232: AND
00001233: DUP2
00001234: ADD
00001235: SUB
00001236: ADD
00001237: SWAP1
00001238: REVERT
00001239: JUMPDEST
0000123a: DUP2
0000123b: DUP2
0000123c: ADD
0000123d: DUP4
0000123e: ADD
0000123f: MLOAD
00001240: DUP7
00001241: DUP3
00001242: ADD
00001243: PUSH1 0x44
00001245: ADD
00001246: MSTORE
00001247: DUP6
00001248: SWAP4
00001249: POP
0000124a: DUP3
0000124b: ADD
0000124c: PUSH2 0x11f8
0000124f: JUMP
00001250: INVALID
00001251: LOG1
00001252: PUSH5 0x736f6c6343
00001258: STOP
00001259: ADDMOD
0000125a: ISZERO
0000125b: STOP
0000125c: EXP

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: 0x1e8fb8c8f4db1bab1233efcd26860b8c2cab1de3ce315726ed086ae35cddf563
call_targets: 0xac48cfe22c21d85b488dfbfbc4e94279b7c84a37
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x1e8fb8c8f4db1bab1233efcd26860b8c2cab1de3ce315726ed086ae35cddf563",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xac48cfe22c21d85b488dfbfbc4e94279b7c84a37"
    ],
    "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": "0x1686c909",
            "selector": "0x1686c909",
            "calldata_variants": [
                "0x1686c909",
                "0x1686c9090000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x16c3549d",
            "selector": "0x16c3549d",
            "calldata_variants": [
                "0x16c3549d",
                "0x16c3549d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x1bfd6814",
            "selector": "0x1bfd6814",
            "calldata_variants": [
                "0x1bfd6814",
                "0x1bfd68140000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x3bfe03a8",
            "selector": "0x3bfe03a8",
            "calldata_variants": [
                "0x3bfe03a8",
                "0x3bfe03a80000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x3f31ae3f",
            "selector": "0x3f31ae3f",
            "calldata_variants": [
                "0x3f31ae3f",
                "0x3f31ae3f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x4800d97f",
            "selector": "0x4800d97f",
            "calldata_variants": [
                "0x4800d97f",
                "0x4800d97f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x51e75e8b",
            "selector": "0x51e75e8b",
            "calldata_variants": [
                "0x51e75e8b",
                "0x51e75e8b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x75829def",
            "selector": "0x75829def",
            "calldata_variants": [
                "0x75829def",
                "0x75829def0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 2215,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 3421,
            "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: 0x1e8fb8c8f4db1bab1233efcd26860b8c2cab1de3ce315726ed086ae35cddf563
call_targets: 0xac48cfe22c21d85b488dfbfbc4e94279b7c84a37
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x1e8fb8c8f4db1bab1233efcd26860b8c2cab1de3ce315726ed086ae35cddf563",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xac48cfe22c21d85b488dfbfbc4e94279b7c84a37"
    ],
    "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": "0x1686c909",
            "selector": "0x1686c909",
            "calldata_variants": [
                "0x1686c909",
                "0x1686c9090000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x16c3549d",
            "selector": "0x16c3549d",
            "calldata_variants": [
                "0x16c3549d",
                "0x16c3549d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x1bfd6814",
            "selector": "0x1bfd6814",
            "calldata_variants": [
                "0x1bfd6814",
                "0x1bfd68140000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x3bfe03a8",
            "selector": "0x3bfe03a8",
            "calldata_variants": [
                "0x3bfe03a8",
                "0x3bfe03a80000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x3f31ae3f",
            "selector": "0x3f31ae3f",
            "calldata_variants": [
                "0x3f31ae3f",
                "0x3f31ae3f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x4800d97f",
            "selector": "0x4800d97f",
            "calldata_variants": [
                "0x4800d97f",
                "0x4800d97f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x51e75e8b",
            "selector": "0x51e75e8b",
            "calldata_variants": [
                "0x51e75e8b",
                "0x51e75e8b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x75829def",
            "selector": "0x75829def",
            "calldata_variants": [
                "0x75829def",
                "0x75829def0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 2215,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 3421,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 2,
    "guards_detected": []
}
low other codex Non-expiring campaigns cannot be clawed back when protocol fee is zero 65 no
view
evidence_json
{
    "evidence": "`hasExpired()` returns false when EXPIRATION == 0, and `clawback` reverts whenever `!hasExpired()` and protocolFee is zero, blocking the no-expiration case.",
    "locations": [
        "contracts/src/abstracts/SablierV2MerkleStreamer.sol:86",
        "contracts/src/abstracts/SablierV2MerkleStreamer.sol:95"
    ],
    "recommendation": "Allow clawback when EXPIRATION == 0 (no expiration), or change the condition to only require expiry when EXPIRATION != 0. For example: `if (EXPIRATION != 0 && !hasExpired() && !protocolFee.gt(ud(0))) revert`.",
    "exploit_scenario": "If the contract is deployed with EXPIRATION = 0 (intended \u201cno expiration\u201d) and the protocol fee remains zero, the admin\u2019s clawback will always revert. Any unclaimed tokens become permanently stuck in the Merkle streamer unless the protocol fee later becomes non-zero."
}