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

Analysis Run

019bb004-d430-731f-a526-9f72bf0d193b

complete
Chain ID
1
Address
Block Number
Created
Mon, Jan 12, 2026 2:24 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
Buyout success never transfers listing tokens to offerer (tokens locked permanently)
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
39470 artifact.fetch complete 1 / 3 3 months ago
39471 proxy.resolve complete 1 / 3 3 months ago
39472 tool.cast_disasm complete 1 / 3 3 months ago
39473 analysis.bundle complete 1 / 3 3 months ago
39474 capability.graph complete 1 / 3 3 months ago
39475 detector.run complete 1 / 3 3 months ago
39476 validation.fork complete 1 / 3 3 months ago
39526 report.consolidate complete 1 / 6 3 months ago
39527 tool.slither complete 1 / 2 3 months ago

Artifact

Runtime bytecode: available
Creation TX:
Deployer:
Proxy: no not_proxy
Implementation:
Verified Source: yes
Proxy evidence
{
    "status": "not_proxy"
}

Slither

tool.slither
Status
complete
Attempts
1 / 2
Findings
0
Solc
0.8.0 (solc-select)
View stderr
'forge clean' running (wd: /tmp/slither-x7whbd40)
'forge config --json' running
'forge build --build-info --skip ./test/** ./script/** --force' running (wd: /tmp/slither-x7whbd40)

Reentrancy in Buyout.counterOffer(uint256) (contracts/Buyout.sol#103-118):
	External calls:
	- fundingToken.safeTransferFrom(msg.sender,address(this),amount) (contracts/Buyout.sol#115)
	Event emitted after the call(s):
	- CounterOffer(msg.sender,amount) (contracts/Buyout.sol#117)
Reentrancy in Buyout.surrenderTokens(uint256) (contracts/Buyout.sol#165-176):
	External calls:
	- listingToken.safeTransferFrom(msg.sender,address(this),amount) (contracts/Buyout.sol#172)
	- fundingToken.safeTransfer(msg.sender,funds) (contracts/Buyout.sol#173)
	Event emitted after the call(s):
	- Surrender(amount,funds) (contracts/Buyout.sol#175)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-3

Buyout.status() (contracts/Buyout.sol#59-69) uses timestamp for comparisons
	Dangerous comparisons:
	- block.timestamp < end (contracts/Buyout.sol#64)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#block-timestamp

AddressUpgradeable.isContract(address) (@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol#26-36) uses assembly
	- INLINE ASM (@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol#32-34)
AddressUpgradeable.verifyCallResult(bool,bytes,string) (@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol#168-188) uses assembly
	- INLINE ASM (@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol#180-183)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#assembly-usage

Buyout.withdrawFunds() (contracts/Buyout.sol#139-147) compares to a boolean constant:
	-require(bool,string)(_offererRefundedAndPaid == false,ALREADY_WITHDRAWN) (contracts/Buyout.sol#140)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#boolean-equality

Version constraint ^0.8.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
	- FullInlinerNonExpressionSplitArgumentEvaluationOrder
	- MissingSideEffectsOnSelectorAccess
	- AbiReencodingHeadOverflowWithStaticArrayCleanup
	- DirtyBytesArrayToStorage
	- DataLocationChangeInInternalOverride
	- NestedCalldataArrayAbiReencodingSizeValidation
	- SignedImmutables
	- ABIDecodeTwoDimensionalArrayMemory
	- KeccakCaching.
It is used by:
	- ^0.8.0 (@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol#3)
	- ^0.8.0 (@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol#3)
	- ^0.8.0 (@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol#3)
	- ^0.8.0 (@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol#3)
	- ^0.8.0 (contracts/Buyout.sol#2)
	- ^0.8.0 (contracts/interfaces/IBuyout.sol#2)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-versions-of-solidity

Low level call in AddressUpgradeable.sendValue(address,uint256) (@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol#54-59):
	- (success,None) = recipient.call{value: amount}() (@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol#57)
Low level call in AddressUpgradeable.functionCallWithValue(address,bytes,uint256,string) (@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol#122-133):
	- (success,returndata) = target.call{value: value}(data) (@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol#131)
Low level call in AddressUpgradeable.functionStaticCall(address,bytes,string) (@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol#151-160):
	- (success,returndata) = target.staticcall(data) (@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol#158)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls

Parameter Buyout.initialize(IERC20Upgradeable,IERC20Upgradeable)._listingToken (contracts/Buyout.sol#52) is not in mixedCase
Parameter Buyout.initialize(IERC20Upgradeable,IERC20Upgradeable)._fundingToken (contracts/Buyout.sol#53) is not in mixedCase
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#conformance-to-solidity-naming-conventions
. analyzed (6 contracts with 100 detectors), 12 result(s) found
Metadata
{
    "solc": {
        "status": "ok",
        "use_rc": 0,
        "version": "0.8.0",
        "strategy": "solc-select",
        "solc_path": "/var/www/tripwire/.venv/bin/solc",
        "install_rc": 0,
        "use_stderr": null,
        "use_stdout": "Switched global version to 0.8.0",
        "install_stderr": null,
        "install_stdout": "Version '0.8.0' is already installed, skipping..."
    },
    "solc_args": "--base-path /tmp/slither-x7whbd40 --include-path /tmp/slither-x7whbd40/lib --include-path /tmp/slither-x7whbd40/lib/openzeppelin-contracts --allow-paths /tmp/slither-x7whbd40,/tmp/slither-x7whbd40/lib,/tmp/slither-x7whbd40/lib/openzeppelin-contracts,/tmp/slither-x7whbd40/src",
    "remappings": [
        "openzeppelin-contracts/=lib/openzeppelin-contracts/"
    ],
    "source_files": [
        "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
        "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol",
        "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol",
        "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol",
        "contracts/Buyout.sol",
        "contracts/interfaces/IBuyout.sol"
    ],
    "contract_count": 0,
    "contract_names": [],
    "detector_count": 12,
    "workspace_hash": "439b9c643026214c3afa0c4b6ba78ce79ad3f3257fd6496d830308f151cd9334",
    "duration_seconds": 0.6055448055267334,
    "solc_version_requested": "0.8.4"
}

Codex

report.consolidate
Job Status
complete
Attempts
1 / 6
Findings
2
No findings?
no
Summary
Two issues found: buyout success never delivers listing tokens to the offerer (tokens remain stuck in the contract), and the upgradeable initializer is publicly callable without access control, enabling front‑running on uninitialized deployments.
View stdout
{"no_findings":false,"summary":"Two issues found: buyout success never delivers listing tokens to the offerer (tokens remain stuck in the contract), and the upgradeable initializer is publicly callable without access control, enabling front‑running on uninitialized deployments.","findings":[{"severity":"high","category":"other","title":"Buyout success never transfers listing tokens to offerer (tokens locked permanently)","exploit_scenario":"After a successful buyout, holders call `surrenderTokens` and receive funding tokens. Their listing tokens (and the offerer’s original deposit) are transferred into the Buyout contract, but there is no path for the offerer to claim them. The offerer pays out funding tokens yet never receives ownership of the listing tokens, leaving all listing tokens stuck in the contract and defeating the buyout’s purpose.","recommendation":"Add a `claimListingTokens()` function for the offerer in `Status.SUCCESS` that transfers all listing tokens held by the contract to the offerer, or automatically transfer the listing tokens to the offerer during `surrenderTokens`. Consider burning tokens if the intended end‑state is removal from circulation.","evidence":"`offer()` and `surrenderTokens()` both transfer listing tokens into the contract, while the only listing-token withdrawal path is `withdrawTokens()` which is restricted to `Status.COUNTERED`. There is no function to release listing tokens to the offerer on `Status.SUCCESS`.","locations":["contracts/Buyout.sol:71","contracts/Buyout.sol:98","contracts/Buyout.sol:122","contracts/Buyout.sol:165","contracts/Buyout.sol:172"]},{"severity":"medium","category":"upgradeability","title":"Public initializer can be front‑run on uninitialized deployments","exploit_scenario":"If a proxy or clone is deployed without an atomic initialization, any external account can call `initialize()` first and set `listingToken`/`fundingToken` to attacker‑chosen addresses. This can brick the instance for intended users or cause users to interact with malicious tokens.","recommendation":"Ensure initialization happens atomically at deployment (e.g., via factory) and restrict `initialize()` to a trusted deployer/factory. Also consider disabling initializers in the implementation constructor to prevent accidental misuse.","evidence":"`initialize()` is `public` and lacks access control; it can be called by anyone before the first initialization.","locations":["contracts/Buyout.sol:51","contracts/Buyout.sol:54"]}]}
View stderr
OpenAI Codex v0.77.0 (research preview)
--------
workdir: /tmp/codex-4y0olrb9
model: gpt-5.2-codex
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: auto
session id: 019bb044-4e59-7222-8b1c-9066fddc815f
--------
user
You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.

Scope rules:
- You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party Solidity sources in this workspace.
- Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
- If there are only dependency files and no first-party sources, set no_findings=true and explain in summary.

Output MUST be valid JSON matching the provided schema.
- If you find nothing meaningful: set no_findings=true and findings=[].
- Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.

Output constraints (IMPORTANT):
- severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
- category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
Keep summary short and concrete.
mcp startup: no servers

thinking
**Reading AUDIT_BUNDLE file**
exec
/bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-4y0olrb9 succeeded in 8ms:
This file concatenates the full contents of first-party Solidity sources for auditing.
Do not treat dependency code under lib/ or @openzeppelin/ as first-party.

================================================================================
FILE: contracts/Buyout.sol
================================================================================
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol";
import "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol";

import "./interfaces/IBuyout.sol";

/// Buyout is a shotgun clause / buy-sell agreement to allow holders to acquire
/// all other outstanding tokens.
///
/// @dev totalSupply() is currently frozen at start of offer
contract Buyout is IBuyout, Initializable {



thinking
**Analyzing buyout contract for vulnerabilities**

I’m carefully auditing the buyout contract’s logic, focusing on reentrancy, arithmetic issues, access control, and token interactions. There’s no reentrancy guard, but state updates happen before token transfers, which helps. However, malicious ERC20 tokens could exploit external calls, especially in surrenderTokens. The initialize function lacks access control, which could allow initialization attacks if misused. Some edge cases around division by zero, rounding in counters, and locked listing tokens appear more like design quirks than security flaws but warrant caution. Fee-on-transfer tokens might cause accounting mismatches. Overall, I’m scrutinizing the contract’s assumptions about token behavior and initialization safety to flag risks.
thinking
**Evaluating upgradeability and token supply assumptions**

I’m reviewing upgradeability risks related to uninitialized proxies and how mintable listing tokens can affect payout fairness. The possibility of minting new tokens after offer increases could allow more tokens to be surrendered for funding, potentially exceeding intended allocations. I’m also noting how leftover listing tokens and stuck states from rounding or unclaimed withdrawals might cause economic issues but not direct vulnerabilities. The interplay of token supply changes and contract logic deserves close attention to ensure expected behavior.
thinking
**Identifying critical token handling issues**

I’m uncovering a major functional flaw where surrendered listing tokens accumulate in the contract without any method for the offerer to claim or burn them after a successful buyout, effectively locking tokens forever. This breaks the core buyout logic since the offerer never receives ownership despite funding payouts. Additionally, leftover or unclaimed tokens by counterOfferers in other states contribute to stuck assets. These token-accounting gaps are significant and could lead to serious user losses or failed buyouts.
exec
/bin/bash -lc 'nl -ba contracts/Buyout.sol' in /tmp/codex-4y0olrb9 succeeded in 6ms:
     1	// SPDX-License-Identifier: UNLICENSED
     2	pragma solidity ^0.8.0;
     3	
     4	import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
     5	import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol";
     6	import "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol";
     7	
     8	import "./interfaces/IBuyout.sol";
     9	
    10	/// Buyout is a shotgun clause / buy-sell agreement to allow holders to acquire
    11	/// all other outstanding tokens.
    12	///
    13	/// @dev totalSupply() is currently frozen at start of offer
    14	contract Buyout is IBuyout, Initializable {
    15	    using SafeERC20Upgradeable for IERC20Upgradeable;
    16	
    17	    event CounterOffer(address indexed wallet, uint256 amount);
    18	    event Surrender(uint256 tokens, uint256 funds);
    19	
    20	    address public override offerer; // Wallet proposing to buy out

thinking
**Composing detailed vulnerability findings**

I'm carefully drafting two JSON-formatted findings: one high-severity design bug locking offerer tokens in the contract after SUCCESS without a withdrawal path, supported by specific line evidence; and one medium-severity upgradeability issue due to an unprotected initializer allowing attacker token configuration if proxy initialization is missed. I'll include exploit scenarios, recommendations, line locations, and a concise summary for clarity.
codex
{"no_findings":false,"summary":"Two issues found: buyout success never delivers listing tokens to the offerer (tokens remain stuck in the contract), and the upgradeable initializer is publicly callable without access control, enabling front‑running on uninitialized deployments.","findings":[{"severity":"high","category":"other","title":"Buyout success never transfers listing tokens to offerer (tokens locked permanently)","exploit_scenario":"After a successful buyout, holders call `surrenderTokens` and receive funding tokens. Their listing tokens (and the offerer’s original deposit) are transferred into the Buyout contract, but there is no path for the offerer to claim them. The offerer pays out funding tokens yet never receives ownership of the listing tokens, leaving all listing tokens stuck in the contract and defeating the buyout’s purpose.","recommendation":"Add a `claimListingTokens()` function for the offerer in `Status.SUCCESS` that transfers all listing tokens held by the contract to the offerer, or automatically transfer the listing tokens to the offerer during `surrenderTokens`. Consider burning tokens if the intended end‑state is removal from circulation.","evidence":"`offer()` and `surrenderTokens()` both transfer listing tokens into the contract, while the only listing-token withdrawal path is `withdrawTokens()` which is restricted to `Status.COUNTERED`. There is no function to release listing tokens to the offerer on `Status.SUCCESS`.","locations":["contracts/Buyout.sol:71","contracts/Buyout.sol:98","contracts/Buyout.sol:122","contracts/Buyout.sol:165","contracts/Buyout.sol:172"]},{"severity":"medium","category":"upgradeability","title":"Public initializer can be front‑run on uninitialized deployments","exploit_scenario":"If a proxy or clone is deployed without an atomic initialization, any external account can call `initialize()` first and set `listingToken`/`fundingToken` to attacker‑chosen addresses. This can brick the instance for intended users or cause users to interact with malicious tokens.","recommendation":"Ensure initialization happens atomically at deployment (e.g., via factory) and restrict `initialize()` to a trusted deployer/factory. Also consider disabling initializers in the implementation constructor to prevent accidental misuse.","evidence":"`initialize()` is `public` and lacks access control; it can be called by anyone before the first initialization.","locations":["contracts/Buyout.sol:51","contracts/Buyout.sol:54"]}]}
tokens used
36,383
Metadata
{
    "codex": {
        "ran_at": "2026-01-12T03:37:33.982598+00:00",
        "returncode": 0
    },
    "project": {
        "mode": "source",
        "file_count": 6,
        "import_count": 6,
        "first_party_contracts_count": 2
    },
    "summary": "Two issues found: buyout success never delivers listing tokens to the offerer (tokens remain stuck in the contract), and the upgradeable initializer is publicly callable without access control, enabling front\u2011running on uninitialized deployments.",
    "raw_final": {
        "summary": "Two issues found: buyout success never delivers listing tokens to the offerer (tokens remain stuck in the contract), and the upgradeable initializer is publicly callable without access control, enabling front\u2011running on uninitialized deployments.",
        "findings": [
            {
                "title": "Buyout success never transfers listing tokens to offerer (tokens locked permanently)",
                "category": "other",
                "evidence": "`offer()` and `surrenderTokens()` both transfer listing tokens into the contract, while the only listing-token withdrawal path is `withdrawTokens()` which is restricted to `Status.COUNTERED`. There is no function to release listing tokens to the offerer on `Status.SUCCESS`.",
                "severity": "high",
                "locations": [
                    "contracts/Buyout.sol:71",
                    "contracts/Buyout.sol:98",
                    "contracts/Buyout.sol:122",
                    "contracts/Buyout.sol:165",
                    "contracts/Buyout.sol:172"
                ],
                "recommendation": "Add a `claimListingTokens()` function for the offerer in `Status.SUCCESS` that transfers all listing tokens held by the contract to the offerer, or automatically transfer the listing tokens to the offerer during `surrenderTokens`. Consider burning tokens if the intended end\u2011state is removal from circulation.",
                "exploit_scenario": "After a successful buyout, holders call `surrenderTokens` and receive funding tokens. Their listing tokens (and the offerer\u2019s original deposit) are transferred into the Buyout contract, but there is no path for the offerer to claim them. The offerer pays out funding tokens yet never receives ownership of the listing tokens, leaving all listing tokens stuck in the contract and defeating the buyout\u2019s purpose."
            },
            {
                "title": "Public initializer can be front\u2011run on uninitialized deployments",
                "category": "upgradeability",
                "evidence": "`initialize()` is `public` and lacks access control; it can be called by anyone before the first initialization.",
                "severity": "medium",
                "locations": [
                    "contracts/Buyout.sol:51",
                    "contracts/Buyout.sol:54"
                ],
                "recommendation": "Ensure initialization happens atomically at deployment (e.g., via factory) and restrict `initialize()` to a trusted deployer/factory. Also consider disabling initializers in the implementation constructor to prevent accidental misuse.",
                "exploit_scenario": "If a proxy or clone is deployed without an atomic initialization, any external account can call `initialize()` first and set `listingToken`/`fundingToken` to attacker\u2011chosen addresses. This can brick the instance for intended users or cause users to interact with malicious tokens."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
2
EXT*/BALANCE
3
Total opcodes
2416
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 0x00db
00000019: JUMPI
0000001a: PUSH1 0x00
0000001c: CALLDATALOAD
0000001d: PUSH1 0xe0
0000001f: SHR
00000020: DUP1
00000021: PUSH4 0x200d2ed2
00000026: EQ
00000027: PUSH2 0x00e0
0000002a: JUMPI
0000002b: DUP1
0000002c: PUSH4 0x24600fc3
00000031: EQ
00000032: PUSH2 0x00fe
00000035: JUMPI
00000036: DUP1
00000037: PUSH4 0x485cc955
0000003c: EQ
0000003d: PUSH2 0x0108
00000040: JUMPI
00000041: DUP1
00000042: PUSH4 0x78065f27
00000047: EQ
00000048: PUSH2 0x011b
0000004b: JUMPI
0000004c: DUP1
0000004d: PUSH4 0x89a4157e
00000052: EQ
00000053: PUSH2 0x0146
00000056: JUMPI
00000057: DUP1
00000058: PUSH4 0x8d8f2adb
0000005d: EQ
0000005e: PUSH2 0x014e
00000061: JUMPI
00000062: DUP1
00000063: PUSH4 0x965fbde5
00000068: EQ
00000069: PUSH2 0x0156
0000006c: JUMPI
0000006d: DUP1
0000006e: PUSH4 0xa1920586
00000073: EQ
00000074: PUSH2 0x016d
00000077: JUMPI
00000078: DUP1
00000079: PUSH4 0xaa1a3c5c
0000007e: EQ
0000007f: PUSH2 0x0180
00000082: JUMPI
00000083: DUP1
00000084: PUSH4 0xc782ff1f
00000089: EQ
0000008a: PUSH2 0x0189
0000008d: JUMPI
0000008e: DUP1
0000008f: PUSH4 0xc7d4da0c
00000094: EQ
00000095: PUSH2 0x01a2
00000098: JUMPI
00000099: DUP1
0000009a: PUSH4 0xcdaf64f4
0000009f: EQ
000000a0: PUSH2 0x01ab
000000a3: JUMPI
000000a4: DUP1
000000a5: PUSH4 0xd6f3800d
000000aa: EQ
000000ab: PUSH2 0x01be
000000ae: JUMPI
000000af: DUP1
000000b0: PUSH4 0xe18bb5dd
000000b5: EQ
000000b6: PUSH2 0x01c6
000000b9: JUMPI
000000ba: DUP1
000000bb: PUSH4 0xe47e5527
000000c0: EQ
000000c1: PUSH2 0x01d0
000000c4: JUMPI
000000c5: DUP1
000000c6: PUSH4 0xe53546b4
000000cb: EQ
000000cc: PUSH2 0x01e3
000000cf: JUMPI
000000d0: DUP1
000000d1: PUSH4 0xefbe1c1c
000000d6: EQ
000000d7: PUSH2 0x01f6
000000da: JUMPI
000000db: JUMPDEST
000000dc: PUSH1 0x00
000000de: DUP1
000000df: REVERT
000000e0: JUMPDEST
000000e1: PUSH2 0x00e8
000000e4: PUSH2 0x01ff
000000e7: JUMP
000000e8: JUMPDEST
000000e9: PUSH1 0x40
000000eb: MLOAD
000000ec: PUSH2 0x00f5
000000ef: SWAP2
000000f0: SWAP1
000000f1: PUSH2 0x0e3d
000000f4: JUMP
000000f5: JUMPDEST
000000f6: PUSH1 0x40
000000f8: MLOAD
000000f9: DUP1
000000fa: SWAP2
000000fb: SUB
000000fc: SWAP1
000000fd: RETURN
000000fe: JUMPDEST
000000ff: PUSH2 0x0106
00000102: PUSH2 0x0243
00000105: JUMP
00000106: JUMPDEST
00000107: STOP
00000108: JUMPDEST
00000109: PUSH2 0x0106
0000010c: PUSH2 0x0116
0000010f: CALLDATASIZE
00000110: PUSH1 0x04
00000112: PUSH2 0x0d9e
00000115: JUMP
00000116: JUMPDEST
00000117: PUSH2 0x037d
0000011a: JUMP
0000011b: JUMPDEST
0000011c: PUSH1 0x02
0000011e: SLOAD
0000011f: PUSH2 0x012e
00000122: SWAP1
00000123: PUSH1 0x01
00000125: PUSH1 0x01
00000127: PUSH1 0xa0
00000129: SHL
0000012a: SUB
0000012b: AND
0000012c: DUP2
0000012d: JUMP
0000012e: JUMPDEST
0000012f: PUSH1 0x40
00000131: MLOAD
00000132: PUSH1 0x01
00000134: PUSH1 0x01
00000136: PUSH1 0xa0
00000138: SHL
00000139: SUB
0000013a: SWAP1
0000013b: SWAP2
0000013c: AND
0000013d: DUP2
0000013e: MSTORE
0000013f: PUSH1 0x20
00000141: ADD
00000142: PUSH2 0x00f5
00000145: JUMP
00000146: JUMPDEST
00000147: PUSH2 0x0106
0000014a: PUSH2 0x0462
0000014d: JUMP
0000014e: JUMPDEST
0000014f: PUSH2 0x0106
00000152: PUSH2 0x0532
00000155: JUMP
00000156: JUMPDEST
00000157: PUSH2 0x015f
0000015a: PUSH1 0x08
0000015c: SLOAD
0000015d: DUP2
0000015e: JUMP
0000015f: JUMPDEST
00000160: PUSH1 0x40
00000162: MLOAD
00000163: SWAP1
00000164: DUP2
00000165: MSTORE
00000166: PUSH1 0x20
00000168: ADD
00000169: PUSH2 0x00f5
0000016c: JUMP
0000016d: JUMPDEST
0000016e: PUSH2 0x0106
00000171: PUSH2 0x017b
00000174: CALLDATASIZE
00000175: PUSH1 0x04
00000177: PUSH2 0x0e00
0000017a: JUMP
0000017b: JUMPDEST
0000017c: PUSH2 0x062b
0000017f: JUMP
00000180: JUMPDEST
00000181: PUSH2 0x015f
00000184: PUSH1 0x07
00000186: SLOAD
00000187: DUP2
00000188: JUMP
00000189: JUMPDEST
0000018a: PUSH1 0x00
0000018c: SLOAD
0000018d: PUSH2 0x012e
00000190: SWAP1
00000191: PUSH3 0x010000
00000195: SWAP1
00000196: DIV
00000197: PUSH1 0x01
00000199: PUSH1 0x01
0000019b: PUSH1 0xa0
0000019d: SHL
0000019e: SUB
0000019f: AND
000001a0: DUP2
000001a1: JUMP
000001a2: JUMPDEST
000001a3: PUSH2 0x015f
000001a6: PUSH2 0x0bb8
000001a9: DUP2
000001aa: JUMP
000001ab: JUMPDEST
000001ac: PUSH1 0x01
000001ae: SLOAD
000001af: PUSH2 0x012e
000001b2: SWAP1
000001b3: PUSH1 0x01
000001b5: PUSH1 0x01
000001b7: PUSH1 0xa0
000001b9: SHL
000001ba: SUB
000001bb: AND
000001bc: DUP2
000001bd: JUMP
000001be: JUMPDEST
000001bf: PUSH2 0x015f
000001c2: PUSH1 0x64
000001c4: DUP2
000001c5: JUMP
000001c6: JUMPDEST
000001c7: PUSH2 0x015f
000001ca: PUSH3 0x24ea00
000001ce: DUP2
000001cf: JUMP
000001d0: JUMPDEST
000001d1: PUSH2 0x0106
000001d4: PUSH2 0x01de
000001d7: CALLDATASIZE
000001d8: PUSH1 0x04
000001da: PUSH2 0x0dd0
000001dd: JUMP
000001de: JUMPDEST
000001df: PUSH2 0x0829
000001e2: JUMP
000001e3: JUMPDEST
000001e4: PUSH2 0x0106
000001e7: PUSH2 0x01f1
000001ea: CALLDATASIZE
000001eb: PUSH1 0x04
000001ed: PUSH2 0x0dd0
000001f0: JUMP
000001f1: JUMPDEST
000001f2: PUSH2 0x0964
000001f5: JUMP
000001f6: JUMPDEST
000001f7: PUSH2 0x015f
000001fa: PUSH1 0x06
000001fc: SLOAD
000001fd: DUP2
000001fe: JUMP
000001ff: JUMPDEST
00000200: PUSH1 0x00
00000202: DUP1
00000203: SLOAD
00000204: PUSH3 0x010000
00000208: SWAP1
00000209: DIV
0000020a: PUSH1 0x01
0000020c: PUSH1 0x01
0000020e: PUSH1 0xa0
00000210: SHL
00000211: SUB
00000212: AND
00000213: PUSH2 0x021c
00000216: JUMPI
00000217: POP
00000218: PUSH1 0x00
0000021a: SWAP1
0000021b: JUMP
0000021c: JUMPDEST
0000021d: PUSH1 0x07
0000021f: SLOAD
00000220: PUSH1 0x08
00000222: SLOAD
00000223: LT
00000224: PUSH2 0x022d
00000227: JUMPI
00000228: POP
00000229: PUSH1 0x02
0000022b: SWAP1
0000022c: JUMP
0000022d: JUMPDEST
0000022e: PUSH1 0x06
00000230: SLOAD
00000231: TIMESTAMP
00000232: LT
00000233: ISZERO
00000234: PUSH2 0x023d
00000237: JUMPI
00000238: POP
00000239: PUSH1 0x01
0000023b: SWAP1
0000023c: JUMP
0000023d: JUMPDEST
0000023e: POP
0000023f: PUSH1 0x03
00000241: SWAP1
00000242: JUMP
00000243: JUMPDEST
00000244: PUSH1 0x02
00000246: DUP1
00000247: PUSH2 0x024e
0000024a: PUSH2 0x01ff
0000024d: JUMP
0000024e: JUMPDEST
0000024f: PUSH1 0x03
00000251: DUP2
00000252: GT
00000253: ISZERO
00000254: PUSH2 0x026d
00000257: JUMPI
00000258: PUSH4 0x4e487b71
0000025d: PUSH1 0xe0
0000025f: SHL
00000260: PUSH1 0x00
00000262: MSTORE
00000263: PUSH1 0x21
00000265: PUSH1 0x04
00000267: MSTORE
00000268: PUSH1 0x24
0000026a: PUSH1 0x00
0000026c: REVERT
0000026d: JUMPDEST
0000026e: EQ
0000026f: PUSH2 0x0293
00000272: JUMPI
00000273: PUSH1 0x40
00000275: MLOAD
00000276: PUSH3 0x461bcd
0000027a: PUSH1 0xe5
0000027c: SHL
0000027d: DUP2
0000027e: MSTORE
0000027f: PUSH1 0x04
00000281: ADD
00000282: PUSH2 0x028a
00000285: SWAP1
00000286: PUSH2 0x0e98
00000289: JUMP
0000028a: JUMPDEST
0000028b: PUSH1 0x40
0000028d: MLOAD
0000028e: DUP1
0000028f: SWAP2
00000290: SUB
00000291: SWAP1
00000292: REVERT
00000293: JUMPDEST
00000294: PUSH1 0x00
00000296: SLOAD
00000297: PUSH3 0x010000
0000029b: SWAP1
0000029c: DIV
0000029d: PUSH1 0x01
0000029f: PUSH1 0x01
000002a1: PUSH1 0xa0
000002a3: SHL
000002a4: SUB
000002a5: AND
000002a6: CALLER
000002a7: EQ
000002a8: PUSH2 0x02e2
000002ab: JUMPI
000002ac: PUSH1 0x40
000002ae: MLOAD
000002af: PUSH3 0x461bcd
000002b3: PUSH1 0xe5
000002b5: SHL
000002b6: DUP2
000002b7: MSTORE
000002b8: PUSH1 0x20
000002ba: PUSH1 0x04
000002bc: DUP3
000002bd: ADD
000002be: MSTORE
000002bf: PUSH1 0x0c
000002c1: PUSH1 0x24
000002c3: DUP3
000002c4: ADD
000002c5: MSTORE
000002c6: PUSH12 0x4f4646455245525f4f4e4c59
000002d3: PUSH1 0xa0
000002d5: SHL
000002d6: PUSH1 0x44
000002d8: DUP3
000002d9: ADD
000002da: MSTORE
000002db: PUSH1 0x64
000002dd: ADD
000002de: PUSH2 0x028a
000002e1: JUMP
000002e2: JUMPDEST
000002e3: PUSH1 0x00
000002e5: SLOAD
000002e6: PUSH1 0x01
000002e8: PUSH1 0xb0
000002ea: SHL
000002eb: SWAP1
000002ec: DIV
000002ed: PUSH1 0xff
000002ef: AND
000002f0: ISZERO
000002f1: PUSH2 0x0330
000002f4: JUMPI
000002f5: PUSH1 0x40
000002f7: MLOAD
000002f8: PUSH3 0x461bcd
000002fc: PUSH1 0xe5
000002fe: SHL
000002ff: DUP2
00000300: MSTORE
00000301: PUSH1 0x20
00000303: PUSH1 0x04
00000305: DUP3
00000306: ADD
00000307: MSTORE
00000308: PUSH1 0x11
0000030a: PUSH1 0x24
0000030c: DUP3
0000030d: ADD
0000030e: MSTORE
0000030f: PUSH17 0x20a62922a0a22cafaba4aa24222920aba7
00000321: PUSH1 0x79
00000323: SHL
00000324: PUSH1 0x44
00000326: DUP3
00000327: ADD
00000328: MSTORE
00000329: PUSH1 0x64
0000032b: ADD
0000032c: PUSH2 0x028a
0000032f: JUMP
00000330: JUMPDEST
00000331: PUSH1 0x00
00000333: DUP1
00000334: SLOAD
00000335: PUSH1 0xff
00000337: PUSH1 0xb0
00000339: SHL
0000033a: NOT
0000033b: AND
0000033c: PUSH1 0x01
0000033e: PUSH1 0xb0
00000340: SHL
00000341: OR
00000342: DUP2
00000343: SSTORE
00000344: PUSH1 0x08
00000346: SLOAD
00000347: PUSH1 0x04
00000349: SLOAD
0000034a: PUSH2 0x0353
0000034d: SWAP2
0000034e: SWAP1
0000034f: PUSH2 0x0ebc
00000352: JUMP
00000353: JUMPDEST
00000354: PUSH1 0x00
00000356: SLOAD
00000357: PUSH1 0x02
00000359: SLOAD
0000035a: SWAP2
0000035b: SWAP3
0000035c: POP
0000035d: PUSH2 0x0379
00000360: SWAP2
00000361: PUSH1 0x01
00000363: PUSH1 0x01
00000365: PUSH1 0xa0
00000367: SHL
00000368: SUB
00000369: SWAP1
0000036a: DUP2
0000036b: AND
0000036c: SWAP2
0000036d: PUSH3 0x010000
00000371: SWAP1
00000372: DIV
00000373: AND
00000374: DUP4
00000375: PUSH2 0x0a75
00000378: JUMP
00000379: JUMPDEST
0000037a: POP
0000037b: POP
0000037c: JUMP
0000037d: JUMPDEST
0000037e: PUSH1 0x00
00000380: SLOAD
00000381: PUSH2 0x0100
00000384: SWAP1
00000385: DIV
00000386: PUSH1 0xff
00000388: AND
00000389: DUP1
0000038a: PUSH2 0x0396
0000038d: JUMPI
0000038e: POP
0000038f: PUSH1 0x00
00000391: SLOAD
00000392: PUSH1 0xff
00000394: AND
00000395: ISZERO
00000396: JUMPDEST
00000397: PUSH2 0x03f9
0000039a: JUMPI
0000039b: PUSH1 0x40
0000039d: MLOAD
0000039e: PUSH3 0x461bcd
000003a2: PUSH1 0xe5
000003a4: SHL
000003a5: DUP2
000003a6: MSTORE
000003a7: PUSH1 0x20
000003a9: PUSH1 0x04
000003ab: DUP3
000003ac: ADD
000003ad: MSTORE
000003ae: PUSH1 0x2e
000003b0: PUSH1 0x24
000003b2: DUP3
000003b3: ADD
000003b4: MSTORE
000003b5: PUSH32 0x496e697469616c697a61626c653a20636f6e747261637420697320616c726561
000003d6: PUSH1 0x44
000003d8: DUP3
000003d9: ADD
000003da: MSTORE
000003db: PUSH14 0x191e481a5b9a5d1a585b1a5e9959
000003ea: PUSH1 0x92
000003ec: SHL
000003ed: PUSH1 0x64
000003ef: DUP3
000003f0: ADD
000003f1: MSTORE
000003f2: PUSH1 0x84
000003f4: ADD
000003f5: PUSH2 0x028a
000003f8: JUMP
000003f9: JUMPDEST
000003fa: PUSH1 0x00
000003fc: SLOAD
000003fd: PUSH2 0x0100
00000400: SWAP1
00000401: DIV
00000402: PUSH1 0xff
00000404: AND
00000405: ISZERO
00000406: DUP1
00000407: ISZERO
00000408: PUSH2 0x041b
0000040b: JUMPI
0000040c: PUSH1 0x00
0000040e: DUP1
0000040f: SLOAD
00000410: PUSH2 0xffff
00000413: NOT
00000414: AND
00000415: PUSH2 0x0101
00000418: OR
00000419: SWAP1
0000041a: SSTORE
0000041b: JUMPDEST
0000041c: PUSH1 0x01
0000041e: DUP1
0000041f: SLOAD
00000420: PUSH1 0x01
00000422: PUSH1 0x01
00000424: PUSH1 0xa0
00000426: SHL
00000427: SUB
00000428: DUP1
00000429: DUP7
0000042a: AND
0000042b: PUSH1 0x01
0000042d: PUSH1 0x01
0000042f: PUSH1 0xa0
00000431: SHL
00000432: SUB
00000433: NOT
00000434: SWAP3
00000435: DUP4
00000436: AND
00000437: OR
00000438: SWAP1
00000439: SWAP3
0000043a: SSTORE
0000043b: PUSH1 0x02
0000043d: DUP1
0000043e: SLOAD
0000043f: SWAP3
00000440: DUP6
00000441: AND
00000442: SWAP3
00000443: SWAP1
00000444: SWAP2
00000445: AND
00000446: SWAP2
00000447: SWAP1
00000448: SWAP2
00000449: OR
0000044a: SWAP1
0000044b: SSTORE
0000044c: DUP1
0000044d: ISZERO
0000044e: PUSH2 0x045d
00000451: JUMPI
00000452: PUSH1 0x00
00000454: DUP1
00000455: SLOAD
00000456: PUSH2 0xff00
00000459: NOT
0000045a: AND
0000045b: SWAP1
0000045c: SSTORE
0000045d: JUMPDEST
0000045e: POP
0000045f: POP
00000460: POP
00000461: JUMP
00000462: JUMPDEST
00000463: PUSH1 0x03
00000465: DUP1
00000466: PUSH2 0x046d
00000469: PUSH2 0x01ff
0000046c: JUMP
0000046d: JUMPDEST
0000046e: PUSH1 0x03
00000470: DUP2
00000471: GT
00000472: ISZERO
00000473: PUSH2 0x048c
00000476: JUMPI
00000477: PUSH4 0x4e487b71
0000047c: PUSH1 0xe0
0000047e: SHL
0000047f: PUSH1 0x00
00000481: MSTORE
00000482: PUSH1 0x21
00000484: PUSH1 0x04
00000486: MSTORE
00000487: PUSH1 0x24
00000489: PUSH1 0x00
0000048b: REVERT
0000048c: JUMPDEST
0000048d: EQ
0000048e: PUSH2 0x04a9
00000491: JUMPI
00000492: PUSH1 0x40
00000494: MLOAD
00000495: PUSH3 0x461bcd
00000499: PUSH1 0xe5
0000049b: SHL
0000049c: DUP2
0000049d: MSTORE
0000049e: PUSH1 0x04
000004a0: ADD
000004a1: PUSH2 0x028a
000004a4: SWAP1
000004a5: PUSH2 0x0e98
000004a8: JUMP
000004a9: JUMPDEST
000004aa: CALLER
000004ab: PUSH1 0x00
000004ad: SWAP1
000004ae: DUP2
000004af: MSTORE
000004b0: PUSH1 0x09
000004b2: PUSH1 0x20
000004b4: MSTORE
000004b5: PUSH1 0x40
000004b7: SWAP1
000004b8: KECCAK256
000004b9: SLOAD
000004ba: PUSH2 0x0505
000004bd: JUMPI
000004be: PUSH1 0x40
000004c0: MLOAD
000004c1: PUSH3 0x461bcd
000004c5: PUSH1 0xe5
000004c7: SHL
000004c8: DUP2
000004c9: MSTORE
000004ca: PUSH1 0x20
000004cc: PUSH1 0x04
000004ce: DUP3
000004cf: ADD
000004d0: MSTORE
000004d1: PUSH1 0x1e
000004d3: PUSH1 0x24
000004d5: DUP3
000004d6: ADD
000004d7: MSTORE
000004d8: PUSH32 0x4e4f545f434f554e5445524f4646455245525f4f525f524546554e4445440000
000004f9: PUSH1 0x44
000004fb: DUP3
000004fc: ADD
000004fd: MSTORE
000004fe: PUSH1 0x64
00000500: ADD
00000501: PUSH2 0x028a
00000504: JUMP
00000505: JUMPDEST
00000506: CALLER
00000507: PUSH1 0x00
00000509: DUP2
0000050a: DUP2
0000050b: MSTORE
0000050c: PUSH1 0x09
0000050e: PUSH1 0x20
00000510: MSTORE
00000511: PUSH1 0x40
00000513: DUP2
00000514: KECCAK256
00000515: DUP1
00000516: SLOAD
00000517: SWAP2
00000518: SWAP1
00000519: SSTORE
0000051a: PUSH1 0x02
0000051c: SLOAD
0000051d: SWAP1
0000051e: SWAP2
0000051f: PUSH2 0x0379
00000522: SWAP2
00000523: PUSH1 0x01
00000525: PUSH1 0x01
00000527: PUSH1 0xa0
00000529: SHL
0000052a: SUB
0000052b: AND
0000052c: SWAP1
0000052d: DUP4
0000052e: PUSH2 0x0a75
00000531: JUMP
00000532: JUMPDEST
00000533: PUSH1 0x02
00000535: DUP1
00000536: PUSH2 0x053d
00000539: PUSH2 0x01ff
0000053c: JUMP
0000053d: JUMPDEST
0000053e: PUSH1 0x03
00000540: DUP2
00000541: GT
00000542: ISZERO
00000543: PUSH2 0x055c
00000546: JUMPI
00000547: PUSH4 0x4e487b71
0000054c: PUSH1 0xe0
0000054e: SHL
0000054f: PUSH1 0x00
00000551: MSTORE
00000552: PUSH1 0x21
00000554: PUSH1 0x04
00000556: MSTORE
00000557: PUSH1 0x24
00000559: PUSH1 0x00
0000055b: REVERT
0000055c: JUMPDEST
0000055d: EQ
0000055e: PUSH2 0x0579
00000561: JUMPI
00000562: PUSH1 0x40
00000564: MLOAD
00000565: PUSH3 0x461bcd
00000569: PUSH1 0xe5
0000056b: SHL
0000056c: DUP2
0000056d: MSTORE
0000056e: PUSH1 0x04
00000570: ADD
00000571: PUSH2 0x028a
00000574: SWAP1
00000575: PUSH2 0x0e98
00000578: JUMP
00000579: JUMPDEST
0000057a: CALLER
0000057b: PUSH1 0x00
0000057d: SWAP1
0000057e: DUP2
0000057f: MSTORE
00000580: PUSH1 0x09
00000582: PUSH1 0x20
00000584: MSTORE
00000585: PUSH1 0x40
00000587: SWAP1
00000588: KECCAK256
00000589: SLOAD
0000058a: PUSH2 0x05d5
0000058d: JUMPI
0000058e: PUSH1 0x40
00000590: MLOAD
00000591: PUSH3 0x461bcd
00000595: PUSH1 0xe5
00000597: SHL
00000598: DUP2
00000599: MSTORE
0000059a: PUSH1 0x20
0000059c: PUSH1 0x04
0000059e: DUP3
0000059f: ADD
000005a0: MSTORE
000005a1: PUSH1 0x1f
000005a3: PUSH1 0x24
000005a5: DUP3
000005a6: ADD
000005a7: MSTORE
000005a8: PUSH32 0x4e4f545f434f554e5445524f4646455245525f4f525f57495448445241574e00
000005c9: PUSH1 0x44
000005cb: DUP3
000005cc: ADD
000005cd: MSTORE
000005ce: PUSH1 0x64
000005d0: ADD
000005d1: PUSH2 0x028a
000005d4: JUMP
000005d5: JUMPDEST
000005d6: PUSH1 0x08
000005d8: SLOAD
000005d9: PUSH1 0x03
000005db: SLOAD
000005dc: CALLER
000005dd: PUSH1 0x00
000005df: SWAP1
000005e0: DUP2
000005e1: MSTORE
000005e2: PUSH1 0x09
000005e4: PUSH1 0x20
000005e6: MSTORE
000005e7: PUSH1 0x40
000005e9: DUP2
000005ea: KECCAK256
000005eb: SLOAD
000005ec: SWAP1
000005ed: SWAP3
000005ee: SWAP2
000005ef: PUSH2 0x05f7
000005f2: SWAP2
000005f3: PUSH2 0x0ef4
000005f6: JUMP
000005f7: JUMPDEST
000005f8: PUSH2 0x0601
000005fb: SWAP2
000005fc: SWAP1
000005fd: PUSH2 0x0ed4
00000600: JUMP
00000601: JUMPDEST
00000602: CALLER
00000603: PUSH1 0x00
00000605: DUP2
00000606: DUP2
00000607: MSTORE
00000608: PUSH1 0x09
0000060a: PUSH1 0x20
0000060c: MSTORE
0000060d: PUSH1 0x40
0000060f: DUP2
00000610: KECCAK256
00000611: SSTORE
00000612: PUSH1 0x01
00000614: SLOAD
00000615: SWAP2
00000616: SWAP3
00000617: POP
00000618: PUSH2 0x0379
0000061b: SWAP2
0000061c: PUSH1 0x01
0000061e: PUSH1 0x01
00000620: PUSH1 0xa0
00000622: SHL
00000623: SUB
00000624: AND
00000625: SWAP1
00000626: DUP4
00000627: PUSH2 0x0a75
0000062a: JUMP
0000062b: JUMPDEST
0000062c: PUSH1 0x00
0000062e: DUP1
0000062f: PUSH2 0x0636
00000632: PUSH2 0x01ff
00000635: JUMP
00000636: JUMPDEST
00000637: PUSH1 0x03
00000639: DUP2
0000063a: GT
0000063b: ISZERO
0000063c: PUSH2 0x0655
0000063f: JUMPI
00000640: PUSH4 0x4e487b71
00000645: PUSH1 0xe0
00000647: SHL
00000648: PUSH1 0x00
0000064a: MSTORE
0000064b: PUSH1 0x21
0000064d: PUSH1 0x04
0000064f: MSTORE
00000650: PUSH1 0x24
00000652: PUSH1 0x00
00000654: REVERT
00000655: JUMPDEST
00000656: EQ
00000657: PUSH2 0x0672
0000065a: JUMPI
0000065b: PUSH1 0x40
0000065d: MLOAD
0000065e: PUSH3 0x461bcd
00000662: PUSH1 0xe5
00000664: SHL
00000665: DUP2
00000666: MSTORE
00000667: PUSH1 0x04
00000669: ADD
0000066a: PUSH2 0x028a
0000066d: SWAP1
0000066e: PUSH2 0x0e98
00000671: JUMP
00000672: JUMPDEST
00000673: PUSH1 0x01
00000675: SLOAD
00000676: PUSH1 0x40
00000678: DUP1
00000679: MLOAD
0000067a: PUSH4 0x18160ddd
0000067f: PUSH1 0xe0
00000681: SHL
00000682: DUP2
00000683: MSTORE
00000684: SWAP1
00000685: MLOAD
00000686: PUSH1 0x00
00000688: SWAP3
00000689: PUSH1 0x01
0000068b: PUSH1 0x01
0000068d: PUSH1 0xa0
0000068f: SHL
00000690: SUB
00000691: AND
00000692: SWAP2
00000693: PUSH4 0x18160ddd
00000698: SWAP2
00000699: PUSH1 0x04
0000069b: DUP1
0000069c: DUP4
0000069d: ADD
0000069e: SWAP3
0000069f: PUSH1 0x20
000006a1: SWAP3
000006a2: SWAP2
000006a3: SWAP1
000006a4: DUP3
000006a5: SWAP1
000006a6: SUB
000006a7: ADD
000006a8: DUP2
000006a9: DUP7
000006aa: DUP1
000006ab: EXTCODESIZE
000006ac: ISZERO
000006ad: DUP1
000006ae: ISZERO
000006af: PUSH2 0x06b7
000006b2: JUMPI
000006b3: PUSH1 0x00
000006b5: DUP1
000006b6: REVERT
000006b7: JUMPDEST
000006b8: POP
000006b9: GAS
000006ba: STATICCALL
000006bb: ISZERO
000006bc: DUP1
000006bd: ISZERO
000006be: PUSH2 0x06cb
000006c1: JUMPI
000006c2: RETURNDATASIZE
000006c3: PUSH1 0x00
000006c5: DUP1
000006c6: RETURNDATACOPY
000006c7: RETURNDATASIZE
000006c8: PUSH1 0x00
000006ca: REVERT
000006cb: JUMPDEST
000006cc: POP
000006cd: POP
000006ce: POP
000006cf: POP
000006d0: PUSH1 0x40
000006d2: MLOAD
000006d3: RETURNDATASIZE
000006d4: PUSH1 0x1f
000006d6: NOT
000006d7: PUSH1 0x1f
000006d9: DUP3
000006da: ADD
000006db: AND
000006dc: DUP3
000006dd: ADD
000006de: DUP1
000006df: PUSH1 0x40
000006e1: MSTORE
000006e2: POP
000006e3: DUP2
000006e4: ADD
000006e5: SWAP1
000006e6: PUSH2 0x06ef
000006e9: SWAP2
000006ea: SWAP1
000006eb: PUSH2 0x0de8
000006ee: JUMP
000006ef: JUMPDEST
000006f0: PUSH1 0x00
000006f2: DUP1
000006f3: SLOAD
000006f4: PUSH3 0x010000
000006f8: PUSH1 0x01
000006fa: PUSH1 0xb0
000006fc: SHL
000006fd: SUB
000006fe: NOT
000006ff: AND
00000700: CALLER
00000701: PUSH3 0x010000
00000705: MUL
00000706: OR
00000707: DUP2
00000708: SSTORE
00000709: SWAP1
0000070a: SWAP2
0000070b: POP
0000070c: PUSH2 0x2710
0000070f: PUSH2 0x071a
00000712: DUP4
00000713: PUSH2 0x0bb8
00000716: PUSH2 0x0ef4
00000719: JUMP
0000071a: JUMPDEST
0000071b: PUSH2 0x0724
0000071e: SWAP2
0000071f: SWAP1
00000720: PUSH2 0x0ed4
00000723: JUMP
00000724: JUMPDEST
00000725: SWAP1
00000726: POP
00000727: DUP1
00000728: DUP6
00000729: LT
0000072a: ISZERO
0000072b: PUSH2 0x0768
0000072e: JUMPI
0000072f: PUSH1 0x40
00000731: MLOAD
00000732: PUSH3 0x461bcd
00000736: PUSH1 0xe5
00000738: SHL
00000739: DUP2
0000073a: MSTORE
0000073b: PUSH1 0x20
0000073d: PUSH1 0x04
0000073f: DUP3
00000740: ADD
00000741: MSTORE
00000742: PUSH1 0x0f
00000744: PUSH1 0x24
00000746: DUP3
00000747: ADD
00000748: MSTORE
00000749: PUSH15 0x544f4b454e5f4f464645525f4c4f57
00000759: PUSH1 0x88
0000075b: SHL
0000075c: PUSH1 0x44
0000075e: DUP3
0000075f: ADD
00000760: MSTORE
00000761: PUSH1 0x64
00000763: ADD
00000764: PUSH2 0x028a
00000767: JUMP
00000768: JUMPDEST
00000769: PUSH1 0x64
0000076b: DUP5
0000076c: GT
0000076d: PUSH2 0x07ac
00000770: JUMPI
00000771: PUSH1 0x40
00000773: MLOAD
00000774: PUSH3 0x461bcd
00000778: PUSH1 0xe5
0000077a: SHL
0000077b: DUP2
0000077c: MSTORE
0000077d: PUSH1 0x20
0000077f: PUSH1 0x04
00000781: DUP3
00000782: ADD
00000783: MSTORE
00000784: PUSH1 0x11
00000786: PUSH1 0x24
00000788: DUP3
00000789: ADD
0000078a: MSTORE
0000078b: PUSH17 0x46554e44494e475f4f464645525f4c4f57
0000079d: PUSH1 0x78
0000079f: SHL
000007a0: PUSH1 0x44
000007a2: DUP3
000007a3: ADD
000007a4: MSTORE
000007a5: PUSH1 0x64
000007a7: ADD
000007a8: PUSH2 0x028a
000007ab: JUMP
000007ac: JUMPDEST
000007ad: PUSH1 0x03
000007af: DUP6
000007b0: SWAP1
000007b1: SSTORE
000007b2: PUSH1 0x04
000007b4: DUP5
000007b5: SWAP1
000007b6: SSTORE
000007b7: PUSH2 0x07c0
000007ba: DUP6
000007bb: DUP4
000007bc: PUSH2 0x0f13
000007bf: JUMP
000007c0: JUMPDEST
000007c1: PUSH1 0x05
000007c3: DUP2
000007c4: SWAP1
000007c5: SSTORE
000007c6: PUSH1 0x03
000007c8: SLOAD
000007c9: PUSH1 0x04
000007cb: SLOAD
000007cc: PUSH2 0x07d5
000007cf: SWAP2
000007d0: SWAP1
000007d1: PUSH2 0x0ef4
000007d4: JUMP
000007d5: JUMPDEST
000007d6: PUSH2 0x07df
000007d9: SWAP2
000007da: SWAP1
000007db: PUSH2 0x0ed4
000007de: JUMP
000007df: JUMPDEST
000007e0: PUSH1 0x07
000007e2: SSTORE
000007e3: PUSH2 0x07ef
000007e6: PUSH3 0x24ea00
000007ea: TIMESTAMP
000007eb: PUSH2 0x0ebc
000007ee: JUMP
000007ef: JUMPDEST
000007f0: PUSH1 0x06
000007f2: SSTORE
000007f3: PUSH1 0x01
000007f5: SLOAD
000007f6: PUSH2 0x080a
000007f9: SWAP1
000007fa: PUSH1 0x01
000007fc: PUSH1 0x01
000007fe: PUSH1 0xa0
00000800: SHL
00000801: SUB
00000802: AND
00000803: CALLER
00000804: ADDRESS
00000805: DUP9
00000806: PUSH2 0x0ad8
00000809: JUMP
0000080a: JUMPDEST
0000080b: PUSH1 0x02
0000080d: SLOAD
0000080e: PUSH2 0x0822
00000811: SWAP1
00000812: PUSH1 0x01
00000814: PUSH1 0x01
00000816: PUSH1 0xa0
00000818: SHL
00000819: SUB
0000081a: AND
0000081b: CALLER
0000081c: ADDRESS
0000081d: DUP8
0000081e: PUSH2 0x0ad8
00000821: JUMP
00000822: JUMPDEST
00000823: POP
00000824: POP
00000825: POP
00000826: POP
00000827: POP
00000828: JUMP
00000829: JUMPDEST
0000082a: PUSH1 0x01
0000082c: DUP1
0000082d: PUSH2 0x0834
00000830: PUSH2 0x01ff
00000833: JUMP
00000834: JUMPDEST
00000835: PUSH1 0x03
00000837: DUP2
00000838: GT
00000839: ISZERO
0000083a: PUSH2 0x0853
0000083d: JUMPI
0000083e: PUSH4 0x4e487b71
00000843: PUSH1 0xe0
00000845: SHL
00000846: PUSH1 0x00
00000848: MSTORE
00000849: PUSH1 0x21
0000084b: PUSH1 0x04
0000084d: MSTORE
0000084e: PUSH1 0x24
00000850: PUSH1 0x00
00000852: REVERT
00000853: JUMPDEST
00000854: EQ
00000855: PUSH2 0x0870
00000858: JUMPI
00000859: PUSH1 0x40
0000085b: MLOAD
0000085c: PUSH3 0x461bcd
00000860: PUSH1 0xe5
00000862: SHL
00000863: DUP2
00000864: MSTORE
00000865: PUSH1 0x04
00000867: ADD
00000868: PUSH2 0x028a
0000086b: SWAP1
0000086c: PUSH2 0x0e98
0000086f: JUMP
00000870: JUMPDEST
00000871: PUSH1 0x00
00000873: DUP3
00000874: GT
00000875: PUSH2 0x08b7
00000878: JUMPI
00000879: PUSH1 0x40
0000087b: MLOAD
0000087c: PUSH3 0x461bcd
00000880: PUSH1 0xe5
00000882: SHL
00000883: DUP2
00000884: MSTORE
00000885: PUSH1 0x20
00000887: PUSH1 0x04
00000889: DUP3
0000088a: ADD
0000088b: MSTORE
0000088c: PUSH1 0x14
0000088e: PUSH1 0x24
00000890: DUP3
00000891: ADD
00000892: MSTORE
00000893: PUSH20 0x434f554e5445524f464645525f544f4f5f4c4f57
000008a8: PUSH1 0x60
000008aa: SHL
000008ab: PUSH1 0x44
000008ad: DUP3
000008ae: ADD
000008af: MSTORE
000008b0: PUSH1 0x64
000008b2: ADD
000008b3: PUSH2 0x028a
000008b6: JUMP
000008b7: JUMPDEST
000008b8: PUSH1 0x00
000008ba: PUSH1 0x08
000008bc: SLOAD
000008bd: PUSH1 0x07
000008bf: SLOAD
000008c0: PUSH2 0x08c9
000008c3: SWAP2
000008c4: SWAP1
000008c5: PUSH2 0x0f13
000008c8: JUMP
000008c9: JUMPDEST
000008ca: SWAP1
000008cb: POP
000008cc: DUP1
000008cd: DUP4
000008ce: GT
000008cf: ISZERO
000008d0: PUSH2 0x08d7
000008d3: JUMPI
000008d4: DUP1
000008d5: SWAP3
000008d6: POP
000008d7: JUMPDEST
000008d8: DUP3
000008d9: PUSH1 0x08
000008db: PUSH1 0x00
000008dd: DUP3
000008de: DUP3
000008df: SLOAD
000008e0: PUSH2 0x08e9
000008e3: SWAP2
000008e4: SWAP1
000008e5: PUSH2 0x0ebc
000008e8: JUMP
000008e9: JUMPDEST
000008ea: SWAP1
000008eb: SWAP2
000008ec: SSTORE
000008ed: POP
000008ee: POP
000008ef: CALLER
000008f0: PUSH1 0x00
000008f2: SWAP1
000008f3: DUP2
000008f4: MSTORE
000008f5: PUSH1 0x09
000008f7: PUSH1 0x20
000008f9: MSTORE
000008fa: PUSH1 0x40
000008fc: DUP2
000008fd: KECCAK256
000008fe: DUP1
000008ff: SLOAD
00000900: DUP6
00000901: SWAP3
00000902: SWAP1
00000903: PUSH2 0x090d
00000906: SWAP1
00000907: DUP5
00000908: SWAP1
00000909: PUSH2 0x0ebc
0000090c: JUMP
0000090d: JUMPDEST
0000090e: SWAP1
0000090f: SWAP2
00000910: SSTORE
00000911: POP
00000912: POP
00000913: PUSH1 0x02
00000915: SLOAD
00000916: PUSH2 0x092a
00000919: SWAP1
0000091a: PUSH1 0x01
0000091c: PUSH1 0x01
0000091e: PUSH1 0xa0
00000920: SHL
00000921: SUB
00000922: AND
00000923: CALLER
00000924: ADDRESS
00000925: DUP7
00000926: PUSH2 0x0ad8
00000929: JUMP
0000092a: JUMPDEST
0000092b: PUSH1 0x40
0000092d: MLOAD
0000092e: DUP4
0000092f: DUP2
00000930: MSTORE
00000931: CALLER
00000932: SWAP1
00000933: PUSH32 0xe4a537463f3d8138c281ade192f2f55198939ca995b611b8d9ef6ebe29f36057
00000954: SWAP1
00000955: PUSH1 0x20
00000957: ADD
00000958: PUSH1 0x40
0000095a: MLOAD
0000095b: DUP1
0000095c: SWAP2
0000095d: SUB
0000095e: SWAP1
0000095f: LOG2
00000960: POP
00000961: POP
00000962: POP
00000963: JUMP
00000964: JUMPDEST
00000965: PUSH1 0x03
00000967: DUP1
00000968: PUSH2 0x096f
0000096b: PUSH2 0x01ff
0000096e: JUMP
0000096f: JUMPDEST
00000970: PUSH1 0x03
00000972: DUP2
00000973: GT
00000974: ISZERO
00000975: PUSH2 0x098e
00000978: JUMPI
00000979: PUSH4 0x4e487b71
0000097e: PUSH1 0xe0
00000980: SHL
00000981: PUSH1 0x00
00000983: MSTORE
00000984: PUSH1 0x21
00000986: PUSH1 0x04
00000988: MSTORE
00000989: PUSH1 0x24
0000098b: PUSH1 0x00
0000098d: REVERT
0000098e: JUMPDEST
0000098f: EQ
00000990: PUSH2 0x09ab
00000993: JUMPI
00000994: PUSH1 0x40
00000996: MLOAD
00000997: PUSH3 0x461bcd
0000099b: PUSH1 0xe5
0000099d: SHL
0000099e: DUP2
0000099f: MSTORE
000009a0: PUSH1 0x04
000009a2: ADD
000009a3: PUSH2 0x028a
000009a6: SWAP1
000009a7: PUSH2 0x0e98
000009aa: JUMP
000009ab: JUMPDEST
000009ac: PUSH1 0x00
000009ae: DUP3
000009af: GT
000009b0: PUSH2 0x09e8
000009b3: JUMPI
000009b4: PUSH1 0x40
000009b6: MLOAD
000009b7: PUSH3 0x461bcd
000009bb: PUSH1 0xe5
000009bd: SHL
000009be: DUP2
000009bf: MSTORE
000009c0: PUSH1 0x20
000009c2: PUSH1 0x04
000009c4: DUP3
000009c5: ADD
000009c6: MSTORE
000009c7: PUSH1 0x0a
000009c9: PUSH1 0x24
000009cb: DUP3
000009cc: ADD
000009cd: MSTORE
000009ce: PUSH10 0x544f4b454e535f4c4f57
000009d9: PUSH1 0xb0
000009db: SHL
000009dc: PUSH1 0x44
000009de: DUP3
000009df: ADD
000009e0: MSTORE
000009e1: PUSH1 0x64
000009e3: ADD
000009e4: PUSH2 0x028a
000009e7: JUMP
000009e8: JUMPDEST
000009e9: PUSH1 0x00
000009eb: PUSH1 0x05
000009ed: SLOAD
000009ee: PUSH1 0x04
000009f0: SLOAD
000009f1: DUP5
000009f2: PUSH2 0x09fb
000009f5: SWAP2
000009f6: SWAP1
000009f7: PUSH2 0x0ef4
000009fa: JUMP
000009fb: JUMPDEST
000009fc: PUSH2 0x0a05
000009ff: SWAP2
00000a00: SWAP1
00000a01: PUSH2 0x0ed4
00000a04: JUMP
00000a05: JUMPDEST
00000a06: PUSH1 0x01
00000a08: SLOAD
00000a09: SWAP1
00000a0a: SWAP2
00000a0b: POP
00000a0c: PUSH2 0x0a20
00000a0f: SWAP1
00000a10: PUSH1 0x01
00000a12: PUSH1 0x01
00000a14: PUSH1 0xa0
00000a16: SHL
00000a17: SUB
00000a18: AND
00000a19: CALLER
00000a1a: ADDRESS
00000a1b: DUP7
00000a1c: PUSH2 0x0ad8
00000a1f: JUMP
00000a20: JUMPDEST
00000a21: PUSH1 0x02
00000a23: SLOAD
00000a24: PUSH2 0x0a37
00000a27: SWAP1
00000a28: PUSH1 0x01
00000a2a: PUSH1 0x01
00000a2c: PUSH1 0xa0
00000a2e: SHL
00000a2f: SUB
00000a30: AND
00000a31: CALLER
00000a32: DUP4
00000a33: PUSH2 0x0a75
00000a36: JUMP
00000a37: JUMPDEST
00000a38: PUSH1 0x40
00000a3a: DUP1
00000a3b: MLOAD
00000a3c: DUP5
00000a3d: DUP2
00000a3e: MSTORE
00000a3f: PUSH1 0x20
00000a41: DUP2
00000a42: ADD
00000a43: DUP4
00000a44: SWAP1
00000a45: MSTORE
00000a46: PUSH32 0x8ba0b35745118c74013821d55ed1f27f5328705c838c8a27ec3e0d72dc57ace2
00000a67: SWAP2
00000a68: ADD
00000a69: PUSH1 0x40
00000a6b: MLOAD
00000a6c: DUP1
00000a6d: SWAP2
00000a6e: SUB
00000a6f: SWAP1
00000a70: LOG1
00000a71: POP
00000a72: POP
00000a73: POP
00000a74: JUMP
00000a75: JUMPDEST
00000a76: PUSH1 0x40
00000a78: MLOAD
00000a79: PUSH1 0x01
00000a7b: PUSH1 0x01
00000a7d: PUSH1 0xa0
00000a7f: SHL
00000a80: SUB
00000a81: DUP4
00000a82: AND
00000a83: PUSH1 0x24
00000a85: DUP3
00000a86: ADD
00000a87: MSTORE
00000a88: PUSH1 0x44
00000a8a: DUP2
00000a8b: ADD
00000a8c: DUP3
00000a8d: SWAP1
00000a8e: MSTORE
00000a8f: PUSH2 0x045d
00000a92: SWAP1
00000a93: DUP5
00000a94: SWAP1
00000a95: PUSH4 0xa9059cbb
00000a9a: PUSH1 0xe0
00000a9c: SHL
00000a9d: SWAP1
00000a9e: PUSH1 0x64
00000aa0: ADD
00000aa1: JUMPDEST
00000aa2: PUSH1 0x40
00000aa4: DUP1
00000aa5: MLOAD
00000aa6: PUSH1 0x1f
00000aa8: NOT
00000aa9: DUP2
00000aaa: DUP5
00000aab: SUB
00000aac: ADD
00000aad: DUP2
00000aae: MSTORE
00000aaf: SWAP2
00000ab0: SWAP1
00000ab1: MSTORE
00000ab2: PUSH1 0x20
00000ab4: DUP2
00000ab5: ADD
00000ab6: DUP1
00000ab7: MLOAD
00000ab8: PUSH1 0x01
00000aba: PUSH1 0x01
00000abc: PUSH1 0xe0
00000abe: SHL
00000abf: SUB
00000ac0: AND
00000ac1: PUSH1 0x01
00000ac3: PUSH1 0x01
00000ac5: PUSH1 0xe0
00000ac7: SHL
00000ac8: SUB
00000ac9: NOT
00000aca: SWAP1
00000acb: SWAP4
00000acc: AND
00000acd: SWAP3
00000ace: SWAP1
00000acf: SWAP3
00000ad0: OR
00000ad1: SWAP1
00000ad2: SWAP2
00000ad3: MSTORE
00000ad4: PUSH2 0x0b16
00000ad7: JUMP
00000ad8: JUMPDEST
00000ad9: PUSH1 0x40
00000adb: MLOAD
00000adc: PUSH1 0x01
00000ade: PUSH1 0x01
00000ae0: PUSH1 0xa0
00000ae2: SHL
00000ae3: SUB
00000ae4: DUP1
00000ae5: DUP6
00000ae6: AND
00000ae7: PUSH1 0x24
00000ae9: DUP4
00000aea: ADD
00000aeb: MSTORE
00000aec: DUP4
00000aed: AND
00000aee: PUSH1 0x44
00000af0: DUP3
00000af1: ADD
00000af2: MSTORE
00000af3: PUSH1 0x64
00000af5: DUP2
00000af6: ADD
00000af7: DUP3
00000af8: SWAP1
00000af9: MSTORE
00000afa: PUSH2 0x0b10
00000afd: SWAP1
00000afe: DUP6
00000aff: SWAP1
00000b00: PUSH4 0x23b872dd
00000b05: PUSH1 0xe0
00000b07: SHL
00000b08: SWAP1
00000b09: PUSH1 0x84
00000b0b: ADD
00000b0c: PUSH2 0x0aa1
00000b0f: JUMP
00000b10: JUMPDEST
00000b11: POP
00000b12: POP
00000b13: POP
00000b14: POP
00000b15: JUMP
00000b16: JUMPDEST
00000b17: PUSH1 0x00
00000b19: PUSH2 0x0b6b
00000b1c: DUP3
00000b1d: PUSH1 0x40
00000b1f: MLOAD
00000b20: DUP1
00000b21: PUSH1 0x40
00000b23: ADD
00000b24: PUSH1 0x40
00000b26: MSTORE
00000b27: DUP1
00000b28: PUSH1 0x20
00000b2a: DUP2
00000b2b: MSTORE
00000b2c: PUSH1 0x20
00000b2e: ADD
00000b2f: PUSH32 0x5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564
00000b50: DUP2
00000b51: MSTORE
00000b52: POP
00000b53: DUP6
00000b54: PUSH1 0x01
00000b56: PUSH1 0x01
00000b58: PUSH1 0xa0
00000b5a: SHL
00000b5b: SUB
00000b5c: AND
00000b5d: PUSH2 0x0be8
00000b60: SWAP1
00000b61: SWAP3
00000b62: SWAP2
00000b63: SWAP1
00000b64: PUSH4 0xffffffff
00000b69: AND
00000b6a: JUMP
00000b6b: JUMPDEST
00000b6c: DUP1
00000b6d: MLOAD
00000b6e: SWAP1
00000b6f: SWAP2
00000b70: POP
00000b71: ISZERO
00000b72: PUSH2 0x045d
00000b75: JUMPI
00000b76: DUP1
00000b77: DUP1
00000b78: PUSH1 0x20
00000b7a: ADD
00000b7b: SWAP1
00000b7c: MLOAD
00000b7d: DUP2
00000b7e: ADD
00000b7f: SWAP1
00000b80: PUSH2 0x0b89
00000b83: SWAP2
00000b84: SWAP1
00000b85: PUSH2 0x0d7e
00000b88: JUMP
00000b89: JUMPDEST
00000b8a: PUSH2 0x045d
00000b8d: JUMPI
00000b8e: PUSH1 0x40
00000b90: MLOAD
00000b91: PUSH3 0x461bcd
00000b95: PUSH1 0xe5
00000b97: SHL
00000b98: DUP2
00000b99: MSTORE
00000b9a: PUSH1 0x20
00000b9c: PUSH1 0x04
00000b9e: DUP3
00000b9f: ADD
00000ba0: MSTORE
00000ba1: PUSH1 0x2a
00000ba3: PUSH1 0x24
00000ba5: DUP3
00000ba6: ADD
00000ba7: MSTORE
00000ba8: PUSH32 0x5361666545524332303a204552433230206f7065726174696f6e20646964206e
00000bc9: PUSH1 0x44
00000bcb: DUP3
00000bcc: ADD
00000bcd: MSTORE
00000bce: PUSH10 0x1bdd081cdd58d8d95959
00000bd9: PUSH1 0xb2
00000bdb: SHL
00000bdc: PUSH1 0x64
00000bde: DUP3
00000bdf: ADD
00000be0: MSTORE
00000be1: PUSH1 0x84
00000be3: ADD
00000be4: PUSH2 0x028a
00000be7: JUMP
00000be8: JUMPDEST
00000be9: PUSH1 0x60
00000beb: PUSH2 0x0bf7
00000bee: DUP5
00000bef: DUP5
00000bf0: PUSH1 0x00
00000bf2: DUP6
00000bf3: PUSH2 0x0c01
00000bf6: JUMP
00000bf7: JUMPDEST
00000bf8: SWAP1
00000bf9: POP
00000bfa: JUMPDEST
00000bfb: SWAP4
00000bfc: SWAP3
00000bfd: POP
00000bfe: POP
00000bff: POP
00000c00: JUMP
00000c01: JUMPDEST
00000c02: PUSH1 0x60
00000c04: DUP3
00000c05: SELFBALANCE
00000c06: LT
00000c07: ISZERO
00000c08: PUSH2 0x0c62
00000c0b: JUMPI
00000c0c: PUSH1 0x40
00000c0e: MLOAD
00000c0f: PUSH3 0x461bcd
00000c13: PUSH1 0xe5
00000c15: SHL
00000c16: DUP2
00000c17: MSTORE
00000c18: PUSH1 0x20
00000c1a: PUSH1 0x04
00000c1c: DUP3
00000c1d: ADD
00000c1e: MSTORE
00000c1f: PUSH1 0x26
00000c21: PUSH1 0x24
00000c23: DUP3
00000c24: ADD
00000c25: MSTORE
00000c26: PUSH32 0x416464726573733a20696e73756666696369656e742062616c616e636520666f
00000c47: PUSH1 0x44
00000c49: DUP3
00000c4a: ADD
00000c4b: MSTORE
00000c4c: PUSH6 0x1c8818d85b1b
00000c53: PUSH1 0xd2
00000c55: SHL
00000c56: PUSH1 0x64
00000c58: DUP3
00000c59: ADD
00000c5a: MSTORE
00000c5b: PUSH1 0x84
00000c5d: ADD
00000c5e: PUSH2 0x028a
00000c61: JUMP
00000c62: JUMPDEST
00000c63: DUP5
00000c64: EXTCODESIZE
00000c65: PUSH2 0x0cb0
00000c68: JUMPI
00000c69: PUSH1 0x40
00000c6b: MLOAD
00000c6c: PUSH3 0x461bcd
00000c70: PUSH1 0xe5
00000c72: SHL
00000c73: DUP2
00000c74: MSTORE
00000c75: PUSH1 0x20
00000c77: PUSH1 0x04
00000c79: DUP3
00000c7a: ADD
00000c7b: MSTORE
00000c7c: PUSH1 0x1d
00000c7e: PUSH1 0x24
00000c80: DUP3
00000c81: ADD
00000c82: MSTORE
00000c83: PUSH32 0x416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000
00000ca4: PUSH1 0x44
00000ca6: DUP3
00000ca7: ADD
00000ca8: MSTORE
00000ca9: PUSH1 0x64
00000cab: ADD
00000cac: PUSH2 0x028a
00000caf: JUMP
00000cb0: JUMPDEST
00000cb1: PUSH1 0x00
00000cb3: DUP1
00000cb4: DUP7
00000cb5: PUSH1 0x01
00000cb7: PUSH1 0x01
00000cb9: PUSH1 0xa0
00000cbb: SHL
00000cbc: SUB
00000cbd: AND
00000cbe: DUP6
00000cbf: DUP8
00000cc0: PUSH1 0x40
00000cc2: MLOAD
00000cc3: PUSH2 0x0ccc
00000cc6: SWAP2
00000cc7: SWAP1
00000cc8: PUSH2 0x0e21
00000ccb: JUMP
00000ccc: JUMPDEST
00000ccd: PUSH1 0x00
00000ccf: PUSH1 0x40
00000cd1: MLOAD
00000cd2: DUP1
00000cd3: DUP4
00000cd4: SUB
00000cd5: DUP2
00000cd6: DUP6
00000cd7: DUP8
00000cd8: GAS
00000cd9: CALL
00000cda: SWAP3
00000cdb: POP
00000cdc: POP
00000cdd: POP
00000cde: RETURNDATASIZE
00000cdf: DUP1
00000ce0: PUSH1 0x00
00000ce2: DUP2
00000ce3: EQ
00000ce4: PUSH2 0x0d09
00000ce7: JUMPI
00000ce8: PUSH1 0x40
00000cea: MLOAD
00000ceb: SWAP2
00000cec: POP
00000ced: PUSH1 0x1f
00000cef: NOT
00000cf0: PUSH1 0x3f
00000cf2: RETURNDATASIZE
00000cf3: ADD
00000cf4: AND
00000cf5: DUP3
00000cf6: ADD
00000cf7: PUSH1 0x40
00000cf9: MSTORE
00000cfa: RETURNDATASIZE
00000cfb: DUP3
00000cfc: MSTORE
00000cfd: RETURNDATASIZE
00000cfe: PUSH1 0x00
00000d00: PUSH1 0x20
00000d02: DUP5
00000d03: ADD
00000d04: RETURNDATACOPY
00000d05: PUSH2 0x0d0e
00000d08: JUMP
00000d09: JUMPDEST
00000d0a: PUSH1 0x60
00000d0c: SWAP2
00000d0d: POP
00000d0e: JUMPDEST
00000d0f: POP
00000d10: SWAP2
00000d11: POP
00000d12: SWAP2
00000d13: POP
00000d14: PUSH2 0x0d1e
00000d17: DUP3
00000d18: DUP3
00000d19: DUP7
00000d1a: PUSH2 0x0d29
00000d1d: JUMP
00000d1e: JUMPDEST
00000d1f: SWAP8
00000d20: SWAP7
00000d21: POP
00000d22: POP
00000d23: POP
00000d24: POP
00000d25: POP
00000d26: POP
00000d27: POP
00000d28: JUMP
00000d29: JUMPDEST
00000d2a: PUSH1 0x60
00000d2c: DUP4
00000d2d: ISZERO
00000d2e: PUSH2 0x0d38
00000d31: JUMPI
00000d32: POP
00000d33: DUP2
00000d34: PUSH2 0x0bfa
00000d37: JUMP
00000d38: JUMPDEST
00000d39: DUP3
00000d3a: MLOAD
00000d3b: ISZERO
00000d3c: PUSH2 0x0d48
00000d3f: JUMPI
00000d40: DUP3
00000d41: MLOAD
00000d42: DUP1
00000d43: DUP5
00000d44: PUSH1 0x20
00000d46: ADD
00000d47: REVERT
00000d48: JUMPDEST
00000d49: DUP2
00000d4a: PUSH1 0x40
00000d4c: MLOAD
00000d4d: PUSH3 0x461bcd
00000d51: PUSH1 0xe5
00000d53: SHL
00000d54: DUP2
00000d55: MSTORE
00000d56: PUSH1 0x04
00000d58: ADD
00000d59: PUSH2 0x028a
00000d5c: SWAP2
00000d5d: SWAP1
00000d5e: PUSH2 0x0e65
00000d61: JUMP
00000d62: JUMPDEST
00000d63: DUP1
00000d64: CALLDATALOAD
00000d65: PUSH1 0x01
00000d67: PUSH1 0x01
00000d69: PUSH1 0xa0
00000d6b: SHL
00000d6c: SUB
00000d6d: DUP2
00000d6e: AND
00000d6f: DUP2
00000d70: EQ
00000d71: PUSH2 0x0d79
00000d74: JUMPI
00000d75: PUSH1 0x00
00000d77: DUP1
00000d78: REVERT
00000d79: JUMPDEST
00000d7a: SWAP2
00000d7b: SWAP1
00000d7c: POP
00000d7d: JUMP
00000d7e: JUMPDEST
00000d7f: PUSH1 0x00
00000d81: PUSH1 0x20
00000d83: DUP3
00000d84: DUP5
00000d85: SUB
00000d86: SLT
00000d87: ISZERO
00000d88: PUSH2 0x0d8f
00000d8b: JUMPI
00000d8c: DUP1
00000d8d: DUP2
00000d8e: REVERT
00000d8f: JUMPDEST
00000d90: DUP2
00000d91: MLOAD
00000d92: DUP1
00000d93: ISZERO
00000d94: ISZERO
00000d95: DUP2
00000d96: EQ
00000d97: PUSH2 0x0bfa
00000d9a: JUMPI
00000d9b: DUP2
00000d9c: DUP3
00000d9d: REVERT
00000d9e: JUMPDEST
00000d9f: PUSH1 0x00
00000da1: DUP1
00000da2: PUSH1 0x40
00000da4: DUP4
00000da5: DUP6
00000da6: SUB
00000da7: SLT
00000da8: ISZERO
00000da9: PUSH2 0x0db0
00000dac: JUMPI
00000dad: DUP1
00000dae: DUP2
00000daf: REVERT
00000db0: JUMPDEST
00000db1: PUSH2 0x0db9
00000db4: DUP4
00000db5: PUSH2 0x0d62
00000db8: JUMP
00000db9: JUMPDEST
00000dba: SWAP2
00000dbb: POP
00000dbc: PUSH2 0x0dc7
00000dbf: PUSH1 0x20
00000dc1: DUP5
00000dc2: ADD
00000dc3: PUSH2 0x0d62
00000dc6: JUMP
00000dc7: JUMPDEST
00000dc8: SWAP1
00000dc9: POP
00000dca: SWAP3
00000dcb: POP
00000dcc: SWAP3
00000dcd: SWAP1
00000dce: POP
00000dcf: JUMP
00000dd0: JUMPDEST
00000dd1: PUSH1 0x00
00000dd3: PUSH1 0x20
00000dd5: DUP3
00000dd6: DUP5
00000dd7: SUB
00000dd8: SLT
00000dd9: ISZERO
00000dda: PUSH2 0x0de1
00000ddd: JUMPI
00000dde: DUP1
00000ddf: DUP2
00000de0: REVERT
00000de1: JUMPDEST
00000de2: POP
00000de3: CALLDATALOAD
00000de4: SWAP2
00000de5: SWAP1
00000de6: POP
00000de7: JUMP
00000de8: JUMPDEST
00000de9: PUSH1 0x00
00000deb: PUSH1 0x20
00000ded: DUP3
00000dee: DUP5
00000def: SUB
00000df0: SLT
00000df1: ISZERO
00000df2: PUSH2 0x0df9
00000df5: JUMPI
00000df6: DUP1
00000df7: DUP2
00000df8: REVERT
00000df9: JUMPDEST
00000dfa: POP
00000dfb: MLOAD
00000dfc: SWAP2
00000dfd: SWAP1
00000dfe: POP
00000dff: JUMP
00000e00: JUMPDEST
00000e01: PUSH1 0x00
00000e03: DUP1
00000e04: PUSH1 0x40
00000e06: DUP4
00000e07: DUP6
00000e08: SUB
00000e09: SLT
00000e0a: ISZERO
00000e0b: PUSH2 0x0e12
00000e0e: JUMPI
00000e0f: DUP2
00000e10: DUP3
00000e11: REVERT
00000e12: JUMPDEST
00000e13: POP
00000e14: POP
00000e15: DUP1
00000e16: CALLDATALOAD
00000e17: SWAP3
00000e18: PUSH1 0x20
00000e1a: SWAP1
00000e1b: SWAP2
00000e1c: ADD
00000e1d: CALLDATALOAD
00000e1e: SWAP2
00000e1f: POP
00000e20: JUMP
00000e21: JUMPDEST
00000e22: PUSH1 0x00
00000e24: DUP3
00000e25: MLOAD
00000e26: PUSH2 0x0e33
00000e29: DUP2
00000e2a: DUP5
00000e2b: PUSH1 0x20
00000e2d: DUP8
00000e2e: ADD
00000e2f: PUSH2 0x0f2a
00000e32: JUMP
00000e33: JUMPDEST
00000e34: SWAP2
00000e35: SWAP1
00000e36: SWAP2
00000e37: ADD
00000e38: SWAP3
00000e39: SWAP2
00000e3a: POP
00000e3b: POP
00000e3c: JUMP
00000e3d: JUMPDEST
00000e3e: PUSH1 0x20
00000e40: DUP2
00000e41: ADD
00000e42: PUSH1 0x04
00000e44: DUP4
00000e45: LT
00000e46: PUSH2 0x0e5f
00000e49: JUMPI
00000e4a: PUSH4 0x4e487b71
00000e4f: PUSH1 0xe0
00000e51: SHL
00000e52: PUSH1 0x00
00000e54: MSTORE
00000e55: PUSH1 0x21
00000e57: PUSH1 0x04
00000e59: MSTORE
00000e5a: PUSH1 0x24
00000e5c: PUSH1 0x00
00000e5e: REVERT
00000e5f: JUMPDEST
00000e60: SWAP2
00000e61: SWAP1
00000e62: MSTORE
00000e63: SWAP1
00000e64: JUMP
00000e65: JUMPDEST
00000e66: PUSH1 0x20
00000e68: DUP2
00000e69: MSTORE
00000e6a: PUSH1 0x00
00000e6c: DUP3
00000e6d: MLOAD
00000e6e: DUP1
00000e6f: PUSH1 0x20
00000e71: DUP5
00000e72: ADD
00000e73: MSTORE
00000e74: PUSH2 0x0e84
00000e77: DUP2
00000e78: PUSH1 0x40
00000e7a: DUP6
00000e7b: ADD
00000e7c: PUSH1 0x20
00000e7e: DUP8
00000e7f: ADD
00000e80: PUSH2 0x0f2a
00000e83: JUMP
00000e84: JUMPDEST
00000e85: PUSH1 0x1f
00000e87: ADD
00000e88: PUSH1 0x1f
00000e8a: NOT
00000e8b: AND
00000e8c: SWAP2
00000e8d: SWAP1
00000e8e: SWAP2
00000e8f: ADD
00000e90: PUSH1 0x40
00000e92: ADD
00000e93: SWAP3
00000e94: SWAP2
00000e95: POP
00000e96: POP
00000e97: JUMP
00000e98: JUMPDEST
00000e99: PUSH1 0x20
00000e9b: DUP1
00000e9c: DUP3
00000e9d: MSTORE
00000e9e: PUSH1 0x0a
00000ea0: SWAP1
00000ea1: DUP3
00000ea2: ADD
00000ea3: MSTORE
00000ea4: PUSH10 0x4241445f535441545553
00000eaf: PUSH1 0xb0
00000eb1: SHL
00000eb2: PUSH1 0x40
00000eb4: DUP3
00000eb5: ADD
00000eb6: MSTORE
00000eb7: PUSH1 0x60
00000eb9: ADD
00000eba: SWAP1
00000ebb: JUMP
00000ebc: JUMPDEST
00000ebd: PUSH1 0x00
00000ebf: DUP3
00000ec0: NOT
00000ec1: DUP3
00000ec2: GT
00000ec3: ISZERO
00000ec4: PUSH2 0x0ecf
00000ec7: JUMPI
00000ec8: PUSH2 0x0ecf
00000ecb: PUSH2 0x0f56
00000ece: JUMP
00000ecf: JUMPDEST
00000ed0: POP
00000ed1: ADD
00000ed2: SWAP1
00000ed3: JUMP
00000ed4: JUMPDEST
00000ed5: PUSH1 0x00
00000ed7: DUP3
00000ed8: PUSH2 0x0eef
00000edb: JUMPI
00000edc: PUSH4 0x4e487b71
00000ee1: PUSH1 0xe0
00000ee3: SHL
00000ee4: DUP2
00000ee5: MSTORE
00000ee6: PUSH1 0x12
00000ee8: PUSH1 0x04
00000eea: MSTORE
00000eeb: PUSH1 0x24
00000eed: DUP2
00000eee: REVERT
00000eef: JUMPDEST
00000ef0: POP
00000ef1: DIV
00000ef2: SWAP1
00000ef3: JUMP
00000ef4: JUMPDEST
00000ef5: PUSH1 0x00
00000ef7: DUP2
00000ef8: PUSH1 0x00
00000efa: NOT
00000efb: DIV
00000efc: DUP4
00000efd: GT
00000efe: DUP3
00000eff: ISZERO
00000f00: ISZERO
00000f01: AND
00000f02: ISZERO
00000f03: PUSH2 0x0f0e
00000f06: JUMPI
00000f07: PUSH2 0x0f0e
00000f0a: PUSH2 0x0f56
00000f0d: JUMP
00000f0e: JUMPDEST
00000f0f: POP
00000f10: MUL
00000f11: SWAP1
00000f12: JUMP
00000f13: JUMPDEST
00000f14: PUSH1 0x00
00000f16: DUP3
00000f17: DUP3
00000f18: LT
00000f19: ISZERO
00000f1a: PUSH2 0x0f25
00000f1d: JUMPI
00000f1e: PUSH2 0x0f25
00000f21: PUSH2 0x0f56
00000f24: JUMP
00000f25: JUMPDEST
00000f26: POP
00000f27: SUB
00000f28: SWAP1
00000f29: JUMP
00000f2a: JUMPDEST
00000f2b: PUSH1 0x00
00000f2d: JUMPDEST
00000f2e: DUP4
00000f2f: DUP2
00000f30: LT
00000f31: ISZERO
00000f32: PUSH2 0x0f45
00000f35: JUMPI
00000f36: DUP2
00000f37: DUP2
00000f38: ADD
00000f39: MLOAD
00000f3a: DUP4
00000f3b: DUP3
00000f3c: ADD
00000f3d: MSTORE
00000f3e: PUSH1 0x20
00000f40: ADD
00000f41: PUSH2 0x0f2d
00000f44: JUMP
00000f45: JUMPDEST
00000f46: DUP4
00000f47: DUP2
00000f48: GT
00000f49: ISZERO
00000f4a: PUSH2 0x0b10
00000f4d: JUMPI
00000f4e: POP
00000f4f: POP
00000f50: PUSH1 0x00
00000f52: SWAP2
00000f53: ADD
00000f54: MSTORE
00000f55: JUMP
00000f56: JUMPDEST
00000f57: PUSH4 0x4e487b71
00000f5c: PUSH1 0xe0
00000f5e: SHL
00000f5f: PUSH1 0x00
00000f61: MSTORE
00000f62: PUSH1 0x11
00000f64: PUSH1 0x04
00000f66: MSTORE
00000f67: PUSH1 0x24
00000f69: PUSH1 0x00
00000f6b: REVERT
00000f6c: INVALID
00000f6d: LOG2
00000f6e: PUSH5 0x6970667358
00000f74: UNKNOWN(0x22)
00000f75: SLT
00000f76: KECCAK256
00000f77: BLOBBASEFEE
00000f78: UNKNOWN(0xE0)
00000f79: UNKNOWN(0xAE)
00000f7a: BYTE
00000f7b: BALANCE
00000f7c: SWAP14
00000f7d: CLZ
00000f7e: SDIV
00000f7f: PUSH10 0xb575e1df6e92a400aaa9
00000f8a: UNKNOWN(0xCF)
00000f8b: PUSH16 0xdf5de40107baa93ab405a764736f6c63
00000f9c: NUMBER
00000f9d: STOP
00000f9e: ADDMOD
00000f9f: DIV
00000fa0: STOP
00000fa1: CALLER

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high other codex Buyout success never transfers listing tokens to offerer (tokens locked permanently) 85 no
view
evidence_json
{
    "evidence": "`offer()` and `surrenderTokens()` both transfer listing tokens into the contract, while the only listing-token withdrawal path is `withdrawTokens()` which is restricted to `Status.COUNTERED`. There is no function to release listing tokens to the offerer on `Status.SUCCESS`.",
    "locations": [
        "contracts/Buyout.sol:71",
        "contracts/Buyout.sol:98",
        "contracts/Buyout.sol:122",
        "contracts/Buyout.sol:165",
        "contracts/Buyout.sol:172"
    ],
    "recommendation": "Add a `claimListingTokens()` function for the offerer in `Status.SUCCESS` that transfers all listing tokens held by the contract to the offerer, or automatically transfer the listing tokens to the offerer during `surrenderTokens`. Consider burning tokens if the intended end\u2011state is removal from circulation.",
    "exploit_scenario": "After a successful buyout, holders call `surrenderTokens` and receive funding tokens. Their listing tokens (and the offerer\u2019s original deposit) are transferred into the Buyout contract, but there is no path for the offerer to claim them. The offerer pays out funding tokens yet never receives ownership of the listing tokens, leaving all listing tokens stuck in the contract and defeating the buyout\u2019s purpose."
}
high other detector Untrusted CALL target/value reachable 60 no no
view
trace_id: 0x2b4545e5633aab500786220449b9327c956af09cbe2e18d4f97409cecd29c72f
call_targets: 0x90b6047da43a370a402fb1f88f4313faa34a923b
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x2b4545e5633aab500786220449b9327c956af09cbe2e18d4f97409cecd29c72f",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x90b6047da43a370a402fb1f88f4313faa34a923b"
    ],
    "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": "0x200d2ed2",
            "selector": "0x200d2ed2",
            "calldata_variants": [
                "0x200d2ed2",
                "0x200d2ed20000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x24600fc3",
            "selector": "0x24600fc3",
            "calldata_variants": [
                "0x24600fc3",
                "0x24600fc30000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x485cc955",
            "selector": "0x485cc955",
            "calldata_variants": [
                "0x485cc955",
                "0x485cc9550000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x78065f27",
            "selector": "0x78065f27",
            "calldata_variants": [
                "0x78065f27",
                "0x78065f270000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x89a4157e",
            "selector": "0x89a4157e",
            "calldata_variants": [
                "0x89a4157e",
                "0x89a4157e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x8d8f2adb",
            "selector": "0x8d8f2adb",
            "calldata_variants": [
                "0x8d8f2adb",
                "0x8d8f2adb0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x965fbde5",
            "selector": "0x965fbde5",
            "calldata_variants": [
                "0x965fbde5",
                "0x965fbde50000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa1920586",
            "selector": "0xa1920586",
            "calldata_variants": [
                "0xa1920586",
                "0xa19205860000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 3289,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 1,
    "guards_detected": [],
    "untrusted_call_count": 1
}
high other detector ETH value transfer possible 55 no no
view
trace_id: 0x2b4545e5633aab500786220449b9327c956af09cbe2e18d4f97409cecd29c72f
call_targets: 0x90b6047da43a370a402fb1f88f4313faa34a923b
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x2b4545e5633aab500786220449b9327c956af09cbe2e18d4f97409cecd29c72f",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x90b6047da43a370a402fb1f88f4313faa34a923b"
    ],
    "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": "0x200d2ed2",
            "selector": "0x200d2ed2",
            "calldata_variants": [
                "0x200d2ed2",
                "0x200d2ed20000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x24600fc3",
            "selector": "0x24600fc3",
            "calldata_variants": [
                "0x24600fc3",
                "0x24600fc30000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x485cc955",
            "selector": "0x485cc955",
            "calldata_variants": [
                "0x485cc955",
                "0x485cc9550000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x78065f27",
            "selector": "0x78065f27",
            "calldata_variants": [
                "0x78065f27",
                "0x78065f270000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x89a4157e",
            "selector": "0x89a4157e",
            "calldata_variants": [
                "0x89a4157e",
                "0x89a4157e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x8d8f2adb",
            "selector": "0x8d8f2adb",
            "calldata_variants": [
                "0x8d8f2adb",
                "0x8d8f2adb0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x965fbde5",
            "selector": "0x965fbde5",
            "calldata_variants": [
                "0x965fbde5",
                "0x965fbde50000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa1920586",
            "selector": "0xa1920586",
            "calldata_variants": [
                "0xa1920586",
                "0xa19205860000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 3289,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 1,
    "guards_detected": []
}
medium upgradeability codex Public initializer can be front‑run on uninitialized deployments 75 no
view
evidence_json
{
    "evidence": "`initialize()` is `public` and lacks access control; it can be called by anyone before the first initialization.",
    "locations": [
        "contracts/Buyout.sol:51",
        "contracts/Buyout.sol:54"
    ],
    "recommendation": "Ensure initialization happens atomically at deployment (e.g., via factory) and restrict `initialize()` to a trusted deployer/factory. Also consider disabling initializers in the implementation constructor to prevent accidental misuse.",
    "exploit_scenario": "If a proxy or clone is deployed without an atomic initialization, any external account can call `initialize()` first and set `listingToken`/`fundingToken` to attacker\u2011chosen addresses. This can brick the instance for intended users or cause users to interact with malicious tokens."
}