27adab22-8196-416d-923f-8ae322a6f71f
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 |
|---|---|---|---|---|
| 31314 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 110882 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 110883 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 110884 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 110885 | capability.graph | complete | 1 / 3 | 1 week ago |
| 110886 | detector.run | complete | 1 / 3 | 1 week ago |
| 110887 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:411580] OpenAI Codex v0.77.0 (research preview)
[codex:411580] --------
[codex:411580] workdir: /tmp/codex-multi-1fljawkt
[codex:411580] model: gpt-5.2-codex
[codex:411580] provider: openai
[codex:411580] approval: never
[codex:411580] sandbox: read-only
[codex:411580] reasoning effort: xhigh
[codex:411580] reasoning summaries: auto
[codex:411580] session id: 019b7ff4-dde1-76f3-9b08-d7e9fb0f0c00
[codex:411580] --------
[codex:411580] user
[codex:411580] You are a profit-focused exploit hunter analyzing EVM bytecode. Your ONLY goal is finding ways to extract value (ETH, tokens, NFTs) from this contract.
[codex:411580]
[codex:411580] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:411580]
[codex:411580] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:411580] - Gas inefficiency, code quality, or best practices
[codex:411580] - Theoretical vulnerabilities without a clear extraction path
[codex:411580] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:411580] - Issues requiring social engineering or off-chain coordination
[codex:411580]
[codex:411580] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:411580] - CALL/DELEGATECALL with controllable destination or calldata
[codex:411580] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:411580] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:411580] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:411580] - External calls before state updates (reentrancy)
[codex:411580] - SELFDESTRUCT with controllable beneficiary
[codex:411580] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:411580]
[codex:411580] For each finding, you MUST explain:
[codex:411580] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:411580] 2. The concrete sequence of transactions to extract value
[codex:411580] 3. Why you believe this is exploitable (not just suspicious)
[codex:411580]
[codex:411580] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:411580] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:411580]
[codex:411580] Output MUST be valid JSON matching the provided schema.
[codex:411580] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:411580] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:411580] mcp startup: no servers
[codex:411580]
[codex:411580] thinking
[codex:411580] **Preparing to read BYTECODE_BUNDLE.txt**
[codex:411580] exec
[codex:411580] /bin/bash -lc ls in /tmp/codex-multi-1fljawkt succeeded in 5ms:
[codex:411580] BYTECODE_BUNDLE.txt
[codex:411580] codex-output-schema.json
[codex:411580] exec
[codex:411580] /bin/bash -lc 'wc -l BYTECODE_BUNDLE.txt' in /tmp/codex-multi-1fljawkt succeeded in 5ms:
[codex:411580] 5 BYTECODE_BUNDLE.txt
[codex:411580] exec
[codex:411580] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-1fljawkt succeeded in 5ms:
[codex:411580] Runtime bytecode bundle for best-effort auditing.
[codex:411580] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:411580]
[codex:411580] FILE: runtime_bytecode.hex
[codex:411580] 0x6080604052600436106100b95763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663150b7a0281146100ff5780632c8ef8411461016d578063375b74c314610185578063441e15d0146101b6578063522b3d17146101f1578063526327f2146102335780635aa79b6b1461026957806360de3a2614610281578063bab8965d146102ab578063cb81fecf146102c3578063eb9b6816146102d8578063ecf644f1146102f0575b60003411156100fd576040805133815234602082015281517f939e51ac2fd009b158d6344f7e68a83d8d18d9b0cc88cf514aac6aaa9cad2a18929181900390910190a15b005b34801561010b57600080fd5b50610138600160a060020a036004803582169160248035909116916044359160643590810191013561031a565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561017957600080fd5b506100fd600435610344565b34801561019157600080fd5b5061019a610441565b60408051600160a060020a039092168252519081900360200190f35b3480156101c257600080fd5b506101ce600435610450565b60408051600160a060020a03909316835260208301919091528051918290030190f35b3480156101fd57600080fd5b50610209600435610475565b60408051600160a060020a0394851681529290931660208301528183015290519081900360600190f35b34801561023f57600080fd5b50610257600160a060020a03600435166024356104a3565b60408051918252519081900360200190f35b34801561027557600080fd5b506100fd600435610629565b34801561028d57600080fd5b50610257600160a060020a0360043581169060243516604435610738565b3480156102b757600080fd5b506100fd600435610902565b3480156102cf57600080fd5b50610257610a10565b3480156102e457600080fd5b50610209600435610a16565b3480156102fc57600080fd5b50610257600160a060020a0360043581169060243516604435610a44565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b600154600090819081908190600160a060020a0316331461036457600080fd5b60008581526002602052604090208054909450600160a060020a0316925082151561038e57600080fd5b600180850154600087815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff191681559093018190559151909350600160a060020a0385169184156108fc02918591818181858888f193505050509050801561043a5760408051868152600160a060020a038516602082015280820184905290517fa60bf978b126b18592f5814e3f5a8a515c7398d434c3e3c80509c2cabe29a3169181900360600190a15b5050505050565b600154600160a060020a031681565b60026020526000908152604090208054600190910154600160a060020a039091169082565b600460205260009081526040902080546001820154600290920154600160a060020a03918216929091169083565b600080600160a060020a03841615156104bb57600080fd5b6104c3610c0e565b6040805160208082018490527f526327f200000000000000000000000000000000000000000000000000000000828401526c01000000000000000000000000600160a060020a0389160260448301526058808301889052835180840390910181526078909201928390528151939450909282918401908083835b6020831061055c5780518252601f19909201916020918201910161053d565b51815160001960209485036101000a019081169019909116179052604080519490920184900384208483018352600160a060020a038b81168087528684018c815260008481526002865286812098518954941673ffffffffffffffffffffffffffffffffffffffff199094169390931788555160019097019690965554835182815292830152818301949094526060810189905290519296507feb834e5a149cb8e47021251c336929a69cf86727196572529a29bf1b3a22d35a9450829003608001925050a15092915050565b6001546000908190819081908190600160a060020a0316331461064b57600080fd5b60008681526004602052604090208054909550600160a060020a0316935083151561067557600080fd5b60018086015460028088015460008a8152600460205260408120805473ffffffffffffffffffffffffffffffffffffffff19908116825595810180549096169095559390910192909255600160a060020a0316935091506106d7848484610cb7565b905080156107305760408051878152600160a060020a0380871660208301528516818301526060810184905290517feb1b982af03fc8d04e3d1ec453261a3fa4dad85540be27231a6e729d9c34f1b79181900360800190a15b505050505050565b600080600160a060020a038516151561075057600080fd5b600160a060020a038416151561076557600080fd5b61076d610c0e565b6040805160208082018490527f60de3a2600000000000000000000000000000000000000000000000000000000828401526c01000000000000000000000000600160a060020a03808b16820260448501528916026058830152606c80830188905283518084039091018152608c909201928390528151939450909282918401908083835b602083106108105780518252601f1990920191602091820191016107f1565b51815160001960209485036101000a019081169019919091161790526040805194909201849003842060608086018452600160a060020a03808e168088528d82168886018181528988018f81526000878152600489528981209b518c5490871673ffffffffffffffffffffffffffffffffffffffff19918216178d55925160018d0180549190971693169290921790945592516002909901989098559054855184815294850152838501528201949094526080810189905290519296507f02f609a1c03b13108a8069c96fbcfb080db656ce3f52dfdaa9af431e2d71dc65945082900360a001925050a1509392505050565b6001546000908190819081908190600160a060020a0316331461092457600080fd5b60008681526003602052604090208054909550600160a060020a0316935083151561094e57600080fd5b60018086015460028088015460008a8152600360205260408120805473ffffffffffffffffffffffffffffffffffffffff19908116825595810180549096169095559390910192909255600160a060020a0316935091506109b0848484610d27565b905080156107305760408051878152600160a060020a0380871660208301528516818301526060810184905290517f05b708c886ad83ae717f113aa484cdf529c07892cecc7000be8e7e876a841d1b9181900360800190a1505050505050565b60005481565b600360205260009081526040902080546001820154600290920154600160a060020a03918216929091169083565b600080600160a060020a0385161515610a5c57600080fd5b600160a060020a0384161515610a7157600080fd5b610a79610c0e565b6040805160208082018490527fecf644f100000000000000000000000000000000000000000000000000000000828401526c01000000000000000000000000600160a060020a03808b16820260448501528916026058830152606c80830188905283518084039091018152608c909201928390528151939450909282918401908083835b60208310610b1c5780518252601f199092019160209182019101610afd565b51815160001960209485036101000a019081169019919091161790526040805194909201849003842060608086018452600160a060020a03808e168088528d82168886018181528988018f81526000878152600389528981209b518c5490871673ffffffffffffffffffffffffffffffffffffffff19918216178d55925160018d0180549190971693169290921790945592516002909901989098559054855184815294850152838501528201949094526080810189905290519296507f620b1d454866258768f710e230edb1977b9f7349de5a633e5e34337d6e9fffab945082900360a001925050a1509392505050565b60008054600101808255604080516000194301406020808301919091526c0100000000000000000000000030028284015260548083019490945282518083039094018452607490910191829052825182918401908083835b60208310610c855780518252601f199092019160209182019101610c66565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905090565b604080517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a0384811660248301526044820184905291516000928616916342842e0e9160648083019286929190829003018183875af1979650505050505050565b604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a03848116600483015260248201849052915160009286169163a9059cbb9160448083019286929190829003018183875af19796505050505050505600a165627a7a7230582033b4c81ac296b8d1be9b1e1771aae54c63b57d9df3ff2a1dfb5202fc7d44c3ee0029
[codex:411580]
[codex:411580] thinking
[codex:411580] **Examining EVM bytecode for vulnerabilities**
[codex:411580] exec
[codex:411580] /bin/bash -lc "python - <<'PY'
[codex:411580] import re
[codex:411580] from pathlib import Path
[codex:411580] code = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:411580] # extract hex after 0x in runtime_bytecode
[codex:411580] m = re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)', code)
[codex:411580] hexstr = m.group(1)
[codex:411580] # disassemble
[codex:411580] opcodes = {
[codex:411580] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:411580] 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',
[codex:411580] 0x20:'SHA3',
[codex:411580] 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',
[codex:411580] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:411580] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:411580] 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',
[codex:411580] 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',
[codex:411580] 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',
[codex:411580] 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',
[codex:411580] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:411580] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:411580] }
[codex:411580]
[codex:411580] b = bytes.fromhex(hexstr)
[codex:411580] # disassemble with addresses
[codex:411580] addr = 0
[codex:411580] out = []
[codex:411580] while addr < len(b):
[codex:411580] op = b[addr]
[codex:411580] name = opcodes.get(op, f'OP{op:02x}')
[codex:411580] if 0x60 <= op <= 0x7f:
[codex:411580] n = op - 0x5f
[codex:411580] data = b[addr+1:addr+1+n]
[codex:411580] out.append((addr, name, data.hex()))
[codex:411580] addr += 1+n
[codex:411580] else:
[codex:411580] out.append((addr, name, ''))
[codex:411580] addr += 1
[codex:411580]
[codex:411580] # print a subset around jumpdests and call sites
[codex:411580] # let's find all JUMPDEST addresses
[codex:411580] jumpdests = {addr for addr, name, _ in out if name=='JUMPDEST'}
[codex:411580] print('Total JUMPDEST', len(jumpdests))
[codex:411580]
[codex:411580] # Print from 0x300 onwards maybe? Let's just output entire disassembly? maybe too long.
[codex:411580] # We'll output addresses with CALL/DELEGATECALL/SELFDESTRUCT and JUMPDEST entry points.
[codex:411580] for addr, name, data in out:
[codex:411580] if name in ('CALL','DELEGATECALL','SELFDESTRUCT','STATICCALL'):
[codex:411580] print(f'{addr:04x}: {name} {data}')
[codex:411580]
[codex:411580] # show beginning and function selectors area
[codex:411580] print('\\n-- start --')
[codex:411580] for addr, name, data in out[:120]:
[codex:411580] if data:
[codex:411580] print(f'{addr:04x}: {name} 0x{data}')
[codex:411580] else:
[codex:411580] print(f'{addr:04x}: {name}')
[codex:411580]
[codex:411580] # show chunks around jumpdests for functions of interest
[codex:411580] # we know function entries from dispatcher; show around each
[codex:411580] func_entries = [0x00ff,0x016d,0x0185,0x01b6,0x01f1,0x0233,0x0269,0x0281,0x02ab,0x02c3,0x02d8,0x02f0]
[codex:411580] print('\\n-- function entries --')
[codex:411580] for fe in func_entries:
[codex:411580] print(f'Function entry {fe:04x}')
[codex:411580] for addr,name,data in out:
[codex:411580] if addr>=fe and addr<fe+40:
[codex:411580] if data:
[codex:411580] print(f' {addr:04x}: {name} 0x{data}')
[codex:411580] else:
[codex:411580] print(f' {addr:04x}: {name}')
[codex:411580] print('')
[codex:411580]
[codex:411580] PY" in /tmp/codex-multi-1fljawkt succeeded in 35ms:
[codex:411580] Total JUMPDEST 72
[codex:411580] 03e4: CALL
[codex:411580] 0d1c: CALL
[codex:411580] 0d86: CALL
[codex:411580]
[codex:411580] -- start --
[codex:411580] 0000: PUSH1 0x80
[codex:411580] 0002: PUSH1 0x40
[codex:411580] 0004: MSTORE
[codex:411580] 0005: PUSH1 0x04
[codex:411580] 0007: CALLDATASIZE
[codex:411580] 0008: LT
[codex:411580] 0009: PUSH2 0x00b9
[codex:411580] 000c: JUMPI
[codex:411580] 000d: PUSH4 0xffffffff
[codex:411580] 0012: PUSH29 0x0100000000000000000000000000000000000000000000000000000000
[codex:411580] 0030: PUSH1 0x00
[codex:411580] 0032: CALLDATALOAD
[codex:411580] 0033: DIV
[codex:411580] 0034: AND
[codex:411580]
[codex:411580] thinking
[codex:411580] **Investigating CALL instructions in disassembly**
[codex:411580] exec
[codex:411580] /bin/bash -lc "python - <<'PY'
[codex:411580] import re
[codex:411580] from pathlib import Path
[codex:411580] code = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:411580] m = re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)', code)
[codex:411580] hexstr = m.group(1)
[codex:411580] # disassembler
[codex:411580] opcodes = {
[codex:411580] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:411580] 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',
[codex:411580] 0x20:'SHA3',
[codex:411580] 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',
[codex:411580] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:411580] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:411580] 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',
[codex:411580] 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',
[codex:411580] 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',
[codex:411580] 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',
[codex:411580] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:411580] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:411580] }
[codex:411580]
[codex:411580] b = bytes.fromhex(hexstr)
[codex:411580] # disassemble
[codex:411580] addr = 0
[codex:411580] out = []
[codex:411580] while addr < len(b):
[codex:411580] op = b[addr]
[codex:411580] name = opcodes.get(op, f'OP{op:02x}')
[codex:411580] if 0x60 <= op <= 0x7f:
[codex:411580] n = op - 0x5f
[codex:411580] data = b[addr+1:addr+1+n]
[codex:411580] out.append((addr, name, data.hex()))
[codex:411580] addr += 1+n
[codex:411580] else:
[codex:411580] out.append((addr, name, ''))
[codex:411580] addr += 1
[codex:411580]
[codex:411580] # map addr->index
[codex:411580] idx = {a:i for i,(a,_,_) in enumerate(out)}
[codex:411580]
[codex:411580] # function to print around address
[codex:411580]
[codex:411580] def show(addr, before=20, after=20):
[codex:411580] i = idx[addr]
[codex:411580] start = max(0, i-before)
[codex:411580] end = min(len(out), i+after)
[codex:411580] for a,name,data in out[start:end]:
[codex:411580] if data:
[codex:411580] print(f'{a:04x}: {name} 0x{data}')
[codex:411580] else:
[codex:411580] print(f'{a:04x}: {name}')
[codex:411580] print('')
[codex:411580]
[codex:411580] # show around CALLs
[codex:411580] call_addrs = [a for a,name,_ in out if name=='CALL']
[codex:411580] print('CALL addresses:', [hex(a) for a in call_addrs])
[codex:411580] for a in call_addrs:
[codex:411580] print('--- around', hex(a))
[codex:411580] show(a, before=30, after=30)
[codex:411580]
[codex:411580] # show around internal function starts maybe at 0x031a, 0x0344, 0x0441, 0x0450, 0x0475, 0x04a3, 0x0629, 0x0738, 0x0902, 0x0a10, 0x0a16, 0x0a44, 0x0c0e, 0x0cb7, 0x0d27
[codex:411580] for fe in [0x031a,0x0344,0x0441,0x0450,0x0475,0x04a3,0x0629,0x0738,0x0902,0x0a10,0x0a16,0x0a44,0x0c0e,0x0cb7,0x0d27]:
[codex:411580] print('=== function', hex(fe))
[codex:411580] if fe in idx:
[codex:411580] show(fe, before=5, after=40)
[codex:411580] else:
[codex:411580] print('not found')
[codex:411580]
[codex:411580] PY" in /tmp/codex-multi-1fljawkt succeeded in 31ms:
[codex:411580] CALL addresses: ['0x3e4', '0xd1c', '0xd86']
[codex:411580] --- around 0x3e4
[codex:411580] 03c1: ADD
[codex:411580] 03c2: DUP2
[codex:411580] 03c3: SWAP1
[codex:411580] 03c4: SSTORE
[codex:411580] 03c5: SWAP2
[codex:411580] 03c6: MLOAD
[codex:411580] 03c7: SWAP1
[codex:411580] 03c8: SWAP4
[codex:411580] 03c9: POP
[codex:411580] 03ca: PUSH1 0x01
[codex:411580] 03cc: PUSH1 0xa0
[codex:411580] 03ce: PUSH1 0x02
[codex:411580] 03d0: EXP
[codex:411580] 03d1: SUB
[codex:411580] 03d2: DUP6
[codex:411580] 03d3: AND
[codex:411580] 03d4: SWAP2
[codex:411580] 03d5: DUP5
[codex:411580]
[codex:411580] thinking
[codex:411580] **Analyzing function calls and disassembly**
[codex:411580] exec
[codex:411580] /bin/bash -lc "python - <<'PY'
[codex:411580] import re
[codex:411580] from pathlib import Path
[codex:411580] code = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:411580] m = re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)', code)
[codex:411580] hexstr = m.group(1)
[codex:411580]
[codex:411580] opcodes = {
[codex:411580] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:411580] 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',
[codex:411580] 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',
[codex:411580] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:411580] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:411580] 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',
[codex:411580] 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',
[codex:411580] 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',
[codex:411580] 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',
[codex:411580] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:411580] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:411580] }
[codex:411580]
[codex:411580] b = bytes.fromhex(hexstr)
[codex:411580] # disassemble
[codex:411580] addr = 0
[codex:411580] out = []
[codex:411580] while addr < len(b):
[codex:411580] op = b[addr]
[codex:411580] name = opcodes.get(op, f'OP{op:02x}')
[codex:411580] if 0x60 <= op <= 0x7f:
[codex:411580] n = op - 0x5f
[codex:411580] data = b[addr+1:addr+1+n]
[codex:411580] out.append((addr, name, data.hex()))
[codex:411580] addr += 1+n
[codex:411580] else:
[codex:411580] out.append((addr, name, ''))
[codex:411580] addr += 1
[codex:411580]
[codex:411580] # show from 0x0344 to 0x0450
[codex:411580] for addr,name,data in out:
[codex:411580] if 0x0344 <= addr <= 0x0450:
[codex:411580] if data:
[codex:411580] print(f'{addr:04x}: {name} 0x{data}')
[codex:411580] else:
[codex:411580] print(f'{addr:04x}: {name}')
[codex:411580]
[codex:411580] PY" in /tmp/codex-multi-1fljawkt succeeded in 35ms:
[codex:411580] 0344: JUMPDEST
[codex:411580] 0345: PUSH1 0x01
[codex:411580] 0347: SLOAD
[codex:411580] 0348: PUSH1 0x00
[codex:411580] 034a: SWAP1
[codex:411580] 034b: DUP2
[codex:411580] 034c: SWAP1
[codex:411580] 034d: DUP2
[codex:411580] 034e: SWAP1
[codex:411580] 034f: DUP2
[codex:411580] 0350: SWAP1
[codex:411580] 0351: PUSH1 0x01
[codex:411580] 0353: PUSH1 0xa0
[codex:411580] 0355: PUSH1 0x02
[codex:411580] 0357: EXP
[codex:411580] 0358: SUB
[codex:411580] 0359: AND
[codex:411580] 035a: CALLER
[codex:411580] 035b: EQ
[codex:411580] 035c: PUSH2 0x0364
[codex:411580]
[codex:411580] thinking
[codex:411580] **Analyzing complex admin function and calls**
[codex:411580]
[codex:411580] I'm mapping out this admin function's argument handling and stack usage, focusing on how it checks for owner access and calls external contracts for ETH, ERC721, and ERC20 transfers. I want to determine if these potentially sensitive calls are properly access-controlled to prevent exploits like unauthorized transfers or reentrancy. I'll keep digging into jump targets and how arguments flow through stack manipulations to verify security.
[codex:411580] exec
[codex:411580] /bin/bash -lc "python - <<'PY'
[codex:411580] import re
[codex:411580] from pathlib import Path
[codex:411580] code=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:411580] import binascii
[codex:411580] m=re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)',code)
[codex:411580] hexstr=m.group(1)
[codex:411580] b=bytes.fromhex(hexstr)
[codex:411580] # disassemble push2 to identify cross refs
[codex:411580] addrs=[]
[codex:411580] addr=0
[codex:411580] while addr<len(b):
[codex:411580] op=b[addr]
[codex:411580] if 0x60<=op<=0x7f:
[codex:411580] n=op-0x5f
[codex:411580] data=b[addr+1:addr+1+n]
[codex:411580] if op==0x61: # push2
[codex:411580] val=int.from_bytes(data,'big')
[codex:411580] addrs.append((addr,val))
[codex:411580] addr+=1+n
[codex:411580] else:
[codex:411580] addr+=1
[codex:411580]
[codex:411580] # find push2 to 0x0cb7,0x0d27,0x0c0e
[codex:411580] for target in [0x0cb7,0x0d27,0x0c0e]:
[codex:411580] refs=[(a,v) for a,v in addrs if v==target]
[codex:411580] print(hex(target), 'refs', [hex(a) for a,_ in refs])
[codex:411580]
[codex:411580] # list all push2 values maybe for function calls? show top few unique
[codex:411580] unique=sorted(set(v for _,v in addrs))
[codex:411580] print('unique push2 count', len(unique))
[codex:411580] print('first 50', [hex(v) for v in unique[:50]])
[codex:411580] print('last 20', [hex(v) for v in unique[-20:]])
[codex:411580] PY" in /tmp/codex-multi-1fljawkt succeeded in 29ms:
[codex:411580] 0xcb7 refs ['0x6d3']
[codex:411580] 0xd27 refs ['0x9ac']
[codex:411580] 0xc0e refs ['0x4bf', '0x769', '0xa75']
[codex:411580] unique push2 count 74
[codex:411580] first 50 ['0xb9', '0xfd', '0xff', '0x100', '0x10b', '0x138', '0x16d', '0x179', '0x185', '0x191', '0x19a', '0x1b6', '0x1c2', '0x1ce', '0x1f1', '0x1fd', '0x209', '0x233', '0x23f', '0x257', '0x269', '0x275', '0x281', '0x28d', '0x2ab', '0x2b7', '0x2c3', '0x2cf', '0x2d8', '0x2e4', '0x2f0', '0x2fc', '0x31a', '0x344', '0x364', '0x38e', '0x43a', '0x441', '0x450', '0x475', '0x4a3', '0x4bb', '0x4c3', '0x53d', '0x55c', '0x629', '0x64b', '0x675', '0x6d7', '0x730']
[codex:411580] last 20 ['0x7f1', '0x810', '0x8fc', '0x902', '0x924', '0x94e', '0x9b0', '0xa10', '0xa16', '0xa44', '0xa5c', '0xa71', '0xa79', '0xafd', '0xb1c', '0xc0e', '0xc66', '0xc85', '0xcb7', '0xd27']
[codex:411580]
[codex:411580] thinking
[codex:411580] **Analyzing function call references**
[codex:411580] exec
[codex:411580] /bin/bash -lc "python - <<'PY'
[codex:411580] import re
[codex:411580] from pathlib import Path
[codex:411580] code=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:411580] m=re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)',code)
[codex:411580] hexstr=m.group(1)
[codex:411580]
[codex:411580] # simple disasm
[codex:411580] 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',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'}
[codex:411580]
[codex:411580] b = bytes.fromhex(hexstr)
[codex:411580]
[codex:411580] # disassemble
[codex:411580] addr=0
[codex:411580] out=[]
[codex:411580] while addr<len(b):
[codex:411580] op=b[addr]
[codex:411580] name=opcodes.get(op,f'OP{op:02x}')
[codex:411580] if 0x60<=op<=0x7f:
[codex:411580] n=op-0x5f
[codex:411580] data=b[addr+1:addr+1+n]
[codex:411580] out.append((addr,name,data.hex()))
[codex:411580] addr+=1+n
[codex:411580] else:
[codex:411580] out.append((addr,name,''))
[codex:411580] addr+=1
[codex:411580]
[codex:411580] for addr,name,data in out:
[codex:411580] if 0x0629 <= addr <= 0x0738:
[codex:411580] if data:
[codex:411580] print(f'{addr:04x}: {name} 0x{data}')
[codex:411580] else:
[codex:411580] print(f'{addr:04x}: {name}')
[codex:411580] PY" in /tmp/codex-multi-1fljawkt succeeded in 31ms:
[codex:411580] 0629: JUMPDEST
[codex:411580] 062a: PUSH1 0x01
[codex:411580] 062c: SLOAD
[codex:411580] 062d: PUSH1 0x00
[codex:411580] 062f: SWAP1
[codex:411580] 0630: DUP2
[codex:411580] 0631: SWAP1
[codex:411580] 0632: DUP2
[codex:411580] 0633: SWAP1
[codex:411580] 0634: DUP2
[codex:411580] 0635: SWAP1
[codex:411580] 0636: DUP2
[codex:411580] 0637: SWAP1
[codex:411580] 0638: PUSH1 0x01
[codex:411580] 063a: PUSH1 0xa0
[codex:411580] 063c: PUSH1 0x02
[codex:411580] 063e: EXP
[codex:411580] 063f: SUB
[codex:411580] 0640: AND
[codex:411580] 0641: CALLER
[codex:411580]
[codex:411580] thinking
[codex:411580] **Analyzing admin-only functions**
[codex:411580] exec
[codex:411580] /bin/bash -lc "python - <<'PY'
[codex:411580] import re
[codex:411580] from pathlib import Path
[codex:411580] code=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:411580] m=re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)',code)
[codex:411580] hexstr=m.group(1)
[codex:411580] # disasm
[codex:411580] 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',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'}
[codex:411580]
[codex:411580] b=bytes.fromhex(hexstr)
[codex:411580] addr=0
[codex:411580] out=[]
[codex:411580] while addr<len(b):
[codex:411580] op=b[addr]
[codex:411580] name=opcodes.get(op,f'OP{op:02x}')
[codex:411580] if 0x60<=op<=0x7f:
[codex:411580] n=op-0x5f
[codex:411580] data=b[addr+1:addr+1+n]
[codex:411580] out.append((addr,name,data.hex()))
[codex:411580] addr+=1+n
[codex:411580] else:
[codex:411580] out.append((addr,name,''))
[codex:411580] addr+=1
[codex:411580]
[codex:411580] for addr,name,data in out:
[codex:411580] if 0x0902 <= addr <= 0x0a10:
[codex:411580] if data:
[codex:411580] print(f'{addr:04x}: {name} 0x{data}')
[codex:411580] else:
[codex:411580] print(f'{addr:04x}: {name}')
[codex:411580] PY" in /tmp/codex-multi-1fljawkt succeeded in 29ms:
[codex:411580] 0902: JUMPDEST
[codex:411580] 0903: PUSH1 0x01
[codex:411580] 0905: SLOAD
[codex:411580] 0906: PUSH1 0x00
[codex:411580] 0908: SWAP1
[codex:411580] 0909: DUP2
[codex:411580] 090a: SWAP1
[codex:411580] 090b: DUP2
[codex:411580] 090c: SWAP1
[codex:411580] 090d: DUP2
[codex:411580] 090e: SWAP1
[codex:411580] 090f: DUP2
[codex:411580] 0910: SWAP1
[codex:411580] 0911: PUSH1 0x01
[codex:411580] 0913: PUSH1 0xa0
[codex:411580] 0915: PUSH1 0x02
[codex:411580] 0917: EXP
[codex:411580] 0918: SUB
[codex:411580] 0919: AND
[codex:411580] 091a: CALLER
[codex:411580]
[codex:411580] thinking
[codex:411580] **Examining access control and storage writes**
[codex:411580] exec
[codex:411580] /bin/bash -lc "python - <<'PY'
[codex:411580] import re
[codex:411580] from pathlib import Path
[codex:411580] code=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:411580] m=re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)', code)
[codex:411580] hexstr=m.group(1)
[codex:411580]
[codex:411580] 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',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'}
[codex:411580]
[codex:411580] b = bytes.fromhex(hexstr)
[codex:411580] # disassemble
[codex:411580] addr=0
[codex:411580] out=[]
[codex:411580] while addr<len(b):
[codex:411580] op=b[addr]
[codex:411580] name=opcodes.get(op,f'OP{op:02x}')
[codex:411580] if 0x60<=op<=0x7f:
[codex:411580] n=op-0x5f
[codex:411580] data=b[addr+1:addr+1+n]
[codex:411580] out.append((addr,name,data.hex()))
[codex:411580] addr+=1+n
[codex:411580] else:
[codex:411580] out.append((addr,name,''))
[codex:411580] addr+=1
[codex:411580]
[codex:411580] # list sstore locations with context
[codex:411580] indices=[i for i,(a,n,_) in enumerate(out) if n=='SSTORE']
[codex:411580] for i in indices:
[codex:411580] start=max(0,i-5)
[codex:411580] end=min(len(out),i+3)
[codex:411580] print('--- SSTORE at', hex(out[i][0]))
[codex:411580] for a,n,d in out[start:end]:
[codex:411580] if d:
[codex:411580] print(f'{a:04x}: {n} 0x{d}')
[codex:411580] else:
[codex:411580] print(f'{a:04x}: {n}')
[codex:411580] PY" in /tmp/codex-multi-1fljawkt succeeded in 32ms:
[codex:411580] --- SSTORE at 0x3be
[codex:411580] 03a5: SLOAD
[codex:411580] 03a6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:411580] 03bb: NOT
[codex:411580] 03bc: AND
[codex:411580] 03bd: DUP2
[codex:411580] 03be: SSTORE
[codex:411580] 03bf: SWAP1
[codex:411580] 03c0: SWAP4
[codex:411580] --- SSTORE at 0x3c4
[codex:411580] 03bf: SWAP1
[codex:411580] 03c0: SWAP4
[codex:411580] 03c1: ADD
[codex:411580] 03c2: DUP2
[codex:411580] 03c3: SWAP1
[codex:411580] 03c4: SSTORE
[codex:411580] 03c5: SWAP2
[codex:411580] 03c6: MLOAD
[codex:411580] --- SSTORE at 0x5ce
[codex:411580] 05c9: SWAP4
[codex:411580]
[codex:411580]
[codex:411580] thinking
[codex:411580] **Analyzing storage and access controls in contract**
[codex:411580]
[codex:411580] I'm digging into the contract’s storage layout and function behavior to see if any privileged storage slots, especially slot1 (owner), can be changed without control. I’m tracing calls, SSTORE operations, and owner checks to pinpoint if there’s any exploitable path for unauthorized token or ETH transfers, reentrancy, or owner overwrites, but so far everything points to proper owner restrictions and no direct vulnerabilities.
[codex:411580] thinking
[codex:411580] **Preparing JSON output for results**
[codex:411580] exec
[codex:411580] /bin/bash -lc 'cat codex-output-schema.json' in /tmp/codex-multi-1fljawkt succeeded in 5ms:
[codex:411580] {"type": "object", "additionalProperties": false, "required": ["no_findings", "summary", "findings"], "properties": {"no_findings": {"type": "boolean"}, "summary": {"type": "string"}, "findings": {"type": "array", "items": {"type": "object", "additionalProperties": false, "required": ["severity", "category", "title", "evidence", "locations", "exploit_scenario", "recommendation"], "properties": {"severity": {"type": "string", "enum": ["info", "low", "medium", "high", "critical"]}, "category": {"type": "string", "enum": ["access_control", "reentrancy", "math", "oracle", "upgradeability", "auth", "other"]}, "title": {"type": "string"}, "exploit_scenario": {"type": "string"}, "recommendation": {"type": "string"}, "evidence": {"type": "string"}, "locations": {"type": "array", "items": {"type": "string"}}}}}}}
[codex:411580]
[codex:411580] thinking
[codex:411580] **Confirming no concrete exploit found**
[codex:411580] exec
[codex:411580] /bin/bash -lc "python - <<'PY'
[codex:411580] import re
[codex:411580] from pathlib import Path
[codex:411580] code=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:411580] m=re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)',code)
[codex:411580] hexstr=m.group(1)
[codex:411580]
[codex:411580] 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',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'}
[codex:411580]
[codex:411580] b=bytes.fromhex(hexstr)
[codex:411580] addr=0
[codex:411580] out=[]
[codex:411580] while addr<len(b):
[codex:411580] op=b[addr]
[codex:411580] name=opcodes.get(op,f'OP{op:02x}')
[codex:411580] if 0x60<=op<=0x7f:
[codex:411580] n=op-0x5f
[codex:411580] data=b[addr+1:addr+1+n]
[codex:411580] out.append((addr,name,data.hex()))
[codex:411580] addr+=1+n
[codex:411580] else:
[codex:411580] out.append((addr,name,''))
[codex:411580] addr+=1
[codex:411580]
[codex:411580] # find sload preceded by push1 01
[codex:411580] for i,(a,n,d) in enumerate(out):
[codex:411580] if n=='SLOAD' and i>0:
[codex:411580] prev=out[i-1]
[codex:411580] if prev[1]=='PUSH1' and prev[2]=='01':
[codex:411580] print('SLOAD slot1 at', hex(a))
[codex:411580]
[codex:411580] PY" in /tmp/codex-multi-1fljawkt succeeded in 32ms:
[codex:411580] SLOAD slot1 at 0x347
[codex:411580] SLOAD slot1 at 0x444
[codex:411580] SLOAD slot1 at 0x62c
[codex:411580] SLOAD slot1 at 0x905
[codex:411580]
[codex:411580] thinking
[codex:411580] **Crafting final JSON response**
[codex:411580] codex
[codex:411580] {"no_findings":true,"summary":"No concrete, exploitable value-extraction path identified from the runtime bytecode; external CALL sites appear owner-gated and no delegatecall/selfdestruct patterns are present. Bytecode-only review limits confidence.","findings":[]}
[codex:411580] tokens used
[codex:411580] 68,425
[codex:411580] {"no_findings":true,"summary":"No concrete, exploitable value-extraction path identified from the runtime bytecode; external CALL sites appear owner-gated and no delegatecall/selfdestruct patterns are present. Bytecode-only review limits confidence.","findings":[]}
{
"codex": {
"ran_at": "2026-01-02T18:31:45.630482+00:00",
"returncode": 0
},
"summary": "No concrete, exploitable value-extraction path identified from the runtime bytecode; external CALL sites appear owner-gated and no delegatecall/selfdestruct patterns are present. Bytecode-only review limits confidence.",
"raw_final": {
"summary": "No concrete, exploitable value-extraction path identified from the runtime bytecode; external CALL sites appear owner-gated and no delegatecall/selfdestruct patterns are present. Bytecode-only review limits confidence.",
"findings": [],
"no_findings": true
},
"no_findings": true,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x00b9 0000000c: JUMPI 0000000d: PUSH4 0xffffffff 00000012: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 00000030: PUSH1 0x00 00000032: CALLDATALOAD 00000033: DIV 00000034: AND 00000035: PUSH4 0x150b7a02 0000003a: DUP2 0000003b: EQ 0000003c: PUSH2 0x00ff 0000003f: JUMPI 00000040: DUP1 00000041: PUSH4 0x2c8ef841 00000046: EQ 00000047: PUSH2 0x016d 0000004a: JUMPI 0000004b: DUP1 0000004c: PUSH4 0x375b74c3 00000051: EQ 00000052: PUSH2 0x0185 00000055: JUMPI 00000056: DUP1 00000057: PUSH4 0x441e15d0 0000005c: EQ 0000005d: PUSH2 0x01b6 00000060: JUMPI 00000061: DUP1 00000062: PUSH4 0x522b3d17 00000067: EQ 00000068: PUSH2 0x01f1 0000006b: JUMPI 0000006c: DUP1 0000006d: PUSH4 0x526327f2 00000072: EQ 00000073: PUSH2 0x0233 00000076: JUMPI 00000077: DUP1 00000078: PUSH4 0x5aa79b6b 0000007d: EQ 0000007e: PUSH2 0x0269 00000081: JUMPI 00000082: DUP1 00000083: PUSH4 0x60de3a26 00000088: EQ 00000089: PUSH2 0x0281 0000008c: JUMPI 0000008d: DUP1 0000008e: PUSH4 0xbab8965d 00000093: EQ 00000094: PUSH2 0x02ab 00000097: JUMPI 00000098: DUP1 00000099: PUSH4 0xcb81fecf 0000009e: EQ 0000009f: PUSH2 0x02c3 000000a2: JUMPI 000000a3: DUP1 000000a4: PUSH4 0xeb9b6816 000000a9: EQ 000000aa: PUSH2 0x02d8 000000ad: JUMPI 000000ae: DUP1 000000af: PUSH4 0xecf644f1 000000b4: EQ 000000b5: PUSH2 0x02f0 000000b8: JUMPI 000000b9: JUMPDEST 000000ba: PUSH1 0x00 000000bc: CALLVALUE 000000bd: GT 000000be: ISZERO 000000bf: PUSH2 0x00fd 000000c2: JUMPI 000000c3: PUSH1 0x40 000000c5: DUP1 000000c6: MLOAD 000000c7: CALLER 000000c8: DUP2 000000c9: MSTORE 000000ca: CALLVALUE 000000cb: PUSH1 0x20 000000cd: DUP3 000000ce: ADD 000000cf: MSTORE 000000d0: DUP2 000000d1: MLOAD 000000d2: PUSH32 0x939e51ac2fd009b158d6344f7e68a83d8d18d9b0cc88cf514aac6aaa9cad2a18 000000f3: SWAP3 000000f4: SWAP2 000000f5: DUP2 000000f6: SWAP1 000000f7: SUB 000000f8: SWAP1 000000f9: SWAP2 000000fa: ADD 000000fb: SWAP1 000000fc: LOG1 000000fd: JUMPDEST 000000fe: STOP 000000ff: JUMPDEST 00000100: CALLVALUE 00000101: DUP1 00000102: ISZERO 00000103: PUSH2 0x010b 00000106: JUMPI 00000107: PUSH1 0x00 00000109: DUP1 0000010a: REVERT 0000010b: JUMPDEST 0000010c: POP 0000010d: PUSH2 0x0138 00000110: PUSH1 0x01 00000112: PUSH1 0xa0 00000114: PUSH1 0x02 00000116: EXP 00000117: SUB 00000118: PUSH1 0x04 0000011a: DUP1 0000011b: CALLDATALOAD 0000011c: DUP3 0000011d: AND 0000011e: SWAP2 0000011f: PUSH1 0x24 00000121: DUP1 00000122: CALLDATALOAD 00000123: SWAP1 00000124: SWAP2 00000125: AND 00000126: SWAP2 00000127: PUSH1 0x44 00000129: CALLDATALOAD 0000012a: SWAP2 0000012b: PUSH1 0x64 0000012d: CALLDATALOAD 0000012e: SWAP1 0000012f: DUP2 00000130: ADD 00000131: SWAP2 00000132: ADD 00000133: CALLDATALOAD 00000134: PUSH2 0x031a 00000137: JUMP 00000138: JUMPDEST 00000139: PUSH1 0x40 0000013b: DUP1 0000013c: MLOAD 0000013d: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000 0000015e: SWAP1 0000015f: SWAP3 00000160: AND 00000161: DUP3 00000162: MSTORE 00000163: MLOAD 00000164: SWAP1 00000165: DUP2 00000166: SWAP1 00000167: SUB 00000168: PUSH1 0x20 0000016a: ADD 0000016b: SWAP1 0000016c: RETURN 0000016d: JUMPDEST 0000016e: CALLVALUE 0000016f: DUP1 00000170: ISZERO 00000171: PUSH2 0x0179 00000174: JUMPI 00000175: PUSH1 0x00 00000177: DUP1 00000178: REVERT 00000179: JUMPDEST 0000017a: POP 0000017b: PUSH2 0x00fd 0000017e: PUSH1 0x04 00000180: CALLDATALOAD 00000181: PUSH2 0x0344 00000184: JUMP 00000185: JUMPDEST 00000186: CALLVALUE 00000187: DUP1 00000188: ISZERO 00000189: PUSH2 0x0191 0000018c: JUMPI 0000018d: PUSH1 0x00 0000018f: DUP1 00000190: REVERT 00000191: JUMPDEST 00000192: POP 00000193: PUSH2 0x019a 00000196: PUSH2 0x0441 00000199: JUMP 0000019a: JUMPDEST 0000019b: PUSH1 0x40 0000019d: DUP1 0000019e: MLOAD 0000019f: PUSH1 0x01 000001a1: PUSH1 0xa0 000001a3: PUSH1 0x02 000001a5: EXP 000001a6: SUB 000001a7: SWAP1 000001a8: SWAP3 000001a9: AND 000001aa: DUP3 000001ab: MSTORE 000001ac: MLOAD 000001ad: SWAP1 000001ae: DUP2 000001af: SWAP1 000001b0: SUB 000001b1: PUSH1 0x20 000001b3: ADD 000001b4: SWAP1 000001b5: RETURN 000001b6: JUMPDEST 000001b7: CALLVALUE 000001b8: DUP1 000001b9: ISZERO 000001ba: PUSH2 0x01c2 000001bd: JUMPI 000001be: PUSH1 0x00 000001c0: DUP1 000001c1: REVERT 000001c2: JUMPDEST 000001c3: POP 000001c4: PUSH2 0x01ce 000001c7: PUSH1 0x04 000001c9: CALLDATALOAD 000001ca: PUSH2 0x0450 000001cd: JUMP 000001ce: JUMPDEST 000001cf: PUSH1 0x40 000001d1: DUP1 000001d2: MLOAD 000001d3: PUSH1 0x01 000001d5: PUSH1 0xa0 000001d7: PUSH1 0x02 000001d9: EXP 000001da: SUB 000001db: SWAP1 000001dc: SWAP4 000001dd: AND 000001de: DUP4 000001df: MSTORE 000001e0: PUSH1 0x20 000001e2: DUP4 000001e3: ADD 000001e4: SWAP2 000001e5: SWAP1 000001e6: SWAP2 000001e7: MSTORE 000001e8: DUP1 000001e9: MLOAD 000001ea: SWAP2 000001eb: DUP3 000001ec: SWAP1 000001ed: SUB 000001ee: ADD 000001ef: SWAP1 000001f0: RETURN 000001f1: JUMPDEST 000001f2: CALLVALUE 000001f3: DUP1 000001f4: ISZERO 000001f5: PUSH2 0x01fd 000001f8: JUMPI 000001f9: PUSH1 0x00 000001fb: DUP1 000001fc: REVERT 000001fd: JUMPDEST 000001fe: POP 000001ff: PUSH2 0x0209 00000202: PUSH1 0x04 00000204: CALLDATALOAD 00000205: PUSH2 0x0475 00000208: JUMP 00000209: JUMPDEST 0000020a: PUSH1 0x40 0000020c: DUP1 0000020d: MLOAD 0000020e: PUSH1 0x01 00000210: PUSH1 0xa0 00000212: PUSH1 0x02 00000214: EXP 00000215: SUB 00000216: SWAP5 00000217: DUP6 00000218: AND 00000219: DUP2 0000021a: MSTORE 0000021b: SWAP3 0000021c: SWAP1 0000021d: SWAP4 0000021e: AND 0000021f: PUSH1 0x20 00000221: DUP4 00000222: ADD 00000223: MSTORE 00000224: DUP2 00000225: DUP4 00000226: ADD 00000227: MSTORE 00000228: SWAP1 00000229: MLOAD 0000022a: SWAP1 0000022b: DUP2 0000022c: SWAP1 0000022d: SUB 0000022e: PUSH1 0x60 00000230: ADD 00000231: SWAP1 00000232: RETURN 00000233: JUMPDEST 00000234: CALLVALUE 00000235: DUP1 00000236: ISZERO 00000237: PUSH2 0x023f 0000023a: JUMPI 0000023b: PUSH1 0x00 0000023d: DUP1 0000023e: REVERT 0000023f: JUMPDEST 00000240: POP 00000241: PUSH2 0x0257 00000244: PUSH1 0x01 00000246: PUSH1 0xa0 00000248: PUSH1 0x02 0000024a: EXP 0000024b: SUB 0000024c: PUSH1 0x04 0000024e: CALLDATALOAD 0000024f: AND 00000250: PUSH1 0x24 00000252: CALLDATALOAD 00000253: PUSH2 0x04a3 00000256: JUMP 00000257: JUMPDEST 00000258: PUSH1 0x40 0000025a: DUP1 0000025b: MLOAD 0000025c: SWAP2 0000025d: DUP3 0000025e: MSTORE 0000025f: MLOAD 00000260: SWAP1 00000261: DUP2 00000262: SWAP1 00000263: SUB 00000264: PUSH1 0x20 00000266: ADD 00000267: SWAP1 00000268: RETURN 00000269: JUMPDEST 0000026a: CALLVALUE 0000026b: DUP1 0000026c: ISZERO 0000026d: PUSH2 0x0275 00000270: JUMPI 00000271: PUSH1 0x00 00000273: DUP1 00000274: REVERT 00000275: JUMPDEST 00000276: POP 00000277: PUSH2 0x00fd 0000027a: PUSH1 0x04 0000027c: CALLDATALOAD 0000027d: PUSH2 0x0629 00000280: JUMP 00000281: JUMPDEST 00000282: CALLVALUE 00000283: DUP1 00000284: ISZERO 00000285: PUSH2 0x028d 00000288: JUMPI 00000289: PUSH1 0x00 0000028b: DUP1 0000028c: REVERT 0000028d: JUMPDEST 0000028e: POP 0000028f: PUSH2 0x0257 00000292: PUSH1 0x01 00000294: PUSH1 0xa0 00000296: PUSH1 0x02 00000298: EXP 00000299: SUB 0000029a: PUSH1 0x04 0000029c: CALLDATALOAD 0000029d: DUP2 0000029e: AND 0000029f: SWAP1 000002a0: PUSH1 0x24 000002a2: CALLDATALOAD 000002a3: AND 000002a4: PUSH1 0x44 000002a6: CALLDATALOAD 000002a7: PUSH2 0x0738 000002aa: JUMP 000002ab: JUMPDEST 000002ac: CALLVALUE 000002ad: DUP1 000002ae: ISZERO 000002af: PUSH2 0x02b7 000002b2: JUMPI 000002b3: PUSH1 0x00 000002b5: DUP1 000002b6: REVERT 000002b7: JUMPDEST 000002b8: POP 000002b9: PUSH2 0x00fd 000002bc: PUSH1 0x04 000002be: CALLDATALOAD 000002bf: PUSH2 0x0902 000002c2: JUMP 000002c3: JUMPDEST 000002c4: CALLVALUE 000002c5: DUP1 000002c6: ISZERO 000002c7: PUSH2 0x02cf 000002ca: JUMPI 000002cb: PUSH1 0x00 000002cd: DUP1 000002ce: REVERT 000002cf: JUMPDEST 000002d0: POP 000002d1: PUSH2 0x0257 000002d4: PUSH2 0x0a10 000002d7: JUMP 000002d8: JUMPDEST 000002d9: CALLVALUE 000002da: DUP1 000002db: ISZERO 000002dc: PUSH2 0x02e4 000002df: JUMPI 000002e0: PUSH1 0x00 000002e2: DUP1 000002e3: REVERT 000002e4: JUMPDEST 000002e5: POP 000002e6: PUSH2 0x0209 000002e9: PUSH1 0x04 000002eb: CALLDATALOAD 000002ec: PUSH2 0x0a16 000002ef: JUMP 000002f0: JUMPDEST 000002f1: CALLVALUE 000002f2: DUP1 000002f3: ISZERO 000002f4: PUSH2 0x02fc 000002f7: JUMPI 000002f8: PUSH1 0x00 000002fa: DUP1 000002fb: REVERT 000002fc: JUMPDEST 000002fd: POP 000002fe: PUSH2 0x0257 00000301: PUSH1 0x01 00000303: PUSH1 0xa0 00000305: PUSH1 0x02 00000307: EXP 00000308: SUB 00000309: PUSH1 0x04 0000030b: CALLDATALOAD 0000030c: DUP2 0000030d: AND 0000030e: SWAP1 0000030f: PUSH1 0x24 00000311: CALLDATALOAD 00000312: AND 00000313: PUSH1 0x44 00000315: CALLDATALOAD 00000316: PUSH2 0x0a44 00000319: JUMP 0000031a: JUMPDEST 0000031b: PUSH32 0x150b7a0200000000000000000000000000000000000000000000000000000000 0000033c: SWAP6 0000033d: SWAP5 0000033e: POP 0000033f: POP 00000340: POP 00000341: POP 00000342: POP 00000343: JUMP 00000344: JUMPDEST 00000345: PUSH1 0x01 00000347: SLOAD 00000348: PUSH1 0x00 0000034a: SWAP1 0000034b: DUP2 0000034c: SWAP1 0000034d: DUP2 0000034e: SWAP1 0000034f: DUP2 00000350: SWAP1 00000351: PUSH1 0x01 00000353: PUSH1 0xa0 00000355: PUSH1 0x02 00000357: EXP 00000358: SUB 00000359: AND 0000035a: CALLER 0000035b: EQ 0000035c: PUSH2 0x0364 0000035f: JUMPI 00000360: PUSH1 0x00 00000362: DUP1 00000363: REVERT 00000364: JUMPDEST 00000365: PUSH1 0x00 00000367: DUP6 00000368: DUP2 00000369: MSTORE 0000036a: PUSH1 0x02 0000036c: PUSH1 0x20 0000036e: MSTORE 0000036f: PUSH1 0x40 00000371: SWAP1 00000372: KECCAK256 00000373: DUP1 00000374: SLOAD 00000375: SWAP1 00000376: SWAP5 00000377: POP 00000378: PUSH1 0x01 0000037a: PUSH1 0xa0 0000037c: PUSH1 0x02 0000037e: EXP 0000037f: SUB 00000380: AND 00000381: SWAP3 00000382: POP 00000383: DUP3 00000384: ISZERO 00000385: ISZERO 00000386: PUSH2 0x038e 00000389: JUMPI 0000038a: PUSH1 0x00 0000038c: DUP1 0000038d: REVERT 0000038e: JUMPDEST 0000038f: PUSH1 0x01 00000391: DUP1 00000392: DUP6 00000393: ADD 00000394: SLOAD 00000395: PUSH1 0x00 00000397: DUP8 00000398: DUP2 00000399: MSTORE 0000039a: PUSH1 0x02 0000039c: PUSH1 0x20 0000039e: MSTORE 0000039f: PUSH1 0x40 000003a1: DUP1 000003a2: DUP3 000003a3: KECCAK256 000003a4: DUP1 000003a5: SLOAD 000003a6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000003bb: NOT 000003bc: AND 000003bd: DUP2 000003be: SSTORE 000003bf: SWAP1 000003c0: SWAP4 000003c1: ADD 000003c2: DUP2 000003c3: SWAP1 000003c4: SSTORE 000003c5: SWAP2 000003c6: MLOAD 000003c7: SWAP1 000003c8: SWAP4 000003c9: POP 000003ca: PUSH1 0x01 000003cc: PUSH1 0xa0 000003ce: PUSH1 0x02 000003d0: EXP 000003d1: SUB 000003d2: DUP6 000003d3: AND 000003d4: SWAP2 000003d5: DUP5 000003d6: ISZERO 000003d7: PUSH2 0x08fc 000003da: MUL 000003db: SWAP2 000003dc: DUP6 000003dd: SWAP2 000003de: DUP2 000003df: DUP2 000003e0: DUP2 000003e1: DUP6 000003e2: DUP9 000003e3: DUP9 000003e4: CALL 000003e5: SWAP4 000003e6: POP 000003e7: POP 000003e8: POP 000003e9: POP 000003ea: SWAP1 000003eb: POP 000003ec: DUP1 000003ed: ISZERO 000003ee: PUSH2 0x043a 000003f1: JUMPI 000003f2: PUSH1 0x40 000003f4: DUP1 000003f5: MLOAD 000003f6: DUP7 000003f7: DUP2 000003f8: MSTORE 000003f9: PUSH1 0x01 000003fb: PUSH1 0xa0 000003fd: PUSH1 0x02 000003ff: EXP 00000400: SUB 00000401: DUP6 00000402: AND 00000403: PUSH1 0x20 00000405: DUP3 00000406: ADD 00000407: MSTORE 00000408: DUP1 00000409: DUP3 0000040a: ADD 0000040b: DUP5 0000040c: SWAP1 0000040d: MSTORE 0000040e: SWAP1 0000040f: MLOAD 00000410: PUSH32 0xa60bf978b126b18592f5814e3f5a8a515c7398d434c3e3c80509c2cabe29a316 00000431: SWAP2 00000432: DUP2 00000433: SWAP1 00000434: SUB 00000435: PUSH1 0x60 00000437: ADD 00000438: SWAP1 00000439: LOG1 0000043a: JUMPDEST 0000043b: POP 0000043c: POP 0000043d: POP 0000043e: POP 0000043f: POP 00000440: JUMP 00000441: JUMPDEST 00000442: PUSH1 0x01 00000444: SLOAD 00000445: PUSH1 0x01 00000447: PUSH1 0xa0 00000449: PUSH1 0x02 0000044b: EXP 0000044c: SUB 0000044d: AND 0000044e: DUP2 0000044f: JUMP 00000450: JUMPDEST 00000451: PUSH1 0x02 00000453: PUSH1 0x20 00000455: MSTORE 00000456: PUSH1 0x00 00000458: SWAP1 00000459: DUP2 0000045a: MSTORE 0000045b: PUSH1 0x40 0000045d: SWAP1 0000045e: KECCAK256 0000045f: DUP1 00000460: SLOAD 00000461: PUSH1 0x01 00000463: SWAP1 00000464: SWAP2 00000465: ADD 00000466: SLOAD 00000467: PUSH1 0x01 00000469: PUSH1 0xa0 0000046b: PUSH1 0x02 0000046d: EXP 0000046e: SUB 0000046f: SWAP1 00000470: SWAP2 00000471: AND 00000472: SWAP1 00000473: DUP3 00000474: JUMP 00000475: JUMPDEST 00000476: PUSH1 0x04 00000478: PUSH1 0x20 0000047a: MSTORE 0000047b: PUSH1 0x00 0000047d: SWAP1 0000047e: DUP2 0000047f: MSTORE 00000480: PUSH1 0x40 00000482: SWAP1 00000483: KECCAK256 00000484: DUP1 00000485: SLOAD 00000486: PUSH1 0x01 00000488: DUP3 00000489: ADD 0000048a: SLOAD 0000048b: PUSH1 0x02 0000048d: SWAP1 0000048e: SWAP3 0000048f: ADD 00000490: SLOAD 00000491: PUSH1 0x01 00000493: PUSH1 0xa0 00000495: PUSH1 0x02 00000497: EXP 00000498: SUB 00000499: SWAP2 0000049a: DUP3 0000049b: AND 0000049c: SWAP3 0000049d: SWAP1 0000049e: SWAP2 0000049f: AND 000004a0: SWAP1 000004a1: DUP4 000004a2: JUMP 000004a3: JUMPDEST 000004a4: PUSH1 0x00 000004a6: DUP1 000004a7: PUSH1 0x01 000004a9: PUSH1 0xa0 000004ab: PUSH1 0x02 000004ad: EXP 000004ae: SUB 000004af: DUP5 000004b0: AND 000004b1: ISZERO 000004b2: ISZERO 000004b3: PUSH2 0x04bb 000004b6: JUMPI 000004b7: PUSH1 0x00 000004b9: DUP1 000004ba: REVERT 000004bb: JUMPDEST 000004bc: PUSH2 0x04c3 000004bf: PUSH2 0x0c0e 000004c2: JUMP 000004c3: JUMPDEST 000004c4: PUSH1 0x40 000004c6: DUP1 000004c7: MLOAD 000004c8: PUSH1 0x20 000004ca: DUP1 000004cb: DUP3 000004cc: ADD 000004cd: DUP5 000004ce: SWAP1 000004cf: MSTORE 000004d0: PUSH32 0x526327f200000000000000000000000000000000000000000000000000000000 000004f1: DUP3 000004f2: DUP5 000004f3: ADD 000004f4: MSTORE 000004f5: PUSH13 0x01000000000000000000000000 00000503: PUSH1 0x01 00000505: PUSH1 0xa0 00000507: PUSH1 0x02 00000509: EXP 0000050a: SUB 0000050b: DUP10 0000050c: AND 0000050d: MUL 0000050e: PUSH1 0x44 00000510: DUP4 00000511: ADD 00000512: MSTORE 00000513: PUSH1 0x58 00000515: DUP1 00000516: DUP4 00000517: ADD 00000518: DUP9 00000519: SWAP1 0000051a: MSTORE 0000051b: DUP4 0000051c: MLOAD 0000051d: DUP1 0000051e: DUP5 0000051f: SUB 00000520: SWAP1 00000521: SWAP2 00000522: ADD 00000523: DUP2 00000524: MSTORE 00000525: PUSH1 0x78 00000527: SWAP1 00000528: SWAP3 00000529: ADD 0000052a: SWAP3 0000052b: DUP4 0000052c: SWAP1 0000052d: MSTORE 0000052e: DUP2 0000052f: MLOAD 00000530: SWAP4 00000531: SWAP5 00000532: POP 00000533: SWAP1 00000534: SWAP3 00000535: DUP3 00000536: SWAP2 00000537: DUP5 00000538: ADD 00000539: SWAP1 0000053a: DUP1 0000053b: DUP4 0000053c: DUP4 0000053d: JUMPDEST 0000053e: PUSH1 0x20 00000540: DUP4 00000541: LT 00000542: PUSH2 0x055c 00000545: JUMPI 00000546: DUP1 00000547: MLOAD 00000548: DUP3 00000549: MSTORE 0000054a: PUSH1 0x1f 0000054c: NOT 0000054d: SWAP1 0000054e: SWAP3 0000054f: ADD 00000550: SWAP2 00000551: PUSH1 0x20 00000553: SWAP2 00000554: DUP3 00000555: ADD 00000556: SWAP2 00000557: ADD 00000558: PUSH2 0x053d 0000055b: JUMP 0000055c: JUMPDEST 0000055d: MLOAD 0000055e: DUP2 0000055f: MLOAD 00000560: PUSH1 0x00 00000562: NOT 00000563: PUSH1 0x20 00000565: SWAP5 00000566: DUP6 00000567: SUB 00000568: PUSH2 0x0100 0000056b: EXP 0000056c: ADD 0000056d: SWAP1 0000056e: DUP2 0000056f: AND 00000570: SWAP1 00000571: NOT 00000572: SWAP1 00000573: SWAP2 00000574: AND 00000575: OR 00000576: SWAP1 00000577: MSTORE 00000578: PUSH1 0x40 0000057a: DUP1 0000057b: MLOAD 0000057c: SWAP5 0000057d: SWAP1 0000057e: SWAP3 0000057f: ADD 00000580: DUP5 00000581: SWAP1 00000582: SUB 00000583: DUP5 00000584: KECCAK256 00000585: DUP5 00000586: DUP4 00000587: ADD 00000588: DUP4 00000589: MSTORE 0000058a: PUSH1 0x01 0000058c: PUSH1 0xa0 0000058e: PUSH1 0x02 00000590: EXP 00000591: SUB 00000592: DUP12 00000593: DUP2 00000594: AND 00000595: DUP1 00000596: DUP8 00000597: MSTORE 00000598: DUP7 00000599: DUP5 0000059a: ADD 0000059b: DUP13 0000059c: DUP2 0000059d: MSTORE 0000059e: PUSH1 0x00 000005a0: DUP5 000005a1: DUP2 000005a2: MSTORE 000005a3: PUSH1 0x02 000005a5: DUP7 000005a6: MSTORE 000005a7: DUP7 000005a8: DUP2 000005a9: KECCAK256 000005aa: SWAP9 000005ab: MLOAD 000005ac: DUP10 000005ad: SLOAD 000005ae: SWAP5 000005af: AND 000005b0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000005c5: NOT 000005c6: SWAP1 000005c7: SWAP5 000005c8: AND 000005c9: SWAP4 000005ca: SWAP1 000005cb: SWAP4 000005cc: OR 000005cd: DUP9 000005ce: SSTORE 000005cf: MLOAD 000005d0: PUSH1 0x01 000005d2: SWAP1 000005d3: SWAP8 000005d4: ADD 000005d5: SWAP7 000005d6: SWAP1 000005d7: SWAP7 000005d8: SSTORE 000005d9: SLOAD 000005da: DUP4 000005db: MLOAD 000005dc: DUP3 000005dd: DUP2 000005de: MSTORE 000005df: SWAP3 000005e0: DUP4 000005e1: ADD 000005e2: MSTORE 000005e3: DUP2 000005e4: DUP4 000005e5: ADD 000005e6: SWAP5 000005e7: SWAP1 000005e8: SWAP5 000005e9: MSTORE 000005ea: PUSH1 0x60 000005ec: DUP2 000005ed: ADD 000005ee: DUP10 000005ef: SWAP1 000005f0: MSTORE 000005f1: SWAP1 000005f2: MLOAD 000005f3: SWAP3 000005f4: SWAP7 000005f5: POP 000005f6: PUSH32 0xeb834e5a149cb8e47021251c336929a69cf86727196572529a29bf1b3a22d35a 00000617: SWAP5 00000618: POP 00000619: DUP3 0000061a: SWAP1 0000061b: SUB 0000061c: PUSH1 0x80 0000061e: ADD 0000061f: SWAP3 00000620: POP 00000621: POP 00000622: LOG1 00000623: POP 00000624: SWAP3 00000625: SWAP2 00000626: POP 00000627: POP 00000628: JUMP 00000629: JUMPDEST 0000062a: PUSH1 0x01 0000062c: SLOAD 0000062d: PUSH1 0x00 0000062f: SWAP1 00000630: DUP2 00000631: SWAP1 00000632: DUP2 00000633: SWAP1 00000634: DUP2 00000635: SWAP1 00000636: DUP2 00000637: SWAP1 00000638: PUSH1 0x01 0000063a: PUSH1 0xa0 0000063c: PUSH1 0x02 0000063e: EXP 0000063f: SUB 00000640: AND 00000641: CALLER 00000642: EQ 00000643: PUSH2 0x064b 00000646: JUMPI 00000647: PUSH1 0x00 00000649: DUP1 0000064a: REVERT 0000064b: JUMPDEST 0000064c: PUSH1 0x00 0000064e: DUP7 0000064f: DUP2 00000650: MSTORE 00000651: PUSH1 0x04 00000653: PUSH1 0x20 00000655: MSTORE 00000656: PUSH1 0x40 00000658: SWAP1 00000659: KECCAK256 0000065a: DUP1 0000065b: SLOAD 0000065c: SWAP1 0000065d: SWAP6 0000065e: POP 0000065f: PUSH1 0x01 00000661: PUSH1 0xa0 00000663: PUSH1 0x02 00000665: EXP 00000666: SUB 00000667: AND 00000668: SWAP4 00000669: POP 0000066a: DUP4 0000066b: ISZERO 0000066c: ISZERO 0000066d: PUSH2 0x0675 00000670: JUMPI 00000671: PUSH1 0x00 00000673: DUP1 00000674: REVERT 00000675: JUMPDEST 00000676: PUSH1 0x01 00000678: DUP1 00000679: DUP7 0000067a: ADD 0000067b: SLOAD 0000067c: PUSH1 0x02 0000067e: DUP1 0000067f: DUP9 00000680: ADD 00000681: SLOAD 00000682: PUSH1 0x00 00000684: DUP11 00000685: DUP2 00000686: MSTORE 00000687: PUSH1 0x04 00000689: PUSH1 0x20 0000068b: MSTORE 0000068c: PUSH1 0x40 0000068e: DUP2 0000068f: KECCAK256 00000690: DUP1 00000691: SLOAD 00000692: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000006a7: NOT 000006a8: SWAP1 000006a9: DUP2 000006aa: AND 000006ab: DUP3 000006ac: SSTORE 000006ad: SWAP6 000006ae: DUP2 000006af: ADD 000006b0: DUP1 000006b1: SLOAD 000006b2: SWAP1 000006b3: SWAP7 000006b4: AND 000006b5: SWAP1 000006b6: SWAP6 000006b7: SSTORE 000006b8: SWAP4 000006b9: SWAP1 000006ba: SWAP2 000006bb: ADD 000006bc: SWAP3 000006bd: SWAP1 000006be: SWAP3 000006bf: SSTORE 000006c0: PUSH1 0x01 000006c2: PUSH1 0xa0 000006c4: PUSH1 0x02 000006c6: EXP 000006c7: SUB 000006c8: AND 000006c9: SWAP4 000006ca: POP 000006cb: SWAP2 000006cc: POP 000006cd: PUSH2 0x06d7 000006d0: DUP5 000006d1: DUP5 000006d2: DUP5 000006d3: PUSH2 0x0cb7 000006d6: JUMP 000006d7: JUMPDEST 000006d8: SWAP1 000006d9: POP 000006da: DUP1 000006db: ISZERO 000006dc: PUSH2 0x0730 000006df: JUMPI 000006e0: PUSH1 0x40 000006e2: DUP1 000006e3: MLOAD 000006e4: DUP8 000006e5: DUP2 000006e6: MSTORE 000006e7: PUSH1 0x01 000006e9: PUSH1 0xa0 000006eb: PUSH1 0x02 000006ed: EXP 000006ee: SUB 000006ef: DUP1 000006f0: DUP8 000006f1: AND 000006f2: PUSH1 0x20 000006f4: DUP4 000006f5: ADD 000006f6: MSTORE 000006f7: DUP6 000006f8: AND 000006f9: DUP2 000006fa: DUP4 000006fb: ADD 000006fc: MSTORE 000006fd: PUSH1 0x60 000006ff: DUP2 00000700: ADD 00000701: DUP5 00000702: SWAP1 00000703: MSTORE 00000704: SWAP1 00000705: MLOAD 00000706: PUSH32 0xeb1b982af03fc8d04e3d1ec453261a3fa4dad85540be27231a6e729d9c34f1b7 00000727: SWAP2 00000728: DUP2 00000729: SWAP1 0000072a: SUB 0000072b: PUSH1 0x80 0000072d: ADD 0000072e: SWAP1 0000072f: LOG1 00000730: JUMPDEST 00000731: POP 00000732: POP 00000733: POP 00000734: POP 00000735: POP 00000736: POP 00000737: JUMP 00000738: JUMPDEST 00000739: PUSH1 0x00 0000073b: DUP1 0000073c: PUSH1 0x01 0000073e: PUSH1 0xa0 00000740: PUSH1 0x02 00000742: EXP 00000743: SUB 00000744: DUP6 00000745: AND 00000746: ISZERO 00000747: ISZERO 00000748: PUSH2 0x0750 0000074b: JUMPI 0000074c: PUSH1 0x00 0000074e: DUP1 0000074f: REVERT 00000750: JUMPDEST 00000751: PUSH1 0x01 00000753: PUSH1 0xa0 00000755: PUSH1 0x02 00000757: EXP 00000758: SUB 00000759: DUP5 0000075a: AND 0000075b: ISZERO 0000075c: ISZERO 0000075d: PUSH2 0x0765 00000760: JUMPI 00000761: PUSH1 0x00 00000763: DUP1 00000764: REVERT 00000765: JUMPDEST 00000766: PUSH2 0x076d 00000769: PUSH2 0x0c0e 0000076c: JUMP 0000076d: JUMPDEST 0000076e: PUSH1 0x40 00000770: DUP1 00000771: MLOAD 00000772: PUSH1 0x20 00000774: DUP1 00000775: DUP3 00000776: ADD 00000777: DUP5 00000778: SWAP1 00000779: MSTORE 0000077a: PUSH32 0x60de3a2600000000000000000000000000000000000000000000000000000000 0000079b: DUP3 0000079c: DUP5 0000079d: ADD 0000079e: MSTORE 0000079f: PUSH13 0x01000000000000000000000000 000007ad: PUSH1 0x01 000007af: PUSH1 0xa0 000007b1: PUSH1 0x02 000007b3: EXP 000007b4: SUB 000007b5: DUP1 000007b6: DUP12 000007b7: AND 000007b8: DUP3 000007b9: MUL 000007ba: PUSH1 0x44 000007bc: DUP6 000007bd: ADD 000007be: MSTORE 000007bf: DUP10 000007c0: AND 000007c1: MUL 000007c2: PUSH1 0x58 000007c4: DUP4 000007c5: ADD 000007c6: MSTORE 000007c7: PUSH1 0x6c 000007c9: DUP1 000007ca: DUP4 000007cb: ADD 000007cc: DUP9 000007cd: SWAP1 000007ce: MSTORE 000007cf: DUP4 000007d0: MLOAD 000007d1: DUP1 000007d2: DUP5 000007d3: SUB 000007d4: SWAP1 000007d5: SWAP2 000007d6: ADD 000007d7: DUP2 000007d8: MSTORE 000007d9: PUSH1 0x8c 000007db: SWAP1 000007dc: SWAP3 000007dd: ADD 000007de: SWAP3 000007df: DUP4 000007e0: SWAP1 000007e1: MSTORE 000007e2: DUP2 000007e3: MLOAD 000007e4: SWAP4 000007e5: SWAP5 000007e6: POP 000007e7: SWAP1 000007e8: SWAP3 000007e9: DUP3 000007ea: SWAP2 000007eb: DUP5 000007ec: ADD 000007ed: SWAP1 000007ee: DUP1 000007ef: DUP4 000007f0: DUP4 000007f1: JUMPDEST 000007f2: PUSH1 0x20 000007f4: DUP4 000007f5: LT 000007f6: PUSH2 0x0810 000007f9: JUMPI 000007fa: DUP1 000007fb: MLOAD 000007fc: DUP3 000007fd: MSTORE 000007fe: PUSH1 0x1f 00000800: NOT 00000801: SWAP1 00000802: SWAP3 00000803: ADD 00000804: SWAP2 00000805: PUSH1 0x20 00000807: SWAP2 00000808: DUP3 00000809: ADD 0000080a: SWAP2 0000080b: ADD 0000080c: PUSH2 0x07f1 0000080f: JUMP 00000810: JUMPDEST 00000811: MLOAD 00000812: DUP2 00000813: MLOAD 00000814: PUSH1 0x00 00000816: NOT 00000817: PUSH1 0x20 00000819: SWAP5 0000081a: DUP6 0000081b: SUB 0000081c: PUSH2 0x0100 0000081f: EXP 00000820: ADD 00000821: SWAP1 00000822: DUP2 00000823: AND 00000824: SWAP1 00000825: NOT 00000826: SWAP2 00000827: SWAP1 00000828: SWAP2 00000829: AND 0000082a: OR 0000082b: SWAP1 0000082c: MSTORE 0000082d: PUSH1 0x40 0000082f: DUP1 00000830: MLOAD 00000831: SWAP5 00000832: SWAP1 00000833: SWAP3 00000834: ADD 00000835: DUP5 00000836: SWAP1 00000837: SUB 00000838: DUP5 00000839: KECCAK256 0000083a: PUSH1 0x60 0000083c: DUP1 0000083d: DUP7 0000083e: ADD 0000083f: DUP5 00000840: MSTORE 00000841: PUSH1 0x01 00000843: PUSH1 0xa0 00000845: PUSH1 0x02 00000847: EXP 00000848: SUB 00000849: DUP1 0000084a: DUP15 0000084b: AND 0000084c: DUP1 0000084d: DUP9 0000084e: MSTORE 0000084f: DUP14 00000850: DUP3 00000851: AND 00000852: DUP9 00000853: DUP7 00000854: ADD 00000855: DUP2 00000856: DUP2 00000857: MSTORE 00000858: DUP10 00000859: DUP9 0000085a: ADD 0000085b: DUP16 0000085c: DUP2 0000085d: MSTORE 0000085e: PUSH1 0x00 00000860: DUP8 00000861: DUP2 00000862: MSTORE 00000863: PUSH1 0x04 00000865: DUP10 00000866: MSTORE 00000867: DUP10 00000868: DUP2 00000869: KECCAK256 0000086a: SWAP12 0000086b: MLOAD 0000086c: DUP13 0000086d: SLOAD 0000086e: SWAP1 0000086f: DUP8 00000870: AND 00000871: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000886: NOT 00000887: SWAP2 00000888: DUP3 00000889: AND 0000088a: OR 0000088b: DUP14 0000088c: SSTORE 0000088d: SWAP3 0000088e: MLOAD 0000088f: PUSH1 0x01 00000891: DUP14 00000892: ADD 00000893: DUP1 00000894: SLOAD 00000895: SWAP2 00000896: SWAP1 00000897: SWAP8 00000898: AND 00000899: SWAP4 0000089a: AND 0000089b: SWAP3 0000089c: SWAP1 0000089d: SWAP3 0000089e: OR 0000089f: SWAP1 000008a0: SWAP5 000008a1: SSTORE 000008a2: SWAP3 000008a3: MLOAD 000008a4: PUSH1 0x02 000008a6: SWAP1 000008a7: SWAP10 000008a8: ADD 000008a9: SWAP9 000008aa: SWAP1 000008ab: SWAP9 000008ac: SSTORE 000008ad: SWAP1 000008ae: SLOAD 000008af: DUP6 000008b0: MLOAD 000008b1: DUP5 000008b2: DUP2 000008b3: MSTORE 000008b4: SWAP5 000008b5: DUP6 000008b6: ADD 000008b7: MSTORE 000008b8: DUP4 000008b9: DUP6 000008ba: ADD 000008bb: MSTORE 000008bc: DUP3 000008bd: ADD 000008be: SWAP5 000008bf: SWAP1 000008c0: SWAP5 000008c1: MSTORE 000008c2: PUSH1 0x80 000008c4: DUP2 000008c5: ADD 000008c6: DUP10 000008c7: SWAP1 000008c8: MSTORE 000008c9: SWAP1 000008ca: MLOAD 000008cb: SWAP3 000008cc: SWAP7 000008cd: POP 000008ce: PUSH32 0x02f609a1c03b13108a8069c96fbcfb080db656ce3f52dfdaa9af431e2d71dc65 000008ef: SWAP5 000008f0: POP 000008f1: DUP3 000008f2: SWAP1 000008f3: SUB 000008f4: PUSH1 0xa0 000008f6: ADD 000008f7: SWAP3 000008f8: POP 000008f9: POP 000008fa: LOG1 000008fb: POP 000008fc: SWAP4 000008fd: SWAP3 000008fe: POP 000008ff: POP 00000900: POP 00000901: JUMP 00000902: JUMPDEST 00000903: PUSH1 0x01 00000905: SLOAD 00000906: PUSH1 0x00 00000908: SWAP1 00000909: DUP2 0000090a: SWAP1 0000090b: DUP2 0000090c: SWAP1 0000090d: DUP2 0000090e: SWAP1 0000090f: DUP2 00000910: SWAP1 00000911: PUSH1 0x01 00000913: PUSH1 0xa0 00000915: PUSH1 0x02 00000917: EXP 00000918: SUB 00000919: AND 0000091a: CALLER 0000091b: EQ 0000091c: PUSH2 0x0924 0000091f: JUMPI 00000920: PUSH1 0x00 00000922: DUP1 00000923: REVERT 00000924: JUMPDEST 00000925: PUSH1 0x00 00000927: DUP7 00000928: DUP2 00000929: MSTORE 0000092a: PUSH1 0x03 0000092c: PUSH1 0x20 0000092e: MSTORE 0000092f: PUSH1 0x40 00000931: SWAP1 00000932: KECCAK256 00000933: DUP1 00000934: SLOAD 00000935: SWAP1 00000936: SWAP6 00000937: POP 00000938: PUSH1 0x01 0000093a: PUSH1 0xa0 0000093c: PUSH1 0x02 0000093e: EXP 0000093f: SUB 00000940: AND 00000941: SWAP4 00000942: POP 00000943: DUP4 00000944: ISZERO 00000945: ISZERO 00000946: PUSH2 0x094e 00000949: JUMPI 0000094a: PUSH1 0x00 0000094c: DUP1 0000094d: REVERT 0000094e: JUMPDEST 0000094f: PUSH1 0x01 00000951: DUP1 00000952: DUP7 00000953: ADD 00000954: SLOAD 00000955: PUSH1 0x02 00000957: DUP1 00000958: DUP9 00000959: ADD 0000095a: SLOAD 0000095b: PUSH1 0x00 0000095d: DUP11 0000095e: DUP2 0000095f: MSTORE 00000960: PUSH1 0x03 00000962: PUSH1 0x20 00000964: MSTORE 00000965: PUSH1 0x40 00000967: DUP2 00000968: KECCAK256 00000969: DUP1 0000096a: SLOAD 0000096b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000980: NOT 00000981: SWAP1 00000982: DUP2 00000983: AND 00000984: DUP3 00000985: SSTORE 00000986: SWAP6 00000987: DUP2 00000988: ADD 00000989: DUP1 0000098a: SLOAD 0000098b: SWAP1 0000098c: SWAP7 0000098d: AND 0000098e: SWAP1 0000098f: SWAP6 00000990: SSTORE 00000991: SWAP4 00000992: SWAP1 00000993: SWAP2 00000994: ADD 00000995: SWAP3 00000996: SWAP1 00000997: SWAP3 00000998: SSTORE 00000999: PUSH1 0x01 0000099b: PUSH1 0xa0 0000099d: PUSH1 0x02 0000099f: EXP 000009a0: SUB 000009a1: AND 000009a2: SWAP4 000009a3: POP 000009a4: SWAP2 000009a5: POP 000009a6: PUSH2 0x09b0 000009a9: DUP5 000009aa: DUP5 000009ab: DUP5 000009ac: PUSH2 0x0d27 000009af: JUMP 000009b0: JUMPDEST 000009b1: SWAP1 000009b2: POP 000009b3: DUP1 000009b4: ISZERO 000009b5: PUSH2 0x0730 000009b8: JUMPI 000009b9: PUSH1 0x40 000009bb: DUP1 000009bc: MLOAD 000009bd: DUP8 000009be: DUP2 000009bf: MSTORE 000009c0: PUSH1 0x01 000009c2: PUSH1 0xa0 000009c4: PUSH1 0x02 000009c6: EXP 000009c7: SUB 000009c8: DUP1 000009c9: DUP8 000009ca: AND 000009cb: PUSH1 0x20 000009cd: DUP4 000009ce: ADD 000009cf: MSTORE 000009d0: DUP6 000009d1: AND 000009d2: DUP2 000009d3: DUP4 000009d4: ADD 000009d5: MSTORE 000009d6: PUSH1 0x60 000009d8: DUP2 000009d9: ADD 000009da: DUP5 000009db: SWAP1 000009dc: MSTORE 000009dd: SWAP1 000009de: MLOAD 000009df: PUSH32 0x05b708c886ad83ae717f113aa484cdf529c07892cecc7000be8e7e876a841d1b 00000a00: SWAP2 00000a01: DUP2 00000a02: SWAP1 00000a03: SUB 00000a04: PUSH1 0x80 00000a06: ADD 00000a07: SWAP1 00000a08: LOG1 00000a09: POP 00000a0a: POP 00000a0b: POP 00000a0c: POP 00000a0d: POP 00000a0e: POP 00000a0f: JUMP 00000a10: JUMPDEST 00000a11: PUSH1 0x00 00000a13: SLOAD 00000a14: DUP2 00000a15: JUMP 00000a16: JUMPDEST 00000a17: PUSH1 0x03 00000a19: PUSH1 0x20 00000a1b: MSTORE 00000a1c: PUSH1 0x00 00000a1e: SWAP1 00000a1f: DUP2 00000a20: MSTORE 00000a21: PUSH1 0x40 00000a23: SWAP1 00000a24: KECCAK256 00000a25: DUP1 00000a26: SLOAD 00000a27: PUSH1 0x01 00000a29: DUP3 00000a2a: ADD 00000a2b: SLOAD 00000a2c: PUSH1 0x02 00000a2e: SWAP1 00000a2f: SWAP3 00000a30: ADD 00000a31: SLOAD 00000a32: PUSH1 0x01 00000a34: PUSH1 0xa0 00000a36: PUSH1 0x02 00000a38: EXP 00000a39: SUB 00000a3a: SWAP2 00000a3b: DUP3 00000a3c: AND 00000a3d: SWAP3 00000a3e: SWAP1 00000a3f: SWAP2 00000a40: AND 00000a41: SWAP1 00000a42: DUP4 00000a43: JUMP 00000a44: JUMPDEST 00000a45: PUSH1 0x00 00000a47: DUP1 00000a48: PUSH1 0x01 00000a4a: PUSH1 0xa0 00000a4c: PUSH1 0x02 00000a4e: EXP 00000a4f: SUB 00000a50: DUP6 00000a51: AND 00000a52: ISZERO 00000a53: ISZERO 00000a54: PUSH2 0x0a5c 00000a57: JUMPI 00000a58: PUSH1 0x00 00000a5a: DUP1 00000a5b: REVERT 00000a5c: JUMPDEST 00000a5d: PUSH1 0x01 00000a5f: PUSH1 0xa0 00000a61: PUSH1 0x02 00000a63: EXP 00000a64: SUB 00000a65: DUP5 00000a66: AND 00000a67: ISZERO 00000a68: ISZERO 00000a69: PUSH2 0x0a71 00000a6c: JUMPI 00000a6d: PUSH1 0x00 00000a6f: DUP1 00000a70: REVERT 00000a71: JUMPDEST 00000a72: PUSH2 0x0a79 00000a75: PUSH2 0x0c0e 00000a78: JUMP 00000a79: JUMPDEST 00000a7a: PUSH1 0x40 00000a7c: DUP1 00000a7d: MLOAD 00000a7e: PUSH1 0x20 00000a80: DUP1 00000a81: DUP3 00000a82: ADD 00000a83: DUP5 00000a84: SWAP1 00000a85: MSTORE 00000a86: PUSH32 0xecf644f100000000000000000000000000000000000000000000000000000000 00000aa7: DUP3 00000aa8: DUP5 00000aa9: ADD 00000aaa: MSTORE 00000aab: PUSH13 0x01000000000000000000000000 00000ab9: PUSH1 0x01 00000abb: PUSH1 0xa0 00000abd: PUSH1 0x02 00000abf: EXP 00000ac0: SUB 00000ac1: DUP1 00000ac2: DUP12 00000ac3: AND 00000ac4: DUP3 00000ac5: MUL 00000ac6: PUSH1 0x44 00000ac8: DUP6 00000ac9: ADD 00000aca: MSTORE 00000acb: DUP10 00000acc: AND 00000acd: MUL 00000ace: PUSH1 0x58 00000ad0: DUP4 00000ad1: ADD 00000ad2: MSTORE 00000ad3: PUSH1 0x6c 00000ad5: DUP1 00000ad6: DUP4 00000ad7: ADD 00000ad8: DUP9 00000ad9: SWAP1 00000ada: MSTORE 00000adb: DUP4 00000adc: MLOAD 00000add: DUP1 00000ade: DUP5 00000adf: SUB 00000ae0: SWAP1 00000ae1: SWAP2 00000ae2: ADD 00000ae3: DUP2 00000ae4: MSTORE 00000ae5: PUSH1 0x8c 00000ae7: SWAP1 00000ae8: SWAP3 00000ae9: ADD 00000aea: SWAP3 00000aeb: DUP4 00000aec: SWAP1 00000aed: MSTORE 00000aee: DUP2 00000aef: MLOAD 00000af0: SWAP4 00000af1: SWAP5 00000af2: POP 00000af3: SWAP1 00000af4: SWAP3 00000af5: DUP3 00000af6: SWAP2 00000af7: DUP5 00000af8: ADD 00000af9: SWAP1 00000afa: DUP1 00000afb: DUP4 00000afc: DUP4 00000afd: JUMPDEST 00000afe: PUSH1 0x20 00000b00: DUP4 00000b01: LT 00000b02: PUSH2 0x0b1c 00000b05: JUMPI 00000b06: DUP1 00000b07: MLOAD 00000b08: DUP3 00000b09: MSTORE 00000b0a: PUSH1 0x1f 00000b0c: NOT 00000b0d: SWAP1 00000b0e: SWAP3 00000b0f: ADD 00000b10: SWAP2 00000b11: PUSH1 0x20 00000b13: SWAP2 00000b14: DUP3 00000b15: ADD 00000b16: SWAP2 00000b17: ADD 00000b18: PUSH2 0x0afd 00000b1b: JUMP 00000b1c: JUMPDEST 00000b1d: MLOAD 00000b1e: DUP2 00000b1f: MLOAD 00000b20: PUSH1 0x00 00000b22: NOT 00000b23: PUSH1 0x20 00000b25: SWAP5 00000b26: DUP6 00000b27: SUB 00000b28: PUSH2 0x0100 00000b2b: EXP 00000b2c: ADD 00000b2d: SWAP1 00000b2e: DUP2 00000b2f: AND 00000b30: SWAP1 00000b31: NOT 00000b32: SWAP2 00000b33: SWAP1 00000b34: SWAP2 00000b35: AND 00000b36: OR 00000b37: SWAP1 00000b38: MSTORE 00000b39: PUSH1 0x40 00000b3b: DUP1 00000b3c: MLOAD 00000b3d: SWAP5 00000b3e: SWAP1 00000b3f: SWAP3 00000b40: ADD 00000b41: DUP5 00000b42: SWAP1 00000b43: SUB 00000b44: DUP5 00000b45: KECCAK256 00000b46: PUSH1 0x60 00000b48: DUP1 00000b49: DUP7 00000b4a: ADD 00000b4b: DUP5 00000b4c: MSTORE 00000b4d: PUSH1 0x01 00000b4f: PUSH1 0xa0 00000b51: PUSH1 0x02 00000b53: EXP 00000b54: SUB 00000b55: DUP1 00000b56: DUP15 00000b57: AND 00000b58: DUP1 00000b59: DUP9 00000b5a: MSTORE 00000b5b: DUP14 00000b5c: DUP3 00000b5d: AND 00000b5e: DUP9 00000b5f: DUP7 00000b60: ADD 00000b61: DUP2 00000b62: DUP2 00000b63: MSTORE 00000b64: DUP10 00000b65: DUP9 00000b66: ADD 00000b67: DUP16 00000b68: DUP2 00000b69: MSTORE 00000b6a: PUSH1 0x00 00000b6c: DUP8 00000b6d: DUP2 00000b6e: MSTORE 00000b6f: PUSH1 0x03 00000b71: DUP10 00000b72: MSTORE 00000b73: DUP10 00000b74: DUP2 00000b75: KECCAK256 00000b76: SWAP12 00000b77: MLOAD 00000b78: DUP13 00000b79: SLOAD 00000b7a: SWAP1 00000b7b: DUP8 00000b7c: AND 00000b7d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000b92: NOT 00000b93: SWAP2 00000b94: DUP3 00000b95: AND 00000b96: OR 00000b97: DUP14 00000b98: SSTORE 00000b99: SWAP3 00000b9a: MLOAD 00000b9b: PUSH1 0x01 00000b9d: DUP14 00000b9e: ADD 00000b9f: DUP1 00000ba0: SLOAD 00000ba1: SWAP2 00000ba2: SWAP1 00000ba3: SWAP8 00000ba4: AND 00000ba5: SWAP4 00000ba6: AND 00000ba7: SWAP3 00000ba8: SWAP1 00000ba9: SWAP3 00000baa: OR 00000bab: SWAP1 00000bac: SWAP5 00000bad: SSTORE 00000bae: SWAP3 00000baf: MLOAD 00000bb0: PUSH1 0x02 00000bb2: SWAP1 00000bb3: SWAP10 00000bb4: ADD 00000bb5: SWAP9 00000bb6: SWAP1 00000bb7: SWAP9 00000bb8: SSTORE 00000bb9: SWAP1 00000bba: SLOAD 00000bbb: DUP6 00000bbc: MLOAD 00000bbd: DUP5 00000bbe: DUP2 00000bbf: MSTORE 00000bc0: SWAP5 00000bc1: DUP6 00000bc2: ADD 00000bc3: MSTORE 00000bc4: DUP4 00000bc5: DUP6 00000bc6: ADD 00000bc7: MSTORE 00000bc8: DUP3 00000bc9: ADD 00000bca: SWAP5 00000bcb: SWAP1 00000bcc: SWAP5 00000bcd: MSTORE 00000bce: PUSH1 0x80 00000bd0: DUP2 00000bd1: ADD 00000bd2: DUP10 00000bd3: SWAP1 00000bd4: MSTORE 00000bd5: SWAP1 00000bd6: MLOAD 00000bd7: SWAP3 00000bd8: SWAP7 00000bd9: POP 00000bda: PUSH32 0x620b1d454866258768f710e230edb1977b9f7349de5a633e5e34337d6e9fffab 00000bfb: SWAP5 00000bfc: POP 00000bfd: DUP3 00000bfe: SWAP1 00000bff: SUB 00000c00: PUSH1 0xa0 00000c02: ADD 00000c03: SWAP3 00000c04: POP 00000c05: POP 00000c06: LOG1 00000c07: POP 00000c08: SWAP4 00000c09: SWAP3 00000c0a: POP 00000c0b: POP 00000c0c: POP 00000c0d: JUMP 00000c0e: JUMPDEST 00000c0f: PUSH1 0x00 00000c11: DUP1 00000c12: SLOAD 00000c13: PUSH1 0x01 00000c15: ADD 00000c16: DUP1 00000c17: DUP3 00000c18: SSTORE 00000c19: PUSH1 0x40 00000c1b: DUP1 00000c1c: MLOAD 00000c1d: PUSH1 0x00 00000c1f: NOT 00000c20: NUMBER 00000c21: ADD 00000c22: BLOCKHASH 00000c23: PUSH1 0x20 00000c25: DUP1 00000c26: DUP4 00000c27: ADD 00000c28: SWAP2 00000c29: SWAP1 00000c2a: SWAP2 00000c2b: MSTORE 00000c2c: PUSH13 0x01000000000000000000000000 00000c3a: ADDRESS 00000c3b: MUL 00000c3c: DUP3 00000c3d: DUP5 00000c3e: ADD 00000c3f: MSTORE 00000c40: PUSH1 0x54 00000c42: DUP1 00000c43: DUP4 00000c44: ADD 00000c45: SWAP5 00000c46: SWAP1 00000c47: SWAP5 00000c48: MSTORE 00000c49: DUP3 00000c4a: MLOAD 00000c4b: DUP1 00000c4c: DUP4 00000c4d: SUB 00000c4e: SWAP1 00000c4f: SWAP5 00000c50: ADD 00000c51: DUP5 00000c52: MSTORE 00000c53: PUSH1 0x74 00000c55: SWAP1 00000c56: SWAP2 00000c57: ADD 00000c58: SWAP2 00000c59: DUP3 00000c5a: SWAP1 00000c5b: MSTORE 00000c5c: DUP3 00000c5d: MLOAD 00000c5e: DUP3 00000c5f: SWAP2 00000c60: DUP5 00000c61: ADD 00000c62: SWAP1 00000c63: DUP1 00000c64: DUP4 00000c65: DUP4 00000c66: JUMPDEST 00000c67: PUSH1 0x20 00000c69: DUP4 00000c6a: LT 00000c6b: PUSH2 0x0c85 00000c6e: JUMPI 00000c6f: DUP1 00000c70: MLOAD 00000c71: DUP3 00000c72: MSTORE 00000c73: PUSH1 0x1f 00000c75: NOT 00000c76: SWAP1 00000c77: SWAP3 00000c78: ADD 00000c79: SWAP2 00000c7a: PUSH1 0x20 00000c7c: SWAP2 00000c7d: DUP3 00000c7e: ADD 00000c7f: SWAP2 00000c80: ADD 00000c81: PUSH2 0x0c66 00000c84: JUMP 00000c85: JUMPDEST 00000c86: PUSH1 0x01 00000c88: DUP4 00000c89: PUSH1 0x20 00000c8b: SUB 00000c8c: PUSH2 0x0100 00000c8f: EXP 00000c90: SUB 00000c91: DUP1 00000c92: NOT 00000c93: DUP3 00000c94: MLOAD 00000c95: AND 00000c96: DUP2 00000c97: DUP5 00000c98: MLOAD 00000c99: AND 00000c9a: DUP1 00000c9b: DUP3 00000c9c: OR 00000c9d: DUP6 00000c9e: MSTORE 00000c9f: POP 00000ca0: POP 00000ca1: POP 00000ca2: POP 00000ca3: POP 00000ca4: POP 00000ca5: SWAP1 00000ca6: POP 00000ca7: ADD 00000ca8: SWAP2 00000ca9: POP 00000caa: POP 00000cab: PUSH1 0x40 00000cad: MLOAD 00000cae: DUP1 00000caf: SWAP2 00000cb0: SUB 00000cb1: SWAP1 00000cb2: KECCAK256 00000cb3: SWAP1 00000cb4: POP 00000cb5: SWAP1 00000cb6: JUMP 00000cb7: JUMPDEST 00000cb8: PUSH1 0x40 00000cba: DUP1 00000cbb: MLOAD 00000cbc: PUSH32 0x42842e0e00000000000000000000000000000000000000000000000000000000 00000cdd: DUP2 00000cde: MSTORE 00000cdf: ADDRESS 00000ce0: PUSH1 0x04 00000ce2: DUP3 00000ce3: ADD 00000ce4: MSTORE 00000ce5: PUSH1 0x01 00000ce7: PUSH1 0xa0 00000ce9: PUSH1 0x02 00000ceb: EXP 00000cec: SUB 00000ced: DUP5 00000cee: DUP2 00000cef: AND 00000cf0: PUSH1 0x24 00000cf2: DUP4 00000cf3: ADD 00000cf4: MSTORE 00000cf5: PUSH1 0x44 00000cf7: DUP3 00000cf8: ADD 00000cf9: DUP5 00000cfa: SWAP1 00000cfb: MSTORE 00000cfc: SWAP2 00000cfd: MLOAD 00000cfe: PUSH1 0x00 00000d00: SWAP3 00000d01: DUP7 00000d02: AND 00000d03: SWAP2 00000d04: PUSH4 0x42842e0e 00000d09: SWAP2 00000d0a: PUSH1 0x64 00000d0c: DUP1 00000d0d: DUP4 00000d0e: ADD 00000d0f: SWAP3 00000d10: DUP7 00000d11: SWAP3 00000d12: SWAP2 00000d13: SWAP1 00000d14: DUP3 00000d15: SWAP1 00000d16: SUB 00000d17: ADD 00000d18: DUP2 00000d19: DUP4 00000d1a: DUP8 00000d1b: GAS 00000d1c: CALL 00000d1d: SWAP8 00000d1e: SWAP7 00000d1f: POP 00000d20: POP 00000d21: POP 00000d22: POP 00000d23: POP 00000d24: POP 00000d25: POP 00000d26: JUMP 00000d27: JUMPDEST 00000d28: PUSH1 0x40 00000d2a: DUP1 00000d2b: MLOAD 00000d2c: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000 00000d4d: DUP2 00000d4e: MSTORE 00000d4f: PUSH1 0x01 00000d51: PUSH1 0xa0 00000d53: PUSH1 0x02 00000d55: EXP 00000d56: SUB 00000d57: DUP5 00000d58: DUP2 00000d59: AND 00000d5a: PUSH1 0x04 00000d5c: DUP4 00000d5d: ADD 00000d5e: MSTORE 00000d5f: PUSH1 0x24 00000d61: DUP3 00000d62: ADD 00000d63: DUP5 00000d64: SWAP1 00000d65: MSTORE 00000d66: SWAP2 00000d67: MLOAD 00000d68: PUSH1 0x00 00000d6a: SWAP3 00000d6b: DUP7 00000d6c: AND 00000d6d: SWAP2 00000d6e: PUSH4 0xa9059cbb 00000d73: SWAP2 00000d74: PUSH1 0x44 00000d76: DUP1 00000d77: DUP4 00000d78: ADD 00000d79: SWAP3 00000d7a: DUP7 00000d7b: SWAP3 00000d7c: SWAP2 00000d7d: SWAP1 00000d7e: DUP3 00000d7f: SWAP1 00000d80: SUB 00000d81: ADD 00000d82: DUP2 00000d83: DUP4 00000d84: DUP8 00000d85: GAS 00000d86: CALL 00000d87: SWAP8 00000d88: SWAP7 00000d89: POP 00000d8a: POP 00000d8b: POP 00000d8c: POP 00000d8d: POP 00000d8e: POP 00000d8f: POP 00000d90: JUMP 00000d91: STOP 00000d92: LOG1 00000d93: PUSH6 0x627a7a723058 00000d9a: KECCAK256 00000d9b: CALLER 00000d9c: UNKNOWN(0xB4) 00000d9d: UNKNOWN(0xC8) 00000d9e: BYTE 00000d9f: UNKNOWN(0xC2) 00000da0: SWAP7 00000da1: UNKNOWN(0xB8) 00000da2: UNKNOWN(0xD1) 00000da3: UNKNOWN(0xBE) 00000da4: SWAP12 00000da5: CLZ 00000da6: OR 00000da7: PUSH18 0xaae54c63b57d9df3ff2a1dfb5202fc7d44c3 00000dba: UNKNOWN(0xEE) 00000dbb: STOP 00000dbc: UNKNOWN(0x29)
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0x1fb7e650eb922833088e894e8b30ab6ebba1381aafdf5992dfbfc29737c733f8
call_targets:
0xdbfb513d25df56b4c3f5258d477a395d4b735824
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x1fb7e650eb922833088e894e8b30ab6ebba1381aafdf5992dfbfc29737c733f8",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xdbfb513d25df56b4c3f5258d477a395d4b735824"
],
"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": "0x150b7a02",
"selector": "0x150b7a02",
"calldata_variants": [
"0x150b7a02",
"0x150b7a020000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2c8ef841",
"selector": "0x2c8ef841",
"calldata_variants": [
"0x2c8ef841",
"0x2c8ef8410000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x375b74c3",
"selector": "0x375b74c3",
"calldata_variants": [
"0x375b74c3",
"0x375b74c30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x441e15d0",
"selector": "0x441e15d0",
"calldata_variants": [
"0x441e15d0",
"0x441e15d00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x522b3d17",
"selector": "0x522b3d17",
"calldata_variants": [
"0x522b3d17",
"0x522b3d170000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x526327f2",
"selector": "0x526327f2",
"calldata_variants": [
"0x526327f2",
"0x526327f20000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x5aa79b6b",
"selector": "0x5aa79b6b",
"calldata_variants": [
"0x5aa79b6b",
"0x5aa79b6b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x60de3a26",
"selector": "0x60de3a26",
"calldata_variants": [
"0x60de3a26",
"0x60de3a260000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 996,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3356,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3462,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 3,
"guards_detected": [],
"untrusted_call_count": 3
}
|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0x1fb7e650eb922833088e894e8b30ab6ebba1381aafdf5992dfbfc29737c733f8
call_targets:
0xdbfb513d25df56b4c3f5258d477a395d4b735824
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x1fb7e650eb922833088e894e8b30ab6ebba1381aafdf5992dfbfc29737c733f8",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xdbfb513d25df56b4c3f5258d477a395d4b735824"
],
"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": "0x150b7a02",
"selector": "0x150b7a02",
"calldata_variants": [
"0x150b7a02",
"0x150b7a020000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2c8ef841",
"selector": "0x2c8ef841",
"calldata_variants": [
"0x2c8ef841",
"0x2c8ef8410000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x375b74c3",
"selector": "0x375b74c3",
"calldata_variants": [
"0x375b74c3",
"0x375b74c30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x441e15d0",
"selector": "0x441e15d0",
"calldata_variants": [
"0x441e15d0",
"0x441e15d00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x522b3d17",
"selector": "0x522b3d17",
"calldata_variants": [
"0x522b3d17",
"0x522b3d170000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x526327f2",
"selector": "0x526327f2",
"calldata_variants": [
"0x526327f2",
"0x526327f20000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x5aa79b6b",
"selector": "0x5aa79b6b",
"calldata_variants": [
"0x5aa79b6b",
"0x5aa79b6b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x60de3a26",
"selector": "0x60de3a26",
"calldata_variants": [
"0x60de3a26",
"0x60de3a260000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 996,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3356,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3462,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 3,
"guards_detected": []
}
|