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

Analysis Run

451b66eb-635f-4ddb-8083-b64c57dc8a38

complete
Chain ID
1
Address
Block Number
Created
Sun, Jan 4, 2026 4:57 AM
Review Summary

What survived the funnel

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

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

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
31561 report.consolidate complete 1 / 1 3 months ago
77993 artifact.fetch complete 1 / 3 1 week ago
77994 tool.cast_disasm complete 1 / 3 1 week ago
77995 analysis.bundle complete 1 / 3 1 week ago
77996 capability.graph complete 1 / 3 1 week ago
77997 detector.run complete 1 / 3 1 week ago
77998 validation.fork complete 1 / 3 1 week ago

Artifact

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

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 1
Findings
0
No findings?
yes
Summary
No concrete, exploitable profit path found in the provided runtime bytecode. The only external CALL appears in executeTransaction and is gated by owner checks plus confirmation threshold logic, and the SELFDESTRUCT opcode is only present in trailing metadata (post-STOP), not in reachable code.
View stderr
[codex:343406] OpenAI Codex v0.77.0 (research preview)
[codex:343406] --------
[codex:343406] workdir: /tmp/codex-multi-zqo1iphn
[codex:343406] model: gpt-5.2-codex
[codex:343406] provider: openai
[codex:343406] approval: never
[codex:343406] sandbox: read-only
[codex:343406] reasoning effort: xhigh
[codex:343406] reasoning summaries: auto
[codex:343406] session id: 019b8758-3bf1-73c3-accc-7ebcbeb141a2
[codex:343406] --------
[codex:343406] user
[codex:343406] 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:343406] 
[codex:343406] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:343406] 
[codex:343406] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:343406] - Gas inefficiency, code quality, or best practices
[codex:343406] - Theoretical vulnerabilities without a clear extraction path
[codex:343406] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:343406] - Issues requiring social engineering or off-chain coordination
[codex:343406] 
[codex:343406] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:343406] - CALL/DELEGATECALL with controllable destination or calldata
[codex:343406] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:343406] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:343406] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:343406] - External calls before state updates (reentrancy)
[codex:343406] - SELFDESTRUCT with controllable beneficiary
[codex:343406] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:343406] 
[codex:343406] For each finding, you MUST explain:
[codex:343406] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:343406] 2. The concrete sequence of transactions to extract value
[codex:343406] 3. Why you believe this is exploitable (not just suspicious)
[codex:343406] 
[codex:343406] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:343406] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:343406] 
[codex:343406] Output MUST be valid JSON matching the provided schema.
[codex:343406] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:343406] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:343406] mcp startup: no servers
[codex:343406] 
[codex:343406] thinking
[codex:343406] **Preparing to read BYTECODE_BUNDLE.txt**
[codex:343406] exec
[codex:343406] /bin/bash -lc ls in /tmp/codex-multi-zqo1iphn succeeded in 5ms:
[codex:343406] BYTECODE_BUNDLE.txt
[codex:343406] codex-output-schema.json
[codex:343406] exec
[codex:343406] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-zqo1iphn succeeded in 6ms:
[codex:343406] Runtime bytecode bundle for best-effort auditing.
[codex:343406] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:343406] 
[codex:343406] FILE: runtime_bytecode.hex
[codex:343406] 0x6060604052361561011a5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c278114610165578063173825d91461019757806320ea8d86146101b85780632f54bf6e146101d05780633411c81c1461020357806354741525146102395780637065cb4814610268578063784547a7146102895780638b51d13f146102b35780639ace38c2146102db578063a0e67e2b1461039a578063a8abe69a14610401578063b5dc40c314610478578063b77bf600146104e2578063ba51a6df14610507578063c01a8c841461051f578063c642747414610537578063d74f8edd146105ae578063dc8452cd146105d3578063e20056e6146105f8578063ee22610b1461061f575b5b60003411156101625733600160a060020a03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405190815260200160405180910390a25b5b005b341561017057600080fd5b61017b600435610637565b604051600160a060020a03909116815260200160405180910390f35b34156101a257600080fd5b610162600160a060020a0360043516610669565b005b34156101c357600080fd5b61016260043561081a565b005b34156101db57600080fd5b6101ef600160a060020a03600435166108fc565b604051901515815260200160405180910390f35b341561020e57600080fd5b6101ef600435600160a060020a0360243516610911565b604051901515815260200160405180910390f35b341561024457600080fd5b61025660043515156024351515610931565b60405190815260200160405180910390f35b341561027357600080fd5b610162600160a060020a03600435166109a0565b005b341561029457600080fd5b6101ef600435610add565b604051901515815260200160405180910390f35b34156102be57600080fd5b610256600435610b71565b60405190815260200160405180910390f35b34156102e657600080fd5b6102f1600435610bf0565b604051600160a060020a03851681526020810184905281151560608201526080604082018181528454600260001961010060018416150201909116049183018290529060a0830190859080156103885780601f1061035d57610100808354040283529160200191610388565b820191906000526020600020905b81548152906001019060200180831161036b57829003601f168201915b50509550505050505060405180910390f35b34156103a557600080fd5b6103ad610c24565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156103ed5780820151818401525b6020016103d4565b505050509050019250505060405180910390f35b341561040c57600080fd5b6103ad60043560243560443515156064351515610c8d565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156103ed5780820151818401525b6020016103d4565b505050509050019250505060405180910390f35b341561048357600080fd5b6103ad600435610dbb565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156103ed5780820151818401525b6020016103d4565b505050509050019250505060405180910390f35b34156104ed57600080fd5b610256610f3d565b60405190815260200160405180910390f35b341561051257600080fd5b610162600435610f43565b005b341561052a57600080fd5b610162600435610fd9565b005b341561054257600080fd5b61025660048035600160a060020a03169060248035919060649060443590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506110cb95505050505050565b60405190815260200160405180910390f35b34156105b957600080fd5b6102566110eb565b60405190815260200160405180910390f35b34156105de57600080fd5b6102566110f0565b60405190815260200160405180910390f35b341561060357600080fd5b610162600160a060020a03600435811690602435166110f6565b005b341561062a57600080fd5b6101626004356112b7565b005b600380548290811061064557fe5b906000526020600020900160005b915054906101000a9004600160a060020a031681565b600030600160a060020a031633600160a060020a031614151561068b57600080fd5b600160a060020a038216600090815260026020526040902054829060ff1615156106b457600080fd5b600160a060020a0383166000908152600260205260408120805460ff1916905591505b600354600019018210156107af5782600160a060020a03166003838154811015156106fe57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031614156107a35760038054600019810190811061073f57fe5b906000526020600020900160005b9054906101000a9004600160a060020a031660038381548110151561076e57fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a031602179055506107af565b5b6001909101906106d7565b6003805460001901906107c290826115cd565b5060035460045411156107db576003546107db90610f43565b5b82600160a060020a03167f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9060405160405180910390a25b5b505b5050565b33600160a060020a03811660009081526002602052604090205460ff16151561084257600080fd5b600082815260016020908152604080832033600160a060020a038116855292529091205483919060ff16151561087757600080fd5b600084815260208190526040902060030154849060ff161561089857600080fd5b6000858152600160209081526040808320600160a060020a033316808552925291829020805460ff1916905586917ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e9905160405180910390a35b5b505b50505b5050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b6000805b6005548110156109985783801561095e575060008181526020819052604090206003015460ff16155b806109825750828015610982575060008181526020819052604090206003015460ff165b5b1561098f576001820191505b5b600101610935565b5b5092915050565b30600160a060020a031633600160a060020a03161415156109c057600080fd5b600160a060020a038116600090815260026020526040902054819060ff16156109e857600080fd5b81600160a060020a03811615156109fe57600080fd5b60038054905060010160045460328211158015610a1b5750818111155b8015610a2657508015155b8015610a3157508115155b1515610a3c57600080fd5b600160a060020a0385166000908152600260205260409020805460ff191660019081179091556003805490918101610a7483826115cd565b916000526020600020900160005b8154600160a060020a03808a166101009390930a8381029102199091161790915590507ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d60405160405180910390a25b5b50505b505b505b50565b600080805b600354811015610b695760008481526001602052604081206003805491929184908110610b0b57fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000205460ff1615610b4d576001820191505b600454821415610b605760019250610b69565b5b600101610ae2565b5b5050919050565b6000805b600354811015610be95760008381526001602052604081206003805491929184908110610b9e57fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000205460ff1615610be0576001820191505b5b600101610b75565b5b50919050565b6000602081905290815260409020805460018201546003830154600160a060020a0390921692909160029091019060ff1684565b610c2c611621565b6003805480602002602001604051908101604052809291908181526020018280548015610c8257602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610c64575b505050505090505b90565b610c95611621565b610c9d611621565b600080600554604051805910610cb05750595b908082528060200260200182016040525b50925060009150600090505b600554811015610d4857858015610cf6575060008181526020819052604090206003015460ff16155b80610d1a5750848015610d1a575060008181526020819052604090206003015460ff165b5b15610d3f5780838381518110610d2d57fe5b60209081029091010152600191909101905b5b600101610ccd565b878703604051805910610d585750595b908082528060200260200182016040525b5093508790505b86811015610daf57828181518110610d8457fe5b906020019060200201518489830381518110610d9c57fe5b602090810290910101525b600101610d70565b5b505050949350505050565b610dc3611621565b610dcb611621565b6003546000908190604051805910610de05750595b908082528060200260200182016040525b50925060009150600090505b600354811015610ec35760008581526001602052604081206003805491929184908110610e2657fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000205460ff1615610eba576003805482908110610e6f57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316838381518110610e9b57fe5b600160a060020a03909216602092830290910190910152600191909101905b5b600101610dfd565b81604051805910610ed15750595b908082528060200260200182016040525b509350600090505b81811015610f3457828181518110610efe57fe5b90602001906020020151848281518110610f1457fe5b600160a060020a039092166020928302909101909101525b600101610eea565b5b505050919050565b60055481565b30600160a060020a031633600160a060020a0316141515610f6357600080fd5b6003548160328211801590610f785750818111155b8015610f8357508015155b8015610f8e57508115155b1515610f9957600080fd5b60048390557fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a8360405190815260200160405180910390a15b5b50505b50565b33600160a060020a03811660009081526002602052604090205460ff16151561100157600080fd5b6000828152602081905260409020548290600160a060020a0316151561102657600080fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff161561105a57600080fd5b6000858152600160208181526040808420600160a060020a033316808652925292839020805460ff191690921790915586917f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef905160405180910390a36108f2856112b7565b5b5b50505b505b5050565b60006110d88484846114a6565b90506110e381610fd9565b5b9392505050565b603281565b60045481565b600030600160a060020a031633600160a060020a031614151561111857600080fd5b600160a060020a038316600090815260026020526040902054839060ff16151561114157600080fd5b600160a060020a038316600090815260026020526040902054839060ff161561116957600080fd5b600092505b6003548310156112115784600160a060020a031660038481548110151561119157fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a0316141561120557836003848154811015156111d057fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a03160217905550611211565b5b60019092019161116e565b600160a060020a03808616600081815260026020526040808220805460ff199081169091559388168252908190208054909316600117909255907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b90905160405180910390a283600160a060020a03167ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d60405160405180910390a25b5b505b505b505050565b33600160a060020a03811660009081526002602052604081205490919060ff1615156112e257600080fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff16151561131757600080fd5b600085815260208190526040902060030154859060ff161561133857600080fd5b61134186610add565b15611499576000868152602081815260409182902060038101805460ff1916600190811790915581548183015460028085018054959c5061142897600160a060020a039094169692956000199581161561010002959095019094160492918391601f83018190048102019051908101604052809291908181526020018280546001816001161561010002031660029004801561141e5780601f106113f35761010080835404028352916020019161141e565b820191906000526020600020905b81548152906001019060200180831161140157829003601f168201915b50505050506115a5565b1561145f57857f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7560405160405180910390a2611499565b857f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923660405160405180910390a260038501805460ff191690555b5b5b5b505b50505b505050565b600083600160a060020a03811615156114be57600080fd5b600554915060806040519081016040908152600160a060020a0387168252602080830187905281830186905260006060840181905285815290819052208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039190911617815560208201518160010155604082015181600201908051611549929160200190611645565b506060820151600391909101805460ff191691151591909117905550600580546001019055817fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5160405160405180910390a25b5b509392505050565b6000806040516020840160008287838a8c6187965a03f1925050508091505b50949350505050565b815481835581811511610813576000838152602090206108139181019083016116c4565b5b505050565b815481835581811511610813576000838152602090206108139181019083016116c4565b5b505050565b60206040519081016040526000815290565b60206040519081016040526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061168657805160ff19168380011785556116b3565b828001600101855582156116b3579182015b828111156116b3578251825591602001919060010190611698565b5b506116c09291506116c4565b5090565b610c8a91905b808211156116c057600081556001016116ca565b5090565b905600a165627a7a72305820706ed24401b5b8a3842b02ace1947993b89d52ff0b9ad48f97724e993f26a72b0029
[codex:343406] 
[codex:343406] thinking
[codex:343406] **Planning bytecode analysis for exploits**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] import binascii
[codex:343406] from pathlib import Path
[codex:343406] code = Path('/tmp/codex-multi-zqo1iphn/BYTECODE_BUNDLE.txt').read_text()
[codex:343406] # extract hex after 0x
[codex:343406] import re
[codex:343406] m = re.search(r'0x([0-9a-fA-F]+)', code)
[codex:343406] hexstr = m.group(1)
[codex:343406] code_bytes = bytes.fromhex(hexstr)
[codex:343406] # opcodes mapping
[codex:343406] opmap = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:343406] # add DUP, SWAP
[codex:343406] for i in range(0x80,0x90): opmap[i]=f'DUP{i-0x7f}'
[codex:343406] for i in range(0x90,0xa0): opmap[i]=f'SWAP{i-0x8f}'
[codex:343406] for i in range(0xa0,0xa5): opmap[i]=f'LOG{i-0x9f}'
[codex:343406] # base opcodes
[codex:343406] base = {
[codex:343406] 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:343406] 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:343406] 0x20:'SHA3',
[codex:343406] 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:343406] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:343406] 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:343406] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:343406] }
[codex:343406] opmap.update(base)
[codex:343406] # disassemble; record CALL/DELEGATECALL/SELFDESTRUCT locations with context
[codex:343406] interesting = []
[codex:343406] ops = []
[codex:343406] pc=0
[codex:343406] while pc < len(code_bytes):
[codex:343406]     op = code_bytes[pc]
[codex:343406]     opname = opmap.get(op, f'OP{op:02x}')
[codex:343406]     if 0x60 <= op <= 0x7f:
[codex:343406]         n = op-0x5f
[codex:343406]         data = code_bytes[pc+1:pc+1+n]
[codex:343406]         ops.append((pc, opname, data.hex()))
[codex:343406]         pc += 1+n
[codex:343406]     else:
[codex:343406]         ops.append((pc, opname, None))
[codex:343406]         pc += 1
[codex:343406] 
[codex:343406] # find CALL/DELEGATECALL/SELFDESTRUCT
[codex:343406] for i,(pc,opname,data) in enumerate(ops):
[codex:343406]     if opname in ('CALL','DELEGATECALL','SELFDESTRUCT'):
[codex:343406]         # get last few ops for context
[codex:343406]         start=max(0,i-10)
[codex:343406]         ctx=ops[start:i+1]
[codex:343406]         interesting.append((pc,opname,ctx))
[codex:343406] 
[codex:343406] print('Total ops',len(ops),'calls',len(interesting))
[codex:343406] for pc,opname,ctx in interesting:
[codex:343406]     print('\\n',pc,opname)
[codex:343406]     for cpc,coname,cdata in ctx:
[codex:343406]         if cdata is None:
[codex:343406]             print(f' {cpc:04x}: {coname}')
[codex:343406]         else:
[codex:343406]             print(f' {cpc:04x}: {coname} 0x{cdata}')
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 34ms:
[codex:343406] Total ops 4161 calls 2
[codex:343406] 
[codex:343406]  5564 CALL
[codex:343406]  15af: ADD
[codex:343406]  15b0: PUSH1 0x00
[codex:343406]  15b2: DUP3
[codex:343406]  15b3: DUP8
[codex:343406]  15b4: DUP4
[codex:343406]  15b5: DUP11
[codex:343406]  15b6: DUP13
[codex:343406]  15b7: PUSH2 0x8796
[codex:343406]  15ba: GAS
[codex:343406]  15bb: SUB
[codex:343406]  15bc: CALL
[codex:343406] 
[codex:343406]  5890 SELFDESTRUCT
[codex:343406]  16e1: JUMP
[codex:343406]  16e2: JUMPDEST
[codex:343406]  16e3: SWAP1
[codex:343406]  16e4: JUMP
[codex:343406] 
[codex:343406] thinking
[codex:343406] **Analyzing CALL and selfdestruct metadata**
[codex:343406] 
[codex:343406] I'm checking the bytecode around the single external CALL at 0x15bc to understand its arguments and see if value sent is controllable or if access control exists. The selfdestruct opcode appears only in metadata and isn't reachable during execution. I'll disassemble a wider range of instructions, including stack effects, to better understand the call context and contract structure, which seems to manage address lists and might have role-based or multi-sig features.
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] import re
[codex:343406] from pathlib import Path
[codex:343406] code = Path('/tmp/codex-multi-zqo1iphn/BYTECODE_BUNDLE.txt').read_text()
[codex:343406] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:343406] code_bytes = bytes.fromhex(hexstr)
[codex:343406] # opcode map
[codex:343406] opmap = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:343406] for i in range(0x80,0x90): opmap[i]=f'DUP{i-0x7f}'
[codex:343406] for i in range(0x90,0xa0): opmap[i]=f'SWAP{i-0x8f}'
[codex:343406] for i in range(0xa0,0xa5): opmap[i]=f'LOG{i-0x9f}'
[codex:343406] base = {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:343406] 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:343406] 0x20:'SHA3',
[codex:343406] 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:343406] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:343406] 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:343406] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:343406] opmap.update(base)
[codex:343406] ops=[]
[codex:343406] pc=0
[codex:343406] while pc < len(code_bytes):
[codex:343406]     op = code_bytes[pc]
[codex:343406]     opname = opmap.get(op, f'OP{op:02x}')
[codex:343406]     if 0x60 <= op <= 0x7f:
[codex:343406]         n=op-0x5f
[codex:343406]         data = code_bytes[pc+1:pc+1+n]
[codex:343406]         ops.append((pc,opname,data.hex()))
[codex:343406]         pc += 1+n
[codex:343406]     else:
[codex:343406]         ops.append((pc,opname,None))
[codex:343406]         pc += 1
[codex:343406] 
[codex:343406] # find index of CALL
[codex:343406] call_index = [i for i,(pc,op,dat) in enumerate(ops) if op=='CALL'][0]
[codex:343406] start = max(0, call_index-40)
[codex:343406] end = min(len(ops), call_index+10)
[codex:343406] for i in range(start,end):
[codex:343406]     pc,op,dat = ops[i]
[codex:343406]     if dat:
[codex:343406]         print(f'{i:04d} {pc:04x}: {op} 0x{dat}')
[codex:343406]     else:
[codex:343406]         print(f'{i:04d} {pc:04x}: {op}')
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 38ms:
[codex:343406] 3872 156c: ADD
[codex:343406] 3873 156d: SWAP1
[codex:343406] 3874 156e: SSTORE
[codex:343406] 3875 156f: DUP2
[codex:343406] 3876 1570: PUSH32 0xc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e51
[codex:343406] 3877 1591: PUSH1 0x40
[codex:343406] 3878 1593: MLOAD
[codex:343406] 3879 1594: PUSH1 0x40
[codex:343406] 3880 1596: MLOAD
[codex:343406] 3881 1597: DUP1
[codex:343406] 3882 1598: SWAP2
[codex:343406] 3883 1599: SUB
[codex:343406] 3884 159a: SWAP1
[codex:343406] 3885 159b: LOG3
[codex:343406] 3886 159c: JUMPDEST
[codex:343406] 3887 159d: JUMPDEST
[codex:343406] 3888 159e: POP
[codex:343406] 3889 159f: SWAP4
[codex:343406] 3890 15a0: SWAP3
[codex:343406] 3891 15a1: POP
[codex:343406] 
[codex:343406] thinking
[codex:343406] **Analyzing CALL stack and function entry points**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] import re
[codex:343406] from pathlib import Path
[codex:343406] code = Path('/tmp/codex-multi-zqo1iphn/BYTECODE_BUNDLE.txt').read_text()
[codex:343406] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:343406] # find occurrences of 0x6115a5 (PUSH2 0x15a5)
[codex:343406] pattern = '6115a5'
[codex:343406] idxs = [m.start()//2 for m in re.finditer(pattern, hexstr)]
[codex:343406] print('occurrences',idxs)
[codex:343406] # show surrounding bytes for each
[codex:343406] for idx in idxs:
[codex:343406]     start=max(0, idx-10)
[codex:343406]     end=idx+10
[codex:343406]     print(hex(idx), hexstr[start*2:end*2])
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 28ms:
[codex:343406] occurrences [5156]
[codex:343406] 0x1424 168201915b50505050506115a5565b1561145f57
[codex:343406] 
[codex:343406] thinking
[codex:343406] **Examining function references around 0x1424**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] import re
[codex:343406] from pathlib import Path
[codex:343406] code = Path('/tmp/codex-multi-zqo1iphn/BYTECODE_BUNDLE.txt').read_text()
[codex:343406] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:343406] code_bytes = bytes.fromhex(hexstr)
[codex:343406] # op map
[codex:343406] opmap = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:343406] for i in range(0x80,0x90): opmap[i]=f'DUP{i-0x7f}'
[codex:343406] for i in range(0x90,0xa0): opmap[i]=f'SWAP{i-0x8f}'
[codex:343406] for i in range(0xa0,0xa5): opmap[i]=f'LOG{i-0x9f}'
[codex:343406] base = {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:343406] 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:343406] 0x20:'SHA3',
[codex:343406] 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:343406] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:343406] 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:343406] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:343406] opmap.update(base)
[codex:343406] 
[codex:343406] # disassemble in range
[codex:343406] start=0x13d0
[codex:343406] end=0x1460
[codex:343406] pc=0
[codex:343406] ops=[]
[codex:343406] while pc < len(code_bytes):
[codex:343406]     op=code_bytes[pc]
[codex:343406]     opname=opmap.get(op, f'OP{op:02x}')
[codex:343406]     if 0x60 <= op <= 0x7f:
[codex:343406]         n=op-0x5f
[codex:343406]         data=code_bytes[pc+1:pc+1+n]
[codex:343406]         ops.append((pc,opname,data.hex()))
[codex:343406]         pc += 1+n
[codex:343406]     else:
[codex:343406]         ops.append((pc,opname,None))
[codex:343406]         pc += 1
[codex:343406] 
[codex:343406] for pc,op,dat in ops:
[codex:343406]     if start <= pc <= end:
[codex:343406]         if dat:
[codex:343406]             print(f'{pc:04x}: {op} 0x{dat}')
[codex:343406]         else:
[codex:343406]             print(f'{pc:04x}: {op}')
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 33ms:
[codex:343406] 13d0: SWAP1
[codex:343406] 13d1: DIV
[codex:343406] 13d2: DUP1
[codex:343406] 13d3: ISZERO
[codex:343406] 13d4: PUSH2 0x141e
[codex:343406] 13d7: JUMPI
[codex:343406] 13d8: DUP1
[codex:343406] 13d9: PUSH1 0x1f
[codex:343406] 13db: LT
[codex:343406] 13dc: PUSH2 0x13f3
[codex:343406] 13df: JUMPI
[codex:343406] 13e0: PUSH2 0x0100
[codex:343406] 13e3: DUP1
[codex:343406] 13e4: DUP4
[codex:343406] 13e5: SLOAD
[codex:343406] 13e6: DIV
[codex:343406] 13e7: MUL
[codex:343406] 13e8: DUP4
[codex:343406] 13e9: MSTORE
[codex:343406] 13ea: SWAP2
[codex:343406] 
[codex:343406] thinking
[codex:343406] **Analyzing MultiSig wallet bytecode**
[codex:343406] 
[codex:343406] This contract looks like a multisig wallet, possibly Gnosis or Aragon style, based on function selectors, loops, event logs, and external calls with value and data. I'm trying to verify if the external call can be executed without proper ownership or confirmations by mapping selectors and event signatures, checking if access controls prevent exploits like unauthorized transaction submission or owner modification. I'll attempt to offline match event signatures and confirm safeguards around owner and transaction management.
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] import hashlib
[codex:343406] 
[codex:343406] def keccak(text):
[codex:343406]     return hashlib.new('sha3_256', text.encode()).hexdigest()  # Ethereum uses Keccak-256, not NIST; but python's sha3_256 is NIST. Need pysha3 for keccak.
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 25ms:
[codex:343406] 
[codex:343406] 
[codex:343406] thinking
[codex:343406] **Identifying contract by function selectors**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] try:
[codex:343406]     from Crypto.Hash import keccak
[codex:343406]     print('have pycryptodome')
[codex:343406]     k = keccak.new(digest_bits=256)
[codex:343406]     k.update(b'getOwners()')
[codex:343406]     print(k.hexdigest())
[codex:343406] except Exception as e:
[codex:343406]     print('no', e)
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 49ms:
[codex:343406] have pycryptodome
[codex:343406] a0e67e2bdc0a6d8a09ccd6c353c9df590807ad66ff5e6630c4f31a86dfa84821
[codex:343406] 
[codex:343406] thinking
[codex:343406] **Preparing function selectors for matching**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] from Crypto.Hash import keccak
[codex:343406] selectors = {
[codex:343406]     '025e7c27','173825d9','20ea8d86','2f54bf6e','3411c81c','54741525','7065cb48','784547a7','8b51d13f','9ace38c2','a0e67e2b','a8abe69a','b5dc40c3','b77bf600','ba51a6df','c01a8c84','c6427474','d74f8edd','dc8452cd','e20056e6','ee22610b'
[codex:343406] }
[codex:343406] # candidate function signatures for Gnosis MultiSigWallet (old)
[codex:343406] candidates = [
[codex:343406]     'addOwner(address)',
[codex:343406]     'removeOwner(address)',
[codex:343406]     'replaceOwner(address,address)',
[codex:343406]     'changeRequirement(uint256)',
[codex:343406]     'confirmTransaction(uint256)',
[codex:343406]     'revokeConfirmation(uint256)',
[codex:343406]     'executeTransaction(uint256)',
[codex:343406]     'submitTransaction(address,uint256,bytes)',
[codex:343406]     'isConfirmed(uint256)',
[codex:343406]     'getConfirmationCount(uint256)',
[codex:343406]     'getTransactionCount(bool,bool)',
[codex:343406]     'getOwners()',
[codex:343406]     'getOwnerCount()',
[codex:343406]     'getConfirmations(uint256)',
[codex:343406]     'getTransactionIds(uint256,uint256,bool,bool)',
[codex:343406]     'transactionCount()',
[codex:343406]     'transactions(uint256)',
[codex:343406]     'isOwner(address)'
[codex:343406] ]
[codex:343406] 
[codex:343406] candidates += [
[codex:343406]     # Gnosis Safe (v0.5/1.0) style
[codex:343406]     'execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)',
[codex:343406]     'getThreshold()',
[codex:343406]     'getOwners()',
[codex:343406]     'nonce()',
[codex:343406]     'approvedHashes(address,bytes32)',
[codex:343406]     'domainSeparator()',
[codex:343406]     'getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)',
[codex:343406]     'isOwner(address)',
[codex:343406]     'getModules()',
[codex:343406]     'enableModule(address)',
[codex:343406]     'disableModule(address,address)',
[codex:343406]     'setGuard(address)',
[codex:343406]     'getGuard()',
[codex:343406]     'approveHash(bytes32)',
[codex:343406] ]
[codex:343406] 
[codex:343406] # compute selectors
[codex:343406] for sig in candidates:
[codex:343406]     k = keccak.new(digest_bits=256)
[codex:343406]     k.update(sig.encode())
[codex:343406]     sel = k.hexdigest()[:8]
[codex:343406]     if sel in selectors:
[codex:343406]         print(sel, sig)
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 36ms:
[codex:343406] 7065cb48 addOwner(address)
[codex:343406] 173825d9 removeOwner(address)
[codex:343406] e20056e6 replaceOwner(address,address)
[codex:343406] ba51a6df changeRequirement(uint256)
[codex:343406] c01a8c84 confirmTransaction(uint256)
[codex:343406] 20ea8d86 revokeConfirmation(uint256)
[codex:343406] ee22610b executeTransaction(uint256)
[codex:343406] c6427474 submitTransaction(address,uint256,bytes)
[codex:343406] 784547a7 isConfirmed(uint256)
[codex:343406] 8b51d13f getConfirmationCount(uint256)
[codex:343406] 54741525 getTransactionCount(bool,bool)
[codex:343406] a0e67e2b getOwners()
[codex:343406] b5dc40c3 getConfirmations(uint256)
[codex:343406] a8abe69a getTransactionIds(uint256,uint256,bool,bool)
[codex:343406] b77bf600 transactionCount()
[codex:343406] 9ace38c2 transactions(uint256)
[codex:343406] 2f54bf6e isOwner(address)
[codex:343406] a0e67e2b getOwners()
[codex:343406] 2f54bf6e isOwner(address)
[codex:343406] 
[codex:343406] thinking
[codex:343406] **Analyzing MultiSigWallet for vulnerabilities**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] import re
[codex:343406] from pathlib import Path
[codex:343406] from Crypto.Hash import keccak
[codex:343406] code = Path('/tmp/codex-multi-zqo1iphn/BYTECODE_BUNDLE.txt').read_text()
[codex:343406] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:343406] code_bytes = bytes.fromhex(hexstr)
[codex:343406] # disassemble to ops with immediate
[codex:343406] opmap = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:343406] for i in range(0x80,0x90): opmap[i]=f'DUP{i-0x7f}'
[codex:343406] for i in range(0x90,0xa0): opmap[i]=f'SWAP{i-0x8f}'
[codex:343406] for i in range(0xa0,0xa5): opmap[i]=f'LOG{i-0x9f}'
[codex:343406] base = {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:343406] 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:343406] 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:343406] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:343406] 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:343406] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:343406] opmap.update(base)
[codex:343406] ops=[]
[codex:343406] pc=0
[codex:343406] while pc < len(code_bytes):
[codex:343406]     op = code_bytes[pc]
[codex:343406]     opname = opmap.get(op, f'OP{op:02x}')
[codex:343406]     if 0x60 <= op <= 0x7f:
[codex:343406]         n=op-0x5f
[codex:343406]         data = code_bytes[pc+1:pc+1+n]
[codex:343406]         ops.append((pc,opname,data))
[codex:343406]         pc += 1+n
[codex:343406]     else:
[codex:343406]         ops.append((pc,opname,None))
[codex:343406]         pc += 1
[codex:343406] 
[codex:343406] # scan for pattern PUSH4 sel, EQ, PUSH2 dest, JUMPI
[codex:343406] mapping = []
[codex:343406] for i in range(len(ops)-3):
[codex:343406]     pc1,op1,data1 = ops[i]
[codex:343406]     pc2,op2,data2 = ops[i+1]
[codex:343406]     pc3,op3,data3 = ops[i+2]
[codex:343406]     pc4,op4,data4 = ops[i+3]
[codex:343406]     if op1=='PUSH4' and op2=='EQ' and op3=='PUSH2' and op4=='JUMPI':
[codex:343406]         sel = data1.hex()
[codex:343406]         dest = int.from_bytes(data3,'big')
[codex:343406]         mapping.append((sel,dest,pc1))
[codex:343406] 
[codex:343406] print('selector mapping count',len(mapping))
[codex:343406] for sel,dest,pc1 in mapping:
[codex:343406]     print(sel, hex(dest), 'at', hex(pc1))
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 74ms:
[codex:343406] selector mapping count 20
[codex:343406] 173825d9 0x197 at 0x3f
[codex:343406] 20ea8d86 0x1b8 at 0x4a
[codex:343406] 2f54bf6e 0x1d0 at 0x55
[codex:343406] 3411c81c 0x203 at 0x60
[codex:343406] 54741525 0x239 at 0x6b
[codex:343406] 7065cb48 0x268 at 0x76
[codex:343406] 784547a7 0x289 at 0x81
[codex:343406] 8b51d13f 0x2b3 at 0x8c
[codex:343406] 9ace38c2 0x2db at 0x97
[codex:343406] a0e67e2b 0x39a at 0xa2
[codex:343406] a8abe69a 0x401 at 0xad
[codex:343406] b5dc40c3 0x478 at 0xb8
[codex:343406] b77bf600 0x4e2 at 0xc3
[codex:343406] ba51a6df 0x507 at 0xce
[codex:343406] c01a8c84 0x51f at 0xd9
[codex:343406] c6427474 0x537 at 0xe4
[codex:343406] d74f8edd 0x5ae at 0xef
[codex:343406] dc8452cd 0x5d3 at 0xfa
[codex:343406] e20056e6 0x5f8 at 0x105
[codex:343406] 
[codex:343406] thinking
[codex:343406] **Analyzing fallback selector and dispatch start**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] import re
[codex:343406] from pathlib import Path
[codex:343406] code = Path('/tmp/codex-multi-zqo1iphn/BYTECODE_BUNDLE.txt').read_text()
[codex:343406] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:343406] code_bytes = bytes.fromhex(hexstr)
[codex:343406] # opcode map
[codex:343406] opmap = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:343406] for i in range(0x80,0x90): opmap[i]=f'DUP{i-0x7f}'
[codex:343406] for i in range(0x90,0xa0): opmap[i]=f'SWAP{i-0x8f}'
[codex:343406] for i in range(0xa0,0xa5): opmap[i]=f'LOG{i-0x9f}'
[codex:343406] base = {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:343406] 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:343406] 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:343406] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:343406] 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:343406] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:343406] opmap.update(base)
[codex:343406] ops=[]
[codex:343406] pc=0
[codex:343406] while pc < len(code_bytes):
[codex:343406]     op=code_bytes[pc]
[codex:343406]     opname=opmap.get(op, f'OP{op:02x}')
[codex:343406]     if 0x60 <= op <= 0x7f:
[codex:343406]         n=op-0x5f
[codex:343406]         data=code_bytes[pc+1:pc+1+n]
[codex:343406]         ops.append((pc,opname,data.hex()))
[codex:343406]         pc += 1+n
[codex:343406]     else:
[codex:343406]         ops.append((pc,opname,None))
[codex:343406]         pc += 1
[codex:343406] 
[codex:343406] # show around 0x537 dest
[codex:343406] start=0x520
[codex:343406] end=0x5a0
[codex:343406] for pc,op,dat in ops:
[codex:343406]     if start <= pc <= end:
[codex:343406]         if dat:
[codex:343406]             print(f'{pc:04x}: {op} 0x{dat}')
[codex:343406]         else:
[codex:343406]             print(f'{pc:04x}: {op}')
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 32ms:
[codex:343406] 0520: CALLVALUE
[codex:343406] 0521: ISZERO
[codex:343406] 0522: PUSH2 0x052a
[codex:343406] 0525: JUMPI
[codex:343406] 0526: PUSH1 0x00
[codex:343406] 0528: DUP1
[codex:343406] 0529: REVERT
[codex:343406] 052a: JUMPDEST
[codex:343406] 052b: PUSH2 0x0162
[codex:343406] 052e: PUSH1 0x04
[codex:343406] 0530: CALLDATALOAD
[codex:343406] 0531: PUSH2 0x0fd9
[codex:343406] 0534: JUMP
[codex:343406] 0535: JUMPDEST
[codex:343406] 0536: STOP
[codex:343406] 0537: JUMPDEST
[codex:343406] 0538: CALLVALUE
[codex:343406] 0539: ISZERO
[codex:343406] 053a: PUSH2 0x0542
[codex:343406] 053d: JUMPI
[codex:343406] 
[codex:343406] thinking
[codex:343406] **Inspecting internal submitTransaction function**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] import re
[codex:343406] from pathlib import Path
[codex:343406] code = Path('/tmp/codex-multi-zqo1iphn/BYTECODE_BUNDLE.txt').read_text()
[codex:343406] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:343406] code_bytes = bytes.fromhex(hexstr)
[codex:343406] # opcode map
[codex:343406] opmap = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:343406] for i in range(0x80,0x90): opmap[i]=f'DUP{i-0x7f}'
[codex:343406] for i in range(0x90,0xa0): opmap[i]=f'SWAP{i-0x8f}'
[codex:343406] for i in range(0xa0,0xa5): opmap[i]=f'LOG{i-0x9f}'
[codex:343406] base = {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:343406] 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:343406] 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:343406] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:343406] 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:343406] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:343406] opmap.update(base)
[codex:343406] 
[codex:343406] ops=[]
[codex:343406] pc=0
[codex:343406] while pc < len(code_bytes):
[codex:343406]     op=code_bytes[pc]
[codex:343406]     opname=opmap.get(op, f'OP{op:02x}')
[codex:343406]     if 0x60 <= op <= 0x7f:
[codex:343406]         n=op-0x5f
[codex:343406]         data=code_bytes[pc+1:pc+1+n]
[codex:343406]         ops.append((pc,opname,data.hex()))
[codex:343406]         pc += 1+n
[codex:343406]     else:
[codex:343406]         ops.append((pc,opname,None))
[codex:343406]         pc += 1
[codex:343406] 
[codex:343406] start=0x10b0
[codex:343406] end=0x1120
[codex:343406] for pc,op,dat in ops:
[codex:343406]     if start <= pc <= end:
[codex:343406]         if dat:
[codex:343406]             print(f'{pc:04x}: {op} 0x{dat}')
[codex:343406]         else:
[codex:343406]             print(f'{pc:04x}: {op}')
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 34ms:
[codex:343406] 10b0: PUSH1 0x40
[codex:343406] 10b2: MLOAD
[codex:343406] 10b3: DUP1
[codex:343406] 10b4: SWAP2
[codex:343406] 10b5: SUB
[codex:343406] 10b6: SWAP1
[codex:343406] 10b7: LOG4
[codex:343406] 10b8: PUSH2 0x08f2
[codex:343406] 10bb: DUP6
[codex:343406] 10bc: PUSH2 0x12b7
[codex:343406] 10bf: JUMP
[codex:343406] 10c0: JUMPDEST
[codex:343406] 10c1: JUMPDEST
[codex:343406] 10c2: JUMPDEST
[codex:343406] 10c3: POP
[codex:343406] 10c4: POP
[codex:343406] 10c5: JUMPDEST
[codex:343406] 10c6: POP
[codex:343406] 10c7: JUMPDEST
[codex:343406] 10c8: POP
[codex:343406] 
[codex:343406] thinking
[codex:343406] **Analyzing function call structure**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] import re
[codex:343406] from pathlib import Path
[codex:343406] code = Path('/tmp/codex-multi-zqo1iphn/BYTECODE_BUNDLE.txt').read_text()
[codex:343406] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:343406] code_bytes = bytes.fromhex(hexstr)
[codex:343406] # op map
[codex:343406] opmap = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:343406] for i in range(0x80,0x90): opmap[i]=f'DUP{i-0x7f}'
[codex:343406] for i in range(0x90,0xa0): opmap[i]=f'SWAP{i-0x8f}'
[codex:343406] for i in range(0xa0,0xa5): opmap[i]=f'LOG{i-0x9f}'
[codex:343406] base = {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:343406] 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:343406] 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:343406] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:343406] 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:343406] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:343406] opmap.update(base)
[codex:343406] 
[codex:343406] ops=[]
[codex:343406] pc=0
[codex:343406] while pc < len(code_bytes):
[codex:343406]     op=code_bytes[pc]
[codex:343406]     opname=opmap.get(op, f'OP{op:02x}')
[codex:343406]     if 0x60 <= op <= 0x7f:
[codex:343406]         n=op-0x5f
[codex:343406]         data=code_bytes[pc+1:pc+1+n]
[codex:343406]         ops.append((pc,opname,data.hex()))
[codex:343406]         pc += 1+n
[codex:343406]     else:
[codex:343406]         ops.append((pc,opname,None))
[codex:343406]         pc += 1
[codex:343406] 
[codex:343406] start=0x0fd0
[codex:343406] end=0x1060
[codex:343406] for pc,op,dat in ops:
[codex:343406]     if start <= pc <= end:
[codex:343406]         if dat:
[codex:343406]             print(f'{pc:04x}: {op} 0x{dat}')
[codex:343406]         else:
[codex:343406]             print(f'{pc:04x}: {op}')
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 33ms:
[codex:343406] 0fd0: SWAP1
[codex:343406] 0fd1: LOG2
[codex:343406] 0fd2: JUMPDEST
[codex:343406] 0fd3: JUMPDEST
[codex:343406] 0fd4: POP
[codex:343406] 0fd5: POP
[codex:343406] 0fd6: JUMPDEST
[codex:343406] 0fd7: POP
[codex:343406] 0fd8: JUMP
[codex:343406] 0fd9: JUMPDEST
[codex:343406] 0fda: CALLER
[codex:343406] 0fdb: PUSH1 0x01
[codex:343406] 0fdd: PUSH1 0xa0
[codex:343406] 0fdf: PUSH1 0x02
[codex:343406] 0fe1: EXP
[codex:343406] 0fe2: SUB
[codex:343406] 0fe3: DUP2
[codex:343406] 0fe4: AND
[codex:343406] 0fe5: PUSH1 0x00
[codex:343406] 0fe7: SWAP1
[codex:343406] 
[codex:343406] thinking
[codex:343406] **Analyzing MultiSigWallet access controls**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] from Crypto.Hash import keccak
[codex:343406] selectors = {'025e7c27','3411c81c','dc8452cd'}
[codex:343406] # guess function signatures from MultiSigWallet
[codex:343406] candidates = [
[codex:343406]     'getOwnerCount()',
[codex:343406]     'ownerExists(address)',
[codex:343406]     'transactionExists(uint256)',
[codex:343406]     'confirmationCount(uint256)',
[codex:343406]     'required()',
[codex:343406]     'getRequirement()',
[codex:343406]     'isConfirmed(uint256)',
[codex:343406]     'getOwners()',
[codex:343406]     'getTransactionCount(bool,bool)',
[codex:343406]     'getConfirmations(uint256)',
[codex:343406]     'getTransactionIds(uint256,uint256,bool,bool)',
[codex:343406]     'getTransaction(uint256)',
[codex:343406]     'getDailyLimit()',
[codex:343406]     'isUnderLimit(uint256)',
[codex:343406]     'calcMaxWithdraw()',
[codex:343406]     'resetSpentToday()',
[codex:343406]     'setDailyLimit(uint256)',
[codex:343406]     'spentToday()',
[codex:343406]     'lastDay()',
[codex:343406]     'transactions(uint256)',
[codex:343406]     'required()',
[codex:343406]     'ownerCount()'
[codex:343406] ]
[codex:343406] 
[codex:343406] for sig in candidates:
[codex:343406]     k = keccak.new(digest_bits=256); k.update(sig.encode()); sel = k.hexdigest()[:8]
[codex:343406]     if sel in selectors:
[codex:343406]         print(sel, sig)
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 38ms:
[codex:343406] dc8452cd required()
[codex:343406] dc8452cd required()
[codex:343406] 
[codex:343406] thinking
[codex:343406] **Confirming function associations**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] from Crypto.Hash import keccak
[codex:343406] for sig in ['getOwnerCount()','getConfirmationCount(uint256)','getTransactionCount(bool,bool)','getConfirmations(uint256)','getTransactionIds(uint256,uint256,bool,bool)','getOwners()','transactionCount()','confirmations(uint256,address)','owners(uint256)','isOwner(address)']:
[codex:343406]     k=keccak.new(digest_bits=256); k.update(sig.encode());
[codex:343406]     print(sig, k.hexdigest()[:8])
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 40ms:
[codex:343406] getOwnerCount() ef18374a
[codex:343406] getConfirmationCount(uint256) 8b51d13f
[codex:343406] getTransactionCount(bool,bool) 54741525
[codex:343406] getConfirmations(uint256) b5dc40c3
[codex:343406] getTransactionIds(uint256,uint256,bool,bool) a8abe69a
[codex:343406] getOwners() a0e67e2b
[codex:343406] transactionCount() b77bf600
[codex:343406] confirmations(uint256,address) 3411c81c
[codex:343406] owners(uint256) 025e7c27
[codex:343406] isOwner(address) 2f54bf6e
[codex:343406] 
[codex:343406] thinking
[codex:343406] **Verifying MultiSigWallet security assumptions**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] import re
[codex:343406] from pathlib import Path
[codex:343406] code = Path('/tmp/codex-multi-zqo1iphn/BYTECODE_BUNDLE.txt').read_text()
[codex:343406] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:343406] code_bytes = bytes.fromhex(hexstr)
[codex:343406] # opcode map
[codex:343406] opmap = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:343406] for i in range(0x80,0x90): opmap[i]=f'DUP{i-0x7f}'
[codex:343406] for i in range(0x90,0xa0): opmap[i]=f'SWAP{i-0x8f}'
[codex:343406] for i in range(0xa0,0xa5): opmap[i]=f'LOG{i-0x9f}'
[codex:343406] base = {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:343406] 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:343406] 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:343406] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:343406] 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:343406] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:343406] opmap.update(base)
[codex:343406] 
[codex:343406] ops=[]
[codex:343406] pc=0
[codex:343406] while pc < len(code_bytes):
[codex:343406]     op=code_bytes[pc]
[codex:343406]     opname=opmap.get(op, f'OP{op:02x}')
[codex:343406]     if 0x60 <= op <= 0x7f:
[codex:343406]         n=op-0x5f
[codex:343406]         data=code_bytes[pc+1:pc+1+n]
[codex:343406]         ops.append((pc,opname,data.hex()))
[codex:343406]         pc += 1+n
[codex:343406]     else:
[codex:343406]         ops.append((pc,opname,None))
[codex:343406]         pc += 1
[codex:343406] 
[codex:343406] start=0x61f
[codex:343406] end=0x6b0
[codex:343406] for pc,op,dat in ops:
[codex:343406]     if start <= pc <= end:
[codex:343406]         if dat:
[codex:343406]             print(f'{pc:04x}: {op} 0x{dat}')
[codex:343406]         else:
[codex:343406]             print(f'{pc:04x}: {op}')
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 31ms:
[codex:343406] 061f: JUMPDEST
[codex:343406] 0620: CALLVALUE
[codex:343406] 0621: ISZERO
[codex:343406] 0622: PUSH2 0x062a
[codex:343406] 0625: JUMPI
[codex:343406] 0626: PUSH1 0x00
[codex:343406] 0628: DUP1
[codex:343406] 0629: REVERT
[codex:343406] 062a: JUMPDEST
[codex:343406] 062b: PUSH2 0x0162
[codex:343406] 062e: PUSH1 0x04
[codex:343406] 0630: CALLDATALOAD
[codex:343406] 0631: PUSH2 0x12b7
[codex:343406] 0634: JUMP
[codex:343406] 0635: JUMPDEST
[codex:343406] 0636: STOP
[codex:343406] 0637: JUMPDEST
[codex:343406] 0638: PUSH1 0x03
[codex:343406] 063a: DUP1
[codex:343406] 063b: SLOAD
[codex:343406] 
[codex:343406] thinking
[codex:343406] **Analyzing internal jump in executeTransaction**
[codex:343406] exec
[codex:343406] /bin/bash -lc "python - <<'PY'
[codex:343406] import re
[codex:343406] from pathlib import Path
[codex:343406] code = Path('/tmp/codex-multi-zqo1iphn/BYTECODE_BUNDLE.txt').read_text()
[codex:343406] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:343406] code_bytes = bytes.fromhex(hexstr)
[codex:343406] # opcode map
[codex:343406] opmap = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:343406] for i in range(0x80,0x90): opmap[i]=f'DUP{i-0x7f}'
[codex:343406] for i in range(0x90,0xa0): opmap[i]=f'SWAP{i-0x8f}'
[codex:343406] for i in range(0xa0,0xa5): opmap[i]=f'LOG{i-0x9f}'
[codex:343406] base = {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:343406] 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:343406] 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:343406] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:343406] 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:343406] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:343406] opmap.update(base)
[codex:343406] 
[codex:343406] ops=[]
[codex:343406] pc=0
[codex:343406] while pc < len(code_bytes):
[codex:343406]     op=code_bytes[pc]
[codex:343406]     opname=opmap.get(op, f'OP{op:02x}')
[codex:343406]     if 0x60 <= op <= 0x7f:
[codex:343406]         n=op-0x5f
[codex:343406]         data=code_bytes[pc+1:pc+1+n]
[codex:343406]         ops.append((pc,opname,data.hex()))
[codex:343406]         pc += 1+n
[codex:343406]     else:
[codex:343406]         ops.append((pc,opname,None))
[codex:343406]         pc += 1
[codex:343406] 
[codex:343406] start=0x12b0
[codex:343406] end=0x1350
[codex:343406] for pc,op,dat in ops:
[codex:343406]     if start <= pc <= end:
[codex:343406]         if dat:
[codex:343406]             print(f'{pc:04x}: {op} 0x{dat}')
[codex:343406]         else:
[codex:343406]             print(f'{pc:04x}: {op}')
[codex:343406] PY" in /tmp/codex-multi-zqo1iphn succeeded in 40ms:
[codex:343406] 12b0: JUMPDEST
[codex:343406] 12b1: POP
[codex:343406] 12b2: JUMPDEST
[codex:343406] 12b3: POP
[codex:343406] 12b4: POP
[codex:343406] 12b5: POP
[codex:343406] 12b6: JUMP
[codex:343406] 12b7: JUMPDEST
[codex:343406] 12b8: CALLER
[codex:343406] 12b9: PUSH1 0x01
[codex:343406] 12bb: PUSH1 0xa0
[codex:343406] 12bd: PUSH1 0x02
[codex:343406] 12bf: EXP
[codex:343406] 12c0: SUB
[codex:343406] 12c1: DUP2
[codex:343406] 12c2: AND
[codex:343406] 12c3: PUSH1 0x00
[codex:343406] 12c5: SWAP1
[codex:343406] 12c6: DUP2
[codex:343406] 12c7: MSTORE
[codex:343406] 
[codex:343406] thinking
[codex:343406] **Analyzing MultiSigWallet bytecode for exploits**
[codex:343406] codex
[codex:343406] {"no_findings":true,"summary":"No concrete, exploitable profit path found in the provided runtime bytecode. The only external CALL appears in executeTransaction and is gated by owner checks plus confirmation threshold logic, and the SELFDESTRUCT opcode is only present in trailing metadata (post-STOP), not in reachable code.","findings":[]}
[codex:343406] tokens used
[codex:343406] 74,346
[codex:343406] {"no_findings":true,"summary":"No concrete, exploitable profit path found in the provided runtime bytecode. The only external CALL appears in executeTransaction and is gated by owner checks plus confirmation threshold logic, and the SELFDESTRUCT opcode is only present in trailing metadata (post-STOP), not in reachable code.","findings":[]}
Metadata
{
    "codex": {
        "ran_at": "2026-01-04T04:57:01.671565+00:00",
        "returncode": 0
    },
    "summary": "No concrete, exploitable profit path found in the provided runtime bytecode. The only external CALL appears in executeTransaction and is gated by owner checks plus confirmation threshold logic, and the SELFDESTRUCT opcode is only present in trailing metadata (post-STOP), not in reachable code.",
    "raw_final": {
        "summary": "No concrete, exploitable profit path found in the provided runtime bytecode. The only external CALL appears in executeTransaction and is gated by owner checks plus confirmation threshold logic, and the SELFDESTRUCT opcode is only present in trailing metadata (post-STOP), not in reachable code.",
        "findings": [],
        "no_findings": true
    },
    "no_findings": true,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
1
CREATE2
0
CALL-family (heavy)
1
EXT*/BALANCE
0
Total opcodes
4161
Flags
selfdestruct_present
View cast disassembly output
00000000: PUSH1 0x60
00000002: PUSH1 0x40
00000004: MSTORE
00000005: CALLDATASIZE
00000006: ISZERO
00000007: PUSH2 0x011a
0000000a: JUMPI
0000000b: PUSH4 0xffffffff
00000010: PUSH29 0x0100000000000000000000000000000000000000000000000000000000
0000002e: PUSH1 0x00
00000030: CALLDATALOAD
00000031: DIV
00000032: AND
00000033: PUSH4 0x025e7c27
00000038: DUP2
00000039: EQ
0000003a: PUSH2 0x0165
0000003d: JUMPI
0000003e: DUP1
0000003f: PUSH4 0x173825d9
00000044: EQ
00000045: PUSH2 0x0197
00000048: JUMPI
00000049: DUP1
0000004a: PUSH4 0x20ea8d86
0000004f: EQ
00000050: PUSH2 0x01b8
00000053: JUMPI
00000054: DUP1
00000055: PUSH4 0x2f54bf6e
0000005a: EQ
0000005b: PUSH2 0x01d0
0000005e: JUMPI
0000005f: DUP1
00000060: PUSH4 0x3411c81c
00000065: EQ
00000066: PUSH2 0x0203
00000069: JUMPI
0000006a: DUP1
0000006b: PUSH4 0x54741525
00000070: EQ
00000071: PUSH2 0x0239
00000074: JUMPI
00000075: DUP1
00000076: PUSH4 0x7065cb48
0000007b: EQ
0000007c: PUSH2 0x0268
0000007f: JUMPI
00000080: DUP1
00000081: PUSH4 0x784547a7
00000086: EQ
00000087: PUSH2 0x0289
0000008a: JUMPI
0000008b: DUP1
0000008c: PUSH4 0x8b51d13f
00000091: EQ
00000092: PUSH2 0x02b3
00000095: JUMPI
00000096: DUP1
00000097: PUSH4 0x9ace38c2
0000009c: EQ
0000009d: PUSH2 0x02db
000000a0: JUMPI
000000a1: DUP1
000000a2: PUSH4 0xa0e67e2b
000000a7: EQ
000000a8: PUSH2 0x039a
000000ab: JUMPI
000000ac: DUP1
000000ad: PUSH4 0xa8abe69a
000000b2: EQ
000000b3: PUSH2 0x0401
000000b6: JUMPI
000000b7: DUP1
000000b8: PUSH4 0xb5dc40c3
000000bd: EQ
000000be: PUSH2 0x0478
000000c1: JUMPI
000000c2: DUP1
000000c3: PUSH4 0xb77bf600
000000c8: EQ
000000c9: PUSH2 0x04e2
000000cc: JUMPI
000000cd: DUP1
000000ce: PUSH4 0xba51a6df
000000d3: EQ
000000d4: PUSH2 0x0507
000000d7: JUMPI
000000d8: DUP1
000000d9: PUSH4 0xc01a8c84
000000de: EQ
000000df: PUSH2 0x051f
000000e2: JUMPI
000000e3: DUP1
000000e4: PUSH4 0xc6427474
000000e9: EQ
000000ea: PUSH2 0x0537
000000ed: JUMPI
000000ee: DUP1
000000ef: PUSH4 0xd74f8edd
000000f4: EQ
000000f5: PUSH2 0x05ae
000000f8: JUMPI
000000f9: DUP1
000000fa: PUSH4 0xdc8452cd
000000ff: EQ
00000100: PUSH2 0x05d3
00000103: JUMPI
00000104: DUP1
00000105: PUSH4 0xe20056e6
0000010a: EQ
0000010b: PUSH2 0x05f8
0000010e: JUMPI
0000010f: DUP1
00000110: PUSH4 0xee22610b
00000115: EQ
00000116: PUSH2 0x061f
00000119: JUMPI
0000011a: JUMPDEST
0000011b: JUMPDEST
0000011c: PUSH1 0x00
0000011e: CALLVALUE
0000011f: GT
00000120: ISZERO
00000121: PUSH2 0x0162
00000124: JUMPI
00000125: CALLER
00000126: PUSH1 0x01
00000128: PUSH1 0xa0
0000012a: PUSH1 0x02
0000012c: EXP
0000012d: SUB
0000012e: AND
0000012f: PUSH32 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c
00000150: CALLVALUE
00000151: PUSH1 0x40
00000153: MLOAD
00000154: SWAP1
00000155: DUP2
00000156: MSTORE
00000157: PUSH1 0x20
00000159: ADD
0000015a: PUSH1 0x40
0000015c: MLOAD
0000015d: DUP1
0000015e: SWAP2
0000015f: SUB
00000160: SWAP1
00000161: LOG2
00000162: JUMPDEST
00000163: JUMPDEST
00000164: STOP
00000165: JUMPDEST
00000166: CALLVALUE
00000167: ISZERO
00000168: PUSH2 0x0170
0000016b: JUMPI
0000016c: PUSH1 0x00
0000016e: DUP1
0000016f: REVERT
00000170: JUMPDEST
00000171: PUSH2 0x017b
00000174: PUSH1 0x04
00000176: CALLDATALOAD
00000177: PUSH2 0x0637
0000017a: JUMP
0000017b: JUMPDEST
0000017c: PUSH1 0x40
0000017e: MLOAD
0000017f: PUSH1 0x01
00000181: PUSH1 0xa0
00000183: PUSH1 0x02
00000185: EXP
00000186: SUB
00000187: SWAP1
00000188: SWAP2
00000189: AND
0000018a: DUP2
0000018b: MSTORE
0000018c: PUSH1 0x20
0000018e: ADD
0000018f: PUSH1 0x40
00000191: MLOAD
00000192: DUP1
00000193: SWAP2
00000194: SUB
00000195: SWAP1
00000196: RETURN
00000197: JUMPDEST
00000198: CALLVALUE
00000199: ISZERO
0000019a: PUSH2 0x01a2
0000019d: JUMPI
0000019e: PUSH1 0x00
000001a0: DUP1
000001a1: REVERT
000001a2: JUMPDEST
000001a3: PUSH2 0x0162
000001a6: PUSH1 0x01
000001a8: PUSH1 0xa0
000001aa: PUSH1 0x02
000001ac: EXP
000001ad: SUB
000001ae: PUSH1 0x04
000001b0: CALLDATALOAD
000001b1: AND
000001b2: PUSH2 0x0669
000001b5: JUMP
000001b6: JUMPDEST
000001b7: STOP
000001b8: JUMPDEST
000001b9: CALLVALUE
000001ba: ISZERO
000001bb: PUSH2 0x01c3
000001be: JUMPI
000001bf: PUSH1 0x00
000001c1: DUP1
000001c2: REVERT
000001c3: JUMPDEST
000001c4: PUSH2 0x0162
000001c7: PUSH1 0x04
000001c9: CALLDATALOAD
000001ca: PUSH2 0x081a
000001cd: JUMP
000001ce: JUMPDEST
000001cf: STOP
000001d0: JUMPDEST
000001d1: CALLVALUE
000001d2: ISZERO
000001d3: PUSH2 0x01db
000001d6: JUMPI
000001d7: PUSH1 0x00
000001d9: DUP1
000001da: REVERT
000001db: JUMPDEST
000001dc: PUSH2 0x01ef
000001df: PUSH1 0x01
000001e1: PUSH1 0xa0
000001e3: PUSH1 0x02
000001e5: EXP
000001e6: SUB
000001e7: PUSH1 0x04
000001e9: CALLDATALOAD
000001ea: AND
000001eb: PUSH2 0x08fc
000001ee: JUMP
000001ef: JUMPDEST
000001f0: PUSH1 0x40
000001f2: MLOAD
000001f3: SWAP1
000001f4: ISZERO
000001f5: ISZERO
000001f6: DUP2
000001f7: MSTORE
000001f8: PUSH1 0x20
000001fa: ADD
000001fb: PUSH1 0x40
000001fd: MLOAD
000001fe: DUP1
000001ff: SWAP2
00000200: SUB
00000201: SWAP1
00000202: RETURN
00000203: JUMPDEST
00000204: CALLVALUE
00000205: ISZERO
00000206: PUSH2 0x020e
00000209: JUMPI
0000020a: PUSH1 0x00
0000020c: DUP1
0000020d: REVERT
0000020e: JUMPDEST
0000020f: PUSH2 0x01ef
00000212: PUSH1 0x04
00000214: CALLDATALOAD
00000215: PUSH1 0x01
00000217: PUSH1 0xa0
00000219: PUSH1 0x02
0000021b: EXP
0000021c: SUB
0000021d: PUSH1 0x24
0000021f: CALLDATALOAD
00000220: AND
00000221: PUSH2 0x0911
00000224: JUMP
00000225: JUMPDEST
00000226: PUSH1 0x40
00000228: MLOAD
00000229: SWAP1
0000022a: ISZERO
0000022b: ISZERO
0000022c: DUP2
0000022d: MSTORE
0000022e: PUSH1 0x20
00000230: ADD
00000231: PUSH1 0x40
00000233: MLOAD
00000234: DUP1
00000235: SWAP2
00000236: SUB
00000237: SWAP1
00000238: RETURN
00000239: JUMPDEST
0000023a: CALLVALUE
0000023b: ISZERO
0000023c: PUSH2 0x0244
0000023f: JUMPI
00000240: PUSH1 0x00
00000242: DUP1
00000243: REVERT
00000244: JUMPDEST
00000245: PUSH2 0x0256
00000248: PUSH1 0x04
0000024a: CALLDATALOAD
0000024b: ISZERO
0000024c: ISZERO
0000024d: PUSH1 0x24
0000024f: CALLDATALOAD
00000250: ISZERO
00000251: ISZERO
00000252: PUSH2 0x0931
00000255: JUMP
00000256: JUMPDEST
00000257: PUSH1 0x40
00000259: MLOAD
0000025a: SWAP1
0000025b: DUP2
0000025c: MSTORE
0000025d: PUSH1 0x20
0000025f: ADD
00000260: PUSH1 0x40
00000262: MLOAD
00000263: DUP1
00000264: SWAP2
00000265: SUB
00000266: SWAP1
00000267: RETURN
00000268: JUMPDEST
00000269: CALLVALUE
0000026a: ISZERO
0000026b: PUSH2 0x0273
0000026e: JUMPI
0000026f: PUSH1 0x00
00000271: DUP1
00000272: REVERT
00000273: JUMPDEST
00000274: PUSH2 0x0162
00000277: PUSH1 0x01
00000279: PUSH1 0xa0
0000027b: PUSH1 0x02
0000027d: EXP
0000027e: SUB
0000027f: PUSH1 0x04
00000281: CALLDATALOAD
00000282: AND
00000283: PUSH2 0x09a0
00000286: JUMP
00000287: JUMPDEST
00000288: STOP
00000289: JUMPDEST
0000028a: CALLVALUE
0000028b: ISZERO
0000028c: PUSH2 0x0294
0000028f: JUMPI
00000290: PUSH1 0x00
00000292: DUP1
00000293: REVERT
00000294: JUMPDEST
00000295: PUSH2 0x01ef
00000298: PUSH1 0x04
0000029a: CALLDATALOAD
0000029b: PUSH2 0x0add
0000029e: JUMP
0000029f: JUMPDEST
000002a0: PUSH1 0x40
000002a2: MLOAD
000002a3: SWAP1
000002a4: ISZERO
000002a5: ISZERO
000002a6: DUP2
000002a7: MSTORE
000002a8: PUSH1 0x20
000002aa: ADD
000002ab: PUSH1 0x40
000002ad: MLOAD
000002ae: DUP1
000002af: SWAP2
000002b0: SUB
000002b1: SWAP1
000002b2: RETURN
000002b3: JUMPDEST
000002b4: CALLVALUE
000002b5: ISZERO
000002b6: PUSH2 0x02be
000002b9: JUMPI
000002ba: PUSH1 0x00
000002bc: DUP1
000002bd: REVERT
000002be: JUMPDEST
000002bf: PUSH2 0x0256
000002c2: PUSH1 0x04
000002c4: CALLDATALOAD
000002c5: PUSH2 0x0b71
000002c8: JUMP
000002c9: JUMPDEST
000002ca: PUSH1 0x40
000002cc: MLOAD
000002cd: SWAP1
000002ce: DUP2
000002cf: MSTORE
000002d0: PUSH1 0x20
000002d2: ADD
000002d3: PUSH1 0x40
000002d5: MLOAD
000002d6: DUP1
000002d7: SWAP2
000002d8: SUB
000002d9: SWAP1
000002da: RETURN
000002db: JUMPDEST
000002dc: CALLVALUE
000002dd: ISZERO
000002de: PUSH2 0x02e6
000002e1: JUMPI
000002e2: PUSH1 0x00
000002e4: DUP1
000002e5: REVERT
000002e6: JUMPDEST
000002e7: PUSH2 0x02f1
000002ea: PUSH1 0x04
000002ec: CALLDATALOAD
000002ed: PUSH2 0x0bf0
000002f0: JUMP
000002f1: JUMPDEST
000002f2: PUSH1 0x40
000002f4: MLOAD
000002f5: PUSH1 0x01
000002f7: PUSH1 0xa0
000002f9: PUSH1 0x02
000002fb: EXP
000002fc: SUB
000002fd: DUP6
000002fe: AND
000002ff: DUP2
00000300: MSTORE
00000301: PUSH1 0x20
00000303: DUP2
00000304: ADD
00000305: DUP5
00000306: SWAP1
00000307: MSTORE
00000308: DUP2
00000309: ISZERO
0000030a: ISZERO
0000030b: PUSH1 0x60
0000030d: DUP3
0000030e: ADD
0000030f: MSTORE
00000310: PUSH1 0x80
00000312: PUSH1 0x40
00000314: DUP3
00000315: ADD
00000316: DUP2
00000317: DUP2
00000318: MSTORE
00000319: DUP5
0000031a: SLOAD
0000031b: PUSH1 0x02
0000031d: PUSH1 0x00
0000031f: NOT
00000320: PUSH2 0x0100
00000323: PUSH1 0x01
00000325: DUP5
00000326: AND
00000327: ISZERO
00000328: MUL
00000329: ADD
0000032a: SWAP1
0000032b: SWAP2
0000032c: AND
0000032d: DIV
0000032e: SWAP2
0000032f: DUP4
00000330: ADD
00000331: DUP3
00000332: SWAP1
00000333: MSTORE
00000334: SWAP1
00000335: PUSH1 0xa0
00000337: DUP4
00000338: ADD
00000339: SWAP1
0000033a: DUP6
0000033b: SWAP1
0000033c: DUP1
0000033d: ISZERO
0000033e: PUSH2 0x0388
00000341: JUMPI
00000342: DUP1
00000343: PUSH1 0x1f
00000345: LT
00000346: PUSH2 0x035d
00000349: JUMPI
0000034a: PUSH2 0x0100
0000034d: DUP1
0000034e: DUP4
0000034f: SLOAD
00000350: DIV
00000351: MUL
00000352: DUP4
00000353: MSTORE
00000354: SWAP2
00000355: PUSH1 0x20
00000357: ADD
00000358: SWAP2
00000359: PUSH2 0x0388
0000035c: JUMP
0000035d: JUMPDEST
0000035e: DUP3
0000035f: ADD
00000360: SWAP2
00000361: SWAP1
00000362: PUSH1 0x00
00000364: MSTORE
00000365: PUSH1 0x20
00000367: PUSH1 0x00
00000369: KECCAK256
0000036a: SWAP1
0000036b: JUMPDEST
0000036c: DUP2
0000036d: SLOAD
0000036e: DUP2
0000036f: MSTORE
00000370: SWAP1
00000371: PUSH1 0x01
00000373: ADD
00000374: SWAP1
00000375: PUSH1 0x20
00000377: ADD
00000378: DUP1
00000379: DUP4
0000037a: GT
0000037b: PUSH2 0x036b
0000037e: JUMPI
0000037f: DUP3
00000380: SWAP1
00000381: SUB
00000382: PUSH1 0x1f
00000384: AND
00000385: DUP3
00000386: ADD
00000387: SWAP2
00000388: JUMPDEST
00000389: POP
0000038a: POP
0000038b: SWAP6
0000038c: POP
0000038d: POP
0000038e: POP
0000038f: POP
00000390: POP
00000391: POP
00000392: PUSH1 0x40
00000394: MLOAD
00000395: DUP1
00000396: SWAP2
00000397: SUB
00000398: SWAP1
00000399: RETURN
0000039a: JUMPDEST
0000039b: CALLVALUE
0000039c: ISZERO
0000039d: PUSH2 0x03a5
000003a0: JUMPI
000003a1: PUSH1 0x00
000003a3: DUP1
000003a4: REVERT
000003a5: JUMPDEST
000003a6: PUSH2 0x03ad
000003a9: PUSH2 0x0c24
000003ac: JUMP
000003ad: JUMPDEST
000003ae: PUSH1 0x40
000003b0: MLOAD
000003b1: PUSH1 0x20
000003b3: DUP1
000003b4: DUP3
000003b5: MSTORE
000003b6: DUP2
000003b7: SWAP1
000003b8: DUP2
000003b9: ADD
000003ba: DUP4
000003bb: DUP2
000003bc: DUP2
000003bd: MLOAD
000003be: DUP2
000003bf: MSTORE
000003c0: PUSH1 0x20
000003c2: ADD
000003c3: SWAP2
000003c4: POP
000003c5: DUP1
000003c6: MLOAD
000003c7: SWAP1
000003c8: PUSH1 0x20
000003ca: ADD
000003cb: SWAP1
000003cc: PUSH1 0x20
000003ce: MUL
000003cf: DUP1
000003d0: DUP4
000003d1: DUP4
000003d2: PUSH1 0x00
000003d4: JUMPDEST
000003d5: DUP4
000003d6: DUP2
000003d7: LT
000003d8: ISZERO
000003d9: PUSH2 0x03ed
000003dc: JUMPI
000003dd: DUP1
000003de: DUP3
000003df: ADD
000003e0: MLOAD
000003e1: DUP2
000003e2: DUP5
000003e3: ADD
000003e4: MSTORE
000003e5: JUMPDEST
000003e6: PUSH1 0x20
000003e8: ADD
000003e9: PUSH2 0x03d4
000003ec: JUMP
000003ed: JUMPDEST
000003ee: POP
000003ef: POP
000003f0: POP
000003f1: POP
000003f2: SWAP1
000003f3: POP
000003f4: ADD
000003f5: SWAP3
000003f6: POP
000003f7: POP
000003f8: POP
000003f9: PUSH1 0x40
000003fb: MLOAD
000003fc: DUP1
000003fd: SWAP2
000003fe: SUB
000003ff: SWAP1
00000400: RETURN
00000401: JUMPDEST
00000402: CALLVALUE
00000403: ISZERO
00000404: PUSH2 0x040c
00000407: JUMPI
00000408: PUSH1 0x00
0000040a: DUP1
0000040b: REVERT
0000040c: JUMPDEST
0000040d: PUSH2 0x03ad
00000410: PUSH1 0x04
00000412: CALLDATALOAD
00000413: PUSH1 0x24
00000415: CALLDATALOAD
00000416: PUSH1 0x44
00000418: CALLDATALOAD
00000419: ISZERO
0000041a: ISZERO
0000041b: PUSH1 0x64
0000041d: CALLDATALOAD
0000041e: ISZERO
0000041f: ISZERO
00000420: PUSH2 0x0c8d
00000423: JUMP
00000424: JUMPDEST
00000425: PUSH1 0x40
00000427: MLOAD
00000428: PUSH1 0x20
0000042a: DUP1
0000042b: DUP3
0000042c: MSTORE
0000042d: DUP2
0000042e: SWAP1
0000042f: DUP2
00000430: ADD
00000431: DUP4
00000432: DUP2
00000433: DUP2
00000434: MLOAD
00000435: DUP2
00000436: MSTORE
00000437: PUSH1 0x20
00000439: ADD
0000043a: SWAP2
0000043b: POP
0000043c: DUP1
0000043d: MLOAD
0000043e: SWAP1
0000043f: PUSH1 0x20
00000441: ADD
00000442: SWAP1
00000443: PUSH1 0x20
00000445: MUL
00000446: DUP1
00000447: DUP4
00000448: DUP4
00000449: PUSH1 0x00
0000044b: JUMPDEST
0000044c: DUP4
0000044d: DUP2
0000044e: LT
0000044f: ISZERO
00000450: PUSH2 0x03ed
00000453: JUMPI
00000454: DUP1
00000455: DUP3
00000456: ADD
00000457: MLOAD
00000458: DUP2
00000459: DUP5
0000045a: ADD
0000045b: MSTORE
0000045c: JUMPDEST
0000045d: PUSH1 0x20
0000045f: ADD
00000460: PUSH2 0x03d4
00000463: JUMP
00000464: JUMPDEST
00000465: POP
00000466: POP
00000467: POP
00000468: POP
00000469: SWAP1
0000046a: POP
0000046b: ADD
0000046c: SWAP3
0000046d: POP
0000046e: POP
0000046f: POP
00000470: PUSH1 0x40
00000472: MLOAD
00000473: DUP1
00000474: SWAP2
00000475: SUB
00000476: SWAP1
00000477: RETURN
00000478: JUMPDEST
00000479: CALLVALUE
0000047a: ISZERO
0000047b: PUSH2 0x0483
0000047e: JUMPI
0000047f: PUSH1 0x00
00000481: DUP1
00000482: REVERT
00000483: JUMPDEST
00000484: PUSH2 0x03ad
00000487: PUSH1 0x04
00000489: CALLDATALOAD
0000048a: PUSH2 0x0dbb
0000048d: JUMP
0000048e: JUMPDEST
0000048f: PUSH1 0x40
00000491: MLOAD
00000492: PUSH1 0x20
00000494: DUP1
00000495: DUP3
00000496: MSTORE
00000497: DUP2
00000498: SWAP1
00000499: DUP2
0000049a: ADD
0000049b: DUP4
0000049c: DUP2
0000049d: DUP2
0000049e: MLOAD
0000049f: DUP2
000004a0: MSTORE
000004a1: PUSH1 0x20
000004a3: ADD
000004a4: SWAP2
000004a5: POP
000004a6: DUP1
000004a7: MLOAD
000004a8: SWAP1
000004a9: PUSH1 0x20
000004ab: ADD
000004ac: SWAP1
000004ad: PUSH1 0x20
000004af: MUL
000004b0: DUP1
000004b1: DUP4
000004b2: DUP4
000004b3: PUSH1 0x00
000004b5: JUMPDEST
000004b6: DUP4
000004b7: DUP2
000004b8: LT
000004b9: ISZERO
000004ba: PUSH2 0x03ed
000004bd: JUMPI
000004be: DUP1
000004bf: DUP3
000004c0: ADD
000004c1: MLOAD
000004c2: DUP2
000004c3: DUP5
000004c4: ADD
000004c5: MSTORE
000004c6: JUMPDEST
000004c7: PUSH1 0x20
000004c9: ADD
000004ca: PUSH2 0x03d4
000004cd: JUMP
000004ce: JUMPDEST
000004cf: POP
000004d0: POP
000004d1: POP
000004d2: POP
000004d3: SWAP1
000004d4: POP
000004d5: ADD
000004d6: SWAP3
000004d7: POP
000004d8: POP
000004d9: POP
000004da: PUSH1 0x40
000004dc: MLOAD
000004dd: DUP1
000004de: SWAP2
000004df: SUB
000004e0: SWAP1
000004e1: RETURN
000004e2: JUMPDEST
000004e3: CALLVALUE
000004e4: ISZERO
000004e5: PUSH2 0x04ed
000004e8: JUMPI
000004e9: PUSH1 0x00
000004eb: DUP1
000004ec: REVERT
000004ed: JUMPDEST
000004ee: PUSH2 0x0256
000004f1: PUSH2 0x0f3d
000004f4: JUMP
000004f5: JUMPDEST
000004f6: PUSH1 0x40
000004f8: MLOAD
000004f9: SWAP1
000004fa: DUP2
000004fb: MSTORE
000004fc: PUSH1 0x20
000004fe: ADD
000004ff: PUSH1 0x40
00000501: MLOAD
00000502: DUP1
00000503: SWAP2
00000504: SUB
00000505: SWAP1
00000506: RETURN
00000507: JUMPDEST
00000508: CALLVALUE
00000509: ISZERO
0000050a: PUSH2 0x0512
0000050d: JUMPI
0000050e: PUSH1 0x00
00000510: DUP1
00000511: REVERT
00000512: JUMPDEST
00000513: PUSH2 0x0162
00000516: PUSH1 0x04
00000518: CALLDATALOAD
00000519: PUSH2 0x0f43
0000051c: JUMP
0000051d: JUMPDEST
0000051e: STOP
0000051f: JUMPDEST
00000520: CALLVALUE
00000521: ISZERO
00000522: PUSH2 0x052a
00000525: JUMPI
00000526: PUSH1 0x00
00000528: DUP1
00000529: REVERT
0000052a: JUMPDEST
0000052b: PUSH2 0x0162
0000052e: PUSH1 0x04
00000530: CALLDATALOAD
00000531: PUSH2 0x0fd9
00000534: JUMP
00000535: JUMPDEST
00000536: STOP
00000537: JUMPDEST
00000538: CALLVALUE
00000539: ISZERO
0000053a: PUSH2 0x0542
0000053d: JUMPI
0000053e: PUSH1 0x00
00000540: DUP1
00000541: REVERT
00000542: JUMPDEST
00000543: PUSH2 0x0256
00000546: PUSH1 0x04
00000548: DUP1
00000549: CALLDATALOAD
0000054a: PUSH1 0x01
0000054c: PUSH1 0xa0
0000054e: PUSH1 0x02
00000550: EXP
00000551: SUB
00000552: AND
00000553: SWAP1
00000554: PUSH1 0x24
00000556: DUP1
00000557: CALLDATALOAD
00000558: SWAP2
00000559: SWAP1
0000055a: PUSH1 0x64
0000055c: SWAP1
0000055d: PUSH1 0x44
0000055f: CALLDATALOAD
00000560: SWAP1
00000561: DUP2
00000562: ADD
00000563: SWAP1
00000564: DUP4
00000565: ADD
00000566: CALLDATALOAD
00000567: DUP1
00000568: PUSH1 0x20
0000056a: PUSH1 0x1f
0000056c: DUP3
0000056d: ADD
0000056e: DUP2
0000056f: SWAP1
00000570: DIV
00000571: DUP2
00000572: MUL
00000573: ADD
00000574: PUSH1 0x40
00000576: MLOAD
00000577: SWAP1
00000578: DUP2
00000579: ADD
0000057a: PUSH1 0x40
0000057c: MSTORE
0000057d: DUP2
0000057e: DUP2
0000057f: MSTORE
00000580: SWAP3
00000581: SWAP2
00000582: SWAP1
00000583: PUSH1 0x20
00000585: DUP5
00000586: ADD
00000587: DUP4
00000588: DUP4
00000589: DUP1
0000058a: DUP3
0000058b: DUP5
0000058c: CALLDATACOPY
0000058d: POP
0000058e: SWAP5
0000058f: SWAP7
00000590: POP
00000591: PUSH2 0x10cb
00000594: SWAP6
00000595: POP
00000596: POP
00000597: POP
00000598: POP
00000599: POP
0000059a: POP
0000059b: JUMP
0000059c: JUMPDEST
0000059d: PUSH1 0x40
0000059f: MLOAD
000005a0: SWAP1
000005a1: DUP2
000005a2: MSTORE
000005a3: PUSH1 0x20
000005a5: ADD
000005a6: PUSH1 0x40
000005a8: MLOAD
000005a9: DUP1
000005aa: SWAP2
000005ab: SUB
000005ac: SWAP1
000005ad: RETURN
000005ae: JUMPDEST
000005af: CALLVALUE
000005b0: ISZERO
000005b1: PUSH2 0x05b9
000005b4: JUMPI
000005b5: PUSH1 0x00
000005b7: DUP1
000005b8: REVERT
000005b9: JUMPDEST
000005ba: PUSH2 0x0256
000005bd: PUSH2 0x10eb
000005c0: JUMP
000005c1: JUMPDEST
000005c2: PUSH1 0x40
000005c4: MLOAD
000005c5: SWAP1
000005c6: DUP2
000005c7: MSTORE
000005c8: PUSH1 0x20
000005ca: ADD
000005cb: PUSH1 0x40
000005cd: MLOAD
000005ce: DUP1
000005cf: SWAP2
000005d0: SUB
000005d1: SWAP1
000005d2: RETURN
000005d3: JUMPDEST
000005d4: CALLVALUE
000005d5: ISZERO
000005d6: PUSH2 0x05de
000005d9: JUMPI
000005da: PUSH1 0x00
000005dc: DUP1
000005dd: REVERT
000005de: JUMPDEST
000005df: PUSH2 0x0256
000005e2: PUSH2 0x10f0
000005e5: JUMP
000005e6: JUMPDEST
000005e7: PUSH1 0x40
000005e9: MLOAD
000005ea: SWAP1
000005eb: DUP2
000005ec: MSTORE
000005ed: PUSH1 0x20
000005ef: ADD
000005f0: PUSH1 0x40
000005f2: MLOAD
000005f3: DUP1
000005f4: SWAP2
000005f5: SUB
000005f6: SWAP1
000005f7: RETURN
000005f8: JUMPDEST
000005f9: CALLVALUE
000005fa: ISZERO
000005fb: PUSH2 0x0603
000005fe: JUMPI
000005ff: PUSH1 0x00
00000601: DUP1
00000602: REVERT
00000603: JUMPDEST
00000604: PUSH2 0x0162
00000607: PUSH1 0x01
00000609: PUSH1 0xa0
0000060b: PUSH1 0x02
0000060d: EXP
0000060e: SUB
0000060f: PUSH1 0x04
00000611: CALLDATALOAD
00000612: DUP2
00000613: AND
00000614: SWAP1
00000615: PUSH1 0x24
00000617: CALLDATALOAD
00000618: AND
00000619: PUSH2 0x10f6
0000061c: JUMP
0000061d: JUMPDEST
0000061e: STOP
0000061f: JUMPDEST
00000620: CALLVALUE
00000621: ISZERO
00000622: PUSH2 0x062a
00000625: JUMPI
00000626: PUSH1 0x00
00000628: DUP1
00000629: REVERT
0000062a: JUMPDEST
0000062b: PUSH2 0x0162
0000062e: PUSH1 0x04
00000630: CALLDATALOAD
00000631: PUSH2 0x12b7
00000634: JUMP
00000635: JUMPDEST
00000636: STOP
00000637: JUMPDEST
00000638: PUSH1 0x03
0000063a: DUP1
0000063b: SLOAD
0000063c: DUP3
0000063d: SWAP1
0000063e: DUP2
0000063f: LT
00000640: PUSH2 0x0645
00000643: JUMPI
00000644: INVALID
00000645: JUMPDEST
00000646: SWAP1
00000647: PUSH1 0x00
00000649: MSTORE
0000064a: PUSH1 0x20
0000064c: PUSH1 0x00
0000064e: KECCAK256
0000064f: SWAP1
00000650: ADD
00000651: PUSH1 0x00
00000653: JUMPDEST
00000654: SWAP2
00000655: POP
00000656: SLOAD
00000657: SWAP1
00000658: PUSH2 0x0100
0000065b: EXP
0000065c: SWAP1
0000065d: DIV
0000065e: PUSH1 0x01
00000660: PUSH1 0xa0
00000662: PUSH1 0x02
00000664: EXP
00000665: SUB
00000666: AND
00000667: DUP2
00000668: JUMP
00000669: JUMPDEST
0000066a: PUSH1 0x00
0000066c: ADDRESS
0000066d: PUSH1 0x01
0000066f: PUSH1 0xa0
00000671: PUSH1 0x02
00000673: EXP
00000674: SUB
00000675: AND
00000676: CALLER
00000677: PUSH1 0x01
00000679: PUSH1 0xa0
0000067b: PUSH1 0x02
0000067d: EXP
0000067e: SUB
0000067f: AND
00000680: EQ
00000681: ISZERO
00000682: ISZERO
00000683: PUSH2 0x068b
00000686: JUMPI
00000687: PUSH1 0x00
00000689: DUP1
0000068a: REVERT
0000068b: JUMPDEST
0000068c: PUSH1 0x01
0000068e: PUSH1 0xa0
00000690: PUSH1 0x02
00000692: EXP
00000693: SUB
00000694: DUP3
00000695: AND
00000696: PUSH1 0x00
00000698: SWAP1
00000699: DUP2
0000069a: MSTORE
0000069b: PUSH1 0x02
0000069d: PUSH1 0x20
0000069f: MSTORE
000006a0: PUSH1 0x40
000006a2: SWAP1
000006a3: KECCAK256
000006a4: SLOAD
000006a5: DUP3
000006a6: SWAP1
000006a7: PUSH1 0xff
000006a9: AND
000006aa: ISZERO
000006ab: ISZERO
000006ac: PUSH2 0x06b4
000006af: JUMPI
000006b0: PUSH1 0x00
000006b2: DUP1
000006b3: REVERT
000006b4: JUMPDEST
000006b5: PUSH1 0x01
000006b7: PUSH1 0xa0
000006b9: PUSH1 0x02
000006bb: EXP
000006bc: SUB
000006bd: DUP4
000006be: AND
000006bf: PUSH1 0x00
000006c1: SWAP1
000006c2: DUP2
000006c3: MSTORE
000006c4: PUSH1 0x02
000006c6: PUSH1 0x20
000006c8: MSTORE
000006c9: PUSH1 0x40
000006cb: DUP2
000006cc: KECCAK256
000006cd: DUP1
000006ce: SLOAD
000006cf: PUSH1 0xff
000006d1: NOT
000006d2: AND
000006d3: SWAP1
000006d4: SSTORE
000006d5: SWAP2
000006d6: POP
000006d7: JUMPDEST
000006d8: PUSH1 0x03
000006da: SLOAD
000006db: PUSH1 0x00
000006dd: NOT
000006de: ADD
000006df: DUP3
000006e0: LT
000006e1: ISZERO
000006e2: PUSH2 0x07af
000006e5: JUMPI
000006e6: DUP3
000006e7: PUSH1 0x01
000006e9: PUSH1 0xa0
000006eb: PUSH1 0x02
000006ed: EXP
000006ee: SUB
000006ef: AND
000006f0: PUSH1 0x03
000006f2: DUP4
000006f3: DUP2
000006f4: SLOAD
000006f5: DUP2
000006f6: LT
000006f7: ISZERO
000006f8: ISZERO
000006f9: PUSH2 0x06fe
000006fc: JUMPI
000006fd: INVALID
000006fe: JUMPDEST
000006ff: SWAP1
00000700: PUSH1 0x00
00000702: MSTORE
00000703: PUSH1 0x20
00000705: PUSH1 0x00
00000707: KECCAK256
00000708: SWAP1
00000709: ADD
0000070a: PUSH1 0x00
0000070c: JUMPDEST
0000070d: SWAP1
0000070e: SLOAD
0000070f: SWAP1
00000710: PUSH2 0x0100
00000713: EXP
00000714: SWAP1
00000715: DIV
00000716: PUSH1 0x01
00000718: PUSH1 0xa0
0000071a: PUSH1 0x02
0000071c: EXP
0000071d: SUB
0000071e: AND
0000071f: PUSH1 0x01
00000721: PUSH1 0xa0
00000723: PUSH1 0x02
00000725: EXP
00000726: SUB
00000727: AND
00000728: EQ
00000729: ISZERO
0000072a: PUSH2 0x07a3
0000072d: JUMPI
0000072e: PUSH1 0x03
00000730: DUP1
00000731: SLOAD
00000732: PUSH1 0x00
00000734: NOT
00000735: DUP2
00000736: ADD
00000737: SWAP1
00000738: DUP2
00000739: LT
0000073a: PUSH2 0x073f
0000073d: JUMPI
0000073e: INVALID
0000073f: JUMPDEST
00000740: SWAP1
00000741: PUSH1 0x00
00000743: MSTORE
00000744: PUSH1 0x20
00000746: PUSH1 0x00
00000748: KECCAK256
00000749: SWAP1
0000074a: ADD
0000074b: PUSH1 0x00
0000074d: JUMPDEST
0000074e: SWAP1
0000074f: SLOAD
00000750: SWAP1
00000751: PUSH2 0x0100
00000754: EXP
00000755: SWAP1
00000756: DIV
00000757: PUSH1 0x01
00000759: PUSH1 0xa0
0000075b: PUSH1 0x02
0000075d: EXP
0000075e: SUB
0000075f: AND
00000760: PUSH1 0x03
00000762: DUP4
00000763: DUP2
00000764: SLOAD
00000765: DUP2
00000766: LT
00000767: ISZERO
00000768: ISZERO
00000769: PUSH2 0x076e
0000076c: JUMPI
0000076d: INVALID
0000076e: JUMPDEST
0000076f: SWAP1
00000770: PUSH1 0x00
00000772: MSTORE
00000773: PUSH1 0x20
00000775: PUSH1 0x00
00000777: KECCAK256
00000778: SWAP1
00000779: ADD
0000077a: PUSH1 0x00
0000077c: JUMPDEST
0000077d: PUSH2 0x0100
00000780: EXP
00000781: DUP2
00000782: SLOAD
00000783: DUP2
00000784: PUSH1 0x01
00000786: PUSH1 0xa0
00000788: PUSH1 0x02
0000078a: EXP
0000078b: SUB
0000078c: MUL
0000078d: NOT
0000078e: AND
0000078f: SWAP1
00000790: DUP4
00000791: PUSH1 0x01
00000793: PUSH1 0xa0
00000795: PUSH1 0x02
00000797: EXP
00000798: SUB
00000799: AND
0000079a: MUL
0000079b: OR
0000079c: SWAP1
0000079d: SSTORE
0000079e: POP
0000079f: PUSH2 0x07af
000007a2: JUMP
000007a3: JUMPDEST
000007a4: JUMPDEST
000007a5: PUSH1 0x01
000007a7: SWAP1
000007a8: SWAP2
000007a9: ADD
000007aa: SWAP1
000007ab: PUSH2 0x06d7
000007ae: JUMP
000007af: JUMPDEST
000007b0: PUSH1 0x03
000007b2: DUP1
000007b3: SLOAD
000007b4: PUSH1 0x00
000007b6: NOT
000007b7: ADD
000007b8: SWAP1
000007b9: PUSH2 0x07c2
000007bc: SWAP1
000007bd: DUP3
000007be: PUSH2 0x15cd
000007c1: JUMP
000007c2: JUMPDEST
000007c3: POP
000007c4: PUSH1 0x03
000007c6: SLOAD
000007c7: PUSH1 0x04
000007c9: SLOAD
000007ca: GT
000007cb: ISZERO
000007cc: PUSH2 0x07db
000007cf: JUMPI
000007d0: PUSH1 0x03
000007d2: SLOAD
000007d3: PUSH2 0x07db
000007d6: SWAP1
000007d7: PUSH2 0x0f43
000007da: JUMP
000007db: JUMPDEST
000007dc: JUMPDEST
000007dd: DUP3
000007de: PUSH1 0x01
000007e0: PUSH1 0xa0
000007e2: PUSH1 0x02
000007e4: EXP
000007e5: SUB
000007e6: AND
000007e7: PUSH32 0x8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b90
00000808: PUSH1 0x40
0000080a: MLOAD
0000080b: PUSH1 0x40
0000080d: MLOAD
0000080e: DUP1
0000080f: SWAP2
00000810: SUB
00000811: SWAP1
00000812: LOG2
00000813: JUMPDEST
00000814: JUMPDEST
00000815: POP
00000816: JUMPDEST
00000817: POP
00000818: POP
00000819: JUMP
0000081a: JUMPDEST
0000081b: CALLER
0000081c: PUSH1 0x01
0000081e: PUSH1 0xa0
00000820: PUSH1 0x02
00000822: EXP
00000823: SUB
00000824: DUP2
00000825: AND
00000826: PUSH1 0x00
00000828: SWAP1
00000829: DUP2
0000082a: MSTORE
0000082b: PUSH1 0x02
0000082d: PUSH1 0x20
0000082f: MSTORE
00000830: PUSH1 0x40
00000832: SWAP1
00000833: KECCAK256
00000834: SLOAD
00000835: PUSH1 0xff
00000837: AND
00000838: ISZERO
00000839: ISZERO
0000083a: PUSH2 0x0842
0000083d: JUMPI
0000083e: PUSH1 0x00
00000840: DUP1
00000841: REVERT
00000842: JUMPDEST
00000843: PUSH1 0x00
00000845: DUP3
00000846: DUP2
00000847: MSTORE
00000848: PUSH1 0x01
0000084a: PUSH1 0x20
0000084c: SWAP1
0000084d: DUP2
0000084e: MSTORE
0000084f: PUSH1 0x40
00000851: DUP1
00000852: DUP4
00000853: KECCAK256
00000854: CALLER
00000855: PUSH1 0x01
00000857: PUSH1 0xa0
00000859: PUSH1 0x02
0000085b: EXP
0000085c: SUB
0000085d: DUP2
0000085e: AND
0000085f: DUP6
00000860: MSTORE
00000861: SWAP3
00000862: MSTORE
00000863: SWAP1
00000864: SWAP2
00000865: KECCAK256
00000866: SLOAD
00000867: DUP4
00000868: SWAP2
00000869: SWAP1
0000086a: PUSH1 0xff
0000086c: AND
0000086d: ISZERO
0000086e: ISZERO
0000086f: PUSH2 0x0877
00000872: JUMPI
00000873: PUSH1 0x00
00000875: DUP1
00000876: REVERT
00000877: JUMPDEST
00000878: PUSH1 0x00
0000087a: DUP5
0000087b: DUP2
0000087c: MSTORE
0000087d: PUSH1 0x20
0000087f: DUP2
00000880: SWAP1
00000881: MSTORE
00000882: PUSH1 0x40
00000884: SWAP1
00000885: KECCAK256
00000886: PUSH1 0x03
00000888: ADD
00000889: SLOAD
0000088a: DUP5
0000088b: SWAP1
0000088c: PUSH1 0xff
0000088e: AND
0000088f: ISZERO
00000890: PUSH2 0x0898
00000893: JUMPI
00000894: PUSH1 0x00
00000896: DUP1
00000897: REVERT
00000898: JUMPDEST
00000899: PUSH1 0x00
0000089b: DUP6
0000089c: DUP2
0000089d: MSTORE
0000089e: PUSH1 0x01
000008a0: PUSH1 0x20
000008a2: SWAP1
000008a3: DUP2
000008a4: MSTORE
000008a5: PUSH1 0x40
000008a7: DUP1
000008a8: DUP4
000008a9: KECCAK256
000008aa: PUSH1 0x01
000008ac: PUSH1 0xa0
000008ae: PUSH1 0x02
000008b0: EXP
000008b1: SUB
000008b2: CALLER
000008b3: AND
000008b4: DUP1
000008b5: DUP6
000008b6: MSTORE
000008b7: SWAP3
000008b8: MSTORE
000008b9: SWAP2
000008ba: DUP3
000008bb: SWAP1
000008bc: KECCAK256
000008bd: DUP1
000008be: SLOAD
000008bf: PUSH1 0xff
000008c1: NOT
000008c2: AND
000008c3: SWAP1
000008c4: SSTORE
000008c5: DUP7
000008c6: SWAP2
000008c7: PUSH32 0xf6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e9
000008e8: SWAP1
000008e9: MLOAD
000008ea: PUSH1 0x40
000008ec: MLOAD
000008ed: DUP1
000008ee: SWAP2
000008ef: SUB
000008f0: SWAP1
000008f1: LOG3
000008f2: JUMPDEST
000008f3: JUMPDEST
000008f4: POP
000008f5: JUMPDEST
000008f6: POP
000008f7: POP
000008f8: JUMPDEST
000008f9: POP
000008fa: POP
000008fb: JUMP
000008fc: JUMPDEST
000008fd: PUSH1 0x02
000008ff: PUSH1 0x20
00000901: MSTORE
00000902: PUSH1 0x00
00000904: SWAP1
00000905: DUP2
00000906: MSTORE
00000907: PUSH1 0x40
00000909: SWAP1
0000090a: KECCAK256
0000090b: SLOAD
0000090c: PUSH1 0xff
0000090e: AND
0000090f: DUP2
00000910: JUMP
00000911: JUMPDEST
00000912: PUSH1 0x01
00000914: PUSH1 0x20
00000916: SWAP1
00000917: DUP2
00000918: MSTORE
00000919: PUSH1 0x00
0000091b: SWAP3
0000091c: DUP4
0000091d: MSTORE
0000091e: PUSH1 0x40
00000920: DUP1
00000921: DUP5
00000922: KECCAK256
00000923: SWAP1
00000924: SWAP2
00000925: MSTORE
00000926: SWAP1
00000927: DUP3
00000928: MSTORE
00000929: SWAP1
0000092a: KECCAK256
0000092b: SLOAD
0000092c: PUSH1 0xff
0000092e: AND
0000092f: DUP2
00000930: JUMP
00000931: JUMPDEST
00000932: PUSH1 0x00
00000934: DUP1
00000935: JUMPDEST
00000936: PUSH1 0x05
00000938: SLOAD
00000939: DUP2
0000093a: LT
0000093b: ISZERO
0000093c: PUSH2 0x0998
0000093f: JUMPI
00000940: DUP4
00000941: DUP1
00000942: ISZERO
00000943: PUSH2 0x095e
00000946: JUMPI
00000947: POP
00000948: PUSH1 0x00
0000094a: DUP2
0000094b: DUP2
0000094c: MSTORE
0000094d: PUSH1 0x20
0000094f: DUP2
00000950: SWAP1
00000951: MSTORE
00000952: PUSH1 0x40
00000954: SWAP1
00000955: KECCAK256
00000956: PUSH1 0x03
00000958: ADD
00000959: SLOAD
0000095a: PUSH1 0xff
0000095c: AND
0000095d: ISZERO
0000095e: JUMPDEST
0000095f: DUP1
00000960: PUSH2 0x0982
00000963: JUMPI
00000964: POP
00000965: DUP3
00000966: DUP1
00000967: ISZERO
00000968: PUSH2 0x0982
0000096b: JUMPI
0000096c: POP
0000096d: PUSH1 0x00
0000096f: DUP2
00000970: DUP2
00000971: MSTORE
00000972: PUSH1 0x20
00000974: DUP2
00000975: SWAP1
00000976: MSTORE
00000977: PUSH1 0x40
00000979: SWAP1
0000097a: KECCAK256
0000097b: PUSH1 0x03
0000097d: ADD
0000097e: SLOAD
0000097f: PUSH1 0xff
00000981: AND
00000982: JUMPDEST
00000983: JUMPDEST
00000984: ISZERO
00000985: PUSH2 0x098f
00000988: JUMPI
00000989: PUSH1 0x01
0000098b: DUP3
0000098c: ADD
0000098d: SWAP2
0000098e: POP
0000098f: JUMPDEST
00000990: JUMPDEST
00000991: PUSH1 0x01
00000993: ADD
00000994: PUSH2 0x0935
00000997: JUMP
00000998: JUMPDEST
00000999: JUMPDEST
0000099a: POP
0000099b: SWAP3
0000099c: SWAP2
0000099d: POP
0000099e: POP
0000099f: JUMP
000009a0: JUMPDEST
000009a1: ADDRESS
000009a2: PUSH1 0x01
000009a4: PUSH1 0xa0
000009a6: PUSH1 0x02
000009a8: EXP
000009a9: SUB
000009aa: AND
000009ab: CALLER
000009ac: PUSH1 0x01
000009ae: PUSH1 0xa0
000009b0: PUSH1 0x02
000009b2: EXP
000009b3: SUB
000009b4: AND
000009b5: EQ
000009b6: ISZERO
000009b7: ISZERO
000009b8: PUSH2 0x09c0
000009bb: JUMPI
000009bc: PUSH1 0x00
000009be: DUP1
000009bf: REVERT
000009c0: JUMPDEST
000009c1: PUSH1 0x01
000009c3: PUSH1 0xa0
000009c5: PUSH1 0x02
000009c7: EXP
000009c8: SUB
000009c9: DUP2
000009ca: AND
000009cb: PUSH1 0x00
000009cd: SWAP1
000009ce: DUP2
000009cf: MSTORE
000009d0: PUSH1 0x02
000009d2: PUSH1 0x20
000009d4: MSTORE
000009d5: PUSH1 0x40
000009d7: SWAP1
000009d8: KECCAK256
000009d9: SLOAD
000009da: DUP2
000009db: SWAP1
000009dc: PUSH1 0xff
000009de: AND
000009df: ISZERO
000009e0: PUSH2 0x09e8
000009e3: JUMPI
000009e4: PUSH1 0x00
000009e6: DUP1
000009e7: REVERT
000009e8: JUMPDEST
000009e9: DUP2
000009ea: PUSH1 0x01
000009ec: PUSH1 0xa0
000009ee: PUSH1 0x02
000009f0: EXP
000009f1: SUB
000009f2: DUP2
000009f3: AND
000009f4: ISZERO
000009f5: ISZERO
000009f6: PUSH2 0x09fe
000009f9: JUMPI
000009fa: PUSH1 0x00
000009fc: DUP1
000009fd: REVERT
000009fe: JUMPDEST
000009ff: PUSH1 0x03
00000a01: DUP1
00000a02: SLOAD
00000a03: SWAP1
00000a04: POP
00000a05: PUSH1 0x01
00000a07: ADD
00000a08: PUSH1 0x04
00000a0a: SLOAD
00000a0b: PUSH1 0x32
00000a0d: DUP3
00000a0e: GT
00000a0f: ISZERO
00000a10: DUP1
00000a11: ISZERO
00000a12: PUSH2 0x0a1b
00000a15: JUMPI
00000a16: POP
00000a17: DUP2
00000a18: DUP2
00000a19: GT
00000a1a: ISZERO
00000a1b: JUMPDEST
00000a1c: DUP1
00000a1d: ISZERO
00000a1e: PUSH2 0x0a26
00000a21: JUMPI
00000a22: POP
00000a23: DUP1
00000a24: ISZERO
00000a25: ISZERO
00000a26: JUMPDEST
00000a27: DUP1
00000a28: ISZERO
00000a29: PUSH2 0x0a31
00000a2c: JUMPI
00000a2d: POP
00000a2e: DUP2
00000a2f: ISZERO
00000a30: ISZERO
00000a31: JUMPDEST
00000a32: ISZERO
00000a33: ISZERO
00000a34: PUSH2 0x0a3c
00000a37: JUMPI
00000a38: PUSH1 0x00
00000a3a: DUP1
00000a3b: REVERT
00000a3c: JUMPDEST
00000a3d: PUSH1 0x01
00000a3f: PUSH1 0xa0
00000a41: PUSH1 0x02
00000a43: EXP
00000a44: SUB
00000a45: DUP6
00000a46: AND
00000a47: PUSH1 0x00
00000a49: SWAP1
00000a4a: DUP2
00000a4b: MSTORE
00000a4c: PUSH1 0x02
00000a4e: PUSH1 0x20
00000a50: MSTORE
00000a51: PUSH1 0x40
00000a53: SWAP1
00000a54: KECCAK256
00000a55: DUP1
00000a56: SLOAD
00000a57: PUSH1 0xff
00000a59: NOT
00000a5a: AND
00000a5b: PUSH1 0x01
00000a5d: SWAP1
00000a5e: DUP2
00000a5f: OR
00000a60: SWAP1
00000a61: SWAP2
00000a62: SSTORE
00000a63: PUSH1 0x03
00000a65: DUP1
00000a66: SLOAD
00000a67: SWAP1
00000a68: SWAP2
00000a69: DUP2
00000a6a: ADD
00000a6b: PUSH2 0x0a74
00000a6e: DUP4
00000a6f: DUP3
00000a70: PUSH2 0x15cd
00000a73: JUMP
00000a74: JUMPDEST
00000a75: SWAP2
00000a76: PUSH1 0x00
00000a78: MSTORE
00000a79: PUSH1 0x20
00000a7b: PUSH1 0x00
00000a7d: KECCAK256
00000a7e: SWAP1
00000a7f: ADD
00000a80: PUSH1 0x00
00000a82: JUMPDEST
00000a83: DUP2
00000a84: SLOAD
00000a85: PUSH1 0x01
00000a87: PUSH1 0xa0
00000a89: PUSH1 0x02
00000a8b: EXP
00000a8c: SUB
00000a8d: DUP1
00000a8e: DUP11
00000a8f: AND
00000a90: PUSH2 0x0100
00000a93: SWAP4
00000a94: SWAP1
00000a95: SWAP4
00000a96: EXP
00000a97: DUP4
00000a98: DUP2
00000a99: MUL
00000a9a: SWAP2
00000a9b: MUL
00000a9c: NOT
00000a9d: SWAP1
00000a9e: SWAP2
00000a9f: AND
00000aa0: OR
00000aa1: SWAP1
00000aa2: SWAP2
00000aa3: SSTORE
00000aa4: SWAP1
00000aa5: POP
00000aa6: PUSH32 0xf39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d
00000ac7: PUSH1 0x40
00000ac9: MLOAD
00000aca: PUSH1 0x40
00000acc: MLOAD
00000acd: DUP1
00000ace: SWAP2
00000acf: SUB
00000ad0: SWAP1
00000ad1: LOG2
00000ad2: JUMPDEST
00000ad3: JUMPDEST
00000ad4: POP
00000ad5: POP
00000ad6: JUMPDEST
00000ad7: POP
00000ad8: JUMPDEST
00000ad9: POP
00000ada: JUMPDEST
00000adb: POP
00000adc: JUMP
00000add: JUMPDEST
00000ade: PUSH1 0x00
00000ae0: DUP1
00000ae1: DUP1
00000ae2: JUMPDEST
00000ae3: PUSH1 0x03
00000ae5: SLOAD
00000ae6: DUP2
00000ae7: LT
00000ae8: ISZERO
00000ae9: PUSH2 0x0b69
00000aec: JUMPI
00000aed: PUSH1 0x00
00000aef: DUP5
00000af0: DUP2
00000af1: MSTORE
00000af2: PUSH1 0x01
00000af4: PUSH1 0x20
00000af6: MSTORE
00000af7: PUSH1 0x40
00000af9: DUP2
00000afa: KECCAK256
00000afb: PUSH1 0x03
00000afd: DUP1
00000afe: SLOAD
00000aff: SWAP2
00000b00: SWAP3
00000b01: SWAP2
00000b02: DUP5
00000b03: SWAP1
00000b04: DUP2
00000b05: LT
00000b06: PUSH2 0x0b0b
00000b09: JUMPI
00000b0a: INVALID
00000b0b: JUMPDEST
00000b0c: SWAP1
00000b0d: PUSH1 0x00
00000b0f: MSTORE
00000b10: PUSH1 0x20
00000b12: PUSH1 0x00
00000b14: KECCAK256
00000b15: SWAP1
00000b16: ADD
00000b17: PUSH1 0x00
00000b19: JUMPDEST
00000b1a: SWAP1
00000b1b: SLOAD
00000b1c: PUSH1 0x01
00000b1e: PUSH1 0xa0
00000b20: PUSH1 0x02
00000b22: EXP
00000b23: SUB
00000b24: PUSH2 0x0100
00000b27: SWAP3
00000b28: SWAP1
00000b29: SWAP3
00000b2a: EXP
00000b2b: SWAP1
00000b2c: DIV
00000b2d: AND
00000b2e: DUP2
00000b2f: MSTORE
00000b30: PUSH1 0x20
00000b32: DUP2
00000b33: ADD
00000b34: SWAP2
00000b35: SWAP1
00000b36: SWAP2
00000b37: MSTORE
00000b38: PUSH1 0x40
00000b3a: ADD
00000b3b: PUSH1 0x00
00000b3d: KECCAK256
00000b3e: SLOAD
00000b3f: PUSH1 0xff
00000b41: AND
00000b42: ISZERO
00000b43: PUSH2 0x0b4d
00000b46: JUMPI
00000b47: PUSH1 0x01
00000b49: DUP3
00000b4a: ADD
00000b4b: SWAP2
00000b4c: POP
00000b4d: JUMPDEST
00000b4e: PUSH1 0x04
00000b50: SLOAD
00000b51: DUP3
00000b52: EQ
00000b53: ISZERO
00000b54: PUSH2 0x0b60
00000b57: JUMPI
00000b58: PUSH1 0x01
00000b5a: SWAP3
00000b5b: POP
00000b5c: PUSH2 0x0b69
00000b5f: JUMP
00000b60: JUMPDEST
00000b61: JUMPDEST
00000b62: PUSH1 0x01
00000b64: ADD
00000b65: PUSH2 0x0ae2
00000b68: JUMP
00000b69: JUMPDEST
00000b6a: JUMPDEST
00000b6b: POP
00000b6c: POP
00000b6d: SWAP2
00000b6e: SWAP1
00000b6f: POP
00000b70: JUMP
00000b71: JUMPDEST
00000b72: PUSH1 0x00
00000b74: DUP1
00000b75: JUMPDEST
00000b76: PUSH1 0x03
00000b78: SLOAD
00000b79: DUP2
00000b7a: LT
00000b7b: ISZERO
00000b7c: PUSH2 0x0be9
00000b7f: JUMPI
00000b80: PUSH1 0x00
00000b82: DUP4
00000b83: DUP2
00000b84: MSTORE
00000b85: PUSH1 0x01
00000b87: PUSH1 0x20
00000b89: MSTORE
00000b8a: PUSH1 0x40
00000b8c: DUP2
00000b8d: KECCAK256
00000b8e: PUSH1 0x03
00000b90: DUP1
00000b91: SLOAD
00000b92: SWAP2
00000b93: SWAP3
00000b94: SWAP2
00000b95: DUP5
00000b96: SWAP1
00000b97: DUP2
00000b98: LT
00000b99: PUSH2 0x0b9e
00000b9c: JUMPI
00000b9d: INVALID
00000b9e: JUMPDEST
00000b9f: SWAP1
00000ba0: PUSH1 0x00
00000ba2: MSTORE
00000ba3: PUSH1 0x20
00000ba5: PUSH1 0x00
00000ba7: KECCAK256
00000ba8: SWAP1
00000ba9: ADD
00000baa: PUSH1 0x00
00000bac: JUMPDEST
00000bad: SWAP1
00000bae: SLOAD
00000baf: PUSH1 0x01
00000bb1: PUSH1 0xa0
00000bb3: PUSH1 0x02
00000bb5: EXP
00000bb6: SUB
00000bb7: PUSH2 0x0100
00000bba: SWAP3
00000bbb: SWAP1
00000bbc: SWAP3
00000bbd: EXP
00000bbe: SWAP1
00000bbf: DIV
00000bc0: AND
00000bc1: DUP2
00000bc2: MSTORE
00000bc3: PUSH1 0x20
00000bc5: DUP2
00000bc6: ADD
00000bc7: SWAP2
00000bc8: SWAP1
00000bc9: SWAP2
00000bca: MSTORE
00000bcb: PUSH1 0x40
00000bcd: ADD
00000bce: PUSH1 0x00
00000bd0: KECCAK256
00000bd1: SLOAD
00000bd2: PUSH1 0xff
00000bd4: AND
00000bd5: ISZERO
00000bd6: PUSH2 0x0be0
00000bd9: JUMPI
00000bda: PUSH1 0x01
00000bdc: DUP3
00000bdd: ADD
00000bde: SWAP2
00000bdf: POP
00000be0: JUMPDEST
00000be1: JUMPDEST
00000be2: PUSH1 0x01
00000be4: ADD
00000be5: PUSH2 0x0b75
00000be8: JUMP
00000be9: JUMPDEST
00000bea: JUMPDEST
00000beb: POP
00000bec: SWAP2
00000bed: SWAP1
00000bee: POP
00000bef: JUMP
00000bf0: JUMPDEST
00000bf1: PUSH1 0x00
00000bf3: PUSH1 0x20
00000bf5: DUP2
00000bf6: SWAP1
00000bf7: MSTORE
00000bf8: SWAP1
00000bf9: DUP2
00000bfa: MSTORE
00000bfb: PUSH1 0x40
00000bfd: SWAP1
00000bfe: KECCAK256
00000bff: DUP1
00000c00: SLOAD
00000c01: PUSH1 0x01
00000c03: DUP3
00000c04: ADD
00000c05: SLOAD
00000c06: PUSH1 0x03
00000c08: DUP4
00000c09: ADD
00000c0a: SLOAD
00000c0b: PUSH1 0x01
00000c0d: PUSH1 0xa0
00000c0f: PUSH1 0x02
00000c11: EXP
00000c12: SUB
00000c13: SWAP1
00000c14: SWAP3
00000c15: AND
00000c16: SWAP3
00000c17: SWAP1
00000c18: SWAP2
00000c19: PUSH1 0x02
00000c1b: SWAP1
00000c1c: SWAP2
00000c1d: ADD
00000c1e: SWAP1
00000c1f: PUSH1 0xff
00000c21: AND
00000c22: DUP5
00000c23: JUMP
00000c24: JUMPDEST
00000c25: PUSH2 0x0c2c
00000c28: PUSH2 0x1621
00000c2b: JUMP
00000c2c: JUMPDEST
00000c2d: PUSH1 0x03
00000c2f: DUP1
00000c30: SLOAD
00000c31: DUP1
00000c32: PUSH1 0x20
00000c34: MUL
00000c35: PUSH1 0x20
00000c37: ADD
00000c38: PUSH1 0x40
00000c3a: MLOAD
00000c3b: SWAP1
00000c3c: DUP2
00000c3d: ADD
00000c3e: PUSH1 0x40
00000c40: MSTORE
00000c41: DUP1
00000c42: SWAP3
00000c43: SWAP2
00000c44: SWAP1
00000c45: DUP2
00000c46: DUP2
00000c47: MSTORE
00000c48: PUSH1 0x20
00000c4a: ADD
00000c4b: DUP3
00000c4c: DUP1
00000c4d: SLOAD
00000c4e: DUP1
00000c4f: ISZERO
00000c50: PUSH2 0x0c82
00000c53: JUMPI
00000c54: PUSH1 0x20
00000c56: MUL
00000c57: DUP3
00000c58: ADD
00000c59: SWAP2
00000c5a: SWAP1
00000c5b: PUSH1 0x00
00000c5d: MSTORE
00000c5e: PUSH1 0x20
00000c60: PUSH1 0x00
00000c62: KECCAK256
00000c63: SWAP1
00000c64: JUMPDEST
00000c65: DUP2
00000c66: SLOAD
00000c67: PUSH1 0x01
00000c69: PUSH1 0xa0
00000c6b: PUSH1 0x02
00000c6d: EXP
00000c6e: SUB
00000c6f: AND
00000c70: DUP2
00000c71: MSTORE
00000c72: PUSH1 0x01
00000c74: SWAP1
00000c75: SWAP2
00000c76: ADD
00000c77: SWAP1
00000c78: PUSH1 0x20
00000c7a: ADD
00000c7b: DUP1
00000c7c: DUP4
00000c7d: GT
00000c7e: PUSH2 0x0c64
00000c81: JUMPI
00000c82: JUMPDEST
00000c83: POP
00000c84: POP
00000c85: POP
00000c86: POP
00000c87: POP
00000c88: SWAP1
00000c89: POP
00000c8a: JUMPDEST
00000c8b: SWAP1
00000c8c: JUMP
00000c8d: JUMPDEST
00000c8e: PUSH2 0x0c95
00000c91: PUSH2 0x1621
00000c94: JUMP
00000c95: JUMPDEST
00000c96: PUSH2 0x0c9d
00000c99: PUSH2 0x1621
00000c9c: JUMP
00000c9d: JUMPDEST
00000c9e: PUSH1 0x00
00000ca0: DUP1
00000ca1: PUSH1 0x05
00000ca3: SLOAD
00000ca4: PUSH1 0x40
00000ca6: MLOAD
00000ca7: DUP1
00000ca8: MSIZE
00000ca9: LT
00000caa: PUSH2 0x0cb0
00000cad: JUMPI
00000cae: POP
00000caf: MSIZE
00000cb0: JUMPDEST
00000cb1: SWAP1
00000cb2: DUP1
00000cb3: DUP3
00000cb4: MSTORE
00000cb5: DUP1
00000cb6: PUSH1 0x20
00000cb8: MUL
00000cb9: PUSH1 0x20
00000cbb: ADD
00000cbc: DUP3
00000cbd: ADD
00000cbe: PUSH1 0x40
00000cc0: MSTORE
00000cc1: JUMPDEST
00000cc2: POP
00000cc3: SWAP3
00000cc4: POP
00000cc5: PUSH1 0x00
00000cc7: SWAP2
00000cc8: POP
00000cc9: PUSH1 0x00
00000ccb: SWAP1
00000ccc: POP
00000ccd: JUMPDEST
00000cce: PUSH1 0x05
00000cd0: SLOAD
00000cd1: DUP2
00000cd2: LT
00000cd3: ISZERO
00000cd4: PUSH2 0x0d48
00000cd7: JUMPI
00000cd8: DUP6
00000cd9: DUP1
00000cda: ISZERO
00000cdb: PUSH2 0x0cf6
00000cde: JUMPI
00000cdf: POP
00000ce0: PUSH1 0x00
00000ce2: DUP2
00000ce3: DUP2
00000ce4: MSTORE
00000ce5: PUSH1 0x20
00000ce7: DUP2
00000ce8: SWAP1
00000ce9: MSTORE
00000cea: PUSH1 0x40
00000cec: SWAP1
00000ced: KECCAK256
00000cee: PUSH1 0x03
00000cf0: ADD
00000cf1: SLOAD
00000cf2: PUSH1 0xff
00000cf4: AND
00000cf5: ISZERO
00000cf6: JUMPDEST
00000cf7: DUP1
00000cf8: PUSH2 0x0d1a
00000cfb: JUMPI
00000cfc: POP
00000cfd: DUP5
00000cfe: DUP1
00000cff: ISZERO
00000d00: PUSH2 0x0d1a
00000d03: JUMPI
00000d04: POP
00000d05: PUSH1 0x00
00000d07: DUP2
00000d08: DUP2
00000d09: MSTORE
00000d0a: PUSH1 0x20
00000d0c: DUP2
00000d0d: SWAP1
00000d0e: MSTORE
00000d0f: PUSH1 0x40
00000d11: SWAP1
00000d12: KECCAK256
00000d13: PUSH1 0x03
00000d15: ADD
00000d16: SLOAD
00000d17: PUSH1 0xff
00000d19: AND
00000d1a: JUMPDEST
00000d1b: JUMPDEST
00000d1c: ISZERO
00000d1d: PUSH2 0x0d3f
00000d20: JUMPI
00000d21: DUP1
00000d22: DUP4
00000d23: DUP4
00000d24: DUP2
00000d25: MLOAD
00000d26: DUP2
00000d27: LT
00000d28: PUSH2 0x0d2d
00000d2b: JUMPI
00000d2c: INVALID
00000d2d: JUMPDEST
00000d2e: PUSH1 0x20
00000d30: SWAP1
00000d31: DUP2
00000d32: MUL
00000d33: SWAP1
00000d34: SWAP2
00000d35: ADD
00000d36: ADD
00000d37: MSTORE
00000d38: PUSH1 0x01
00000d3a: SWAP2
00000d3b: SWAP1
00000d3c: SWAP2
00000d3d: ADD
00000d3e: SWAP1
00000d3f: JUMPDEST
00000d40: JUMPDEST
00000d41: PUSH1 0x01
00000d43: ADD
00000d44: PUSH2 0x0ccd
00000d47: JUMP
00000d48: JUMPDEST
00000d49: DUP8
00000d4a: DUP8
00000d4b: SUB
00000d4c: PUSH1 0x40
00000d4e: MLOAD
00000d4f: DUP1
00000d50: MSIZE
00000d51: LT
00000d52: PUSH2 0x0d58
00000d55: JUMPI
00000d56: POP
00000d57: MSIZE
00000d58: JUMPDEST
00000d59: SWAP1
00000d5a: DUP1
00000d5b: DUP3
00000d5c: MSTORE
00000d5d: DUP1
00000d5e: PUSH1 0x20
00000d60: MUL
00000d61: PUSH1 0x20
00000d63: ADD
00000d64: DUP3
00000d65: ADD
00000d66: PUSH1 0x40
00000d68: MSTORE
00000d69: JUMPDEST
00000d6a: POP
00000d6b: SWAP4
00000d6c: POP
00000d6d: DUP8
00000d6e: SWAP1
00000d6f: POP
00000d70: JUMPDEST
00000d71: DUP7
00000d72: DUP2
00000d73: LT
00000d74: ISZERO
00000d75: PUSH2 0x0daf
00000d78: JUMPI
00000d79: DUP3
00000d7a: DUP2
00000d7b: DUP2
00000d7c: MLOAD
00000d7d: DUP2
00000d7e: LT
00000d7f: PUSH2 0x0d84
00000d82: JUMPI
00000d83: INVALID
00000d84: JUMPDEST
00000d85: SWAP1
00000d86: PUSH1 0x20
00000d88: ADD
00000d89: SWAP1
00000d8a: PUSH1 0x20
00000d8c: MUL
00000d8d: ADD
00000d8e: MLOAD
00000d8f: DUP5
00000d90: DUP10
00000d91: DUP4
00000d92: SUB
00000d93: DUP2
00000d94: MLOAD
00000d95: DUP2
00000d96: LT
00000d97: PUSH2 0x0d9c
00000d9a: JUMPI
00000d9b: INVALID
00000d9c: JUMPDEST
00000d9d: PUSH1 0x20
00000d9f: SWAP1
00000da0: DUP2
00000da1: MUL
00000da2: SWAP1
00000da3: SWAP2
00000da4: ADD
00000da5: ADD
00000da6: MSTORE
00000da7: JUMPDEST
00000da8: PUSH1 0x01
00000daa: ADD
00000dab: PUSH2 0x0d70
00000dae: JUMP
00000daf: JUMPDEST
00000db0: JUMPDEST
00000db1: POP
00000db2: POP
00000db3: POP
00000db4: SWAP5
00000db5: SWAP4
00000db6: POP
00000db7: POP
00000db8: POP
00000db9: POP
00000dba: JUMP
00000dbb: JUMPDEST
00000dbc: PUSH2 0x0dc3
00000dbf: PUSH2 0x1621
00000dc2: JUMP
00000dc3: JUMPDEST
00000dc4: PUSH2 0x0dcb
00000dc7: PUSH2 0x1621
00000dca: JUMP
00000dcb: JUMPDEST
00000dcc: PUSH1 0x03
00000dce: SLOAD
00000dcf: PUSH1 0x00
00000dd1: SWAP1
00000dd2: DUP2
00000dd3: SWAP1
00000dd4: PUSH1 0x40
00000dd6: MLOAD
00000dd7: DUP1
00000dd8: MSIZE
00000dd9: LT
00000dda: PUSH2 0x0de0
00000ddd: JUMPI
00000dde: POP
00000ddf: MSIZE
00000de0: JUMPDEST
00000de1: SWAP1
00000de2: DUP1
00000de3: DUP3
00000de4: MSTORE
00000de5: DUP1
00000de6: PUSH1 0x20
00000de8: MUL
00000de9: PUSH1 0x20
00000deb: ADD
00000dec: DUP3
00000ded: ADD
00000dee: PUSH1 0x40
00000df0: MSTORE
00000df1: JUMPDEST
00000df2: POP
00000df3: SWAP3
00000df4: POP
00000df5: PUSH1 0x00
00000df7: SWAP2
00000df8: POP
00000df9: PUSH1 0x00
00000dfb: SWAP1
00000dfc: POP
00000dfd: JUMPDEST
00000dfe: PUSH1 0x03
00000e00: SLOAD
00000e01: DUP2
00000e02: LT
00000e03: ISZERO
00000e04: PUSH2 0x0ec3
00000e07: JUMPI
00000e08: PUSH1 0x00
00000e0a: DUP6
00000e0b: DUP2
00000e0c: MSTORE
00000e0d: PUSH1 0x01
00000e0f: PUSH1 0x20
00000e11: MSTORE
00000e12: PUSH1 0x40
00000e14: DUP2
00000e15: KECCAK256
00000e16: PUSH1 0x03
00000e18: DUP1
00000e19: SLOAD
00000e1a: SWAP2
00000e1b: SWAP3
00000e1c: SWAP2
00000e1d: DUP5
00000e1e: SWAP1
00000e1f: DUP2
00000e20: LT
00000e21: PUSH2 0x0e26
00000e24: JUMPI
00000e25: INVALID
00000e26: JUMPDEST
00000e27: SWAP1
00000e28: PUSH1 0x00
00000e2a: MSTORE
00000e2b: PUSH1 0x20
00000e2d: PUSH1 0x00
00000e2f: KECCAK256
00000e30: SWAP1
00000e31: ADD
00000e32: PUSH1 0x00
00000e34: JUMPDEST
00000e35: SWAP1
00000e36: SLOAD
00000e37: PUSH1 0x01
00000e39: PUSH1 0xa0
00000e3b: PUSH1 0x02
00000e3d: EXP
00000e3e: SUB
00000e3f: PUSH2 0x0100
00000e42: SWAP3
00000e43: SWAP1
00000e44: SWAP3
00000e45: EXP
00000e46: SWAP1
00000e47: DIV
00000e48: AND
00000e49: DUP2
00000e4a: MSTORE
00000e4b: PUSH1 0x20
00000e4d: DUP2
00000e4e: ADD
00000e4f: SWAP2
00000e50: SWAP1
00000e51: SWAP2
00000e52: MSTORE
00000e53: PUSH1 0x40
00000e55: ADD
00000e56: PUSH1 0x00
00000e58: KECCAK256
00000e59: SLOAD
00000e5a: PUSH1 0xff
00000e5c: AND
00000e5d: ISZERO
00000e5e: PUSH2 0x0eba
00000e61: JUMPI
00000e62: PUSH1 0x03
00000e64: DUP1
00000e65: SLOAD
00000e66: DUP3
00000e67: SWAP1
00000e68: DUP2
00000e69: LT
00000e6a: PUSH2 0x0e6f
00000e6d: JUMPI
00000e6e: INVALID
00000e6f: JUMPDEST
00000e70: SWAP1
00000e71: PUSH1 0x00
00000e73: MSTORE
00000e74: PUSH1 0x20
00000e76: PUSH1 0x00
00000e78: KECCAK256
00000e79: SWAP1
00000e7a: ADD
00000e7b: PUSH1 0x00
00000e7d: JUMPDEST
00000e7e: SWAP1
00000e7f: SLOAD
00000e80: SWAP1
00000e81: PUSH2 0x0100
00000e84: EXP
00000e85: SWAP1
00000e86: DIV
00000e87: PUSH1 0x01
00000e89: PUSH1 0xa0
00000e8b: PUSH1 0x02
00000e8d: EXP
00000e8e: SUB
00000e8f: AND
00000e90: DUP4
00000e91: DUP4
00000e92: DUP2
00000e93: MLOAD
00000e94: DUP2
00000e95: LT
00000e96: PUSH2 0x0e9b
00000e99: JUMPI
00000e9a: INVALID
00000e9b: JUMPDEST
00000e9c: PUSH1 0x01
00000e9e: PUSH1 0xa0
00000ea0: PUSH1 0x02
00000ea2: EXP
00000ea3: SUB
00000ea4: SWAP1
00000ea5: SWAP3
00000ea6: AND
00000ea7: PUSH1 0x20
00000ea9: SWAP3
00000eaa: DUP4
00000eab: MUL
00000eac: SWAP1
00000ead: SWAP2
00000eae: ADD
00000eaf: SWAP1
00000eb0: SWAP2
00000eb1: ADD
00000eb2: MSTORE
00000eb3: PUSH1 0x01
00000eb5: SWAP2
00000eb6: SWAP1
00000eb7: SWAP2
00000eb8: ADD
00000eb9: SWAP1
00000eba: JUMPDEST
00000ebb: JUMPDEST
00000ebc: PUSH1 0x01
00000ebe: ADD
00000ebf: PUSH2 0x0dfd
00000ec2: JUMP
00000ec3: JUMPDEST
00000ec4: DUP2
00000ec5: PUSH1 0x40
00000ec7: MLOAD
00000ec8: DUP1
00000ec9: MSIZE
00000eca: LT
00000ecb: PUSH2 0x0ed1
00000ece: JUMPI
00000ecf: POP
00000ed0: MSIZE
00000ed1: JUMPDEST
00000ed2: SWAP1
00000ed3: DUP1
00000ed4: DUP3
00000ed5: MSTORE
00000ed6: DUP1
00000ed7: PUSH1 0x20
00000ed9: MUL
00000eda: PUSH1 0x20
00000edc: ADD
00000edd: DUP3
00000ede: ADD
00000edf: PUSH1 0x40
00000ee1: MSTORE
00000ee2: JUMPDEST
00000ee3: POP
00000ee4: SWAP4
00000ee5: POP
00000ee6: PUSH1 0x00
00000ee8: SWAP1
00000ee9: POP
00000eea: JUMPDEST
00000eeb: DUP2
00000eec: DUP2
00000eed: LT
00000eee: ISZERO
00000eef: PUSH2 0x0f34
00000ef2: JUMPI
00000ef3: DUP3
00000ef4: DUP2
00000ef5: DUP2
00000ef6: MLOAD
00000ef7: DUP2
00000ef8: LT
00000ef9: PUSH2 0x0efe
00000efc: JUMPI
00000efd: INVALID
00000efe: JUMPDEST
00000eff: SWAP1
00000f00: PUSH1 0x20
00000f02: ADD
00000f03: SWAP1
00000f04: PUSH1 0x20
00000f06: MUL
00000f07: ADD
00000f08: MLOAD
00000f09: DUP5
00000f0a: DUP3
00000f0b: DUP2
00000f0c: MLOAD
00000f0d: DUP2
00000f0e: LT
00000f0f: PUSH2 0x0f14
00000f12: JUMPI
00000f13: INVALID
00000f14: JUMPDEST
00000f15: PUSH1 0x01
00000f17: PUSH1 0xa0
00000f19: PUSH1 0x02
00000f1b: EXP
00000f1c: SUB
00000f1d: SWAP1
00000f1e: SWAP3
00000f1f: AND
00000f20: PUSH1 0x20
00000f22: SWAP3
00000f23: DUP4
00000f24: MUL
00000f25: SWAP1
00000f26: SWAP2
00000f27: ADD
00000f28: SWAP1
00000f29: SWAP2
00000f2a: ADD
00000f2b: MSTORE
00000f2c: JUMPDEST
00000f2d: PUSH1 0x01
00000f2f: ADD
00000f30: PUSH2 0x0eea
00000f33: JUMP
00000f34: JUMPDEST
00000f35: JUMPDEST
00000f36: POP
00000f37: POP
00000f38: POP
00000f39: SWAP2
00000f3a: SWAP1
00000f3b: POP
00000f3c: JUMP
00000f3d: JUMPDEST
00000f3e: PUSH1 0x05
00000f40: SLOAD
00000f41: DUP2
00000f42: JUMP
00000f43: JUMPDEST
00000f44: ADDRESS
00000f45: PUSH1 0x01
00000f47: PUSH1 0xa0
00000f49: PUSH1 0x02
00000f4b: EXP
00000f4c: SUB
00000f4d: AND
00000f4e: CALLER
00000f4f: PUSH1 0x01
00000f51: PUSH1 0xa0
00000f53: PUSH1 0x02
00000f55: EXP
00000f56: SUB
00000f57: AND
00000f58: EQ
00000f59: ISZERO
00000f5a: ISZERO
00000f5b: PUSH2 0x0f63
00000f5e: JUMPI
00000f5f: PUSH1 0x00
00000f61: DUP1
00000f62: REVERT
00000f63: JUMPDEST
00000f64: PUSH1 0x03
00000f66: SLOAD
00000f67: DUP2
00000f68: PUSH1 0x32
00000f6a: DUP3
00000f6b: GT
00000f6c: DUP1
00000f6d: ISZERO
00000f6e: SWAP1
00000f6f: PUSH2 0x0f78
00000f72: JUMPI
00000f73: POP
00000f74: DUP2
00000f75: DUP2
00000f76: GT
00000f77: ISZERO
00000f78: JUMPDEST
00000f79: DUP1
00000f7a: ISZERO
00000f7b: PUSH2 0x0f83
00000f7e: JUMPI
00000f7f: POP
00000f80: DUP1
00000f81: ISZERO
00000f82: ISZERO
00000f83: JUMPDEST
00000f84: DUP1
00000f85: ISZERO
00000f86: PUSH2 0x0f8e
00000f89: JUMPI
00000f8a: POP
00000f8b: DUP2
00000f8c: ISZERO
00000f8d: ISZERO
00000f8e: JUMPDEST
00000f8f: ISZERO
00000f90: ISZERO
00000f91: PUSH2 0x0f99
00000f94: JUMPI
00000f95: PUSH1 0x00
00000f97: DUP1
00000f98: REVERT
00000f99: JUMPDEST
00000f9a: PUSH1 0x04
00000f9c: DUP4
00000f9d: SWAP1
00000f9e: SSTORE
00000f9f: PUSH32 0xa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a
00000fc0: DUP4
00000fc1: PUSH1 0x40
00000fc3: MLOAD
00000fc4: SWAP1
00000fc5: DUP2
00000fc6: MSTORE
00000fc7: PUSH1 0x20
00000fc9: ADD
00000fca: PUSH1 0x40
00000fcc: MLOAD
00000fcd: DUP1
00000fce: SWAP2
00000fcf: SUB
00000fd0: SWAP1
00000fd1: LOG1
00000fd2: JUMPDEST
00000fd3: JUMPDEST
00000fd4: POP
00000fd5: POP
00000fd6: JUMPDEST
00000fd7: POP
00000fd8: JUMP
00000fd9: JUMPDEST
00000fda: CALLER
00000fdb: PUSH1 0x01
00000fdd: PUSH1 0xa0
00000fdf: PUSH1 0x02
00000fe1: EXP
00000fe2: SUB
00000fe3: DUP2
00000fe4: AND
00000fe5: PUSH1 0x00
00000fe7: SWAP1
00000fe8: DUP2
00000fe9: MSTORE
00000fea: PUSH1 0x02
00000fec: PUSH1 0x20
00000fee: MSTORE
00000fef: PUSH1 0x40
00000ff1: SWAP1
00000ff2: KECCAK256
00000ff3: SLOAD
00000ff4: PUSH1 0xff
00000ff6: AND
00000ff7: ISZERO
00000ff8: ISZERO
00000ff9: PUSH2 0x1001
00000ffc: JUMPI
00000ffd: PUSH1 0x00
00000fff: DUP1
00001000: REVERT
00001001: JUMPDEST
00001002: PUSH1 0x00
00001004: DUP3
00001005: DUP2
00001006: MSTORE
00001007: PUSH1 0x20
00001009: DUP2
0000100a: SWAP1
0000100b: MSTORE
0000100c: PUSH1 0x40
0000100e: SWAP1
0000100f: KECCAK256
00001010: SLOAD
00001011: DUP3
00001012: SWAP1
00001013: PUSH1 0x01
00001015: PUSH1 0xa0
00001017: PUSH1 0x02
00001019: EXP
0000101a: SUB
0000101b: AND
0000101c: ISZERO
0000101d: ISZERO
0000101e: PUSH2 0x1026
00001021: JUMPI
00001022: PUSH1 0x00
00001024: DUP1
00001025: REVERT
00001026: JUMPDEST
00001027: PUSH1 0x00
00001029: DUP4
0000102a: DUP2
0000102b: MSTORE
0000102c: PUSH1 0x01
0000102e: PUSH1 0x20
00001030: SWAP1
00001031: DUP2
00001032: MSTORE
00001033: PUSH1 0x40
00001035: DUP1
00001036: DUP4
00001037: KECCAK256
00001038: CALLER
00001039: PUSH1 0x01
0000103b: PUSH1 0xa0
0000103d: PUSH1 0x02
0000103f: EXP
00001040: SUB
00001041: DUP2
00001042: AND
00001043: DUP6
00001044: MSTORE
00001045: SWAP3
00001046: MSTORE
00001047: SWAP1
00001048: SWAP2
00001049: KECCAK256
0000104a: SLOAD
0000104b: DUP5
0000104c: SWAP2
0000104d: SWAP1
0000104e: PUSH1 0xff
00001050: AND
00001051: ISZERO
00001052: PUSH2 0x105a
00001055: JUMPI
00001056: PUSH1 0x00
00001058: DUP1
00001059: REVERT
0000105a: JUMPDEST
0000105b: PUSH1 0x00
0000105d: DUP6
0000105e: DUP2
0000105f: MSTORE
00001060: PUSH1 0x01
00001062: PUSH1 0x20
00001064: DUP2
00001065: DUP2
00001066: MSTORE
00001067: PUSH1 0x40
00001069: DUP1
0000106a: DUP5
0000106b: KECCAK256
0000106c: PUSH1 0x01
0000106e: PUSH1 0xa0
00001070: PUSH1 0x02
00001072: EXP
00001073: SUB
00001074: CALLER
00001075: AND
00001076: DUP1
00001077: DUP7
00001078: MSTORE
00001079: SWAP3
0000107a: MSTORE
0000107b: SWAP3
0000107c: DUP4
0000107d: SWAP1
0000107e: KECCAK256
0000107f: DUP1
00001080: SLOAD
00001081: PUSH1 0xff
00001083: NOT
00001084: AND
00001085: SWAP1
00001086: SWAP3
00001087: OR
00001088: SWAP1
00001089: SWAP2
0000108a: SSTORE
0000108b: DUP7
0000108c: SWAP2
0000108d: PUSH32 0x4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef
000010ae: SWAP1
000010af: MLOAD
000010b0: PUSH1 0x40
000010b2: MLOAD
000010b3: DUP1
000010b4: SWAP2
000010b5: SUB
000010b6: SWAP1
000010b7: LOG3
000010b8: PUSH2 0x08f2
000010bb: DUP6
000010bc: PUSH2 0x12b7
000010bf: JUMP
000010c0: JUMPDEST
000010c1: JUMPDEST
000010c2: JUMPDEST
000010c3: POP
000010c4: POP
000010c5: JUMPDEST
000010c6: POP
000010c7: JUMPDEST
000010c8: POP
000010c9: POP
000010ca: JUMP
000010cb: JUMPDEST
000010cc: PUSH1 0x00
000010ce: PUSH2 0x10d8
000010d1: DUP5
000010d2: DUP5
000010d3: DUP5
000010d4: PUSH2 0x14a6
000010d7: JUMP
000010d8: JUMPDEST
000010d9: SWAP1
000010da: POP
000010db: PUSH2 0x10e3
000010de: DUP2
000010df: PUSH2 0x0fd9
000010e2: JUMP
000010e3: JUMPDEST
000010e4: JUMPDEST
000010e5: SWAP4
000010e6: SWAP3
000010e7: POP
000010e8: POP
000010e9: POP
000010ea: JUMP
000010eb: JUMPDEST
000010ec: PUSH1 0x32
000010ee: DUP2
000010ef: JUMP
000010f0: JUMPDEST
000010f1: PUSH1 0x04
000010f3: SLOAD
000010f4: DUP2
000010f5: JUMP
000010f6: JUMPDEST
000010f7: PUSH1 0x00
000010f9: ADDRESS
000010fa: PUSH1 0x01
000010fc: PUSH1 0xa0
000010fe: PUSH1 0x02
00001100: EXP
00001101: SUB
00001102: AND
00001103: CALLER
00001104: PUSH1 0x01
00001106: PUSH1 0xa0
00001108: PUSH1 0x02
0000110a: EXP
0000110b: SUB
0000110c: AND
0000110d: EQ
0000110e: ISZERO
0000110f: ISZERO
00001110: PUSH2 0x1118
00001113: JUMPI
00001114: PUSH1 0x00
00001116: DUP1
00001117: REVERT
00001118: JUMPDEST
00001119: PUSH1 0x01
0000111b: PUSH1 0xa0
0000111d: PUSH1 0x02
0000111f: EXP
00001120: SUB
00001121: DUP4
00001122: AND
00001123: PUSH1 0x00
00001125: SWAP1
00001126: DUP2
00001127: MSTORE
00001128: PUSH1 0x02
0000112a: PUSH1 0x20
0000112c: MSTORE
0000112d: PUSH1 0x40
0000112f: SWAP1
00001130: KECCAK256
00001131: SLOAD
00001132: DUP4
00001133: SWAP1
00001134: PUSH1 0xff
00001136: AND
00001137: ISZERO
00001138: ISZERO
00001139: PUSH2 0x1141
0000113c: JUMPI
0000113d: PUSH1 0x00
0000113f: DUP1
00001140: REVERT
00001141: JUMPDEST
00001142: PUSH1 0x01
00001144: PUSH1 0xa0
00001146: PUSH1 0x02
00001148: EXP
00001149: SUB
0000114a: DUP4
0000114b: AND
0000114c: PUSH1 0x00
0000114e: SWAP1
0000114f: DUP2
00001150: MSTORE
00001151: PUSH1 0x02
00001153: PUSH1 0x20
00001155: MSTORE
00001156: PUSH1 0x40
00001158: SWAP1
00001159: KECCAK256
0000115a: SLOAD
0000115b: DUP4
0000115c: SWAP1
0000115d: PUSH1 0xff
0000115f: AND
00001160: ISZERO
00001161: PUSH2 0x1169
00001164: JUMPI
00001165: PUSH1 0x00
00001167: DUP1
00001168: REVERT
00001169: JUMPDEST
0000116a: PUSH1 0x00
0000116c: SWAP3
0000116d: POP
0000116e: JUMPDEST
0000116f: PUSH1 0x03
00001171: SLOAD
00001172: DUP4
00001173: LT
00001174: ISZERO
00001175: PUSH2 0x1211
00001178: JUMPI
00001179: DUP5
0000117a: PUSH1 0x01
0000117c: PUSH1 0xa0
0000117e: PUSH1 0x02
00001180: EXP
00001181: SUB
00001182: AND
00001183: PUSH1 0x03
00001185: DUP5
00001186: DUP2
00001187: SLOAD
00001188: DUP2
00001189: LT
0000118a: ISZERO
0000118b: ISZERO
0000118c: PUSH2 0x1191
0000118f: JUMPI
00001190: INVALID
00001191: JUMPDEST
00001192: SWAP1
00001193: PUSH1 0x00
00001195: MSTORE
00001196: PUSH1 0x20
00001198: PUSH1 0x00
0000119a: KECCAK256
0000119b: SWAP1
0000119c: ADD
0000119d: PUSH1 0x00
0000119f: JUMPDEST
000011a0: SWAP1
000011a1: SLOAD
000011a2: SWAP1
000011a3: PUSH2 0x0100
000011a6: EXP
000011a7: SWAP1
000011a8: DIV
000011a9: PUSH1 0x01
000011ab: PUSH1 0xa0
000011ad: PUSH1 0x02
000011af: EXP
000011b0: SUB
000011b1: AND
000011b2: PUSH1 0x01
000011b4: PUSH1 0xa0
000011b6: PUSH1 0x02
000011b8: EXP
000011b9: SUB
000011ba: AND
000011bb: EQ
000011bc: ISZERO
000011bd: PUSH2 0x1205
000011c0: JUMPI
000011c1: DUP4
000011c2: PUSH1 0x03
000011c4: DUP5
000011c5: DUP2
000011c6: SLOAD
000011c7: DUP2
000011c8: LT
000011c9: ISZERO
000011ca: ISZERO
000011cb: PUSH2 0x11d0
000011ce: JUMPI
000011cf: INVALID
000011d0: JUMPDEST
000011d1: SWAP1
000011d2: PUSH1 0x00
000011d4: MSTORE
000011d5: PUSH1 0x20
000011d7: PUSH1 0x00
000011d9: KECCAK256
000011da: SWAP1
000011db: ADD
000011dc: PUSH1 0x00
000011de: JUMPDEST
000011df: PUSH2 0x0100
000011e2: EXP
000011e3: DUP2
000011e4: SLOAD
000011e5: DUP2
000011e6: PUSH1 0x01
000011e8: PUSH1 0xa0
000011ea: PUSH1 0x02
000011ec: EXP
000011ed: SUB
000011ee: MUL
000011ef: NOT
000011f0: AND
000011f1: SWAP1
000011f2: DUP4
000011f3: PUSH1 0x01
000011f5: PUSH1 0xa0
000011f7: PUSH1 0x02
000011f9: EXP
000011fa: SUB
000011fb: AND
000011fc: MUL
000011fd: OR
000011fe: SWAP1
000011ff: SSTORE
00001200: POP
00001201: PUSH2 0x1211
00001204: JUMP
00001205: JUMPDEST
00001206: JUMPDEST
00001207: PUSH1 0x01
00001209: SWAP1
0000120a: SWAP3
0000120b: ADD
0000120c: SWAP2
0000120d: PUSH2 0x116e
00001210: JUMP
00001211: JUMPDEST
00001212: PUSH1 0x01
00001214: PUSH1 0xa0
00001216: PUSH1 0x02
00001218: EXP
00001219: SUB
0000121a: DUP1
0000121b: DUP7
0000121c: AND
0000121d: PUSH1 0x00
0000121f: DUP2
00001220: DUP2
00001221: MSTORE
00001222: PUSH1 0x02
00001224: PUSH1 0x20
00001226: MSTORE
00001227: PUSH1 0x40
00001229: DUP1
0000122a: DUP3
0000122b: KECCAK256
0000122c: DUP1
0000122d: SLOAD
0000122e: PUSH1 0xff
00001230: NOT
00001231: SWAP1
00001232: DUP2
00001233: AND
00001234: SWAP1
00001235: SWAP2
00001236: SSTORE
00001237: SWAP4
00001238: DUP9
00001239: AND
0000123a: DUP3
0000123b: MSTORE
0000123c: SWAP1
0000123d: DUP2
0000123e: SWAP1
0000123f: KECCAK256
00001240: DUP1
00001241: SLOAD
00001242: SWAP1
00001243: SWAP4
00001244: AND
00001245: PUSH1 0x01
00001247: OR
00001248: SWAP1
00001249: SWAP3
0000124a: SSTORE
0000124b: SWAP1
0000124c: PUSH32 0x8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b90
0000126d: SWAP1
0000126e: MLOAD
0000126f: PUSH1 0x40
00001271: MLOAD
00001272: DUP1
00001273: SWAP2
00001274: SUB
00001275: SWAP1
00001276: LOG2
00001277: DUP4
00001278: PUSH1 0x01
0000127a: PUSH1 0xa0
0000127c: PUSH1 0x02
0000127e: EXP
0000127f: SUB
00001280: AND
00001281: PUSH32 0xf39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d
000012a2: PUSH1 0x40
000012a4: MLOAD
000012a5: PUSH1 0x40
000012a7: MLOAD
000012a8: DUP1
000012a9: SWAP2
000012aa: SUB
000012ab: SWAP1
000012ac: LOG2
000012ad: JUMPDEST
000012ae: JUMPDEST
000012af: POP
000012b0: JUMPDEST
000012b1: POP
000012b2: JUMPDEST
000012b3: POP
000012b4: POP
000012b5: POP
000012b6: JUMP
000012b7: JUMPDEST
000012b8: CALLER
000012b9: PUSH1 0x01
000012bb: PUSH1 0xa0
000012bd: PUSH1 0x02
000012bf: EXP
000012c0: SUB
000012c1: DUP2
000012c2: AND
000012c3: PUSH1 0x00
000012c5: SWAP1
000012c6: DUP2
000012c7: MSTORE
000012c8: PUSH1 0x02
000012ca: PUSH1 0x20
000012cc: MSTORE
000012cd: PUSH1 0x40
000012cf: DUP2
000012d0: KECCAK256
000012d1: SLOAD
000012d2: SWAP1
000012d3: SWAP2
000012d4: SWAP1
000012d5: PUSH1 0xff
000012d7: AND
000012d8: ISZERO
000012d9: ISZERO
000012da: PUSH2 0x12e2
000012dd: JUMPI
000012de: PUSH1 0x00
000012e0: DUP1
000012e1: REVERT
000012e2: JUMPDEST
000012e3: PUSH1 0x00
000012e5: DUP4
000012e6: DUP2
000012e7: MSTORE
000012e8: PUSH1 0x01
000012ea: PUSH1 0x20
000012ec: SWAP1
000012ed: DUP2
000012ee: MSTORE
000012ef: PUSH1 0x40
000012f1: DUP1
000012f2: DUP4
000012f3: KECCAK256
000012f4: CALLER
000012f5: PUSH1 0x01
000012f7: PUSH1 0xa0
000012f9: PUSH1 0x02
000012fb: EXP
000012fc: SUB
000012fd: DUP2
000012fe: AND
000012ff: DUP6
00001300: MSTORE
00001301: SWAP3
00001302: MSTORE
00001303: SWAP1
00001304: SWAP2
00001305: KECCAK256
00001306: SLOAD
00001307: DUP5
00001308: SWAP2
00001309: SWAP1
0000130a: PUSH1 0xff
0000130c: AND
0000130d: ISZERO
0000130e: ISZERO
0000130f: PUSH2 0x1317
00001312: JUMPI
00001313: PUSH1 0x00
00001315: DUP1
00001316: REVERT
00001317: JUMPDEST
00001318: PUSH1 0x00
0000131a: DUP6
0000131b: DUP2
0000131c: MSTORE
0000131d: PUSH1 0x20
0000131f: DUP2
00001320: SWAP1
00001321: MSTORE
00001322: PUSH1 0x40
00001324: SWAP1
00001325: KECCAK256
00001326: PUSH1 0x03
00001328: ADD
00001329: SLOAD
0000132a: DUP6
0000132b: SWAP1
0000132c: PUSH1 0xff
0000132e: AND
0000132f: ISZERO
00001330: PUSH2 0x1338
00001333: JUMPI
00001334: PUSH1 0x00
00001336: DUP1
00001337: REVERT
00001338: JUMPDEST
00001339: PUSH2 0x1341
0000133c: DUP7
0000133d: PUSH2 0x0add
00001340: JUMP
00001341: JUMPDEST
00001342: ISZERO
00001343: PUSH2 0x1499
00001346: JUMPI
00001347: PUSH1 0x00
00001349: DUP7
0000134a: DUP2
0000134b: MSTORE
0000134c: PUSH1 0x20
0000134e: DUP2
0000134f: DUP2
00001350: MSTORE
00001351: PUSH1 0x40
00001353: SWAP2
00001354: DUP3
00001355: SWAP1
00001356: KECCAK256
00001357: PUSH1 0x03
00001359: DUP2
0000135a: ADD
0000135b: DUP1
0000135c: SLOAD
0000135d: PUSH1 0xff
0000135f: NOT
00001360: AND
00001361: PUSH1 0x01
00001363: SWAP1
00001364: DUP2
00001365: OR
00001366: SWAP1
00001367: SWAP2
00001368: SSTORE
00001369: DUP2
0000136a: SLOAD
0000136b: DUP2
0000136c: DUP4
0000136d: ADD
0000136e: SLOAD
0000136f: PUSH1 0x02
00001371: DUP1
00001372: DUP6
00001373: ADD
00001374: DUP1
00001375: SLOAD
00001376: SWAP6
00001377: SWAP13
00001378: POP
00001379: PUSH2 0x1428
0000137c: SWAP8
0000137d: PUSH1 0x01
0000137f: PUSH1 0xa0
00001381: PUSH1 0x02
00001383: EXP
00001384: SUB
00001385: SWAP1
00001386: SWAP5
00001387: AND
00001388: SWAP7
00001389: SWAP3
0000138a: SWAP6
0000138b: PUSH1 0x00
0000138d: NOT
0000138e: SWAP6
0000138f: DUP2
00001390: AND
00001391: ISZERO
00001392: PUSH2 0x0100
00001395: MUL
00001396: SWAP6
00001397: SWAP1
00001398: SWAP6
00001399: ADD
0000139a: SWAP1
0000139b: SWAP5
0000139c: AND
0000139d: DIV
0000139e: SWAP3
0000139f: SWAP2
000013a0: DUP4
000013a1: SWAP2
000013a2: PUSH1 0x1f
000013a4: DUP4
000013a5: ADD
000013a6: DUP2
000013a7: SWAP1
000013a8: DIV
000013a9: DUP2
000013aa: MUL
000013ab: ADD
000013ac: SWAP1
000013ad: MLOAD
000013ae: SWAP1
000013af: DUP2
000013b0: ADD
000013b1: PUSH1 0x40
000013b3: MSTORE
000013b4: DUP1
000013b5: SWAP3
000013b6: SWAP2
000013b7: SWAP1
000013b8: DUP2
000013b9: DUP2
000013ba: MSTORE
000013bb: PUSH1 0x20
000013bd: ADD
000013be: DUP3
000013bf: DUP1
000013c0: SLOAD
000013c1: PUSH1 0x01
000013c3: DUP2
000013c4: PUSH1 0x01
000013c6: AND
000013c7: ISZERO
000013c8: PUSH2 0x0100
000013cb: MUL
000013cc: SUB
000013cd: AND
000013ce: PUSH1 0x02
000013d0: SWAP1
000013d1: DIV
000013d2: DUP1
000013d3: ISZERO
000013d4: PUSH2 0x141e
000013d7: JUMPI
000013d8: DUP1
000013d9: PUSH1 0x1f
000013db: LT
000013dc: PUSH2 0x13f3
000013df: JUMPI
000013e0: PUSH2 0x0100
000013e3: DUP1
000013e4: DUP4
000013e5: SLOAD
000013e6: DIV
000013e7: MUL
000013e8: DUP4
000013e9: MSTORE
000013ea: SWAP2
000013eb: PUSH1 0x20
000013ed: ADD
000013ee: SWAP2
000013ef: PUSH2 0x141e
000013f2: JUMP
000013f3: JUMPDEST
000013f4: DUP3
000013f5: ADD
000013f6: SWAP2
000013f7: SWAP1
000013f8: PUSH1 0x00
000013fa: MSTORE
000013fb: PUSH1 0x20
000013fd: PUSH1 0x00
000013ff: KECCAK256
00001400: SWAP1
00001401: JUMPDEST
00001402: DUP2
00001403: SLOAD
00001404: DUP2
00001405: MSTORE
00001406: SWAP1
00001407: PUSH1 0x01
00001409: ADD
0000140a: SWAP1
0000140b: PUSH1 0x20
0000140d: ADD
0000140e: DUP1
0000140f: DUP4
00001410: GT
00001411: PUSH2 0x1401
00001414: JUMPI
00001415: DUP3
00001416: SWAP1
00001417: SUB
00001418: PUSH1 0x1f
0000141a: AND
0000141b: DUP3
0000141c: ADD
0000141d: SWAP2
0000141e: JUMPDEST
0000141f: POP
00001420: POP
00001421: POP
00001422: POP
00001423: POP
00001424: PUSH2 0x15a5
00001427: JUMP
00001428: JUMPDEST
00001429: ISZERO
0000142a: PUSH2 0x145f
0000142d: JUMPI
0000142e: DUP6
0000142f: PUSH32 0x33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed75
00001450: PUSH1 0x40
00001452: MLOAD
00001453: PUSH1 0x40
00001455: MLOAD
00001456: DUP1
00001457: SWAP2
00001458: SUB
00001459: SWAP1
0000145a: LOG2
0000145b: PUSH2 0x1499
0000145e: JUMP
0000145f: JUMPDEST
00001460: DUP6
00001461: PUSH32 0x526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b79236
00001482: PUSH1 0x40
00001484: MLOAD
00001485: PUSH1 0x40
00001487: MLOAD
00001488: DUP1
00001489: SWAP2
0000148a: SUB
0000148b: SWAP1
0000148c: LOG2
0000148d: PUSH1 0x03
0000148f: DUP6
00001490: ADD
00001491: DUP1
00001492: SLOAD
00001493: PUSH1 0xff
00001495: NOT
00001496: AND
00001497: SWAP1
00001498: SSTORE
00001499: JUMPDEST
0000149a: JUMPDEST
0000149b: JUMPDEST
0000149c: JUMPDEST
0000149d: POP
0000149e: JUMPDEST
0000149f: POP
000014a0: POP
000014a1: JUMPDEST
000014a2: POP
000014a3: POP
000014a4: POP
000014a5: JUMP
000014a6: JUMPDEST
000014a7: PUSH1 0x00
000014a9: DUP4
000014aa: PUSH1 0x01
000014ac: PUSH1 0xa0
000014ae: PUSH1 0x02
000014b0: EXP
000014b1: SUB
000014b2: DUP2
000014b3: AND
000014b4: ISZERO
000014b5: ISZERO
000014b6: PUSH2 0x14be
000014b9: JUMPI
000014ba: PUSH1 0x00
000014bc: DUP1
000014bd: REVERT
000014be: JUMPDEST
000014bf: PUSH1 0x05
000014c1: SLOAD
000014c2: SWAP2
000014c3: POP
000014c4: PUSH1 0x80
000014c6: PUSH1 0x40
000014c8: MLOAD
000014c9: SWAP1
000014ca: DUP2
000014cb: ADD
000014cc: PUSH1 0x40
000014ce: SWAP1
000014cf: DUP2
000014d0: MSTORE
000014d1: PUSH1 0x01
000014d3: PUSH1 0xa0
000014d5: PUSH1 0x02
000014d7: EXP
000014d8: SUB
000014d9: DUP8
000014da: AND
000014db: DUP3
000014dc: MSTORE
000014dd: PUSH1 0x20
000014df: DUP1
000014e0: DUP4
000014e1: ADD
000014e2: DUP8
000014e3: SWAP1
000014e4: MSTORE
000014e5: DUP2
000014e6: DUP4
000014e7: ADD
000014e8: DUP7
000014e9: SWAP1
000014ea: MSTORE
000014eb: PUSH1 0x00
000014ed: PUSH1 0x60
000014ef: DUP5
000014f0: ADD
000014f1: DUP2
000014f2: SWAP1
000014f3: MSTORE
000014f4: DUP6
000014f5: DUP2
000014f6: MSTORE
000014f7: SWAP1
000014f8: DUP2
000014f9: SWAP1
000014fa: MSTORE
000014fb: KECCAK256
000014fc: DUP2
000014fd: MLOAD
000014fe: DUP2
000014ff: SLOAD
00001500: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001515: NOT
00001516: AND
00001517: PUSH1 0x01
00001519: PUSH1 0xa0
0000151b: PUSH1 0x02
0000151d: EXP
0000151e: SUB
0000151f: SWAP2
00001520: SWAP1
00001521: SWAP2
00001522: AND
00001523: OR
00001524: DUP2
00001525: SSTORE
00001526: PUSH1 0x20
00001528: DUP3
00001529: ADD
0000152a: MLOAD
0000152b: DUP2
0000152c: PUSH1 0x01
0000152e: ADD
0000152f: SSTORE
00001530: PUSH1 0x40
00001532: DUP3
00001533: ADD
00001534: MLOAD
00001535: DUP2
00001536: PUSH1 0x02
00001538: ADD
00001539: SWAP1
0000153a: DUP1
0000153b: MLOAD
0000153c: PUSH2 0x1549
0000153f: SWAP3
00001540: SWAP2
00001541: PUSH1 0x20
00001543: ADD
00001544: SWAP1
00001545: PUSH2 0x1645
00001548: JUMP
00001549: JUMPDEST
0000154a: POP
0000154b: PUSH1 0x60
0000154d: DUP3
0000154e: ADD
0000154f: MLOAD
00001550: PUSH1 0x03
00001552: SWAP2
00001553: SWAP1
00001554: SWAP2
00001555: ADD
00001556: DUP1
00001557: SLOAD
00001558: PUSH1 0xff
0000155a: NOT
0000155b: AND
0000155c: SWAP2
0000155d: ISZERO
0000155e: ISZERO
0000155f: SWAP2
00001560: SWAP1
00001561: SWAP2
00001562: OR
00001563: SWAP1
00001564: SSTORE
00001565: POP
00001566: PUSH1 0x05
00001568: DUP1
00001569: SLOAD
0000156a: PUSH1 0x01
0000156c: ADD
0000156d: SWAP1
0000156e: SSTORE
0000156f: DUP2
00001570: PUSH32 0xc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e51
00001591: PUSH1 0x40
00001593: MLOAD
00001594: PUSH1 0x40
00001596: MLOAD
00001597: DUP1
00001598: SWAP2
00001599: SUB
0000159a: SWAP1
0000159b: LOG2
0000159c: JUMPDEST
0000159d: JUMPDEST
0000159e: POP
0000159f: SWAP4
000015a0: SWAP3
000015a1: POP
000015a2: POP
000015a3: POP
000015a4: JUMP
000015a5: JUMPDEST
000015a6: PUSH1 0x00
000015a8: DUP1
000015a9: PUSH1 0x40
000015ab: MLOAD
000015ac: PUSH1 0x20
000015ae: DUP5
000015af: ADD
000015b0: PUSH1 0x00
000015b2: DUP3
000015b3: DUP8
000015b4: DUP4
000015b5: DUP11
000015b6: DUP13
000015b7: PUSH2 0x8796
000015ba: GAS
000015bb: SUB
000015bc: CALL
000015bd: SWAP3
000015be: POP
000015bf: POP
000015c0: POP
000015c1: DUP1
000015c2: SWAP2
000015c3: POP
000015c4: JUMPDEST
000015c5: POP
000015c6: SWAP5
000015c7: SWAP4
000015c8: POP
000015c9: POP
000015ca: POP
000015cb: POP
000015cc: JUMP
000015cd: JUMPDEST
000015ce: DUP2
000015cf: SLOAD
000015d0: DUP2
000015d1: DUP4
000015d2: SSTORE
000015d3: DUP2
000015d4: DUP2
000015d5: ISZERO
000015d6: GT
000015d7: PUSH2 0x0813
000015da: JUMPI
000015db: PUSH1 0x00
000015dd: DUP4
000015de: DUP2
000015df: MSTORE
000015e0: PUSH1 0x20
000015e2: SWAP1
000015e3: KECCAK256
000015e4: PUSH2 0x0813
000015e7: SWAP2
000015e8: DUP2
000015e9: ADD
000015ea: SWAP1
000015eb: DUP4
000015ec: ADD
000015ed: PUSH2 0x16c4
000015f0: JUMP
000015f1: JUMPDEST
000015f2: JUMPDEST
000015f3: POP
000015f4: POP
000015f5: POP
000015f6: JUMP
000015f7: JUMPDEST
000015f8: DUP2
000015f9: SLOAD
000015fa: DUP2
000015fb: DUP4
000015fc: SSTORE
000015fd: DUP2
000015fe: DUP2
000015ff: ISZERO
00001600: GT
00001601: PUSH2 0x0813
00001604: JUMPI
00001605: PUSH1 0x00
00001607: DUP4
00001608: DUP2
00001609: MSTORE
0000160a: PUSH1 0x20
0000160c: SWAP1
0000160d: KECCAK256
0000160e: PUSH2 0x0813
00001611: SWAP2
00001612: DUP2
00001613: ADD
00001614: SWAP1
00001615: DUP4
00001616: ADD
00001617: PUSH2 0x16c4
0000161a: JUMP
0000161b: JUMPDEST
0000161c: JUMPDEST
0000161d: POP
0000161e: POP
0000161f: POP
00001620: JUMP
00001621: JUMPDEST
00001622: PUSH1 0x20
00001624: PUSH1 0x40
00001626: MLOAD
00001627: SWAP1
00001628: DUP2
00001629: ADD
0000162a: PUSH1 0x40
0000162c: MSTORE
0000162d: PUSH1 0x00
0000162f: DUP2
00001630: MSTORE
00001631: SWAP1
00001632: JUMP
00001633: JUMPDEST
00001634: PUSH1 0x20
00001636: PUSH1 0x40
00001638: MLOAD
00001639: SWAP1
0000163a: DUP2
0000163b: ADD
0000163c: PUSH1 0x40
0000163e: MSTORE
0000163f: PUSH1 0x00
00001641: DUP2
00001642: MSTORE
00001643: SWAP1
00001644: JUMP
00001645: JUMPDEST
00001646: DUP3
00001647: DUP1
00001648: SLOAD
00001649: PUSH1 0x01
0000164b: DUP2
0000164c: PUSH1 0x01
0000164e: AND
0000164f: ISZERO
00001650: PUSH2 0x0100
00001653: MUL
00001654: SUB
00001655: AND
00001656: PUSH1 0x02
00001658: SWAP1
00001659: DIV
0000165a: SWAP1
0000165b: PUSH1 0x00
0000165d: MSTORE
0000165e: PUSH1 0x20
00001660: PUSH1 0x00
00001662: KECCAK256
00001663: SWAP1
00001664: PUSH1 0x1f
00001666: ADD
00001667: PUSH1 0x20
00001669: SWAP1
0000166a: DIV
0000166b: DUP2
0000166c: ADD
0000166d: SWAP3
0000166e: DUP3
0000166f: PUSH1 0x1f
00001671: LT
00001672: PUSH2 0x1686
00001675: JUMPI
00001676: DUP1
00001677: MLOAD
00001678: PUSH1 0xff
0000167a: NOT
0000167b: AND
0000167c: DUP4
0000167d: DUP1
0000167e: ADD
0000167f: OR
00001680: DUP6
00001681: SSTORE
00001682: PUSH2 0x16b3
00001685: JUMP
00001686: JUMPDEST
00001687: DUP3
00001688: DUP1
00001689: ADD
0000168a: PUSH1 0x01
0000168c: ADD
0000168d: DUP6
0000168e: SSTORE
0000168f: DUP3
00001690: ISZERO
00001691: PUSH2 0x16b3
00001694: JUMPI
00001695: SWAP2
00001696: DUP3
00001697: ADD
00001698: JUMPDEST
00001699: DUP3
0000169a: DUP2
0000169b: GT
0000169c: ISZERO
0000169d: PUSH2 0x16b3
000016a0: JUMPI
000016a1: DUP3
000016a2: MLOAD
000016a3: DUP3
000016a4: SSTORE
000016a5: SWAP2
000016a6: PUSH1 0x20
000016a8: ADD
000016a9: SWAP2
000016aa: SWAP1
000016ab: PUSH1 0x01
000016ad: ADD
000016ae: SWAP1
000016af: PUSH2 0x1698
000016b2: JUMP
000016b3: JUMPDEST
000016b4: JUMPDEST
000016b5: POP
000016b6: PUSH2 0x16c0
000016b9: SWAP3
000016ba: SWAP2
000016bb: POP
000016bc: PUSH2 0x16c4
000016bf: JUMP
000016c0: JUMPDEST
000016c1: POP
000016c2: SWAP1
000016c3: JUMP
000016c4: JUMPDEST
000016c5: PUSH2 0x0c8a
000016c8: SWAP2
000016c9: SWAP1
000016ca: JUMPDEST
000016cb: DUP1
000016cc: DUP3
000016cd: GT
000016ce: ISZERO
000016cf: PUSH2 0x16c0
000016d2: JUMPI
000016d3: PUSH1 0x00
000016d5: DUP2
000016d6: SSTORE
000016d7: PUSH1 0x01
000016d9: ADD
000016da: PUSH2 0x16ca
000016dd: JUMP
000016de: JUMPDEST
000016df: POP
000016e0: SWAP1
000016e1: JUMP
000016e2: JUMPDEST
000016e3: SWAP1
000016e4: JUMP
000016e5: STOP
000016e6: LOG1
000016e7: PUSH6 0x627a7a723058
000016ee: KECCAK256
000016ef: PUSH17 0x6ed24401b5b8a3842b02ace1947993b89d
00001701: MSTORE
00001702: SELFDESTRUCT
00001703: SIGNEXTEND
00001704: SWAP11
00001705: UNKNOWN(0xD4)
00001706: DUP16
00001707: SWAP8
00001708: PUSH19

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high other cast SELFDESTRUCT present 85 no
view
evidence_json
{
    "notes": "selfdestruct can remove contract code and send funds; review reachability",
    "selfdestruct_count": 1
}
high other detector Untrusted CALL target/value reachable 60 no no
view
trace_id: 0xa510e57059645ace897b444e4634c7c39384bcfe1d6744ad62db0a449e15cc57
call_targets: 0xf7815c3b9187c0109206e71aea20e97c6940ea0e
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0xa510e57059645ace897b444e4634c7c39384bcfe1d6744ad62db0a449e15cc57",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xf7815c3b9187c0109206e71aea20e97c6940ea0e"
    ],
    "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": "0x025e7c27",
            "selector": "0x025e7c27",
            "calldata_variants": [
                "0x025e7c27",
                "0x025e7c270000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x173825d9",
            "selector": "0x173825d9",
            "calldata_variants": [
                "0x173825d9",
                "0x173825d90000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x20ea8d86",
            "selector": "0x20ea8d86",
            "calldata_variants": [
                "0x20ea8d86",
                "0x20ea8d860000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x2f54bf6e",
            "selector": "0x2f54bf6e",
            "calldata_variants": [
                "0x2f54bf6e",
                "0x2f54bf6e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x3411c81c",
            "selector": "0x3411c81c",
            "calldata_variants": [
                "0x3411c81c",
                "0x3411c81c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x54741525",
            "selector": "0x54741525",
            "calldata_variants": [
                "0x54741525",
                "0x547415250000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x7065cb48",
            "selector": "0x7065cb48",
            "calldata_variants": [
                "0x7065cb48",
                "0x7065cb480000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x784547a7",
            "selector": "0x784547a7",
            "calldata_variants": [
                "0x784547a7",
                "0x784547a70000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 5564,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 1,
    "guards_detected": [],
    "untrusted_call_count": 1
}
high other detector ETH value transfer possible 55 no no
view
trace_id: 0xa510e57059645ace897b444e4634c7c39384bcfe1d6744ad62db0a449e15cc57
call_targets: 0xf7815c3b9187c0109206e71aea20e97c6940ea0e
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0xa510e57059645ace897b444e4634c7c39384bcfe1d6744ad62db0a449e15cc57",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xf7815c3b9187c0109206e71aea20e97c6940ea0e"
    ],
    "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": "0x025e7c27",
            "selector": "0x025e7c27",
            "calldata_variants": [
                "0x025e7c27",
                "0x025e7c270000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x173825d9",
            "selector": "0x173825d9",
            "calldata_variants": [
                "0x173825d9",
                "0x173825d90000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x20ea8d86",
            "selector": "0x20ea8d86",
            "calldata_variants": [
                "0x20ea8d86",
                "0x20ea8d860000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x2f54bf6e",
            "selector": "0x2f54bf6e",
            "calldata_variants": [
                "0x2f54bf6e",
                "0x2f54bf6e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x3411c81c",
            "selector": "0x3411c81c",
            "calldata_variants": [
                "0x3411c81c",
                "0x3411c81c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x54741525",
            "selector": "0x54741525",
            "calldata_variants": [
                "0x54741525",
                "0x547415250000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x7065cb48",
            "selector": "0x7065cb48",
            "calldata_variants": [
                "0x7065cb48",
                "0x7065cb480000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x784547a7",
            "selector": "0x784547a7",
            "calldata_variants": [
                "0x784547a7",
                "0x784547a70000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 5564,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 1,
    "guards_detected": []
}
high other detector SELFDESTRUCT reachable 65 no no
view
trace_id: 0x08ef3b624704427257b43e311dc7a4ff0b8ce2dd9fac211df4dcdf4819d06a5b
validation_json
{
    "sink": "SELFDESTRUCT",
    "errors": 0,
    "status": "unknown",
    "attempts": 32,
    "trace_id": "0x08ef3b624704427257b43e311dc7a4ff0b8ce2dd9fac211df4dcdf4819d06a5b",
    "confirmed": false,
    "trace_mode": "structLogs",
    "call_targets": null,
    "matched_probe": null,
    "target_varies": null,
    "classification": "no_sink"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0x025e7c27",
            "selector": "0x025e7c27",
            "calldata_variants": [
                "0x025e7c27",
                "0x025e7c270000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x173825d9",
            "selector": "0x173825d9",
            "calldata_variants": [
                "0x173825d9",
                "0x173825d90000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x20ea8d86",
            "selector": "0x20ea8d86",
            "calldata_variants": [
                "0x20ea8d86",
                "0x20ea8d860000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x2f54bf6e",
            "selector": "0x2f54bf6e",
            "calldata_variants": [
                "0x2f54bf6e",
                "0x2f54bf6e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x3411c81c",
            "selector": "0x3411c81c",
            "calldata_variants": [
                "0x3411c81c",
                "0x3411c81c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x54741525",
            "selector": "0x54741525",
            "calldata_variants": [
                "0x54741525",
                "0x547415250000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x7065cb48",
            "selector": "0x7065cb48",
            "calldata_variants": [
                "0x7065cb48",
                "0x7065cb480000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x784547a7",
            "selector": "0x784547a7",
            "calldata_variants": [
                "0x784547a7",
                "0x784547a70000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "guards_detected": [],
    "selfdestruct_count": 1
}