019bab3b-a9f0-7106-bd41-4d2ed4375abc
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 38212 | artifact.fetch | complete | 1 / 3 | 3 months ago |
| 38213 | proxy.resolve | complete | 1 / 3 | 3 months ago |
| 38214 | tool.cast_disasm | complete | 1 / 3 | 3 months ago |
| 38215 | analysis.bundle | complete | 1 / 3 | 3 months ago |
| 38216 | capability.graph | complete | 1 / 3 | 3 months ago |
| 38217 | detector.run | complete | 1 / 3 | 3 months ago |
| 38218 | validation.fork | complete | 1 / 3 | 3 months ago |
| 38902 | report.consolidate | complete | 1 / 6 | 3 months ago |
{
"status": "not_proxy"
}
No slither job recorded yet.
{"no_findings":false,"summary":"One potential reentrancy pattern where an external CALL occurs before a subsequent SSTORE; several other CALLs use computed targets/values but address control is unclear from bytecode. The DELEGATECALL flagged by detectors appears in the post-STOP metadata tail (no JUMPDEST), so it is likely unreachable.","findings":[{"severity":"medium","category":"reentrancy","title":"External CALL before state update (potential reentrancy)","exploit_scenario":"If the CALL at pc:0x722 transfers ETH or invokes an attacker-controlled contract (target derived from CALLER/stack), a malicious receiver could reenter before the state update at pc:0x743 and repeat sensitive logic (e.g., withdrawals or accounting changes) to drain funds or bypass limits.","recommendation":"Apply checks-effects-interactions: move critical SSTORE updates before the external CALL or add a reentrancy guard around the function; consider pull-based payouts instead of direct CALLs.","evidence":"Bytecode shows a CALL at pc:0x722 followed by an SSTORE at pc:0x743, with no guard detected in the artifact; call arguments are computed from stack/CALLER, so the call can reach untrusted code.","locations":["pc:0x722","pc:0x743"]},{"severity":"low","category":"other","title":"External CALL targets/values are computed (audit address control)","exploit_scenario":"If any of the computed call targets/values at these callsites can be influenced by untrusted input or mutable storage without strict access control, an attacker could redirect value transfers or trigger malicious callbacks.","recommendation":"Verify that all CALL target addresses and values are either hardcoded or settable only by trusted roles; add explicit validation/allowlists for addresses and ensure reentrancy protections when calling external contracts.","evidence":"Detector evidence lists 6 CALL sites with target/value marked as computed and no guards detected; callsites at pc:0x398, 0x434, 0x6e6, 0x722, 0x842, 0x122c show EXTCODESIZE/CALL patterns with computed inputs and unknown returndata validation semantics.","locations":["pc:0x398","pc:0x434","pc:0x6e6","pc:0x722","pc:0x842","pc:0x122c"]}]}
OpenAI Codex v0.77.0 (research preview)
--------
workdir: /tmp/codex-se7tuscj
model: gpt-5.2-codex
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: auto
session id: 019bab41-23b0-7ec2-9fb2-7bc052c22667
--------
user
You are a security auditor. You ONLY have runtime bytecode + analysis artifacts.
You MUST read `BYTECODE_BUNDLE.json` before concluding; it contains the bytecode summary,
evidence bundle, callsites, storage slots, and detector findings.
Special cases when reasoning from bytecode (be explicit about uncertainty):
- Selector inference is best-effort; missing selectors are common.
- Fallback/receive paths may be the only entrypoints.
- CALL vs DELEGATECALL semantics differ; DELEGATECALL executes in caller storage.
- Proxy patterns (EIP-1967, minimal proxies, beacon) change which storage is authoritative.
- Storage slots are raw; mappings/arrays appear via keccak patterns, names are unknown.
- Guard detection is heuristic; absence of guards does NOT mean unguarded.
- Returndata checking is unknown unless explicitly shown in evidence.
- Precompiles (0x1..0x9) and common ERC20 transfer selectors may appear; do not over-claim.
Output MUST be valid JSON matching the provided schema.
- If you find nothing meaningful: set no_findings=true and findings=[].
- Otherwise: set no_findings=false and include findings with severity/category/title.
- Locations can be pc references like "pc:0x123" or selectors like "selector:0xa9059cbb".
Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation,
accounting/invariant breaks, dangerous delegatecall, and untrusted external calls.
Be conservative: if evidence is weak, mark severity low/medium and explain why.
mcp startup: no servers
thinking
**Reading BYTECODE_BUNDLE.json**
exec
/bin/bash -lc ls in /tmp/codex-se7tuscj succeeded in 5ms:
BYTECODE_BUNDLE.json
codex-output-schema.json
exec
/bin/bash -lc 'cat BYTECODE_BUNDLE.json' in /tmp/codex-se7tuscj succeeded in 11ms:
{
"analysis_artifact": {
"address": "0xf564141bda167a0f2c87ffd4480be627d90fa954",
"artifact_hash": "0x77633968bd9970e978528a5b349253d8568da483a6687146698a1a7473851c5f",
"artifact_json": {
"auth": {
"guards": []
},
"basic_blocks": [
{
"end_pc": 10,
"hash": "0x3a4e38a4456e1ff8a68c8618d75691cf7c47fd41118136b60550622cd9713310",
"opcodes": [
"PUSH1",
"PUSH1",
"MSTORE",
"CALLDATASIZE",
"ISZERO",
"PUSH2",
"JUMPI"
thinking
**Investigating proxy and storage patterns**
exec
/bin/bash -lc 'rg -n "storage" BYTECODE_BUNDLE.json' in /tmp/codex-se7tuscj succeeded in 11ms:
9749: "storage": {
10313: "storage": {
10877: "storage": {
11441: "storage": {
12005: "storage": {
12569: "storage": {
13133: "storage": {
13697: "storage": {
14261: "storage": {
14825: "storage": {
15389: "storage": {
15953: "storage": {
16517: "storage": {
17081: "storage": {
17645: "storage": {
18209: "storage": {
18789: "storage": {
thinking
**Examining lines near storage usage**
exec
/bin/bash -lc "sed -n '9600,9805p' BYTECODE_BUNDLE.json" in /tmp/codex-se7tuscj succeeded in 27ms:
"type": "control_flow_fallthrough"
},
{
"from": "bb:5399",
"to": "bb:5411",
"type": "control_flow"
},
{
"from": "bb:5399",
"to": "bb:5406",
"type": "control_flow_fallthrough"
},
{
"from": "bb:5411",
"to": "bb:5424",
"type": "control_flow"
},
{
"from": "bb:5411",
"to": "bb:5419",
thinking
**Analyzing delegatecall patterns**
exec
/bin/bash -lc 'rg -n "call:5621" -n BYTECODE_BUNDLE.json' in /tmp/codex-se7tuscj succeeded in 6ms:
21896: "to": "call:5621",
21900: "from": "call:5621",
25170: "id": "call:5621",
exec
/bin/bash -lc "sed -n '25080,25240p' BYTECODE_BUNDLE.json" in /tmp/codex-se7tuscj succeeded in 21ms:
"id": "bb:5499",
"start_pc": 5499,
"type": "basic_block"
},
{
"end_pc": 5511,
"hash": "0xea18a74896baba07563605a1d18bab5d95166da1449914a8e0833030b047e029",
"id": "bb:5503",
"start_pc": 5503,
"type": "basic_block"
},
{
"end_pc": 5519,
"hash": "0x7116c78759da41aaf0666d7532ff1a64eb93af1e624691d06550281a77e74768",
"id": "bb:5512",
"start_pc": 5512,
"type": "basic_block"
},
{
"end_pc": 5557,
thinking
**Exploring delegatecall context in basic blocks**
exec
/bin/bash -lc 'rg -n "start_pc": 5601 -n BYTECODE_BUNDLE.json' in /tmp/codex-se7tuscj exited 2 in 8ms:
rg: 5601: No such file or directory (os error 2)
thinking
**Checking pattern quoting for file detection**
exec
/bin/bash -lc "rg -n \"\\\"start_pc\\\": 5601\" BYTECODE_BUNDLE.json" in /tmp/codex-se7tuscj succeeded in 32ms:
7252: "start_pc": 5601
25130: "start_pc": 5601,
thinking
**Examining code near line 7200**
exec
/bin/bash -lc "sed -n '7180,7285p' BYTECODE_BUNDLE.json" in /tmp/codex-se7tuscj succeeded in 7ms:
"PUSH1",
"OP_80",
"MLOAD",
"PUSH1",
"OP_81",
"ADD",
"OP_82",
"MSTORE",
"PUSH1",
"OP_80",
"OP_82",
"MSTORE",
"PUSH1",
"OP_82",
"ADD",
"OP_81",
"OP_90",
"MSTORE",
"OP_91",
"OP_81",
thinking
**Analyzing delegatecall and function details**
I'm piecing together the context around a delegatecall in a specific function identified by selector 0x0d15fd77, trying to find evidence of security checks or proxy patterns. I'll explore function callsites, storage usage, and search for standard proxy indicators like EIP-1967 slots using the known storage slot hex. This should help clarify any untrusted delegatecall risks.
exec
/bin/bash -lc 'rg -n "360894" BYTECODE_BUNDLE.json' in /tmp/codex-se7tuscj exited 1 in 6ms:
thinking
**Searching for "beacon" usage**
exec
/bin/bash -lc 'rg -n "beacon|1967|implementation|proxy" BYTECODE_BUNDLE.json' in /tmp/codex-se7tuscj succeeded in 31ms:
19368: "implementation": null,
19370: "proxy": "0",
19375: "proxy_evidence": {
19376: "status": "not_proxy"
19379: "implementation_address": null,
19380: "is_proxy": false,
thinking
**Investigating bytecode artifacts**
exec
/bin/bash -lc 'rg -n "evidence|summary|bytecode" BYTECODE_BUNDLE.json' in /tmp/codex-se7tuscj succeeded in 8ms:
19375: "proxy_evidence": {
19381: "runtime_bytecode": {
25289: "evidence_json": {
25325: "evidence_json": {
25377: "evidence_json": {
25428: "heuristics_summary": {
thinking
**Checking around line 19368**
exec
/bin/bash -lc "sed -n '19290,19430p' BYTECODE_BUNDLE.json" in /tmp/codex-se7tuscj succeeded in 8ms:
"pc": 4348,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
},
{
"op": "SLOAD",
"pc": 4374,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000010"
},
{
"op": "SLOAD",
"pc": 4410,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000011"
},
{
"op": "SLOAD",
"pc": 4446,
"slot": "0x0000000000000000000000000000000000000000000000000000000000000012"
},
{
"op": "SLOAD",
thinking
**Analyzing runtime bytecode for delegatecall and reentrancy risks**
exec
/bin/bash -lc "python - <<'PY'
import json
from binascii import unhexlify
with open('BYTECODE_BUNDLE.json') as f:
data=json.load(f)
bytecode=data['artifact']['runtime_bytecode']['full']
if bytecode.startswith('0x'):
bytecode=bytecode[2:]
code=unhexlify(bytecode)
# simple disassembler
opcodes={
0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
0x20:'SHA3',
0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5c:'TLOAD',0x5d:'TSTORE',0x5e:'MCOPY',
0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
}
start=5580
end=5645
pc=0
i=0
# build mapping from pc to index for quick
# We will disassemble and print within range
while pc < len(code):
op=code[pc]
name=opcodes.get(op,f'OP_{op:02x}')
if 0x60 <= op <= 0x7f:
n=op-0x5f
data_bytes=code[pc+1:pc+1+n]
imm=data_bytes.hex()
if start <= pc <= end:
print(f\"{pc:04x}: {name} 0x{imm}\")
pc += 1+n
else:
if start <= pc <= end:
print(f\"{pc:04x}: {name}\")
pc += 1
PY" in /tmp/codex-se7tuscj succeeded in 37ms:
15cc: ADD
15cd: DUP2
15ce: SWAP1
15cf: MSTORE
15d0: SWAP2
15d1: DUP2
15d2: ADD
15d3: DUP3
15d4: SWAP1
15d5: MSTORE
15d6: PUSH1 0x60
15d8: DUP2
15d9: ADD
15da: SWAP2
15db: SWAP1
15dc: SWAP2
15dd: MSTORE
15de: SWAP1
15df: JUMP
15e0: STOP
thinking
**Analyzing delegatecall in metadata region**
I'm noticing that the delegatecall detected appears after the main STOP opcode, inside the metadata section of the bytecode, making it likely unreachable and a false positive. I want to verify there are no JUMPDEST opcodes there to confirm this, and then focus on examining actual CALL instructions within the executable code area to understand their behavior better.
exec
/bin/bash -lc "python - <<'PY'
import json
from binascii import unhexlify
with open('BYTECODE_BUNDLE.json') as f:
data=json.load(f)
bytecode=data['artifact']['runtime_bytecode']['full']
code=unhexlify(bytecode[2:] if bytecode.startswith('0x') else bytecode)
opcodes={
0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
0x20:'SHA3',
0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5c:'TLOAD',0x5d:'TSTORE',0x5e:'MCOPY',
0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
}
# Build list of instructions with pc
instrs=[]
pc=0
while pc < len(code):
op=code[pc]
name=opcodes.get(op,f'OP_{op:02x}')
if 0x60 <= op <= 0x7f:
n=op-0x5f
imm=code[pc+1:pc+1+n].hex()
instrs.append((pc,f\"{name} 0x{imm}\"))
pc += 1+n
else:
instrs.append((pc,name))
pc += 1
# quick map from pc to index
pc_to_idx={pc:i for i,(pc,_) in enumerate(instrs)}
def show_around(target_pc, window=12):
idx=pc_to_idx.get(target_pc)
if idx is None:
print(f\"pc {target_pc} not found\")
return
start=max(0, idx-window)
end=min(len(instrs), idx+window+1)
for pc,inst in instrs[start:end]:
marker='>>' if pc==target_pc else ' '
print(f\"{marker} {pc:04x}: {inst}\")
print()
for pc in [920,1076,1766,1826,2114,4652]:
print(f\"Around pc {pc} (0x{pc:x})\")
show_around(pc, window=10)
PY" in /tmp/codex-se7tuscj succeeded in 65ms:
Around pc 920 (0x398)
038a: EXTCODESIZE
038b: ISZERO
038c: ISZERO
038d: PUSH2 0x0392
0390: JUMPI
0391: INVALID
0392: JUMPDEST
0393: PUSH2 0x02c6
0396: GAS
0397: SUB
>> 0398: CALL
0399: ISZERO
039a: ISZERO
039b: PUSH2 0x03a0
039e: JUMPI
039f: INVALID
03a0: JUMPDEST
03a1: POP
03a2: POP
thinking
**Analyzing call instructions and context**
exec
/bin/bash -lc "python - <<'PY'
import json
from binascii import unhexlify
with open('BYTECODE_BUNDLE.json') as f:
data=json.load(f)
bytecode=data['artifact']['runtime_bytecode']['full']
code=unhexlify(bytecode[2:] if bytecode.startswith('0x') else bytecode)
opcodes={
0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
0x20:'SHA3',
0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5c:'TLOAD',0x5d:'TSTORE',0x5e:'MCOPY',
0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
}
# Build list of instructions with pc
instrs=[]
pc=0
while pc < len(code):
op=code[pc]
name=opcodes.get(op,f'OP_{op:02x}')
if 0x60 <= op <= 0x7f:
n=op-0x5f
imm=code[pc+1:pc+1+n].hex()
instrs.append((pc,f\"{name} 0x{imm}\"))
pc += 1+n
else:
instrs.append((pc,name))
pc += 1
pc_to_idx={pc:i for i,(pc,_) in enumerate(instrs)}
def show_around(target_pc, window=25):
idx=pc_to_idx.get(target_pc)
if idx is None:
print(f\"pc {target_pc} not found\")
return
start=max(0, idx-window)
end=min(len(instrs), idx+window+1)
for pc,inst in instrs[start:end]:
marker='>>' if pc==target_pc else ' '
print(f\"{marker} {pc:04x}: {inst}\")
print()
for pc in [920,1076,1766,1826,2114,4652]:
print(f\"Around pc {pc} (0x{pc:x})\")
show_around(pc, window=20)
PY" in /tmp/codex-se7tuscj succeeded in 40ms:
Around pc 920 (0x398)
0380: SWAP2
0381: DUP4
0382: SWAP1
0383: SUB
0384: ADD
0385: SWAP1
0386: DUP3
0387: SWAP1
0388: DUP8
0389: DUP1
038a: EXTCODESIZE
038b: ISZERO
038c: ISZERO
038d: PUSH2 0x0392
0390: JUMPI
0391: INVALID
0392: JUMPDEST
0393: PUSH2 0x02c6
0396: GAS
thinking
**Analyzing call and transfer patterns**
exec
/bin/bash -lc "python - <<'PY'
import json
from binascii import unhexlify
with open('BYTECODE_BUNDLE.json') as f:
data=json.load(f)
bytecode=data['artifact']['runtime_bytecode']['full']
code=unhexlify(bytecode[2:] if bytecode.startswith('0x') else bytecode)
opcodes={
0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
}
# find push4 immediate
targets={\"a9059cbb\",\"70a08231\",\"a620fcc7\",\"9507d39a\"}
pc=0
hits=[]
while pc < len(code):
op=code[pc]
if op==0x63: # PUSH4
imm=code[pc+1:pc+5].hex()
if imm in targets:
hits.append((pc, imm))
pc+=5
elif 0x60 <= op <= 0x7f:
pc += 1 + (op-0x5f)
else:
pc += 1
for pc, imm in hits:
print(hex(pc), imm)
PY" in /tmp/codex-se7tuscj succeeded in 34ms:
0x35d a620fcc7
0x373 a620fcc7
0x3ef 70a08231
0x40e 70a08231
0x677 a9059cbb
0x807 a620fcc7
0x81d a620fcc7
0x11e3 9507d39a
thinking
**Analyzing external calls and reentrancy risks**
exec
/bin/bash -lc "python - <<'PY'
import json
from binascii import unhexlify
with open('BYTECODE_BUNDLE.json') as f:
data=json.load(f)
code=unhexlify(data['artifact']['runtime_bytecode']['full'][2:])
opcodes={
0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
0x20:'SHA3',
0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5c:'TLOAD',0x5d:'TSTORE',0x5e:'MCOPY',
0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
}
# disassemble a range after call at 0x722
start=0x722
end=0x7b0
pc=0
while pc < len(code):
op=code[pc]
name=opcodes.get(op,f'OP_{op:02x}')
if 0x60 <= op <= 0x7f:
n=op-0x5f
imm=code[pc+1:pc+1+n].hex()
if start <= pc <= end:
print(f\"{pc:04x}: {name} 0x{imm}\")
pc += 1+n
else:
if start <= pc <= end:
print(f\"{pc:04x}: {name}\")
pc += 1
PY" in /tmp/codex-se7tuscj succeeded in 40ms:
0722: CALL
0723: SWAP4
0724: POP
0725: POP
0726: POP
0727: POP
0728: ISZERO
0729: ISZERO
072a: PUSH2 0x0733
072d: JUMPI
072e: PUSH1 0x00
0730: PUSH1 0x00
0732: REVERT
0733: JUMPDEST
0734: PUSH1 0x16
0736: DUP1
0737: SLOAD
0738: PUSH1 0xa8
073a: PUSH1 0x02
073c: EXP
thinking
**Analyzing potential reentrancy risk in call sequence**
exec
/bin/bash -lc "python - <<'PY'
import json
from binascii import unhexlify
with open('BYTECODE_BUNDLE.json') as f:
data=json.load(f)
code=unhexlify(data['artifact']['runtime_bytecode']['full'][2:])
opcodes={
0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
0x20:'SHA3',
0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5c:'TLOAD',0x5d:'TSTORE',0x5e:'MCOPY',
0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
}
start=0x6f0
end=0x722
pc=0
while pc < len(code):
op=code[pc]
name=opcodes.get(op,f'OP_{op:02x}')
if 0x60 <= op <= 0x7f:
n=op-0x5f
imm=code[pc+1:pc+1+n].hex()
if start <= pc <= end:
print(f\"{pc:04x}: {name} 0x{imm}\")
pc += 1+n
else:
if start <= pc <= end:
print(f\"{pc:04x}: {name}\")
pc += 1
PY" in /tmp/codex-se7tuscj succeeded in 34ms:
06f0: POP
06f1: PUSH1 0x40
06f3: MLOAD
06f4: MLOAD
06f5: ISZERO
06f6: ISZERO
06f7: SWAP1
06f8: POP
06f9: PUSH2 0x0702
06fc: JUMPI
06fd: PUSH1 0x00
06ff: PUSH1 0x00
0701: REVERT
0702: JUMPDEST
0703: PUSH1 0x40
0705: MLOAD
0706: PUSH1 0x01
0708: PUSH1 0xa0
070a: PUSH1 0x02
070c: EXP
thinking
**Analyzing potential reentrancy and call risks**
exec
/bin/bash -lc "python - <<'PY'
import json
from binascii import unhexlify
with open('BYTECODE_BUNDLE.json') as f:
data=json.load(f)
code=unhexlify(data['artifact']['runtime_bytecode']['full'][2:])
# find SSTORE around 0x600-0x740
pc=0
sstore_pcs=[]
while pc < len(code):
op=code[pc]
if op==0x55:
if 0x600 <= pc <= 0x740:
sstore_pcs.append(pc)
pc+=1
elif 0x60 <= op <= 0x7f:
pc += 1 + (op-0x5f)
else:
pc += 1
print(sstore_pcs)
PY" in /tmp/codex-se7tuscj succeeded in 31ms:
[1574, 1592, 1635]
thinking
**Analyzing SSTORE instructions near calls**
exec
/bin/bash -lc "python - <<'PY'
import json
from binascii import unhexlify
with open('BYTECODE_BUNDLE.json') as f:
data=json.load(f)
code=unhexlify(data['artifact']['runtime_bytecode']['full'][2:])
opcodes={
0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
0x20:'SHA3',
0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5c:'TLOAD',0x5d:'TSTORE',0x5e:'MCOPY',
0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
}
start=0x600
end=0x680
pc=0
while pc < len(code):
op=code[pc]
name=opcodes.get(op,f'OP_{op:02x}')
if 0x60 <= op <= 0x7f:
n=op-0x5f
imm=code[pc+1:pc+1+n].hex()
if start <= pc <= end:
print(f\"{pc:04x}: {name} 0x{imm}\")
pc += 1+n
else:
if start <= pc <= end:
print(f\"{pc:04x}: {name}\")
pc += 1
PY" in /tmp/codex-se7tuscj succeeded in 72ms:
0600: PUSH1 0xff
0602: AND
0603: SWAP1
0604: PUSH2 0x10f9
0607: JUMP
0608: JUMPDEST
0609: SWAP3
060a: POP
060b: PUSH1 0x00
060d: PUSH1 0x0f
060f: SLOAD
0610: GT
0611: ISZERO
0612: PUSH2 0x0629
0615: JUMPI
0616: PUSH2 0x0621
0619: DUP4
061a: PUSH1 0x0f
061c: SLOAD
061d: PUSH2 0x0d47
thinking
**Analyzing potential reentrancy and external calls**
I'm piecing together evidence of a possible reentrancy vulnerability due to an external CALL at pc 0x722 preceding a state update at pc 0x743, without an obvious guard. There are also multiple CALLs to computed addresses with unclear access control, posing a lower-severity risk. I'll prepare findings with supporting evidence including call program counters and summarize delegatecall metadata as non-impactful.
codex
{"no_findings":false,"summary":"One potential reentrancy pattern where an external CALL occurs before a subsequent SSTORE; several other CALLs use computed targets/values but address control is unclear from bytecode. The DELEGATECALL flagged by detectors appears in the post-STOP metadata tail (no JUMPDEST), so it is likely unreachable.","findings":[{"severity":"medium","category":"reentrancy","title":"External CALL before state update (potential reentrancy)","exploit_scenario":"If the CALL at pc:0x722 transfers ETH or invokes an attacker-controlled contract (target derived from CALLER/stack), a malicious receiver could reenter before the state update at pc:0x743 and repeat sensitive logic (e.g., withdrawals or accounting changes) to drain funds or bypass limits.","recommendation":"Apply checks-effects-interactions: move critical SSTORE updates before the external CALL or add a reentrancy guard around the function; consider pull-based payouts instead of direct CALLs.","evidence":"Bytecode shows a CALL at pc:0x722 followed by an SSTORE at pc:0x743, with no guard detected in the artifact; call arguments are computed from stack/CALLER, so the call can reach untrusted code.","locations":["pc:0x722","pc:0x743"]},{"severity":"low","category":"other","title":"External CALL targets/values are computed (audit address control)","exploit_scenario":"If any of the computed call targets/values at these callsites can be influenced by untrusted input or mutable storage without strict access control, an attacker could redirect value transfers or trigger malicious callbacks.","recommendation":"Verify that all CALL target addresses and values are either hardcoded or settable only by trusted roles; add explicit validation/allowlists for addresses and ensure reentrancy protections when calling external contracts.","evidence":"Detector evidence lists 6 CALL sites with target/value marked as computed and no guards detected; callsites at pc:0x398, 0x434, 0x6e6, 0x722, 0x842, 0x122c show EXTCODESIZE/CALL patterns with computed inputs and unknown returndata validation semantics.","locations":["pc:0x398","pc:0x434","pc:0x6e6","pc:0x722","pc:0x842","pc:0x122c"]}]}
tokens used
115,488
{
"codex": {
"ran_at": "2026-01-11T04:18:28.052825+00:00",
"returncode": 0
},
"project": {
"mode": "bytecode",
"bytecode_length": 11290,
"bytecode_truncated": false,
"capability_graph_present": true,
"analysis_artifact_present": true
},
"summary": "One potential reentrancy pattern where an external CALL occurs before a subsequent SSTORE; several other CALLs use computed targets/values but address control is unclear from bytecode. The DELEGATECALL flagged by detectors appears in the post-STOP metadata tail (no JUMPDEST), so it is likely unreachable.",
"raw_final": {
"summary": "One potential reentrancy pattern where an external CALL occurs before a subsequent SSTORE; several other CALLs use computed targets/values but address control is unclear from bytecode. The DELEGATECALL flagged by detectors appears in the post-STOP metadata tail (no JUMPDEST), so it is likely unreachable.",
"findings": [
{
"title": "External CALL before state update (potential reentrancy)",
"category": "reentrancy",
"evidence": "Bytecode shows a CALL at pc:0x722 followed by an SSTORE at pc:0x743, with no guard detected in the artifact; call arguments are computed from stack/CALLER, so the call can reach untrusted code.",
"severity": "medium",
"locations": [
"pc:0x722",
"pc:0x743"
],
"recommendation": "Apply checks-effects-interactions: move critical SSTORE updates before the external CALL or add a reentrancy guard around the function; consider pull-based payouts instead of direct CALLs.",
"exploit_scenario": "If the CALL at pc:0x722 transfers ETH or invokes an attacker-controlled contract (target derived from CALLER/stack), a malicious receiver could reenter before the state update at pc:0x743 and repeat sensitive logic (e.g., withdrawals or accounting changes) to drain funds or bypass limits."
},
{
"title": "External CALL targets/values are computed (audit address control)",
"category": "other",
"evidence": "Detector evidence lists 6 CALL sites with target/value marked as computed and no guards detected; callsites at pc:0x398, 0x434, 0x6e6, 0x722, 0x842, 0x122c show EXTCODESIZE/CALL patterns with computed inputs and unknown returndata validation semantics.",
"severity": "low",
"locations": [
"pc:0x398",
"pc:0x434",
"pc:0x6e6",
"pc:0x722",
"pc:0x842",
"pc:0x122c"
],
"recommendation": "Verify that all CALL target addresses and values are either hardcoded or settable only by trusted roles; add explicit validation/allowlists for addresses and ensure reentrancy protections when calling external contracts.",
"exploit_scenario": "If any of the computed call targets/values at these callsites can be influenced by untrusted input or mutable storage without strict access control, an attacker could redirect value transfers or trigger malicious callbacks."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x60 00000002: PUSH1 0x40 00000004: MSTORE 00000005: CALLDATASIZE 00000006: ISZERO 00000007: PUSH2 0x00ca 0000000a: JUMPI 0000000b: PUSH4 0xffffffff 00000010: PUSH1 0xe0 00000012: PUSH1 0x02 00000014: EXP 00000015: PUSH1 0x00 00000017: CALLDATALOAD 00000018: DIV 00000019: AND 0000001a: PUSH4 0x0d15fd77 0000001f: DUP2 00000020: EQ 00000021: PUSH2 0x00db 00000024: JUMPI 00000025: DUP1 00000026: PUSH4 0x2969d202 0000002b: EQ 0000002c: PUSH2 0x00fd 0000002f: JUMPI 00000030: DUP1 00000031: PUSH4 0x2e6dbdf9 00000036: EQ 00000037: PUSH2 0x011f 0000003a: JUMPI 0000003b: DUP1 0000003c: PUSH4 0x2e854433 00000041: EQ 00000042: PUSH2 0x0131 00000045: JUMPI 00000046: DUP1 00000047: PUSH4 0x47799092 0000004c: EQ 0000004d: PUSH2 0x0143 00000050: JUMPI 00000051: DUP1 00000052: PUSH4 0x4b60ce77 00000057: EQ 00000058: PUSH2 0x0158 0000005b: JUMPI 0000005c: DUP1 0000005d: PUSH4 0x4fb2e45d 00000062: EQ 00000063: PUSH2 0x0184 00000066: JUMPI 00000067: DUP1 00000068: PUSH4 0x5afb6ba5 0000006d: EQ 0000006e: PUSH2 0x01a2 00000071: JUMPI 00000072: DUP1 00000073: PUSH4 0x750142e6 00000078: EQ 00000079: PUSH2 0x01e9 0000007c: JUMPI 0000007d: DUP1 0000007e: PUSH4 0x81f4be5e 00000083: EQ 00000084: PUSH2 0x020b 00000087: JUMPI 00000088: DUP1 00000089: PUSH4 0x84bcefd4 0000008e: EQ 0000008f: PUSH2 0x0237 00000092: JUMPI 00000093: DUP1 00000094: PUSH4 0x8da5cb5b 00000099: EQ 0000009a: PUSH2 0x0259 0000009d: JUMPI 0000009e: DUP1 0000009f: PUSH4 0x96c82e57 000000a4: EQ 000000a5: PUSH2 0x0285 000000a8: JUMPI 000000a9: DUP1 000000aa: PUSH4 0xa0684251 000000af: EQ 000000b0: PUSH2 0x02a7 000000b3: JUMPI 000000b4: DUP1 000000b5: PUSH4 0xb8837957 000000ba: EQ 000000bb: PUSH2 0x02c9 000000be: JUMPI 000000bf: DUP1 000000c0: PUSH4 0xba16d600 000000c5: EQ 000000c6: PUSH2 0x02eb 000000c9: JUMPI 000000ca: JUMPDEST 000000cb: PUSH2 0x00d9 000000ce: JUMPDEST 000000cf: PUSH1 0x0b 000000d1: DUP1 000000d2: SLOAD 000000d3: CALLVALUE 000000d4: ADD 000000d5: SWAP1 000000d6: SSTORE 000000d7: JUMPDEST 000000d8: JUMP 000000d9: JUMPDEST 000000da: STOP 000000db: JUMPDEST 000000dc: CALLVALUE 000000dd: ISZERO 000000de: PUSH2 0x00e3 000000e1: JUMPI 000000e2: INVALID 000000e3: JUMPDEST 000000e4: PUSH2 0x00eb 000000e7: PUSH2 0x030d 000000ea: JUMP 000000eb: JUMPDEST 000000ec: PUSH1 0x40 000000ee: DUP1 000000ef: MLOAD 000000f0: SWAP2 000000f1: DUP3 000000f2: MSTORE 000000f3: MLOAD 000000f4: SWAP1 000000f5: DUP2 000000f6: SWAP1 000000f7: SUB 000000f8: PUSH1 0x20 000000fa: ADD 000000fb: SWAP1 000000fc: RETURN 000000fd: JUMPDEST 000000fe: CALLVALUE 000000ff: ISZERO 00000100: PUSH2 0x0105 00000103: JUMPI 00000104: INVALID 00000105: JUMPDEST 00000106: PUSH2 0x00eb 00000109: PUSH2 0x0313 0000010c: JUMP 0000010d: JUMPDEST 0000010e: PUSH1 0x40 00000110: DUP1 00000111: MLOAD 00000112: SWAP2 00000113: DUP3 00000114: MSTORE 00000115: MLOAD 00000116: SWAP1 00000117: DUP2 00000118: SWAP1 00000119: SUB 0000011a: PUSH1 0x20 0000011c: ADD 0000011d: SWAP1 0000011e: RETURN 0000011f: JUMPDEST 00000120: CALLVALUE 00000121: ISZERO 00000122: PUSH2 0x0127 00000125: JUMPI 00000126: INVALID 00000127: JUMPDEST 00000128: PUSH2 0x00d9 0000012b: PUSH2 0x0319 0000012e: JUMP 0000012f: JUMPDEST 00000130: STOP 00000131: JUMPDEST 00000132: CALLVALUE 00000133: ISZERO 00000134: PUSH2 0x0139 00000137: JUMPI 00000138: INVALID 00000139: JUMPDEST 0000013a: PUSH2 0x00d9 0000013d: PUSH2 0x0536 00000140: JUMP 00000141: JUMPDEST 00000142: STOP 00000143: JUMPDEST 00000144: CALLVALUE 00000145: ISZERO 00000146: PUSH2 0x014b 00000149: JUMPI 0000014a: INVALID 0000014b: JUMPDEST 0000014c: PUSH2 0x00d9 0000014f: PUSH1 0x04 00000151: CALLDATALOAD 00000152: PUSH2 0x0790 00000155: JUMP 00000156: JUMPDEST 00000157: STOP 00000158: JUMPDEST 00000159: CALLVALUE 0000015a: ISZERO 0000015b: PUSH2 0x0160 0000015e: JUMPI 0000015f: INVALID 00000160: JUMPDEST 00000161: PUSH2 0x0168 00000164: PUSH2 0x0a4e 00000167: JUMP 00000168: JUMPDEST 00000169: PUSH1 0x40 0000016b: DUP1 0000016c: MLOAD 0000016d: PUSH1 0x01 0000016f: PUSH1 0xa0 00000171: PUSH1 0x02 00000173: EXP 00000174: SUB 00000175: SWAP1 00000176: SWAP3 00000177: AND 00000178: DUP3 00000179: MSTORE 0000017a: MLOAD 0000017b: SWAP1 0000017c: DUP2 0000017d: SWAP1 0000017e: SUB 0000017f: PUSH1 0x20 00000181: ADD 00000182: SWAP1 00000183: RETURN 00000184: JUMPDEST 00000185: CALLVALUE 00000186: ISZERO 00000187: PUSH2 0x018c 0000018a: JUMPI 0000018b: INVALID 0000018c: JUMPDEST 0000018d: PUSH2 0x00d9 00000190: PUSH1 0x01 00000192: PUSH1 0xa0 00000194: PUSH1 0x02 00000196: EXP 00000197: SUB 00000198: PUSH1 0x04 0000019a: CALLDATALOAD 0000019b: AND 0000019c: PUSH2 0x0a5d 0000019f: JUMP 000001a0: JUMPDEST 000001a1: STOP 000001a2: JUMPDEST 000001a3: CALLVALUE 000001a4: ISZERO 000001a5: PUSH2 0x01aa 000001a8: JUMPI 000001a9: INVALID 000001aa: JUMPDEST 000001ab: PUSH2 0x01be 000001ae: PUSH1 0x01 000001b0: PUSH1 0xa0 000001b2: PUSH1 0x02 000001b4: EXP 000001b5: SUB 000001b6: PUSH1 0x04 000001b8: CALLDATALOAD 000001b9: AND 000001ba: PUSH2 0x0aa5 000001bd: JUMP 000001be: JUMPDEST 000001bf: PUSH1 0x40 000001c1: MLOAD 000001c2: DUP1 000001c3: DUP4 000001c4: DUP2 000001c5: MSTORE 000001c6: PUSH1 0x20 000001c8: ADD 000001c9: DUP3 000001ca: PUSH1 0x02 000001cc: DUP2 000001cd: GT 000001ce: ISZERO 000001cf: PUSH2 0x01d4 000001d2: JUMPI 000001d3: INVALID 000001d4: JUMPDEST 000001d5: PUSH1 0xff 000001d7: AND 000001d8: DUP2 000001d9: MSTORE 000001da: PUSH1 0x20 000001dc: ADD 000001dd: SWAP3 000001de: POP 000001df: POP 000001e0: POP 000001e1: PUSH1 0x40 000001e3: MLOAD 000001e4: DUP1 000001e5: SWAP2 000001e6: SUB 000001e7: SWAP1 000001e8: RETURN 000001e9: JUMPDEST 000001ea: CALLVALUE 000001eb: ISZERO 000001ec: PUSH2 0x01f1 000001ef: JUMPI 000001f0: INVALID 000001f1: JUMPDEST 000001f2: PUSH2 0x00eb 000001f5: PUSH2 0x0b2d 000001f8: JUMP 000001f9: JUMPDEST 000001fa: PUSH1 0x40 000001fc: DUP1 000001fd: MLOAD 000001fe: SWAP2 000001ff: DUP3 00000200: MSTORE 00000201: MLOAD 00000202: SWAP1 00000203: DUP2 00000204: SWAP1 00000205: SUB 00000206: PUSH1 0x20 00000208: ADD 00000209: SWAP1 0000020a: RETURN 0000020b: JUMPDEST 0000020c: CALLVALUE 0000020d: ISZERO 0000020e: PUSH2 0x0213 00000211: JUMPI 00000212: INVALID 00000213: JUMPDEST 00000214: PUSH2 0x0168 00000217: PUSH2 0x0b33 0000021a: JUMP 0000021b: JUMPDEST 0000021c: PUSH1 0x40 0000021e: DUP1 0000021f: MLOAD 00000220: PUSH1 0x01 00000222: PUSH1 0xa0 00000224: PUSH1 0x02 00000226: EXP 00000227: SUB 00000228: SWAP1 00000229: SWAP3 0000022a: AND 0000022b: DUP3 0000022c: MSTORE 0000022d: MLOAD 0000022e: SWAP1 0000022f: DUP2 00000230: SWAP1 00000231: SUB 00000232: PUSH1 0x20 00000234: ADD 00000235: SWAP1 00000236: RETURN 00000237: JUMPDEST 00000238: CALLVALUE 00000239: ISZERO 0000023a: PUSH2 0x023f 0000023d: JUMPI 0000023e: INVALID 0000023f: JUMPDEST 00000240: PUSH2 0x00eb 00000243: PUSH2 0x0b42 00000246: JUMP 00000247: JUMPDEST 00000248: PUSH1 0x40 0000024a: DUP1 0000024b: MLOAD 0000024c: SWAP2 0000024d: DUP3 0000024e: MSTORE 0000024f: MLOAD 00000250: SWAP1 00000251: DUP2 00000252: SWAP1 00000253: SUB 00000254: PUSH1 0x20 00000256: ADD 00000257: SWAP1 00000258: RETURN 00000259: JUMPDEST 0000025a: CALLVALUE 0000025b: ISZERO 0000025c: PUSH2 0x0261 0000025f: JUMPI 00000260: INVALID 00000261: JUMPDEST 00000262: PUSH2 0x0168 00000265: PUSH2 0x0b48 00000268: JUMP 00000269: JUMPDEST 0000026a: PUSH1 0x40 0000026c: DUP1 0000026d: MLOAD 0000026e: PUSH1 0x01 00000270: PUSH1 0xa0 00000272: PUSH1 0x02 00000274: EXP 00000275: SUB 00000276: SWAP1 00000277: SWAP3 00000278: AND 00000279: DUP3 0000027a: MSTORE 0000027b: MLOAD 0000027c: SWAP1 0000027d: DUP2 0000027e: SWAP1 0000027f: SUB 00000280: PUSH1 0x20 00000282: ADD 00000283: SWAP1 00000284: RETURN 00000285: JUMPDEST 00000286: CALLVALUE 00000287: ISZERO 00000288: PUSH2 0x028d 0000028b: JUMPI 0000028c: INVALID 0000028d: JUMPDEST 0000028e: PUSH2 0x00eb 00000291: PUSH2 0x0b57 00000294: JUMP 00000295: JUMPDEST 00000296: PUSH1 0x40 00000298: DUP1 00000299: MLOAD 0000029a: SWAP2 0000029b: DUP3 0000029c: MSTORE 0000029d: MLOAD 0000029e: SWAP1 0000029f: DUP2 000002a0: SWAP1 000002a1: SUB 000002a2: PUSH1 0x20 000002a4: ADD 000002a5: SWAP1 000002a6: RETURN 000002a7: JUMPDEST 000002a8: CALLVALUE 000002a9: ISZERO 000002aa: PUSH2 0x02af 000002ad: JUMPI 000002ae: INVALID 000002af: JUMPDEST 000002b0: PUSH2 0x00eb 000002b3: PUSH2 0x0b5d 000002b6: JUMP 000002b7: JUMPDEST 000002b8: PUSH1 0x40 000002ba: DUP1 000002bb: MLOAD 000002bc: SWAP2 000002bd: DUP3 000002be: MSTORE 000002bf: MLOAD 000002c0: SWAP1 000002c1: DUP2 000002c2: SWAP1 000002c3: SUB 000002c4: PUSH1 0x20 000002c6: ADD 000002c7: SWAP1 000002c8: RETURN 000002c9: JUMPDEST 000002ca: CALLVALUE 000002cb: ISZERO 000002cc: PUSH2 0x02d1 000002cf: JUMPI 000002d0: INVALID 000002d1: JUMPDEST 000002d2: PUSH2 0x00eb 000002d5: PUSH2 0x0b63 000002d8: JUMP 000002d9: JUMPDEST 000002da: PUSH1 0x40 000002dc: DUP1 000002dd: MLOAD 000002de: SWAP2 000002df: DUP3 000002e0: MSTORE 000002e1: MLOAD 000002e2: SWAP1 000002e3: DUP2 000002e4: SWAP1 000002e5: SUB 000002e6: PUSH1 0x20 000002e8: ADD 000002e9: SWAP1 000002ea: RETURN 000002eb: JUMPDEST 000002ec: CALLVALUE 000002ed: ISZERO 000002ee: PUSH2 0x02f3 000002f1: JUMPI 000002f2: INVALID 000002f3: JUMPDEST 000002f4: PUSH2 0x00eb 000002f7: PUSH2 0x0b69 000002fa: JUMP 000002fb: JUMPDEST 000002fc: PUSH1 0x40 000002fe: DUP1 000002ff: MLOAD 00000300: SWAP2 00000301: DUP3 00000302: MSTORE 00000303: MLOAD 00000304: SWAP1 00000305: DUP2 00000306: SWAP1 00000307: SUB 00000308: PUSH1 0x20 0000030a: ADD 0000030b: SWAP1 0000030c: RETURN 0000030d: JUMPDEST 0000030e: PUSH1 0x0c 00000310: SLOAD 00000311: DUP2 00000312: JUMP 00000313: JUMPDEST 00000314: PUSH1 0x0b 00000316: SLOAD 00000317: DUP2 00000318: JUMP 00000319: JUMPDEST 0000031a: PUSH2 0x0321 0000031d: PUSH2 0x1396 00000320: JUMP 00000321: JUMPDEST 00000322: PUSH1 0x16 00000324: SLOAD 00000325: PUSH1 0x00 00000327: SWAP1 00000328: DUP2 00000329: SWAP1 0000032a: DUP2 0000032b: SWAP1 0000032c: DUP2 0000032d: SWAP1 0000032e: DUP2 0000032f: SWAP1 00000330: PUSH1 0xa0 00000332: PUSH1 0x02 00000334: EXP 00000335: SWAP1 00000336: DIV 00000337: PUSH1 0xff 00000339: AND 0000033a: ISZERO 0000033b: PUSH2 0x0344 0000033e: JUMPI 0000033f: PUSH1 0x00 00000341: PUSH1 0x00 00000343: REVERT 00000344: JUMPDEST 00000345: PUSH1 0x15 00000347: SLOAD 00000348: PUSH1 0x40 0000034a: DUP1 0000034b: MLOAD 0000034c: PUSH1 0x00 0000034e: PUSH1 0x20 00000350: SWAP2 00000351: DUP3 00000352: ADD 00000353: DUP2 00000354: SWAP1 00000355: MSTORE 00000356: DUP3 00000357: MLOAD 00000358: PUSH1 0xe0 0000035a: PUSH1 0x02 0000035c: EXP 0000035d: PUSH4 0xa620fcc7 00000362: MUL 00000363: DUP2 00000364: MSTORE 00000365: SWAP3 00000366: MLOAD 00000367: PUSH1 0x01 00000369: PUSH1 0xa0 0000036b: PUSH1 0x02 0000036d: EXP 0000036e: SUB 0000036f: SWAP1 00000370: SWAP5 00000371: AND 00000372: SWAP4 00000373: PUSH4 0xa620fcc7 00000378: SWAP4 00000379: PUSH1 0x04 0000037b: DUP1 0000037c: DUP3 0000037d: ADD 0000037e: SWAP5 0000037f: SWAP4 00000380: SWAP2 00000381: DUP4 00000382: SWAP1 00000383: SUB 00000384: ADD 00000385: SWAP1 00000386: DUP3 00000387: SWAP1 00000388: DUP8 00000389: DUP1 0000038a: EXTCODESIZE 0000038b: ISZERO 0000038c: ISZERO 0000038d: PUSH2 0x0392 00000390: JUMPI 00000391: INVALID 00000392: JUMPDEST 00000393: PUSH2 0x02c6 00000396: GAS 00000397: SUB 00000398: CALL 00000399: ISZERO 0000039a: ISZERO 0000039b: PUSH2 0x03a0 0000039e: JUMPI 0000039f: INVALID 000003a0: JUMPDEST 000003a1: POP 000003a2: POP 000003a3: PUSH1 0x40 000003a5: MLOAD 000003a6: MLOAD 000003a7: PUSH1 0x0c 000003a9: SLOAD 000003aa: EQ 000003ab: SWAP1 000003ac: POP 000003ad: PUSH2 0x03b6 000003b0: JUMPI 000003b1: PUSH1 0x00 000003b3: PUSH1 0x00 000003b5: REVERT 000003b6: JUMPDEST 000003b7: PUSH1 0x0e 000003b9: SLOAD 000003ba: PUSH1 0x0b 000003bc: SLOAD 000003bd: LT 000003be: ISZERO 000003bf: PUSH2 0x03c8 000003c2: JUMPI 000003c3: PUSH1 0x00 000003c5: PUSH1 0x00 000003c7: REVERT 000003c8: JUMPDEST 000003c9: PUSH2 0x03d6 000003cc: PUSH1 0x0e 000003ce: SLOAD 000003cf: PUSH1 0x17 000003d1: SLOAD 000003d2: PUSH2 0x0b6f 000003d5: JUMP 000003d6: JUMPDEST 000003d7: PUSH1 0x16 000003d9: SLOAD 000003da: PUSH1 0x40 000003dc: DUP1 000003dd: MLOAD 000003de: PUSH1 0x00 000003e0: PUSH1 0x20 000003e2: SWAP2 000003e3: DUP3 000003e4: ADD 000003e5: DUP2 000003e6: SWAP1 000003e7: MSTORE 000003e8: DUP3 000003e9: MLOAD 000003ea: PUSH1 0xe0 000003ec: PUSH1 0x02 000003ee: EXP 000003ef: PUSH4 0x70a08231 000003f4: MUL 000003f5: DUP2 000003f6: MSTORE 000003f7: PUSH1 0x01 000003f9: PUSH1 0xa0 000003fb: PUSH1 0x02 000003fd: EXP 000003fe: SUB 000003ff: ADDRESS 00000400: DUP2 00000401: AND 00000402: PUSH1 0x04 00000404: DUP4 00000405: ADD 00000406: MSTORE 00000407: SWAP4 00000408: MLOAD 00000409: SWAP4 0000040a: SWAP1 0000040b: SWAP5 0000040c: AND 0000040d: SWAP4 0000040e: PUSH4 0x70a08231 00000413: SWAP4 00000414: PUSH1 0x24 00000416: DUP1 00000417: DUP4 00000418: ADD 00000419: SWAP5 0000041a: SWAP4 0000041b: SWAP2 0000041c: SWAP3 0000041d: DUP4 0000041e: SWAP1 0000041f: SUB 00000420: ADD 00000421: SWAP1 00000422: DUP3 00000423: SWAP1 00000424: DUP8 00000425: DUP1 00000426: EXTCODESIZE 00000427: ISZERO 00000428: ISZERO 00000429: PUSH2 0x042e 0000042c: JUMPI 0000042d: INVALID 0000042e: JUMPDEST 0000042f: PUSH2 0x02c6 00000432: GAS 00000433: SUB 00000434: CALL 00000435: ISZERO 00000436: ISZERO 00000437: PUSH2 0x043c 0000043a: JUMPI 0000043b: INVALID 0000043c: JUMPDEST 0000043d: POP 0000043e: POP 0000043f: PUSH1 0x40 00000441: MLOAD 00000442: MLOAD 00000443: SWAP2 00000444: SWAP1 00000445: SWAP2 00000446: LT 00000447: ISZERO 00000448: SWAP1 00000449: POP 0000044a: PUSH2 0x0453 0000044d: JUMPI 0000044e: PUSH1 0x00 00000450: PUSH1 0x00 00000452: REVERT 00000453: JUMPDEST 00000454: PUSH2 0x045b 00000457: PUSH2 0x0b9e 0000045a: JUMP 0000045b: JUMPDEST 0000045c: SWAP6 0000045d: POP 0000045e: PUSH1 0x08 00000460: SLOAD 00000461: SWAP5 00000462: POP 00000463: JUMPDEST 00000464: PUSH1 0x09 00000466: SLOAD 00000467: DUP6 00000468: GT 00000469: PUSH2 0x0490 0000046c: JUMPI 0000046d: PUSH2 0x0478 00000470: DUP5 00000471: PUSH1 0x0a 00000473: SLOAD 00000474: PUSH2 0x0d47 00000477: JUMP 00000478: JUMPDEST 00000479: SWAP4 0000047a: POP 0000047b: PUSH2 0x0486 0000047e: DUP7 0000047f: DUP7 00000480: DUP7 00000481: DUP7 00000482: PUSH2 0x0d6f 00000485: JUMP 00000486: JUMPDEST 00000487: SWAP3 00000488: POP 00000489: DUP4 0000048a: SWAP5 0000048b: POP 0000048c: PUSH2 0x0463 0000048f: JUMP 00000490: JUMPDEST 00000491: PUSH2 0x049e 00000494: PUSH1 0x02 00000496: SLOAD 00000497: PUSH1 0x0c 00000499: SLOAD 0000049a: PUSH2 0x0b6f 0000049d: JUMP 0000049e: JUMPDEST 0000049f: PUSH1 0x0e 000004a1: SLOAD 000004a2: SWAP1 000004a3: SWAP3 000004a4: POP 000004a5: DUP3 000004a6: LT 000004a7: PUSH2 0x04b0 000004aa: JUMPI 000004ab: PUSH1 0x00 000004ad: PUSH1 0x00 000004af: REVERT 000004b0: JUMPDEST 000004b1: PUSH1 0x0e 000004b3: DUP1 000004b4: SLOAD 000004b5: DUP4 000004b6: SWAP1 000004b7: SUB 000004b8: SWAP1 000004b9: SSTORE 000004ba: PUSH2 0x04c1 000004bd: PUSH2 0x0f59 000004c0: JUMP 000004c1: JUMPDEST 000004c2: PUSH1 0x0f 000004c4: SSTORE 000004c5: PUSH1 0x16 000004c7: DUP1 000004c8: SLOAD 000004c9: PUSH1 0xa0 000004cb: PUSH1 0x02 000004cd: EXP 000004ce: PUSH1 0xff 000004d0: MUL 000004d1: NOT 000004d2: AND 000004d3: PUSH1 0xa0 000004d5: PUSH1 0x02 000004d7: EXP 000004d8: OR 000004d9: SWAP1 000004da: SSTORE 000004db: PUSH1 0x10 000004dd: SLOAD 000004de: PUSH1 0x11 000004e0: SLOAD 000004e1: PUSH1 0x12 000004e3: SLOAD 000004e4: PUSH1 0x13 000004e6: SLOAD 000004e7: PUSH1 0x40 000004e9: DUP1 000004ea: MLOAD 000004eb: SWAP5 000004ec: DUP6 000004ed: MSTORE 000004ee: PUSH1 0x20 000004f0: DUP6 000004f1: ADD 000004f2: SWAP4 000004f3: SWAP1 000004f4: SWAP4 000004f5: MSTORE 000004f6: DUP4 000004f7: DUP4 000004f8: ADD 000004f9: SWAP2 000004fa: SWAP1 000004fb: SWAP2 000004fc: MSTORE 000004fd: PUSH1 0x60 000004ff: DUP4 00000500: ADD 00000501: MSTORE 00000502: MLOAD 00000503: PUSH32 0x23ab3fd308ef0e085d61939ed6d3e141f21837614a02ed448da4dce240245344 00000524: SWAP2 00000525: DUP2 00000526: SWAP1 00000527: SUB 00000528: PUSH1 0x80 0000052a: ADD 0000052b: SWAP1 0000052c: LOG1 0000052d: JUMPDEST 0000052e: JUMPDEST 0000052f: POP 00000530: POP 00000531: POP 00000532: POP 00000533: POP 00000534: POP 00000535: JUMP 00000536: JUMPDEST 00000537: PUSH1 0x16 00000539: SLOAD 0000053a: PUSH1 0x00 0000053c: SWAP1 0000053d: DUP2 0000053e: SWAP1 0000053f: PUSH1 0x01 00000541: SWAP1 00000542: PUSH1 0xa0 00000544: PUSH1 0x02 00000546: EXP 00000547: SWAP1 00000548: DIV 00000549: PUSH1 0xff 0000054b: AND 0000054c: ISZERO 0000054d: ISZERO 0000054e: DUP2 0000054f: EQ 00000550: PUSH2 0x0559 00000553: JUMPI 00000554: PUSH1 0x00 00000556: PUSH1 0x00 00000558: REVERT 00000559: JUMPDEST 0000055a: CALLER 0000055b: PUSH1 0x01 0000055d: JUMPDEST 0000055e: PUSH1 0x01 00000560: PUSH1 0xa0 00000562: PUSH1 0x02 00000564: EXP 00000565: SUB 00000566: DUP3 00000567: AND 00000568: PUSH1 0x00 0000056a: SWAP1 0000056b: DUP2 0000056c: MSTORE 0000056d: PUSH1 0x14 0000056f: PUSH1 0x20 00000571: MSTORE 00000572: PUSH1 0x40 00000574: SWAP1 00000575: KECCAK256 00000576: PUSH1 0x02 00000578: SWAP1 00000579: DUP2 0000057a: ADD 0000057b: SLOAD 0000057c: PUSH1 0xff 0000057e: AND 0000057f: SWAP1 00000580: DUP2 00000581: GT 00000582: ISZERO 00000583: PUSH2 0x0588 00000586: JUMPI 00000587: INVALID 00000588: JUMPDEST 00000589: EQ 0000058a: PUSH2 0x0593 0000058d: JUMPI 0000058e: PUSH1 0x00 00000590: PUSH1 0x00 00000592: REVERT 00000593: JUMPDEST 00000594: PUSH1 0x16 00000596: SLOAD 00000597: PUSH1 0xa8 00000599: PUSH1 0x02 0000059b: EXP 0000059c: SWAP1 0000059d: DIV 0000059e: PUSH1 0xff 000005a0: AND 000005a1: ISZERO 000005a2: PUSH2 0x05ab 000005a5: JUMPI 000005a6: PUSH1 0x00 000005a8: PUSH1 0x00 000005aa: REVERT 000005ab: JUMPDEST 000005ac: PUSH1 0x16 000005ae: DUP1 000005af: SLOAD 000005b0: PUSH1 0xa8 000005b2: PUSH1 0x02 000005b4: EXP 000005b5: PUSH1 0xff 000005b7: MUL 000005b8: NOT 000005b9: AND 000005ba: PUSH1 0xa8 000005bc: PUSH1 0x02 000005be: EXP 000005bf: OR 000005c0: SWAP1 000005c1: SSTORE 000005c2: PUSH1 0x01 000005c4: PUSH1 0xa0 000005c6: PUSH1 0x02 000005c8: EXP 000005c9: SUB 000005ca: CALLER 000005cb: AND 000005cc: PUSH1 0x00 000005ce: SWAP1 000005cf: DUP2 000005d0: MSTORE 000005d1: PUSH1 0x14 000005d3: PUSH1 0x20 000005d5: SWAP1 000005d6: DUP2 000005d7: MSTORE 000005d8: PUSH1 0x40 000005da: DUP1 000005db: DUP4 000005dc: KECCAK256 000005dd: DUP1 000005de: SLOAD 000005df: DUP5 000005e0: MSTORE 000005e1: PUSH1 0x07 000005e3: SWAP1 000005e4: SWAP3 000005e5: MSTORE 000005e6: SWAP1 000005e7: SWAP2 000005e8: KECCAK256 000005e9: PUSH1 0x01 000005eb: SWAP1 000005ec: DUP2 000005ed: ADD 000005ee: SLOAD 000005ef: SWAP1 000005f0: DUP3 000005f1: ADD 000005f2: SLOAD 000005f3: SWAP2 000005f4: SWAP6 000005f5: POP 000005f6: PUSH2 0x0608 000005f9: SWAP2 000005fa: PUSH2 0x0100 000005fd: SWAP1 000005fe: SWAP2 000005ff: DIV 00000600: PUSH1 0xff 00000602: AND 00000603: SWAP1 00000604: PUSH2 0x10f9 00000607: JUMP 00000608: JUMPDEST 00000609: SWAP3 0000060a: POP 0000060b: PUSH1 0x00 0000060d: PUSH1 0x0f 0000060f: SLOAD 00000610: GT 00000611: ISZERO 00000612: PUSH2 0x0629 00000615: JUMPI 00000616: PUSH2 0x0621 00000619: DUP4 0000061a: PUSH1 0x0f 0000061c: SLOAD 0000061d: PUSH2 0x0d47 00000620: JUMP 00000621: JUMPDEST 00000622: PUSH1 0x00 00000624: PUSH1 0x0f 00000626: SSTORE 00000627: SWAP3 00000628: POP 00000629: JUMPDEST 0000062a: PUSH2 0x0635 0000062d: PUSH1 0x0b 0000062f: SLOAD 00000630: DUP5 00000631: PUSH2 0x119a 00000634: JUMP 00000635: JUMPDEST 00000636: PUSH1 0x0b 00000638: SSTORE 00000639: PUSH1 0x01 0000063b: PUSH1 0xa0 0000063d: PUSH1 0x02 0000063f: EXP 00000640: SUB 00000641: CALLER 00000642: AND 00000643: PUSH1 0x00 00000645: SWAP1 00000646: DUP2 00000647: MSTORE 00000648: PUSH1 0x14 0000064a: PUSH1 0x20 0000064c: MSTORE 0000064d: PUSH1 0x40 0000064f: SWAP1 00000650: KECCAK256 00000651: PUSH1 0x02 00000653: SWAP1 00000654: DUP2 00000655: ADD 00000656: DUP1 00000657: SLOAD 00000658: PUSH1 0xff 0000065a: NOT 0000065b: AND 0000065c: PUSH1 0x01 0000065e: DUP4 0000065f: JUMPDEST 00000660: MUL 00000661: OR 00000662: SWAP1 00000663: SSTORE 00000664: POP 00000665: PUSH1 0x16 00000667: SLOAD 00000668: PUSH1 0x17 0000066a: SLOAD 0000066b: PUSH1 0x01 0000066d: PUSH1 0xa0 0000066f: PUSH1 0x02 00000671: EXP 00000672: SUB 00000673: SWAP1 00000674: SWAP2 00000675: AND 00000676: SWAP1 00000677: PUSH4 0xa9059cbb 0000067c: SWAP1 0000067d: CALLER 0000067e: SWAP1 0000067f: PUSH2 0x0689 00000682: SWAP1 00000683: DUP8 00000684: SWAP1 00000685: PUSH2 0x0b6f 00000688: JUMP 00000689: JUMPDEST 0000068a: PUSH1 0x00 0000068c: PUSH1 0x40 0000068e: MLOAD 0000068f: PUSH1 0x20 00000691: ADD 00000692: MSTORE 00000693: PUSH1 0x40 00000695: MLOAD 00000696: DUP4 00000697: PUSH4 0xffffffff 0000069c: AND 0000069d: PUSH1 0xe0 0000069f: PUSH1 0x02 000006a1: EXP 000006a2: MUL 000006a3: DUP2 000006a4: MSTORE 000006a5: PUSH1 0x04 000006a7: ADD 000006a8: DUP1 000006a9: DUP4 000006aa: PUSH1 0x01 000006ac: PUSH1 0xa0 000006ae: PUSH1 0x02 000006b0: EXP 000006b1: SUB 000006b2: AND 000006b3: PUSH1 0x01 000006b5: PUSH1 0xa0 000006b7: PUSH1 0x02 000006b9: EXP 000006ba: SUB 000006bb: AND 000006bc: DUP2 000006bd: MSTORE 000006be: PUSH1 0x20 000006c0: ADD 000006c1: DUP3 000006c2: DUP2 000006c3: MSTORE 000006c4: PUSH1 0x20 000006c6: ADD 000006c7: SWAP3 000006c8: POP 000006c9: POP 000006ca: POP 000006cb: PUSH1 0x20 000006cd: PUSH1 0x40 000006cf: MLOAD 000006d0: DUP1 000006d1: DUP4 000006d2: SUB 000006d3: DUP2 000006d4: PUSH1 0x00 000006d6: DUP8 000006d7: DUP1 000006d8: EXTCODESIZE 000006d9: ISZERO 000006da: ISZERO 000006db: PUSH2 0x06e0 000006de: JUMPI 000006df: INVALID 000006e0: JUMPDEST 000006e1: PUSH2 0x02c6 000006e4: GAS 000006e5: SUB 000006e6: CALL 000006e7: ISZERO 000006e8: ISZERO 000006e9: PUSH2 0x06ee 000006ec: JUMPI 000006ed: INVALID 000006ee: JUMPDEST 000006ef: POP 000006f0: POP 000006f1: PUSH1 0x40 000006f3: MLOAD 000006f4: MLOAD 000006f5: ISZERO 000006f6: ISZERO 000006f7: SWAP1 000006f8: POP 000006f9: PUSH2 0x0702 000006fc: JUMPI 000006fd: PUSH1 0x00 000006ff: PUSH1 0x00 00000701: REVERT 00000702: JUMPDEST 00000703: PUSH1 0x40 00000705: MLOAD 00000706: PUSH1 0x01 00000708: PUSH1 0xa0 0000070a: PUSH1 0x02 0000070c: EXP 0000070d: SUB 0000070e: CALLER 0000070f: AND 00000710: SWAP1 00000711: DUP5 00000712: ISZERO 00000713: PUSH2 0x08fc 00000716: MUL 00000717: SWAP1 00000718: DUP6 00000719: SWAP1 0000071a: PUSH1 0x00 0000071c: DUP2 0000071d: DUP2 0000071e: DUP2 0000071f: DUP6 00000720: DUP9 00000721: DUP9 00000722: CALL 00000723: SWAP4 00000724: POP 00000725: POP 00000726: POP 00000727: POP 00000728: ISZERO 00000729: ISZERO 0000072a: PUSH2 0x0733 0000072d: JUMPI 0000072e: PUSH1 0x00 00000730: PUSH1 0x00 00000732: REVERT 00000733: JUMPDEST 00000734: PUSH1 0x16 00000736: DUP1 00000737: SLOAD 00000738: PUSH1 0xa8 0000073a: PUSH1 0x02 0000073c: EXP 0000073d: PUSH1 0xff 0000073f: MUL 00000740: NOT 00000741: AND 00000742: SWAP1 00000743: SSTORE 00000744: PUSH1 0x40 00000746: DUP1 00000747: MLOAD 00000748: PUSH1 0x01 0000074a: PUSH1 0xa0 0000074c: PUSH1 0x02 0000074e: EXP 0000074f: SUB 00000750: CALLER 00000751: AND 00000752: DUP2 00000753: MSTORE 00000754: PUSH1 0x20 00000756: DUP2 00000757: ADD 00000758: DUP6 00000759: SWAP1 0000075a: MSTORE 0000075b: DUP2 0000075c: MLOAD 0000075d: PUSH32 0x5bf2177ec82333d646ddac9ef13ddd7f57260091072d459309fe1a9ee531e2ca 0000077e: SWAP3 0000077f: SWAP2 00000780: DUP2 00000781: SWAP1 00000782: SUB 00000783: SWAP1 00000784: SWAP2 00000785: ADD 00000786: SWAP1 00000787: LOG1 00000788: JUMPDEST 00000789: JUMPDEST 0000078a: POP 0000078b: JUMPDEST 0000078c: POP 0000078d: POP 0000078e: POP 0000078f: JUMP 00000790: JUMPDEST 00000791: PUSH1 0x00 00000793: PUSH1 0x00 00000795: PUSH1 0x00 00000797: PUSH1 0x00 00000799: PUSH1 0x00 0000079b: PUSH1 0x00 0000079d: PUSH1 0x00 0000079f: PUSH1 0x00 000007a1: PUSH1 0x00 000007a3: PUSH1 0x00 000007a5: PUSH1 0x00 000007a7: PUSH1 0x00 000007a9: SWAP1 000007aa: SLOAD 000007ab: SWAP1 000007ac: PUSH2 0x0100 000007af: EXP 000007b0: SWAP1 000007b1: DIV 000007b2: PUSH1 0x01 000007b4: PUSH1 0xa0 000007b6: PUSH1 0x02 000007b8: EXP 000007b9: SUB 000007ba: AND 000007bb: PUSH1 0x01 000007bd: PUSH1 0xa0 000007bf: PUSH1 0x02 000007c1: EXP 000007c2: SUB 000007c3: AND 000007c4: CALLER 000007c5: PUSH1 0x01 000007c7: PUSH1 0xa0 000007c9: PUSH1 0x02 000007cb: EXP 000007cc: SUB 000007cd: AND 000007ce: EQ 000007cf: ISZERO 000007d0: PUSH2 0x0a40 000007d3: JUMPI 000007d4: PUSH1 0x16 000007d6: SLOAD 000007d7: PUSH1 0x00 000007d9: SWAP1 000007da: PUSH1 0xa0 000007dc: PUSH1 0x02 000007de: EXP 000007df: SWAP1 000007e0: DIV 000007e1: PUSH1 0xff 000007e3: AND 000007e4: ISZERO 000007e5: PUSH2 0x07ee 000007e8: JUMPI 000007e9: PUSH1 0x00 000007eb: PUSH1 0x00 000007ed: REVERT 000007ee: JUMPDEST 000007ef: PUSH1 0x15 000007f1: SLOAD 000007f2: PUSH1 0x40 000007f4: DUP1 000007f5: MLOAD 000007f6: PUSH1 0x00 000007f8: PUSH1 0x20 000007fa: SWAP2 000007fb: DUP3 000007fc: ADD 000007fd: DUP2 000007fe: SWAP1 000007ff: MSTORE 00000800: DUP3 00000801: MLOAD 00000802: PUSH1 0xe0 00000804: PUSH1 0x02 00000806: EXP 00000807: PUSH4 0xa620fcc7 0000080c: MUL 0000080d: DUP2 0000080e: MSTORE 0000080f: SWAP3 00000810: MLOAD 00000811: PUSH1 0x01 00000813: PUSH1 0xa0 00000815: PUSH1 0x02 00000817: EXP 00000818: SUB 00000819: SWAP1 0000081a: SWAP5 0000081b: AND 0000081c: SWAP4 0000081d: PUSH4 0xa620fcc7 00000822: SWAP4 00000823: PUSH1 0x04 00000825: DUP1 00000826: DUP3 00000827: ADD 00000828: SWAP5 00000829: SWAP4 0000082a: SWAP2 0000082b: DUP4 0000082c: SWAP1 0000082d: SUB 0000082e: ADD 0000082f: SWAP1 00000830: DUP3 00000831: SWAP1 00000832: DUP8 00000833: DUP1 00000834: EXTCODESIZE 00000835: ISZERO 00000836: ISZERO 00000837: PUSH2 0x083c 0000083a: JUMPI 0000083b: INVALID 0000083c: JUMPDEST 0000083d: PUSH2 0x02c6 00000840: GAS 00000841: SUB 00000842: CALL 00000843: ISZERO 00000844: ISZERO 00000845: PUSH2 0x084a 00000848: JUMPI 00000849: INVALID 0000084a: JUMPDEST 0000084b: POP 0000084c: POP 0000084d: PUSH1 0x40 0000084f: MLOAD 00000850: MLOAD 00000851: SWAP7 00000852: POP 00000853: POP 00000854: DUP6 00000855: DUP13 00000856: LT 00000857: PUSH2 0x0860 0000085a: JUMPI 0000085b: PUSH1 0x00 0000085d: PUSH1 0x00 0000085f: REVERT 00000860: JUMPDEST 00000861: PUSH1 0x0c 00000863: SLOAD 00000864: DUP7 00000865: SWAP1 00000866: LT 00000867: PUSH2 0x0870 0000086a: JUMPI 0000086b: PUSH1 0x00 0000086d: PUSH1 0x00 0000086f: REVERT 00000870: JUMPDEST 00000871: PUSH2 0x0879 00000874: DUP13 00000875: PUSH2 0x11b3 00000878: JUMP 00000879: JUMPDEST 0000087a: SWAP4 0000087b: SWAP15 0000087c: POP 0000087d: SWAP2 0000087e: SWAP13 0000087f: POP 00000880: SWAP11 00000881: POP 00000882: SWAP9 00000883: POP 00000884: SWAP7 00000885: POP 00000886: PUSH1 0x01 00000888: PUSH1 0xa0 0000088a: PUSH1 0x02 0000088c: EXP 0000088d: SUB 0000088e: DUP12 0000088f: AND 00000890: ISZERO 00000891: ISZERO 00000892: PUSH2 0x089b 00000895: JUMPI 00000896: PUSH1 0x00 00000898: PUSH1 0x00 0000089a: REVERT 0000089b: JUMPDEST 0000089c: PUSH1 0x00 0000089e: JUMPDEST 0000089f: PUSH1 0x01 000008a1: PUSH1 0xa0 000008a3: PUSH1 0x02 000008a5: EXP 000008a6: SUB 000008a7: DUP13 000008a8: AND 000008a9: PUSH1 0x00 000008ab: SWAP1 000008ac: DUP2 000008ad: MSTORE 000008ae: PUSH1 0x14 000008b0: PUSH1 0x20 000008b2: MSTORE 000008b3: PUSH1 0x40 000008b5: SWAP1 000008b6: KECCAK256 000008b7: PUSH1 0x02 000008b9: SWAP1 000008ba: DUP2 000008bb: ADD 000008bc: SLOAD 000008bd: PUSH1 0xff 000008bf: AND 000008c0: SWAP1 000008c1: DUP2 000008c2: GT 000008c3: ISZERO 000008c4: PUSH2 0x08c9 000008c7: JUMPI 000008c8: INVALID 000008c9: JUMPDEST 000008ca: EQ 000008cb: PUSH2 0x08d4 000008ce: JUMPI 000008cf: PUSH1 0x00 000008d1: PUSH1 0x00 000008d3: REVERT 000008d4: JUMPDEST 000008d5: PUSH1 0x0a 000008d7: SLOAD 000008d8: DUP11 000008d9: DUP2 000008da: ISZERO 000008db: ISZERO 000008dc: PUSH2 0x08e1 000008df: JUMPI 000008e0: INVALID 000008e1: JUMPDEST 000008e2: MOD 000008e3: SWAP5 000008e4: POP 000008e5: PUSH1 0x08 000008e7: SLOAD 000008e8: DUP11 000008e9: LT 000008ea: ISZERO 000008eb: PUSH2 0x08f8 000008ee: JUMPI 000008ef: PUSH1 0x08 000008f1: SLOAD 000008f2: SWAP4 000008f3: POP 000008f4: PUSH2 0x093a 000008f7: JUMP 000008f8: JUMPDEST 000008f9: PUSH1 0x09 000008fb: SLOAD 000008fc: DUP11 000008fd: GT 000008fe: ISZERO 000008ff: PUSH2 0x090c 00000902: JUMPI 00000903: PUSH1 0x09 00000905: SLOAD 00000906: SWAP4 00000907: POP 00000908: PUSH2 0x093a 0000090b: JUMP 0000090c: JUMPDEST 0000090d: DUP10 0000090e: SWAP4 0000090f: POP 00000910: DUP5 00000911: ISZERO 00000912: PUSH2 0x093a 00000915: JUMPI 00000916: PUSH2 0x091f 00000919: DUP11 0000091a: DUP7 0000091b: PUSH2 0x119a 0000091e: JUMP 0000091f: JUMPDEST 00000920: SWAP4 00000921: POP 00000922: PUSH1 0x01 00000924: SLOAD 00000925: DUP5 00000926: LT 00000927: ISZERO 00000928: PUSH2 0x093a 0000092b: JUMPI 0000092c: PUSH2 0x0937 0000092f: DUP5 00000930: PUSH1 0x0a 00000932: SLOAD 00000933: PUSH2 0x0d47 00000936: JUMP 00000937: JUMPDEST 00000938: SWAP4 00000939: POP 0000093a: JUMPDEST 0000093b: JUMPDEST 0000093c: JUMPDEST 0000093d: JUMPDEST 0000093e: PUSH1 0x00 00000940: DUP5 00000941: DUP2 00000942: MSTORE 00000943: PUSH1 0x07 00000945: PUSH1 0x20 00000947: MSTORE 00000948: PUSH1 0x40 0000094a: SWAP1 0000094b: KECCAK256 0000094c: PUSH1 0x01 0000094e: DUP2 0000094f: ADD 00000950: SLOAD 00000951: SWAP1 00000952: SWAP4 00000953: POP 00000954: PUSH3 0x010000 00000958: SWAP1 00000959: DIV 0000095a: PUSH1 0xff 0000095c: AND 0000095d: ISZERO 0000095e: ISZERO 0000095f: PUSH2 0x0968 00000962: JUMPI 00000963: PUSH1 0x00 00000965: PUSH1 0x00 00000967: REVERT 00000968: JUMPDEST 00000969: PUSH2 0x0973 0000096c: DUP10 0000096d: DUP10 0000096e: DUP10 0000096f: PUSH2 0x127f 00000972: JUMP 00000973: JUMPDEST 00000974: PUSH1 0x00 00000976: DUP6 00000977: DUP2 00000978: MSTORE 00000979: PUSH1 0x07 0000097b: PUSH1 0x20 0000097d: MSTORE 0000097e: PUSH1 0x40 00000980: SWAP1 00000981: KECCAK256 00000982: SLOAD 00000983: SWAP1 00000984: SWAP3 00000985: POP 00000986: PUSH2 0x098f 00000989: SWAP1 0000098a: DUP4 0000098b: PUSH2 0x0d47 0000098e: JUMP 0000098f: JUMPDEST 00000990: PUSH1 0x00 00000992: DUP6 00000993: DUP2 00000994: MSTORE 00000995: PUSH1 0x07 00000997: PUSH1 0x20 00000999: MSTORE 0000099a: PUSH1 0x40 0000099c: SWAP1 0000099d: KECCAK256 0000099e: SSTORE 0000099f: PUSH1 0x0d 000009a1: SLOAD 000009a2: PUSH2 0x09ab 000009a5: SWAP1 000009a6: DUP4 000009a7: PUSH2 0x0d47 000009aa: JUMP 000009ab: JUMPDEST 000009ac: PUSH1 0x0d 000009ae: SSTORE 000009af: PUSH1 0x0c 000009b1: DUP1 000009b2: SLOAD 000009b3: PUSH1 0x01 000009b5: SWAP1 000009b6: DUP2 000009b7: ADD 000009b8: SWAP1 000009b9: SWAP2 000009ba: SSTORE 000009bb: PUSH1 0x01 000009bd: PUSH1 0xa0 000009bf: PUSH1 0x02 000009c1: EXP 000009c2: SUB 000009c3: DUP13 000009c4: AND 000009c5: PUSH1 0x00 000009c7: SWAP1 000009c8: DUP2 000009c9: MSTORE 000009ca: PUSH1 0x14 000009cc: PUSH1 0x20 000009ce: MSTORE 000009cf: PUSH1 0x40 000009d1: SWAP1 000009d2: KECCAK256 000009d3: DUP6 000009d4: DUP2 000009d5: SSTORE 000009d6: DUP1 000009d7: DUP3 000009d8: ADD 000009d9: DUP5 000009da: SWAP1 000009db: SSTORE 000009dc: PUSH1 0x02 000009de: ADD 000009df: DUP1 000009e0: SLOAD 000009e1: PUSH1 0xff 000009e3: NOT 000009e4: AND 000009e5: DUP3 000009e6: DUP1 000009e7: JUMPDEST 000009e8: MUL 000009e9: OR 000009ea: SWAP1 000009eb: SSTORE 000009ec: POP 000009ed: PUSH1 0x40 000009ef: DUP1 000009f0: MLOAD 000009f1: PUSH1 0x01 000009f3: PUSH1 0xa0 000009f5: PUSH1 0x02 000009f7: EXP 000009f8: SUB 000009f9: DUP14 000009fa: AND 000009fb: DUP2 000009fc: MSTORE 000009fd: PUSH1 0x20 000009ff: DUP2 00000a00: ADD 00000a01: DUP13 00000a02: SWAP1 00000a03: MSTORE 00000a04: DUP1 00000a05: DUP3 00000a06: ADD 00000a07: DUP7 00000a08: SWAP1 00000a09: MSTORE 00000a0a: PUSH1 0x60 00000a0c: DUP2 00000a0d: ADD 00000a0e: DUP5 00000a0f: SWAP1 00000a10: MSTORE 00000a11: SWAP1 00000a12: MLOAD 00000a13: PUSH32 0x9ec97c382d56b4d35b4d7057460ea7f57ff800af60a182833c33dc3e9b65726e 00000a34: SWAP2 00000a35: DUP2 00000a36: SWAP1 00000a37: SUB 00000a38: PUSH1 0x80 00000a3a: ADD 00000a3b: SWAP1 00000a3c: LOG1 00000a3d: JUMPDEST 00000a3e: JUMPDEST 00000a3f: POP 00000a40: JUMPDEST 00000a41: JUMPDEST 00000a42: POP 00000a43: POP 00000a44: POP 00000a45: POP 00000a46: POP 00000a47: POP 00000a48: POP 00000a49: POP 00000a4a: POP 00000a4b: POP 00000a4c: POP 00000a4d: JUMP 00000a4e: JUMPDEST 00000a4f: PUSH1 0x16 00000a51: SLOAD 00000a52: PUSH1 0x01 00000a54: PUSH1 0xa0 00000a56: PUSH1 0x02 00000a58: EXP 00000a59: SUB 00000a5a: AND 00000a5b: DUP2 00000a5c: JUMP 00000a5d: JUMPDEST 00000a5e: PUSH1 0x00 00000a60: SLOAD 00000a61: CALLER 00000a62: PUSH1 0x01 00000a64: PUSH1 0xa0 00000a66: PUSH1 0x02 00000a68: EXP 00000a69: SUB 00000a6a: SWAP1 00000a6b: DUP2 00000a6c: AND 00000a6d: SWAP2 00000a6e: AND 00000a6f: EQ 00000a70: ISZERO 00000a71: PUSH2 0x0a9f 00000a74: JUMPI 00000a75: PUSH1 0x01 00000a77: PUSH1 0xa0 00000a79: PUSH1 0x02 00000a7b: EXP 00000a7c: SUB 00000a7d: DUP2 00000a7e: AND 00000a7f: ISZERO 00000a80: PUSH2 0x0a9f 00000a83: JUMPI 00000a84: PUSH1 0x00 00000a86: DUP1 00000a87: SLOAD 00000a88: PUSH1 0x01 00000a8a: PUSH1 0xa0 00000a8c: PUSH1 0x02 00000a8e: EXP 00000a8f: SUB 00000a90: NOT 00000a91: AND 00000a92: PUSH1 0x01 00000a94: PUSH1 0xa0 00000a96: PUSH1 0x02 00000a98: EXP 00000a99: SUB 00000a9a: DUP4 00000a9b: AND 00000a9c: OR 00000a9d: SWAP1 00000a9e: SSTORE 00000a9f: JUMPDEST 00000aa0: JUMPDEST 00000aa1: JUMPDEST 00000aa2: JUMPDEST 00000aa3: POP 00000aa4: JUMP 00000aa5: JUMPDEST 00000aa6: PUSH1 0x16 00000aa8: SLOAD 00000aa9: PUSH1 0x00 00000aab: SWAP1 00000aac: DUP2 00000aad: SWAP1 00000aae: DUP2 00000aaf: SWAP1 00000ab0: DUP2 00000ab1: SWAP1 00000ab2: PUSH1 0x01 00000ab4: SWAP1 00000ab5: PUSH1 0xa0 00000ab7: PUSH1 0x02 00000ab9: EXP 00000aba: SWAP1 00000abb: DIV 00000abc: PUSH1 0xff 00000abe: AND 00000abf: ISZERO 00000ac0: ISZERO 00000ac1: DUP2 00000ac2: EQ 00000ac3: PUSH2 0x0acc 00000ac6: JUMPI 00000ac7: PUSH1 0x00 00000ac9: PUSH1 0x00 00000acb: REVERT 00000acc: JUMPDEST 00000acd: PUSH1 0x01 00000acf: PUSH1 0xa0 00000ad1: PUSH1 0x02 00000ad3: EXP 00000ad4: SUB 00000ad5: DUP7 00000ad6: AND 00000ad7: PUSH1 0x00 00000ad9: SWAP1 00000ada: DUP2 00000adb: MSTORE 00000adc: PUSH1 0x14 00000ade: PUSH1 0x20 00000ae0: SWAP1 00000ae1: DUP2 00000ae2: MSTORE 00000ae3: PUSH1 0x40 00000ae5: DUP1 00000ae6: DUP4 00000ae7: KECCAK256 00000ae8: DUP1 00000ae9: SLOAD 00000aea: DUP5 00000aeb: MSTORE 00000aec: PUSH1 0x07 00000aee: SWAP1 00000aef: SWAP3 00000af0: MSTORE 00000af1: SWAP1 00000af2: SWAP2 00000af3: KECCAK256 00000af4: PUSH1 0x01 00000af6: SWAP1 00000af7: DUP2 00000af8: ADD 00000af9: SLOAD 00000afa: SWAP1 00000afb: DUP3 00000afc: ADD 00000afd: SLOAD 00000afe: SWAP2 00000aff: SWAP5 00000b00: POP 00000b01: PUSH2 0x0b13 00000b04: SWAP2 00000b05: PUSH2 0x0100 00000b08: SWAP1 00000b09: SWAP2 00000b0a: DIV 00000b0b: PUSH1 0xff 00000b0d: AND 00000b0e: SWAP1 00000b0f: PUSH2 0x10f9 00000b12: JUMP 00000b13: JUMPDEST 00000b14: PUSH1 0x02 00000b16: DUP5 00000b17: ADD 00000b18: SLOAD 00000b19: SWAP1 00000b1a: SWAP6 00000b1b: POP 00000b1c: PUSH1 0xff 00000b1e: AND 00000b1f: SWAP4 00000b20: POP 00000b21: DUP5 00000b22: SWAP2 00000b23: POP 00000b24: JUMPDEST 00000b25: JUMPDEST 00000b26: POP 00000b27: POP 00000b28: POP 00000b29: SWAP2 00000b2a: POP 00000b2b: SWAP2 00000b2c: JUMP 00000b2d: JUMPDEST 00000b2e: PUSH1 0x0e 00000b30: SLOAD 00000b31: DUP2 00000b32: JUMP 00000b33: JUMPDEST 00000b34: PUSH1 0x15 00000b36: SLOAD 00000b37: PUSH1 0x01 00000b39: PUSH1 0xa0 00000b3b: PUSH1 0x02 00000b3d: EXP 00000b3e: SUB 00000b3f: AND 00000b40: DUP2 00000b41: JUMP 00000b42: JUMPDEST 00000b43: PUSH1 0x01 00000b45: SLOAD 00000b46: DUP2 00000b47: JUMP 00000b48: JUMPDEST 00000b49: PUSH1 0x00 00000b4b: SLOAD 00000b4c: PUSH1 0x01 00000b4e: PUSH1 0xa0 00000b50: PUSH1 0x02 00000b52: EXP 00000b53: SUB 00000b54: AND 00000b55: DUP2 00000b56: JUMP 00000b57: JUMPDEST 00000b58: PUSH1 0x0d 00000b5a: SLOAD 00000b5b: DUP2 00000b5c: JUMP 00000b5d: JUMPDEST 00000b5e: PUSH1 0x0f 00000b60: SLOAD 00000b61: DUP2 00000b62: JUMP 00000b63: JUMPDEST 00000b64: PUSH1 0x17 00000b66: SLOAD 00000b67: DUP2 00000b68: JUMP 00000b69: JUMPDEST 00000b6a: PUSH1 0x02 00000b6c: SLOAD 00000b6d: DUP2 00000b6e: JUMP 00000b6f: JUMPDEST 00000b70: PUSH1 0x00 00000b72: DUP3 00000b73: DUP3 00000b74: MUL 00000b75: PUSH2 0x0b93 00000b78: DUP5 00000b79: ISZERO 00000b7a: DUP1 00000b7b: PUSH2 0x0b8e 00000b7e: JUMPI 00000b7f: POP 00000b80: DUP4 00000b81: DUP6 00000b82: DUP4 00000b83: DUP2 00000b84: ISZERO 00000b85: ISZERO 00000b86: PUSH2 0x0b8b 00000b89: JUMPI 00000b8a: INVALID 00000b8b: JUMPDEST 00000b8c: DIV 00000b8d: EQ 00000b8e: JUMPDEST 00000b8f: PUSH2 0x130d 00000b92: JUMP 00000b93: JUMPDEST 00000b94: DUP1 00000b95: SWAP2 00000b96: POP 00000b97: JUMPDEST 00000b98: POP 00000b99: SWAP3 00000b9a: SWAP2 00000b9b: POP 00000b9c: POP 00000b9d: JUMP 00000b9e: JUMPDEST 00000b9f: PUSH2 0x0ba6 00000ba2: PUSH2 0x1396 00000ba5: JUMP 00000ba6: JUMPDEST 00000ba7: PUSH1 0x00 00000ba9: PUSH1 0x00 00000bab: PUSH2 0x0bb5 00000bae: PUSH1 0x03 00000bb0: SLOAD 00000bb1: PUSH2 0x131e 00000bb4: JUMP 00000bb5: JUMPDEST 00000bb6: PUSH1 0xc0 00000bb8: DUP6 00000bb9: ADD 00000bba: MSTORE 00000bbb: PUSH1 0xa0 00000bbd: DUP5 00000bbe: ADD 00000bbf: MSTORE 00000bc0: PUSH1 0x04 00000bc2: SLOAD 00000bc3: PUSH2 0x0bcb 00000bc6: SWAP1 00000bc7: PUSH2 0x131e 00000bca: JUMP 00000bcb: JUMPDEST 00000bcc: PUSH1 0xe0 00000bce: DUP6 00000bcf: ADD 00000bd0: DUP2 00000bd1: SWAP1 00000bd2: MSTORE 00000bd3: PUSH1 0x80 00000bd5: DUP6 00000bd6: ADD 00000bd7: SWAP2 00000bd8: SWAP1 00000bd9: SWAP2 00000bda: MSTORE 00000bdb: PUSH1 0x01 00000bdd: SLOAD 00000bde: PUSH2 0x0be7 00000be1: SWAP2 00000be2: SWAP1 00000be3: PUSH2 0x119a 00000be6: JUMP 00000be7: JUMPDEST 00000be8: SWAP2 00000be9: POP 00000bea: PUSH2 0x0c0b 00000bed: PUSH1 0x01 00000bef: SLOAD 00000bf0: PUSH1 0x04 00000bf2: PUSH2 0x0bfc 00000bf5: DUP6 00000bf6: PUSH1 0x05 00000bf8: PUSH2 0x0b6f 00000bfb: JUMP 00000bfc: JUMPDEST 00000bfd: DUP2 00000bfe: ISZERO 00000bff: ISZERO 00000c00: PUSH2 0x0c05 00000c03: JUMPI 00000c04: INVALID 00000c05: JUMPDEST 00000c06: DIV 00000c07: PUSH2 0x0d47 00000c0a: JUMP 00000c0b: JUMPDEST 00000c0c: PUSH2 0x0100 00000c0f: DUP5 00000c10: ADD 00000c11: MSTORE 00000c12: PUSH1 0x01 00000c14: SLOAD 00000c15: PUSH2 0x0c34 00000c18: SWAP1 00000c19: PUSH1 0x03 00000c1b: PUSH2 0x0bfc 00000c1e: DUP6 00000c1f: PUSH1 0x04 00000c21: PUSH2 0x0b6f 00000c24: JUMP 00000c25: JUMPDEST 00000c26: DUP2 00000c27: ISZERO 00000c28: ISZERO 00000c29: PUSH2 0x0c05 00000c2c: JUMPI 00000c2d: INVALID 00000c2e: JUMPDEST 00000c2f: DIV 00000c30: PUSH2 0x0d47 00000c33: JUMP 00000c34: JUMPDEST 00000c35: PUSH2 0x0120 00000c38: DUP5 00000c39: ADD 00000c3a: MSTORE 00000c3b: PUSH1 0x01 00000c3d: SLOAD 00000c3e: PUSH2 0x0c5d 00000c41: SWAP1 00000c42: PUSH1 0x02 00000c44: PUSH2 0x0bfc 00000c47: DUP6 00000c48: PUSH1 0x03 00000c4a: PUSH2 0x0b6f 00000c4d: JUMP 00000c4e: JUMPDEST 00000c4f: DUP2 00000c50: ISZERO 00000c51: ISZERO 00000c52: PUSH2 0x0c05 00000c55: JUMPI 00000c56: INVALID 00000c57: JUMPDEST 00000c58: DIV 00000c59: PUSH2 0x0d47 00000c5c: JUMP 00000c5d: JUMPDEST 00000c5e: PUSH2 0x0140 00000c61: DUP5 00000c62: ADD 00000c63: MSTORE 00000c64: PUSH1 0x01 00000c66: SLOAD 00000c67: PUSH2 0x0c7a 00000c6a: SWAP1 00000c6b: PUSH2 0x0c75 00000c6e: DUP5 00000c6f: PUSH1 0x02 00000c71: PUSH2 0x0b6f 00000c74: JUMP 00000c75: JUMPDEST 00000c76: PUSH2 0x0d47 00000c79: JUMP 00000c7a: JUMPDEST 00000c7b: PUSH2 0x0160 00000c7e: DUP5 00000c7f: ADD 00000c80: MSTORE 00000c81: PUSH1 0x01 00000c83: SLOAD 00000c84: PUSH1 0x80 00000c86: DUP5 00000c87: ADD 00000c88: MLOAD 00000c89: PUSH2 0x0c92 00000c8c: SWAP2 00000c8d: SWAP1 00000c8e: PUSH2 0x119a 00000c91: JUMP 00000c92: JUMPDEST 00000c93: SWAP2 00000c94: POP 00000c95: PUSH1 0x04 00000c97: PUSH2 0x0ca1 00000c9a: DUP4 00000c9b: PUSH1 0x05 00000c9d: PUSH2 0x0b6f 00000ca0: JUMP 00000ca1: JUMPDEST 00000ca2: DUP2 00000ca3: ISZERO 00000ca4: ISZERO 00000ca5: PUSH2 0x0caa 00000ca8: JUMPI 00000ca9: INVALID 00000caa: JUMPDEST 00000cab: DIV 00000cac: SWAP1 00000cad: POP 00000cae: PUSH1 0x01 00000cb0: SLOAD 00000cb1: DUP2 00000cb2: LT 00000cb3: ISZERO 00000cb4: PUSH2 0x0d3e 00000cb7: JUMPI 00000cb8: PUSH1 0x01 00000cba: SLOAD 00000cbb: DUP2 00000cbc: SWAP1 00000cbd: SUB 00000cbe: PUSH1 0x60 00000cc0: DUP5 00000cc1: ADD 00000cc2: MSTORE 00000cc3: PUSH1 0x03 00000cc5: PUSH2 0x0ccf 00000cc8: DUP4 00000cc9: PUSH1 0x04 00000ccb: PUSH2 0x0b6f 00000cce: JUMP 00000ccf: JUMPDEST 00000cd0: DUP2 00000cd1: ISZERO 00000cd2: ISZERO 00000cd3: PUSH2 0x0cd8 00000cd6: JUMPI 00000cd7: INVALID 00000cd8: JUMPDEST 00000cd9: DIV 00000cda: SWAP1 00000cdb: POP 00000cdc: PUSH1 0x01 00000cde: SLOAD 00000cdf: DUP2 00000ce0: LT 00000ce1: ISZERO 00000ce2: PUSH2 0x0d3e 00000ce5: JUMPI 00000ce6: PUSH1 0x01 00000ce8: SLOAD 00000ce9: DUP2 00000cea: SWAP1 00000ceb: SUB 00000cec: PUSH1 0x40 00000cee: DUP5 00000cef: ADD 00000cf0: MSTORE 00000cf1: PUSH1 0x02 00000cf3: PUSH2 0x0cfd 00000cf6: DUP4 00000cf7: PUSH1 0x03 00000cf9: PUSH2 0x0b6f 00000cfc: JUMP 00000cfd: JUMPDEST 00000cfe: DUP2 00000cff: ISZERO 00000d00: ISZERO 00000d01: PUSH2 0x0d06 00000d04: JUMPI 00000d05: INVALID 00000d06: JUMPDEST 00000d07: DIV 00000d08: SWAP1 00000d09: POP 00000d0a: PUSH1 0x01 00000d0c: SLOAD 00000d0d: DUP2 00000d0e: LT 00000d0f: ISZERO 00000d10: PUSH2 0x0d3e 00000d13: JUMPI 00000d14: PUSH1 0x01 00000d16: SLOAD 00000d17: DUP2 00000d18: SWAP1 00000d19: SUB 00000d1a: PUSH1 0x20 00000d1c: DUP5 00000d1d: ADD 00000d1e: MSTORE 00000d1f: PUSH2 0x0d29 00000d22: DUP3 00000d23: PUSH1 0x02 00000d25: PUSH2 0x0b6f 00000d28: JUMP 00000d29: JUMPDEST 00000d2a: SWAP1 00000d2b: POP 00000d2c: PUSH1 0x01 00000d2e: SLOAD 00000d2f: DUP2 00000d30: LT 00000d31: ISZERO 00000d32: PUSH2 0x0d3e 00000d35: JUMPI 00000d36: PUSH1 0x01 00000d38: SLOAD 00000d39: DUP2 00000d3a: SWAP1 00000d3b: SUB 00000d3c: DUP4 00000d3d: MSTORE 00000d3e: JUMPDEST 00000d3f: JUMPDEST 00000d40: JUMPDEST 00000d41: JUMPDEST 00000d42: JUMPDEST 00000d43: POP 00000d44: POP 00000d45: SWAP1 00000d46: JUMP 00000d47: JUMPDEST 00000d48: PUSH1 0x00 00000d4a: DUP3 00000d4b: DUP3 00000d4c: ADD 00000d4d: PUSH2 0x0b93 00000d50: DUP5 00000d51: DUP3 00000d52: LT 00000d53: DUP1 00000d54: ISZERO 00000d55: SWAP1 00000d56: PUSH2 0x0b8e 00000d59: JUMPI 00000d5a: POP 00000d5b: DUP4 00000d5c: DUP3 00000d5d: LT 00000d5e: ISZERO 00000d5f: JUMPDEST 00000d60: PUSH2 0x130d 00000d63: JUMP 00000d64: JUMPDEST 00000d65: DUP1 00000d66: SWAP2 00000d67: POP 00000d68: JUMPDEST 00000d69: POP 00000d6a: SWAP3 00000d6b: SWAP2 00000d6c: POP 00000d6d: POP 00000d6e: JUMP 00000d6f: JUMPDEST 00000d70: PUSH1 0x00 00000d72: PUSH1 0x00 00000d74: PUSH1 0x00 00000d76: PUSH1 0x01 00000d78: SLOAD 00000d79: DUP7 00000d7a: GT 00000d7b: ISZERO 00000d7c: DUP1 00000d7d: ISZERO 00000d7e: PUSH2 0x0d91 00000d81: JUMPI 00000d82: POP 00000d83: PUSH1 0x01 00000d85: SLOAD 00000d86: DUP6 00000d87: LT 00000d88: ISZERO 00000d89: DUP1 00000d8a: PUSH2 0x0d91 00000d8d: JUMPI 00000d8e: POP 00000d8f: DUP5 00000d90: ISZERO 00000d91: JUMPDEST 00000d92: JUMPDEST 00000d93: ISZERO 00000d94: PUSH2 0x0dbd 00000d97: JUMPI 00000d98: POP 00000d99: POP 00000d9a: POP 00000d9b: PUSH1 0x00 00000d9d: DUP4 00000d9e: DUP2 00000d9f: MSTORE 00000da0: PUSH1 0x07 00000da2: PUSH1 0x20 00000da4: MSTORE 00000da5: PUSH1 0x40 00000da7: SWAP1 00000da8: KECCAK256 00000da9: SLOAD 00000daa: PUSH1 0x13 00000dac: DUP1 00000dad: SLOAD 00000dae: SWAP1 00000daf: SWAP2 00000db0: ADD 00000db1: SWAP1 00000db2: SSTORE 00000db3: PUSH1 0x01 00000db5: PUSH1 0x06 00000db7: PUSH1 0x04 00000db9: PUSH2 0x0f1a 00000dbc: JUMP 00000dbd: JUMPDEST 00000dbe: DUP4 00000dbf: ISZERO 00000dc0: PUSH2 0x0de7 00000dc3: JUMPI 00000dc4: POP 00000dc5: POP 00000dc6: POP 00000dc7: PUSH1 0x00 00000dc9: DUP4 00000dca: DUP2 00000dcb: MSTORE 00000dcc: PUSH1 0x07 00000dce: PUSH1 0x20 00000dd0: MSTORE 00000dd1: PUSH1 0x40 00000dd3: DUP2 00000dd4: KECCAK256 00000dd5: SLOAD 00000dd6: PUSH1 0x13 00000dd8: DUP1 00000dd9: SLOAD 00000dda: SWAP1 00000ddb: SWAP2 00000ddc: ADD 00000ddd: SWAP1 00000dde: SSTORE 00000ddf: PUSH1 0x06 00000de1: PUSH1 0x04 00000de3: PUSH2 0x0f1a 00000de6: JUMP 00000de7: JUMPDEST 00000de8: DUP7 00000de9: MLOAD 00000dea: DUP7 00000deb: LT 00000dec: DUP1 00000ded: ISZERO 00000dee: SWAP1 00000def: PUSH2 0x0dfd 00000df2: JUMPI 00000df3: POP 00000df4: DUP7 00000df5: PUSH2 0x0160 00000df8: ADD 00000df9: MLOAD 00000dfa: DUP7 00000dfb: GT 00000dfc: ISZERO 00000dfd: JUMPDEST 00000dfe: ISZERO 00000dff: PUSH2 0x0f1a 00000e02: JUMPI 00000e03: DUP7 00000e04: PUSH1 0x20 00000e06: ADD 00000e07: MLOAD 00000e08: DUP7 00000e09: LT 00000e0a: ISZERO 00000e0b: DUP1 00000e0c: ISZERO 00000e0d: PUSH2 0x0e1b 00000e10: JUMPI 00000e11: POP 00000e12: DUP7 00000e13: PUSH2 0x0140 00000e16: ADD 00000e17: MLOAD 00000e18: DUP7 00000e19: GT 00000e1a: ISZERO 00000e1b: JUMPDEST 00000e1c: ISZERO 00000e1d: PUSH2 0x0f15 00000e20: JUMPI 00000e21: DUP7 00000e22: PUSH1 0x40 00000e24: ADD 00000e25: MLOAD 00000e26: DUP7 00000e27: LT 00000e28: ISZERO 00000e29: DUP1 00000e2a: ISZERO 00000e2b: PUSH2 0x0e39 00000e2e: JUMPI 00000e2f: POP 00000e30: DUP7 00000e31: PUSH2 0x0120 00000e34: ADD 00000e35: MLOAD 00000e36: DUP7 00000e37: GT 00000e38: ISZERO 00000e39: JUMPDEST 00000e3a: ISZERO 00000e3b: PUSH2 0x0f0b 00000e3e: JUMPI 00000e3f: DUP7 00000e40: PUSH1 0x60 00000e42: ADD 00000e43: MLOAD 00000e44: DUP7 00000e45: LT 00000e46: ISZERO 00000e47: DUP1 00000e48: ISZERO 00000e49: PUSH2 0x0e57 00000e4c: JUMPI 00000e4d: POP 00000e4e: DUP7 00000e4f: PUSH2 0x0100 00000e52: ADD 00000e53: MLOAD 00000e54: DUP7 00000e55: GT 00000e56: ISZERO 00000e57: JUMPDEST 00000e58: ISZERO 00000e59: PUSH2 0x0f01 00000e5c: JUMPI 00000e5d: DUP7 00000e5e: PUSH1 0x80 00000e60: ADD 00000e61: MLOAD 00000e62: DUP7 00000e63: LT 00000e64: ISZERO 00000e65: DUP1 00000e66: ISZERO 00000e67: PUSH2 0x0e74 00000e6a: JUMPI 00000e6b: POP 00000e6c: DUP7 00000e6d: PUSH1 0xe0 00000e6f: ADD 00000e70: MLOAD 00000e71: DUP7 00000e72: GT 00000e73: ISZERO 00000e74: JUMPDEST 00000e75: ISZERO 00000e76: PUSH2 0x0edd 00000e79: JUMPI 00000e7a: DUP7 00000e7b: PUSH1 0xa0 00000e7d: ADD 00000e7e: MLOAD 00000e7f: DUP7 00000e80: LT 00000e81: ISZERO 00000e82: DUP1 00000e83: ISZERO 00000e84: PUSH2 0x0e91 00000e87: JUMPI 00000e88: POP 00000e89: DUP7 00000e8a: PUSH1 0xc0 00000e8c: ADD 00000e8d: MLOAD 00000e8e: DUP7 00000e8f: GT 00000e90: ISZERO 00000e91: JUMPDEST 00000e92: ISZERO 00000e93: PUSH2 0x0eb9 00000e96: JUMPI 00000e97: POP 00000e98: POP 00000e99: PUSH1 0x00 00000e9b: DUP5 00000e9c: DUP2 00000e9d: MSTORE 00000e9e: PUSH1 0x07 00000ea0: PUSH1 0x20 00000ea2: MSTORE 00000ea3: PUSH1 0x40 00000ea5: SWAP1 00000ea6: KECCAK256 00000ea7: SLOAD 00000ea8: PUSH1 0x12 00000eaa: DUP1 00000eab: SLOAD 00000eac: SWAP1 00000ead: SWAP2 00000eae: ADD 00000eaf: SWAP1 00000eb0: SSTORE 00000eb1: PUSH1 0x06 00000eb3: PUSH1 0x03 00000eb5: PUSH2 0x0ed8 00000eb8: JUMP 00000eb9: JUMPDEST 00000eba: POP 00000ebb: POP 00000ebc: PUSH1 0x00 00000ebe: DUP5 00000ebf: DUP2 00000ec0: MSTORE 00000ec1: PUSH1 0x07 00000ec3: PUSH1 0x20 00000ec5: MSTORE 00000ec6: PUSH1 0x40 00000ec8: SWAP1 00000ec9: KECCAK256 00000eca: SLOAD 00000ecb: PUSH1 0x11 00000ecd: DUP1 00000ece: SLOAD 00000ecf: SWAP1 00000ed0: SWAP2 00000ed1: ADD 00000ed2: SWAP1 00000ed3: SSTORE 00000ed4: PUSH1 0x05 00000ed6: PUSH1 0x02 00000ed8: JUMPDEST 00000ed9: PUSH2 0x0efc 00000edc: JUMP 00000edd: JUMPDEST 00000ede: POP 00000edf: POP 00000ee0: PUSH1 0x00 00000ee2: DUP5 00000ee3: DUP2 00000ee4: MSTORE 00000ee5: PUSH1 0x07 00000ee7: PUSH1 0x20 00000ee9: MSTORE 00000eea: PUSH1 0x40 00000eec: SWAP1 00000eed: KECCAK256 00000eee: SLOAD 00000eef: PUSH1 0x10 00000ef1: DUP1 00000ef2: SLOAD 00000ef3: SWAP1 00000ef4: SWAP2 00000ef5: ADD 00000ef6: SWAP1 00000ef7: SSTORE 00000ef8: PUSH1 0x04 00000efa: PUSH1 0x01 00000efc: JUMPDEST 00000efd: PUSH2 0x0f06 00000f00: JUMP 00000f01: JUMPDEST 00000f02: PUSH1 0x03 00000f04: SWAP2 00000f05: POP 00000f06: JUMPDEST 00000f07: PUSH2 0x0f10 00000f0a: JUMP 00000f0b: JUMPDEST 00000f0c: PUSH1 0x02 00000f0e: SWAP2 00000f0f: POP 00000f10: JUMPDEST 00000f11: PUSH2 0x0f1a 00000f14: JUMP 00000f15: JUMPDEST 00000f16: PUSH1 0x01 00000f18: SWAP2 00000f19: POP 00000f1a: JUMPDEST 00000f1b: JUMPDEST 00000f1c: JUMPDEST 00000f1d: JUMPDEST 00000f1e: PUSH1 0x00 00000f20: DUP7 00000f21: DUP2 00000f22: MSTORE 00000f23: PUSH1 0x07 00000f25: PUSH1 0x20 00000f27: MSTORE 00000f28: PUSH1 0x40 00000f2a: SWAP1 00000f2b: KECCAK256 00000f2c: PUSH1 0x01 00000f2e: ADD 00000f2f: DUP1 00000f30: SLOAD 00000f31: PUSH1 0xff 00000f33: DUP4 00000f34: DUP2 00000f35: AND 00000f36: PUSH2 0x0100 00000f39: MUL 00000f3a: PUSH2 0xff00 00000f3d: NOT 00000f3e: SWAP2 00000f3f: DUP7 00000f40: AND 00000f41: PUSH1 0xff 00000f43: NOT 00000f44: SWAP1 00000f45: SWAP4 00000f46: AND 00000f47: SWAP3 00000f48: SWAP1 00000f49: SWAP3 00000f4a: OR 00000f4b: AND 00000f4c: OR 00000f4d: SWAP1 00000f4e: SSTORE 00000f4f: JUMPDEST 00000f50: POP 00000f51: POP 00000f52: SWAP5 00000f53: SWAP4 00000f54: POP 00000f55: POP 00000f56: POP 00000f57: POP 00000f58: JUMP 00000f59: JUMPDEST 00000f5a: PUSH1 0x00 00000f5c: PUSH1 0x00 00000f5e: PUSH1 0x00 00000f60: PUSH1 0x00 00000f62: PUSH1 0x00 00000f64: PUSH1 0x00 00000f66: PUSH2 0x0f73 00000f69: PUSH1 0x12 00000f6b: SLOAD 00000f6c: PUSH1 0x13 00000f6e: SLOAD 00000f6f: PUSH2 0x0d47 00000f72: JUMP 00000f73: JUMPDEST 00000f74: PUSH1 0x12 00000f76: DUP2 00000f77: SWAP1 00000f78: SSTORE 00000f79: PUSH1 0x11 00000f7b: SLOAD 00000f7c: PUSH2 0x0f84 00000f7f: SWAP2 00000f80: PUSH2 0x0d47 00000f83: JUMP 00000f84: JUMPDEST 00000f85: PUSH1 0x11 00000f87: DUP2 00000f88: SWAP1 00000f89: SSTORE 00000f8a: PUSH1 0x10 00000f8c: SLOAD 00000f8d: PUSH2 0x0f95 00000f90: SWAP2 00000f91: PUSH2 0x0d47 00000f94: JUMP 00000f95: JUMPDEST 00000f96: PUSH1 0x10 00000f98: DUP2 00000f99: SWAP1 00000f9a: SSTORE 00000f9b: ISZERO 00000f9c: ISZERO 00000f9d: PUSH2 0x0fad 00000fa0: JUMPI 00000fa1: PUSH1 0x0e 00000fa3: SLOAD 00000fa4: SWAP5 00000fa5: POP 00000fa6: DUP5 00000fa7: SWAP6 00000fa8: POP 00000fa9: PUSH2 0x10f1 00000fac: JUMP 00000fad: JUMPDEST 00000fae: PUSH1 0x0e 00000fb0: SLOAD 00000fb1: PUSH1 0x0a 00000fb3: SWAP1 00000fb4: JUMPDEST 00000fb5: DIV 00000fb6: SWAP4 00000fb7: POP 00000fb8: PUSH2 0x0fc2 00000fbb: DUP5 00000fbc: PUSH1 0x02 00000fbe: PUSH2 0x0b6f 00000fc1: JUMP 00000fc2: JUMPDEST 00000fc3: SWAP3 00000fc4: POP 00000fc5: DUP3 00000fc6: SWAP2 00000fc7: POP 00000fc8: PUSH2 0x0fd3 00000fcb: PUSH1 0x0e 00000fcd: SLOAD 00000fce: DUP4 00000fcf: PUSH2 0x119a 00000fd2: JUMP 00000fd3: JUMPDEST 00000fd4: SWAP1 00000fd5: POP 00000fd6: PUSH2 0x0fdf 00000fd9: DUP2 00000fda: DUP5 00000fdb: PUSH2 0x119a 00000fde: JUMP 00000fdf: JUMPDEST 00000fe0: SWAP1 00000fe1: POP 00000fe2: PUSH2 0x0feb 00000fe5: DUP2 00000fe6: DUP6 00000fe7: PUSH2 0x119a 00000fea: JUMP 00000feb: JUMPDEST 00000fec: SWAP1 00000fed: POP 00000fee: PUSH1 0x10 00000ff0: SLOAD 00000ff1: DUP2 00000ff2: DUP2 00000ff3: ISZERO 00000ff4: ISZERO 00000ff5: PUSH2 0x0ffa 00000ff8: JUMPI 00000ff9: INVALID 00000ffa: JUMPDEST 00000ffb: MOD 00000ffc: SWAP5 00000ffd: POP 00000ffe: PUSH1 0x10 00001000: SLOAD 00001001: DUP2 00001002: DUP2 00001003: ISZERO 00001004: ISZERO 00001005: PUSH2 0x100a 00001008: JUMPI 00001009: INVALID 0000100a: JUMPDEST 0000100b: DIV 0000100c: PUSH1 0x10 0000100e: SSTORE 0000100f: PUSH1 0x11 00001011: SLOAD 00001012: PUSH1 0x00 00001014: SWAP1 00001015: GT 00001016: ISZERO 00001017: PUSH2 0x104c 0000101a: JUMPI 0000101b: PUSH2 0x1024 0000101e: DUP3 0000101f: DUP7 00001020: PUSH2 0x0d47 00001023: JUMP 00001024: JUMPDEST 00001025: SWAP2 00001026: POP 00001027: PUSH1 0x11 00001029: SLOAD 0000102a: DUP3 0000102b: DUP2 0000102c: ISZERO 0000102d: ISZERO 0000102e: PUSH2 0x1033 00001031: JUMPI 00001032: INVALID 00001033: JUMPDEST 00001034: MOD 00001035: SWAP5 00001036: POP 00001037: PUSH1 0x11 00001039: SLOAD 0000103a: DUP3 0000103b: DUP2 0000103c: ISZERO 0000103d: ISZERO 0000103e: PUSH2 0x1043 00001041: JUMPI 00001042: INVALID 00001043: JUMPDEST 00001044: DIV 00001045: PUSH1 0x11 00001047: SSTORE 00001048: PUSH2 0x1059 0000104b: JUMP 0000104c: JUMPDEST 0000104d: PUSH2 0x1056 00001050: DUP6 00001051: DUP4 00001052: PUSH2 0x0d47 00001055: JUMP 00001056: JUMPDEST 00001057: SWAP5 00001058: POP 00001059: JUMPDEST 0000105a: PUSH1 0x00 0000105c: PUSH1 0x12 0000105e: SLOAD 0000105f: GT 00001060: ISZERO 00001061: PUSH2 0x1096 00001064: JUMPI 00001065: PUSH2 0x106e 00001068: DUP4 00001069: DUP7 0000106a: PUSH2 0x0d47 0000106d: JUMP 0000106e: JUMPDEST 0000106f: SWAP3 00001070: POP 00001071: PUSH1 0x12 00001073: SLOAD 00001074: DUP4 00001075: DUP2 00001076: ISZERO 00001077: ISZERO 00001078: PUSH2 0x107d 0000107b: JUMPI 0000107c: INVALID 0000107d: JUMPDEST 0000107e: MOD 0000107f: SWAP5 00001080: POP 00001081: PUSH1 0x12 00001083: SLOAD 00001084: DUP4 00001085: DUP2 00001086: ISZERO 00001087: ISZERO 00001088: PUSH2 0x108d 0000108b: JUMPI 0000108c: INVALID 0000108d: JUMPDEST 0000108e: DIV 0000108f: PUSH1 0x12 00001091: SSTORE 00001092: PUSH2 0x10a3 00001095: JUMP 00001096: JUMPDEST 00001097: PUSH2 0x10a0 0000109a: DUP6 0000109b: DUP5 0000109c: PUSH2 0x0d47 0000109f: JUMP 000010a0: JUMPDEST 000010a1: SWAP5 000010a2: POP 000010a3: JUMPDEST 000010a4: PUSH1 0x00 000010a6: PUSH1 0x13 000010a8: SLOAD 000010a9: GT 000010aa: ISZERO 000010ab: PUSH2 0x10e0 000010ae: JUMPI 000010af: PUSH2 0x10b8 000010b2: DUP5 000010b3: DUP7 000010b4: PUSH2 0x0d47 000010b7: JUMP 000010b8: JUMPDEST 000010b9: SWAP4 000010ba: POP 000010bb: PUSH1 0x13 000010bd: SLOAD 000010be: DUP5 000010bf: DUP2 000010c0: ISZERO 000010c1: ISZERO 000010c2: PUSH2 0x10c7 000010c5: JUMPI 000010c6: INVALID 000010c7: JUMPDEST 000010c8: MOD 000010c9: SWAP5 000010ca: POP 000010cb: PUSH1 0x13 000010cd: SLOAD 000010ce: DUP5 000010cf: DUP2 000010d0: ISZERO 000010d1: ISZERO 000010d2: PUSH2 0x10d7 000010d5: JUMPI 000010d6: INVALID 000010d7: JUMPDEST 000010d8: DIV 000010d9: PUSH1 0x13 000010db: SSTORE 000010dc: PUSH2 0x10ed 000010df: JUMP 000010e0: JUMPDEST 000010e1: PUSH2 0x10ea 000010e4: DUP6 000010e5: DUP6 000010e6: PUSH2 0x0d47 000010e9: JUMP 000010ea: JUMPDEST 000010eb: SWAP5 000010ec: POP 000010ed: JUMPDEST 000010ee: DUP5 000010ef: SWAP6 000010f0: POP 000010f1: JUMPDEST 000010f2: POP 000010f3: POP 000010f4: POP 000010f5: POP 000010f6: POP 000010f7: SWAP1 000010f8: JUMP 000010f9: JUMPDEST 000010fa: PUSH1 0x02 000010fc: SLOAD 000010fd: PUSH1 0x00 000010ff: SWAP1 00001100: PUSH1 0xff 00001102: DUP5 00001103: AND 00001104: DUP3 00001105: SWAP1 00001106: GT 00001107: ISZERO 00001108: PUSH2 0x1123 0000110b: JUMPI 0000110c: PUSH2 0x1120 0000110f: DUP2 00001110: PUSH2 0x0c75 00001113: DUP6 00001114: PUSH1 0x10 00001116: SLOAD 00001117: PUSH2 0x0b6f 0000111a: JUMP 0000111b: JUMPDEST 0000111c: PUSH2 0x0d47 0000111f: JUMP 00001120: JUMPDEST 00001121: SWAP1 00001122: POP 00001123: JUMPDEST 00001124: PUSH1 0x01 00001126: DUP5 00001127: PUSH1 0xff 00001129: AND 0000112a: GT 0000112b: ISZERO 0000112c: PUSH2 0x1147 0000112f: JUMPI 00001130: PUSH2 0x1144 00001133: DUP2 00001134: PUSH2 0x0c75 00001137: DUP6 00001138: PUSH1 0x11 0000113a: SLOAD 0000113b: PUSH2 0x0b6f 0000113e: JUMP 0000113f: JUMPDEST 00001140: PUSH2 0x0d47 00001143: JUMP 00001144: JUMPDEST 00001145: SWAP1 00001146: POP 00001147: JUMPDEST 00001148: PUSH1 0x02 0000114a: DUP5 0000114b: PUSH1 0xff 0000114d: AND 0000114e: GT 0000114f: ISZERO 00001150: PUSH2 0x116b 00001153: JUMPI 00001154: PUSH2 0x1168 00001157: DUP2 00001158: PUSH2 0x0c75 0000115b: DUP6 0000115c: PUSH1 0x12 0000115e: SLOAD 0000115f: PUSH2 0x0b6f 00001162: JUMP 00001163: JUMPDEST 00001164: PUSH2 0x0d47 00001167: JUMP 00001168: JUMPDEST 00001169: SWAP1 0000116a: POP 0000116b: JUMPDEST 0000116c: PUSH1 0x03 0000116e: DUP5 0000116f: PUSH1 0xff 00001171: AND 00001172: GT 00001173: ISZERO 00001174: PUSH2 0x0b93 00001177: JUMPI 00001178: PUSH2 0x118c 0000117b: DUP2 0000117c: PUSH2 0x0c75 0000117f: DUP6 00001180: PUSH1 0x13 00001182: SLOAD 00001183: PUSH2 0x0b6f 00001186: JUMP 00001187: JUMPDEST 00001188: PUSH2 0x0d47 0000118b: JUMP 0000118c: JUMPDEST 0000118d: SWAP1 0000118e: POP 0000118f: JUMPDEST 00001190: DUP1 00001191: SWAP2 00001192: POP 00001193: JUMPDEST 00001194: POP 00001195: SWAP3 00001196: SWAP2 00001197: POP 00001198: POP 00001199: JUMP 0000119a: JUMPDEST 0000119b: PUSH1 0x00 0000119d: PUSH2 0x11a8 000011a0: DUP4 000011a1: DUP4 000011a2: GT 000011a3: ISZERO 000011a4: PUSH2 0x130d 000011a7: JUMP 000011a8: JUMPDEST 000011a9: POP 000011aa: DUP1 000011ab: DUP3 000011ac: SUB 000011ad: JUMPDEST 000011ae: SWAP3 000011af: SWAP2 000011b0: POP 000011b1: POP 000011b2: JUMP 000011b3: JUMPDEST 000011b4: PUSH1 0x00 000011b6: PUSH1 0x00 000011b8: PUSH1 0x00 000011ba: PUSH1 0x00 000011bc: PUSH1 0x00 000011be: PUSH1 0x00 000011c0: PUSH1 0x00 000011c2: PUSH1 0x00 000011c4: PUSH1 0x15 000011c6: PUSH1 0x00 000011c8: SWAP1 000011c9: SLOAD 000011ca: SWAP1 000011cb: PUSH2 0x0100 000011ce: EXP 000011cf: SWAP1 000011d0: DIV 000011d1: PUSH1 0x01 000011d3: PUSH1 0xa0 000011d5: PUSH1 0x02 000011d7: EXP 000011d8: SUB 000011d9: AND 000011da: PUSH1 0x01 000011dc: PUSH1 0xa0 000011de: PUSH1 0x02 000011e0: EXP 000011e1: SUB 000011e2: AND 000011e3: PUSH4 0x9507d39a 000011e8: DUP11 000011e9: PUSH1 0x00 000011eb: PUSH1 0x40 000011ed: MLOAD 000011ee: PUSH1 0xe0 000011f0: ADD 000011f1: MSTORE 000011f2: PUSH1 0x40 000011f4: MLOAD 000011f5: DUP3 000011f6: PUSH4 0xffffffff 000011fb: AND 000011fc: PUSH1 0xe0 000011fe: PUSH1 0x02 00001200: EXP 00001201: MUL 00001202: DUP2 00001203: MSTORE 00001204: PUSH1 0x04 00001206: ADD 00001207: DUP1 00001208: DUP3 00001209: DUP2 0000120a: MSTORE 0000120b: PUSH1 0x20 0000120d: ADD 0000120e: SWAP2 0000120f: POP 00001210: POP 00001211: PUSH1 0xe0 00001213: PUSH1 0x40 00001215: MLOAD 00001216: DUP1 00001217: DUP4 00001218: SUB 00001219: DUP2 0000121a: PUSH1 0x00 0000121c: DUP8 0000121d: DUP1 0000121e: EXTCODESIZE 0000121f: ISZERO 00001220: ISZERO 00001221: PUSH2 0x1226 00001224: JUMPI 00001225: INVALID 00001226: JUMPDEST 00001227: PUSH2 0x02c6 0000122a: GAS 0000122b: SUB 0000122c: CALL 0000122d: ISZERO 0000122e: ISZERO 0000122f: PUSH2 0x1234 00001232: JUMPI 00001233: INVALID 00001234: JUMPDEST 00001235: POP 00001236: POP 00001237: PUSH1 0x40 00001239: DUP1 0000123a: MLOAD 0000123b: DUP1 0000123c: MLOAD 0000123d: PUSH1 0x20 0000123f: DUP3 00001240: ADD 00001241: MLOAD 00001242: SWAP3 00001243: DUP3 00001244: ADD 00001245: MLOAD 00001246: PUSH1 0x60 00001248: DUP4 00001249: ADD 0000124a: MLOAD 0000124b: PUSH1 0x80 0000124d: DUP5 0000124e: ADD 0000124f: MLOAD 00001250: PUSH1 0xa0 00001252: DUP6 00001253: ADD 00001254: MLOAD 00001255: PUSH1 0xc0 00001257: SWAP1 00001258: SWAP6 00001259: ADD 0000125a: MLOAD 0000125b: SWAP15 0000125c: POP 0000125d: SWAP3 0000125e: SWAP13 0000125f: POP 00001260: SWAP11 00001261: POP 00001262: SWAP9 00001263: POP 00001264: DUP9 00001265: DUP4 00001266: EQ 00001267: ISZERO 00001268: SWAP8 00001269: POP 0000126a: SWAP2 0000126b: SWAP6 0000126c: POP 0000126d: SWAP1 0000126e: SWAP4 0000126f: POP 00001270: SWAP2 00001271: POP 00001272: POP 00001273: JUMPDEST 00001274: POP 00001275: POP 00001276: POP 00001277: SWAP2 00001278: SWAP4 00001279: SWAP6 0000127a: SWAP1 0000127b: SWAP3 0000127c: SWAP5 0000127d: POP 0000127e: JUMP 0000127f: JUMPDEST 00001280: PUSH1 0x00 00001282: DUP1 00001283: PUSH1 0x64 00001285: PUSH2 0x129a 00001288: PUSH8 0x0de0b6b3a7640000 00001291: DUP8 00001292: JUMPDEST 00001293: DIV 00001294: PUSH1 0x64 00001296: PUSH2 0x0d47 00001299: JUMP 0000129a: JUMPDEST 0000129b: DUP2 0000129c: ISZERO 0000129d: ISZERO 0000129e: PUSH2 0x12a3 000012a1: JUMPI 000012a2: INVALID 000012a3: JUMPDEST 000012a4: DIV 000012a5: SWAP1 000012a6: POP 000012a7: PUSH1 0x05 000012a9: SLOAD 000012aa: DUP5 000012ab: GT 000012ac: ISZERO 000012ad: ISZERO 000012ae: PUSH2 0x12cf 000012b1: JUMPI 000012b2: PUSH1 0x04 000012b4: PUSH2 0x12be 000012b7: DUP3 000012b8: PUSH1 0x05 000012ba: PUSH2 0x0b6f 000012bd: JUMP 000012be: JUMPDEST 000012bf: DUP2 000012c0: ISZERO 000012c1: ISZERO 000012c2: PUSH2 0x12c7 000012c5: JUMPI 000012c6: INVALID 000012c7: JUMPDEST 000012c8: DIV 000012c9: SWAP1 000012ca: POP 000012cb: PUSH2 0x12f2 000012ce: JUMP 000012cf: JUMPDEST 000012d0: PUSH1 0x06 000012d2: SLOAD 000012d3: DUP5 000012d4: GT 000012d5: PUSH2 0x12f2 000012d8: JUMPI 000012d9: PUSH1 0x08 000012db: PUSH2 0x12e5 000012de: DUP3 000012df: PUSH1 0x09 000012e1: PUSH2 0x0b6f 000012e4: JUMP 000012e5: JUMPDEST 000012e6: DUP2 000012e7: ISZERO 000012e8: ISZERO 000012e9: PUSH2 0x12ee 000012ec: JUMPI 000012ed: INVALID 000012ee: JUMPDEST 000012ef: DIV 000012f0: SWAP1 000012f1: POP 000012f2: JUMPDEST 000012f3: JUMPDEST 000012f4: DUP3 000012f5: ISZERO 000012f6: PUSH2 0x1301 000012f9: JUMPI 000012fa: PUSH1 0x02 000012fc: DUP2 000012fd: JUMPDEST 000012fe: DIV 000012ff: SWAP1 00001300: POP 00001301: JUMPDEST 00001302: DUP1 00001303: SWAP2 00001304: POP 00001305: JUMPDEST 00001306: POP 00001307: SWAP4 00001308: SWAP3 00001309: POP 0000130a: POP 0000130b: POP 0000130c: JUMP 0000130d: JUMPDEST 0000130e: DUP1 0000130f: ISZERO 00001310: ISZERO 00001311: PUSH2 0x0a9f 00001314: JUMPI 00001315: PUSH1 0x00 00001317: PUSH1 0x00 00001319: REVERT 0000131a: JUMPDEST 0000131b: JUMPDEST 0000131c: POP 0000131d: JUMP 0000131e: JUMPDEST 0000131f: PUSH1 0x00 00001321: PUSH1 0x00 00001323: PUSH1 0x00 00001325: PUSH1 0x00 00001327: PUSH2 0x1332 0000132a: PUSH2 0x03e8 0000132d: DUP7 0000132e: PUSH2 0x119a 00001331: JUMP 00001332: JUMPDEST 00001333: SWAP2 00001334: POP 00001335: PUSH2 0x03e8 00001338: PUSH2 0x1343 0000133b: PUSH1 0x01 0000133d: SLOAD 0000133e: DUP5 0000133f: PUSH2 0x0b6f 00001342: JUMP 00001343: JUMPDEST 00001344: DUP2 00001345: ISZERO 00001346: ISZERO 00001347: PUSH2 0x134c 0000134a: JUMPI 0000134b: INVALID 0000134c: JUMPDEST 0000134d: DIV 0000134e: SWAP4 0000134f: POP 00001350: DUP2 00001351: PUSH2 0x135c 00001354: PUSH2 0x03e8 00001357: DUP8 00001358: PUSH2 0x0b6f 0000135b: JUMP 0000135c: JUMPDEST 0000135d: DUP2 0000135e: ISZERO 0000135f: ISZERO 00001360: PUSH2 0x1365 00001363: JUMPI 00001364: INVALID 00001365: JUMPDEST 00001366: DIV 00001367: SWAP1 00001368: POP 00001369: PUSH2 0x03e8 0000136c: PUSH2 0x1382 0000136f: PUSH1 0x01 00001371: SLOAD 00001372: PUSH2 0x137d 00001375: PUSH2 0x03e8 00001378: DUP6 00001379: PUSH2 0x0d47 0000137c: JUMP 0000137d: JUMPDEST 0000137e: PUSH2 0x0b6f 00001381: JUMP 00001382: JUMPDEST 00001383: DUP2 00001384: ISZERO 00001385: ISZERO 00001386: PUSH2 0x138b 00001389: JUMPI 0000138a: INVALID 0000138b: JUMPDEST 0000138c: DIV 0000138d: SWAP3 0000138e: POP 0000138f: JUMPDEST 00001390: POP 00001391: POP 00001392: SWAP2 00001393: POP 00001394: SWAP2 00001395: JUMP 00001396: JUMPDEST 00001397: PUSH2 0x0180 0000139a: PUSH1 0x40 0000139c: MLOAD 0000139d: SWAP1 0000139e: DUP2 0000139f: ADD 000013a0: PUSH1 0x40 000013a2: MSTORE 000013a3: DUP1 000013a4: PUSH1 0x00 000013a6: DUP2 000013a7: MSTORE 000013a8: PUSH1 0x20 000013aa: ADD 000013ab: PUSH1 0x00 000013ad: DUP2 000013ae: MSTORE 000013af: PUSH1 0x20 000013b1: ADD 000013b2: PUSH1 0x00 000013b4: DUP2 000013b5: MSTORE 000013b6: PUSH1 0x20 000013b8: ADD 000013b9: PUSH1 0x00 000013bb: DUP2 000013bc: MSTORE 000013bd: PUSH1 0x20 000013bf: ADD 000013c0: PUSH1 0x00 000013c2: DUP2 000013c3: MSTORE 000013c4: PUSH1 0x20 000013c6: ADD 000013c7: PUSH1 0x00 000013c9: DUP2 000013ca: MSTORE 000013cb: PUSH1 0x20 000013cd: ADD 000013ce: PUSH1 0x00 000013d0: DUP2 000013d1: MSTORE 000013d2: PUSH1 0x20 000013d4: ADD 000013d5: PUSH1 0x00 000013d7: DUP2 000013d8: MSTORE 000013d9: PUSH1 0x20 000013db: ADD 000013dc: PUSH1 0x00 000013de: DUP2 000013df: MSTORE 000013e0: PUSH1 0x20 000013e2: ADD 000013e3: PUSH1 0x00 000013e5: DUP2 000013e6: MSTORE 000013e7: PUSH1 0x20 000013e9: ADD 000013ea: PUSH1 0x00 000013ec: DUP2 000013ed: MSTORE 000013ee: PUSH1 0x20 000013f0: ADD 000013f1: PUSH1 0x00 000013f3: DUP2 000013f4: MSTORE 000013f5: POP 000013f6: SWAP1 000013f7: JUMP 000013f8: JUMPDEST 000013f9: PUSH1 0x00 000013fb: DUP4 000013fc: ISZERO 000013fd: ISZERO 000013fe: PUSH2 0x1407 00001401: JUMPI 00001402: PUSH1 0x00 00001404: PUSH1 0x00 00001406: REVERT 00001407: JUMPDEST 00001408: DUP4 00001409: DUP4 0000140a: GT 0000140b: PUSH2 0x1414 0000140e: JUMPI 0000140f: PUSH1 0x00 00001411: PUSH1 0x00 00001413: REVERT 00001414: JUMPDEST 00001415: DUP2 00001416: ISZERO 00001417: ISZERO 00001418: PUSH2 0x1421 0000141b: JUMPI 0000141c: PUSH1 0x00 0000141e: PUSH1 0x00 00001420: REVERT 00001421: JUMPDEST 00001422: DUP2 00001423: DUP5 00001424: DUP2 00001425: ISZERO 00001426: ISZERO 00001427: PUSH2 0x142c 0000142a: JUMPI 0000142b: INVALID 0000142c: JUMPDEST 0000142d: MOD 0000142e: ISZERO 0000142f: PUSH2 0x1438 00001432: JUMPI 00001433: PUSH1 0x00 00001435: PUSH1 0x00 00001437: REVERT 00001438: JUMPDEST 00001439: DUP2 0000143a: DUP4 0000143b: DUP2 0000143c: ISZERO 0000143d: ISZERO 0000143e: PUSH2 0x1443 00001441: JUMPI 00001442: INVALID 00001443: JUMPDEST 00001444: MOD 00001445: ISZERO 00001446: PUSH2 0x144f 00001449: JUMPI 0000144a: PUSH1 0x00 0000144c: PUSH1 0x00 0000144e: REVERT 0000144f: JUMPDEST 00001450: POP 00001451: PUSH1 0x08 00001453: DUP4 00001454: SWAP1 00001455: SSTORE 00001456: PUSH1 0x09 00001458: DUP3 00001459: SWAP1 0000145a: SSTORE 0000145b: PUSH1 0x0a 0000145d: DUP2 0000145e: SWAP1 0000145f: SSTORE 00001460: DUP3 00001461: JUMPDEST 00001462: DUP3 00001463: DUP2 00001464: GT 00001465: PUSH2 0x0788 00001468: JUMPI 00001469: PUSH2 0x1470 0000146c: PUSH2 0x1588 0000146f: JUMP 00001470: JUMPDEST 00001471: PUSH1 0x00 00001473: DUP3 00001474: DUP2 00001475: MSTORE 00001476: PUSH1 0x07 00001478: PUSH1 0x20 0000147a: SWAP1 0000147b: DUP2 0000147c: MSTORE 0000147d: PUSH1 0x40 0000147f: SWAP2 00001480: DUP3 00001481: SWAP1 00001482: KECCAK256 00001483: DUP4 00001484: MLOAD 00001485: DUP2 00001486: SSTORE 00001487: SWAP1 00001488: DUP4 00001489: ADD 0000148a: MLOAD 0000148b: PUSH1 0x01 0000148d: SWAP1 0000148e: SWAP2 0000148f: ADD 00001490: DUP1 00001491: SLOAD 00001492: SWAP3 00001493: DUP5 00001494: ADD 00001495: MLOAD 00001496: PUSH1 0x60 00001498: SWAP1 00001499: SWAP5 0000149a: ADD 0000149b: MLOAD 0000149c: PUSH1 0xff 0000149e: NOT 0000149f: SWAP1 000014a0: SWAP4 000014a1: AND 000014a2: PUSH1 0xff 000014a4: SWAP3 000014a5: DUP4 000014a6: AND 000014a7: OR 000014a8: PUSH2 0xff00 000014ab: NOT 000014ac: AND 000014ad: PUSH2 0x0100 000014b0: SWAP3 000014b1: SWAP1 000014b2: SWAP5 000014b3: AND 000014b4: SWAP2 000014b5: SWAP1 000014b6: SWAP2 000014b7: MUL 000014b8: SWAP3 000014b9: SWAP1 000014ba: SWAP3 000014bb: OR 000014bc: PUSH3 0xff0000 000014c0: NOT 000014c1: AND 000014c2: PUSH3 0x010000 000014c6: SWAP2 000014c7: ISZERO 000014c8: ISZERO 000014c9: SWAP2 000014ca: SWAP1 000014cb: SWAP2 000014cc: MUL 000014cd: OR 000014ce: SWAP1 000014cf: SSTORE 000014d0: JUMPDEST 000014d1: DUP2 000014d2: ADD 000014d3: PUSH2 0x1461 000014d6: JUMP 000014d7: JUMPDEST 000014d8: JUMPDEST 000014d9: POP 000014da: POP 000014db: POP 000014dc: POP 000014dd: JUMP 000014de: JUMPDEST 000014df: PUSH1 0x00 000014e1: DUP1 000014e2: DUP8 000014e3: GT 000014e4: PUSH2 0x14ed 000014e7: JUMPI 000014e8: PUSH1 0x00 000014ea: PUSH1 0x00 000014ec: REVERT 000014ed: JUMPDEST 000014ee: PUSH1 0x00 000014f0: DUP6 000014f1: GT 000014f2: DUP1 000014f3: ISZERO 000014f4: PUSH2 0x14fe 000014f7: JUMPI 000014f8: POP 000014f9: PUSH2 0x03e8 000014fc: DUP6 000014fd: LT 000014fe: JUMPDEST 000014ff: DUP1 00001500: ISZERO 00001501: PUSH2 0x150a 00001504: JUMPI 00001505: POP 00001506: DUP5 00001507: DUP5 00001508: LT 00001509: ISZERO 0000150a: JUMPDEST 0000150b: DUP1 0000150c: ISZERO 0000150d: PUSH2 0x1517 00001510: JUMPI 00001511: POP 00001512: PUSH2 0x03e8 00001515: DUP5 00001516: LT 00001517: JUMPDEST 00001518: ISZERO 00001519: ISZERO 0000151a: PUSH2 0x1523 0000151d: JUMPI 0000151e: PUSH1 0x00 00001520: PUSH1 0x00 00001522: REVERT 00001523: JUMPDEST 00001524: DUP2 00001525: DUP4 00001526: LT 00001527: PUSH2 0x1530 0000152a: JUMPI 0000152b: PUSH1 0x00 0000152d: PUSH1 0x00 0000152f: REVERT 00001530: JUMPDEST 00001531: PUSH1 0x01 00001533: DUP8 00001534: SWAP1 00001535: SSTORE 00001536: PUSH1 0x02 00001538: DUP7 00001539: SWAP1 0000153a: SSTORE 0000153b: PUSH1 0x03 0000153d: DUP6 0000153e: SWAP1 0000153f: SSTORE 00001540: PUSH1 0x04 00001542: DUP5 00001543: DUP2 00001544: SSTORE 00001545: PUSH2 0x154e 00001548: DUP4 00001549: DUP6 0000154a: PUSH2 0x119a 0000154d: JUMP 0000154e: JUMPDEST 0000154f: DUP2 00001550: ISZERO 00001551: ISZERO 00001552: PUSH2 0x1557 00001555: JUMPI 00001556: INVALID 00001557: JUMPDEST 00001558: DIV 00001559: SWAP1 0000155a: POP 0000155b: PUSH2 0x1564 0000155e: DUP4 0000155f: DUP3 00001560: PUSH2 0x0d47 00001563: JUMP 00001564: JUMPDEST 00001565: PUSH1 0x05 00001567: SSTORE 00001568: PUSH2 0x157b 0000156b: DUP4 0000156c: PUSH2 0x0c75 0000156f: PUSH1 0x02 00001571: DUP5 00001572: PUSH2 0x0b6f 00001575: JUMP 00001576: JUMPDEST 00001577: PUSH2 0x0d47 0000157a: JUMP 0000157b: JUMPDEST 0000157c: PUSH1 0x06 0000157e: SSTORE 0000157f: JUMPDEST 00001580: POP 00001581: POP 00001582: POP 00001583: POP 00001584: POP 00001585: POP 00001586: POP 00001587: JUMP 00001588: JUMPDEST 00001589: PUSH2 0x1590 0000158c: PUSH2 0x15b9 0000158f: JUMP 00001590: JUMPDEST 00001591: POP 00001592: PUSH1 0x40 00001594: DUP1 00001595: MLOAD 00001596: PUSH1 0x80 00001598: DUP2 00001599: ADD 0000159a: DUP3 0000159b: MSTORE 0000159c: PUSH1 0x00 0000159e: DUP1 0000159f: DUP3 000015a0: MSTORE 000015a1: PUSH1 0x20 000015a3: DUP3 000015a4: ADD 000015a5: DUP2 000015a6: SWAP1 000015a7: MSTORE 000015a8: SWAP2 000015a9: DUP2 000015aa: ADD 000015ab: SWAP2 000015ac: SWAP1 000015ad: SWAP2 000015ae: MSTORE 000015af: PUSH1 0x01 000015b1: PUSH1 0x60 000015b3: DUP3 000015b4: ADD 000015b5: MSTORE 000015b6: JUMPDEST 000015b7: SWAP1 000015b8: JUMP 000015b9: JUMPDEST 000015ba: PUSH1 0x40 000015bc: DUP1 000015bd: MLOAD 000015be: PUSH1 0x80 000015c0: DUP2 000015c1: ADD 000015c2: DUP3 000015c3: MSTORE 000015c4: PUSH1 0x00 000015c6: DUP1 000015c7: DUP3 000015c8: MSTORE 000015c9: PUSH1 0x20 000015cb: DUP3 000015cc: ADD 000015cd: DUP2 000015ce: SWAP1 000015cf: MSTORE 000015d0: SWAP2 000015d1: DUP2 000015d2: ADD 000015d3: DUP3 000015d4: SWAP1 000015d5: MSTORE 000015d6: PUSH1 0x60 000015d8: DUP2 000015d9: ADD 000015da: SWAP2 000015db: SWAP1 000015dc: SWAP2 000015dd: MSTORE 000015de: SWAP1 000015df: JUMP 000015e0: STOP 000015e1: LOG1 000015e2: PUSH6 0x627a7a723058 000015e9: KECCAK256 000015ea: SWAP7 000015eb: UNKNOWN(0xB6) 000015ec: UNKNOWN(0xD7) 000015ed: UNKNOWN(0x22) 000015ee: DUP9 000015ef: UNKNOWN(0xE2) 000015f0: UNKNOWN(0xC1) 000015f1: UNKNOWN(0xE6) 000015f2: OR 000015f3: DUP2 000015f4: UNKNOWN(0x0D) 000015f5: DELEGATECALL 000015f6: RETURNDATASIZE 000015f7: LOG1 000015f8: UNKNOWN(0xD7) 000015f9: TSTORE 000015fa: UNKNOWN(0x2B) 000015fb: UNKNOWN(0x25) 000015fc: PUSH14 0x67e4b88f0d5ab8c03f16ad507500 0000160b: UNKNOWN(0x29)
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| critical | upgradeability | detector | Untrusted DELEGATECALL target reachable | 70 | no | no |
viewtrace_id: 0xa7a3ffc00720facd3a92e51982e8f9d1bddc8f78d9ef1ad16e3090262dc3be6d
validation_json{
"sink": "DELEGATECALL",
"errors": 0,
"status": "unknown",
"attempts": 192,
"trace_id": "0xa7a3ffc00720facd3a92e51982e8f9d1bddc8f78d9ef1ad16e3090262dc3be6d",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": null,
"matched_probe": null,
"target_varies": null,
"classification": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x0d15fd77",
"selector": "0x0d15fd77",
"calldata_variants": [
"0x0d15fd77",
"0x0d15fd770000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2969d202",
"selector": "0x2969d202",
"calldata_variants": [
"0x2969d202",
"0x2969d2020000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2e6dbdf9",
"selector": "0x2e6dbdf9",
"calldata_variants": [
"0x2e6dbdf9",
"0x2e6dbdf90000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2e854433",
"selector": "0x2e854433",
"calldata_variants": [
"0x2e854433",
"0x2e8544330000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x47799092",
"selector": "0x47799092",
"calldata_variants": [
"0x47799092",
"0x477990920000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x4b60ce77",
"selector": "0x4b60ce77",
"calldata_variants": [
"0x4b60ce77",
"0x4b60ce770000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x4fb2e45d",
"selector": "0x4fb2e45d",
"calldata_variants": [
"0x4fb2e45d",
"0x4fb2e45d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x5afb6ba5",
"selector": "0x5afb6ba5",
"calldata_variants": [
"0x5afb6ba5",
"0x5afb6ba50000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 5621,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
}
],
"guards_detected": [],
"delegatecall_count": 1,
"untrusted_delegatecall_count": 1
}
|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0xe612ba76921025f91422b9b672563768202ab8c1659d82fa5dbe5fa777965f25
call_targets:
0xf564141bda167a0f2c87ffd4480be627d90fa954
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xe612ba76921025f91422b9b672563768202ab8c1659d82fa5dbe5fa777965f25",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xf564141bda167a0f2c87ffd4480be627d90fa954"
],
"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": "0x0d15fd77",
"selector": "0x0d15fd77",
"calldata_variants": [
"0x0d15fd77",
"0x0d15fd770000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2969d202",
"selector": "0x2969d202",
"calldata_variants": [
"0x2969d202",
"0x2969d2020000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2e6dbdf9",
"selector": "0x2e6dbdf9",
"calldata_variants": [
"0x2e6dbdf9",
"0x2e6dbdf90000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2e854433",
"selector": "0x2e854433",
"calldata_variants": [
"0x2e854433",
"0x2e8544330000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x47799092",
"selector": "0x47799092",
"calldata_variants": [
"0x47799092",
"0x477990920000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x4b60ce77",
"selector": "0x4b60ce77",
"calldata_variants": [
"0x4b60ce77",
"0x4b60ce770000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x4fb2e45d",
"selector": "0x4fb2e45d",
"calldata_variants": [
"0x4fb2e45d",
"0x4fb2e45d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x5afb6ba5",
"selector": "0x5afb6ba5",
"calldata_variants": [
"0x5afb6ba5",
"0x5afb6ba50000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 920,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1076,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1766,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 6,
"guards_detected": [],
"untrusted_call_count": 6
}
|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0xe612ba76921025f91422b9b672563768202ab8c1659d82fa5dbe5fa777965f25
call_targets:
0xf564141bda167a0f2c87ffd4480be627d90fa954
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xe612ba76921025f91422b9b672563768202ab8c1659d82fa5dbe5fa777965f25",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xf564141bda167a0f2c87ffd4480be627d90fa954"
],
"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": "0x0d15fd77",
"selector": "0x0d15fd77",
"calldata_variants": [
"0x0d15fd77",
"0x0d15fd770000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2969d202",
"selector": "0x2969d202",
"calldata_variants": [
"0x2969d202",
"0x2969d2020000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2e6dbdf9",
"selector": "0x2e6dbdf9",
"calldata_variants": [
"0x2e6dbdf9",
"0x2e6dbdf90000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2e854433",
"selector": "0x2e854433",
"calldata_variants": [
"0x2e854433",
"0x2e8544330000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x47799092",
"selector": "0x47799092",
"calldata_variants": [
"0x47799092",
"0x477990920000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x4b60ce77",
"selector": "0x4b60ce77",
"calldata_variants": [
"0x4b60ce77",
"0x4b60ce770000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x4fb2e45d",
"selector": "0x4fb2e45d",
"calldata_variants": [
"0x4fb2e45d",
"0x4fb2e45d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x5afb6ba5",
"selector": "0x5afb6ba5",
"calldata_variants": [
"0x5afb6ba5",
"0x5afb6ba50000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 920,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1076,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1766,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 6,
"guards_detected": []
}
|
| medium | reentrancy | codex | External CALL before state update (potential reentrancy) | 75 | no | — |
viewevidence_json{
"evidence": "Bytecode shows a CALL at pc:0x722 followed by an SSTORE at pc:0x743, with no guard detected in the artifact; call arguments are computed from stack/CALLER, so the call can reach untrusted code.",
"locations": [
"pc:0x722",
"pc:0x743"
],
"recommendation": "Apply checks-effects-interactions: move critical SSTORE updates before the external CALL or add a reentrancy guard around the function; consider pull-based payouts instead of direct CALLs.",
"exploit_scenario": "If the CALL at pc:0x722 transfers ETH or invokes an attacker-controlled contract (target derived from CALLER/stack), a malicious receiver could reenter before the state update at pc:0x743 and repeat sensitive logic (e.g., withdrawals or accounting changes) to drain funds or bypass limits."
}
|
| medium | upgradeability | cast | DELEGATECALL present | 80 | no | — |
viewevidence_json{
"notes": "delegatecall enables execution in caller context; common in proxies/upgradeable patterns",
"delegatecall_count": 1
}
|
| low | other | codex | External CALL targets/values are computed (audit address control) | 65 | no | — |
viewevidence_json{
"evidence": "Detector evidence lists 6 CALL sites with target/value marked as computed and no guards detected; callsites at pc:0x398, 0x434, 0x6e6, 0x722, 0x842, 0x122c show EXTCODESIZE/CALL patterns with computed inputs and unknown returndata validation semantics.",
"locations": [
"pc:0x398",
"pc:0x434",
"pc:0x6e6",
"pc:0x722",
"pc:0x842",
"pc:0x122c"
],
"recommendation": "Verify that all CALL target addresses and values are either hardcoded or settable only by trusted roles; add explicit validation/allowlists for addresses and ensure reentrancy protections when calling external contracts.",
"exploit_scenario": "If any of the computed call targets/values at these callsites can be influenced by untrusted input or mutable storage without strict access control, an attacker could redirect value transfers or trigger malicious callbacks."
}
|
| info | other | cast | Heavy EXTCODE*/BALANCE usage | 55 | no | — |
viewevidence_json{
"notes": "frequent external code or balance checks; may indicate introspection or validation logic",
"ext_balance_count": 5
}
|