86ffcb0f-c176-4eb3-bd5c-53eb6a02beb1
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 31197 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 76996 | artifact.fetch | complete | 1 / 3 | 2 weeks ago |
| 76997 | tool.cast_disasm | complete | 1 / 3 | 2 weeks ago |
| 76998 | analysis.bundle | complete | 1 / 3 | 2 weeks ago |
| 76999 | capability.graph | complete | 1 / 3 | 2 weeks ago |
| 77000 | detector.run | complete | 1 / 3 | 2 weeks ago |
| 77001 | validation.fork | complete | 1 / 3 | 2 weeks ago |
No slither job recorded yet.
[codex:719182] OpenAI Codex v0.77.0 (research preview)
[codex:719182] --------
[codex:719182] workdir: /tmp/codex-multi-512cwfyn
[codex:719182] model: gpt-5.2-codex
[codex:719182] provider: openai
[codex:719182] approval: never
[codex:719182] sandbox: read-only
[codex:719182] reasoning effort: xhigh
[codex:719182] reasoning summaries: auto
[codex:719182] session id: 019b7ca4-443f-7123-b4ed-adc964e03f4c
[codex:719182] --------
[codex:719182] user
[codex:719182] 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:719182]
[codex:719182] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:719182]
[codex:719182] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:719182] - Gas inefficiency, code quality, or best practices
[codex:719182] - Theoretical vulnerabilities without a clear extraction path
[codex:719182] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:719182] - Issues requiring social engineering or off-chain coordination
[codex:719182]
[codex:719182] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:719182] - CALL/DELEGATECALL with controllable destination or calldata
[codex:719182] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:719182] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:719182] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:719182] - External calls before state updates (reentrancy)
[codex:719182] - SELFDESTRUCT with controllable beneficiary
[codex:719182] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:719182]
[codex:719182] For each finding, you MUST explain:
[codex:719182] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:719182] 2. The concrete sequence of transactions to extract value
[codex:719182] 3. Why you believe this is exploitable (not just suspicious)
[codex:719182]
[codex:719182] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:719182] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:719182]
[codex:719182] Output MUST be valid JSON matching the provided schema.
[codex:719182] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:719182] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:719182] mcp startup: no servers
[codex:719182]
[codex:719182] thinking
[codex:719182] **Reading BYTECODE_BUNDLE file**
[codex:719182] exec
[codex:719182] /bin/bash -lc ls in /tmp/codex-multi-512cwfyn succeeded in 5ms:
[codex:719182] BYTECODE_BUNDLE.txt
[codex:719182] codex-output-schema.json
[codex:719182] exec
[codex:719182] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-512cwfyn succeeded in 5ms:
[codex:719182] Runtime bytecode bundle for best-effort auditing.
[codex:719182] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:719182]
[codex:719182] FILE: runtime_bytecode.hex
[codex:719182] 0x606060405236156101015763ffffffff60e060020a600035041663025e7c278114610153578063173825d91461018257806320ea8d86146101a05780632f54bf6e146101b55780633411c81c146101e557806354741525146102185780637065cb4814610244578063784547a7146102625780638b51d13f146102895780639ace38c2146102ae578063a0e67e2b1461036b578063a8abe69a146103d6578063b5dc40c314610451578063b77bf600146104bf578063ba51a6df146104e1578063c01a8c84146104f6578063c64274741461050b578063d74f8edd14610580578063dc8452cd146105a2578063e20056e6146105c4578063ee22610b146105e8575b6101515b600034111561014e57604080513481529051600160a060020a033316917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25b5b565b005b341561015b57fe5b6101666004356105fd565b60408051600160a060020a039092168252519081900360200190f35b341561018a57fe5b610151600160a060020a036004351661062f565b005b34156101a857fe5b6101516004356107e0565b005b34156101bd57fe5b6101d1600160a060020a03600435166108bd565b604080519115158252519081900360200190f35b34156101ed57fe5b6101d1600435600160a060020a03602435166108d2565b604080519115158252519081900360200190f35b341561022057fe5b610232600435151560243515156108f2565b60408051918252519081900360200190f35b341561024c57fe5b610151600160a060020a0360043516610961565b005b341561026a57fe5b6101d1600435610a98565b604080519115158252519081900360200190f35b341561029157fe5b610232600435610b2c565b60408051918252519081900360200190f35b34156102b657fe5b6102c1600435610bab565b60408051600160a060020a03861681526020810185905282151560608201526080918101828152845460026000196101006001841615020190911604928201839052909160a0830190859080156103595780601f1061032e57610100808354040283529160200191610359565b820191906000526020600020905b81548152906001019060200180831161033c57829003601f168201915b50509550505050505060405180910390f35b341561037357fe5b61037b610bdf565b60408051602080825283518183015283519192839290830191858101910280838382156103c3575b8051825260208311156103c357601f1990920191602091820191016103a3565b5050509050019250505060405180910390f35b34156103de57fe5b61037b60043560243560443515156064351515610c48565b60408051602080825283518183015283519192839290830191858101910280838382156103c3575b8051825260208311156103c357601f1990920191602091820191016103a3565b5050509050019250505060405180910390f35b341561045957fe5b61037b600435610d7d565b60408051602080825283518183015283519192839290830191858101910280838382156103c3575b8051825260208311156103c357601f1990920191602091820191016103a3565b5050509050019250505060405180910390f35b34156104c757fe5b610232610f05565b60408051918252519081900360200190f35b34156104e957fe5b610151600435610f0b565b005b34156104fe57fe5b610151600435610f9b565b005b341561051357fe5b604080516020600460443581810135601f8101849004840285018401909552848452610232948235600160a060020a031694602480359560649492939190920191819084018382808284375094965061108995505050505050565b60408051918252519081900360200190f35b341561058857fe5b6102326110a9565b60408051918252519081900360200190f35b34156105aa57fe5b6102326110ae565b60408051918252519081900360200190f35b34156105cc57fe5b610151600160a060020a03600435811690602435166110b4565b005b34156105f057fe5b610151600435611270565b005b600380548290811061060b57fe5b906000526020600020900160005b915054906101000a9004600160a060020a031681565b600030600160a060020a031633600160a060020a03161415156106525760006000fd5b600160a060020a038216600090815260026020526040902054829060ff16151561067c5760006000fd5b600160a060020a0383166000908152600260205260408120805460ff1916905591505b600354600019018210156107775782600160a060020a03166003838154811015156106c657fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a0316141561076b5760038054600019810190811061070757fe5b906000526020600020900160005b9054906101000a9004600160a060020a031660038381548110151561073657fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a03160217905550610777565b5b60019091019061069f565b60038054600019019061078a90826114cb565b5060035460045411156107a3576003546107a390610f0b565b5b604051600160a060020a038416907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a25b5b505b5050565b33600160a060020a03811660009081526002602052604090205460ff1615156108095760006000fd5b600082815260016020908152604080832033600160a060020a038116855292529091205483919060ff16151561083f5760006000fd5b600084815260208190526040902060030154849060ff16156108615760006000fd5b6000858152600160209081526040808320600160a060020a0333168085529252808320805460ff191690555187927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a35b5b505b50505b5050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b6000805b6005548110156109595783801561091f575060008181526020819052604090206003015460ff16155b806109435750828015610943575060008181526020819052604090206003015460ff165b5b15610950576001820191505b5b6001016108f6565b5b5092915050565b30600160a060020a031633600160a060020a03161415156109825760006000fd5b600160a060020a038116600090815260026020526040902054819060ff16156109ab5760006000fd5b81600160a060020a03811615156109c25760006000fd5b60038054905060010160045460068211806109dc57508181115b806109e5575080155b806109ee575081155b156109f95760006000fd5b600160a060020a0385166000908152600260205260409020805460ff191660019081179091556003805490918101610a3183826114cb565b916000526020600020900160005b8154600160a060020a03808a166101009390930a838102910219909116179091556040519091507ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25b5b50505b505b505b50565b600080805b600354811015610b245760008481526001602052604081206003805491929184908110610ac657fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000205460ff1615610b08576001820191505b600454821415610b1b5760019250610b24565b5b600101610a9d565b5b5050919050565b6000805b600354811015610ba45760008381526001602052604081206003805491929184908110610b5957fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000205460ff1615610b9b576001820191505b5b600101610b30565b5b50919050565b6000602081905290815260409020805460018201546003830154600160a060020a0390921692909160029091019060ff1684565b610be761151f565b6003805480602002602001604051908101604052809291908181526020018280548015610c3d57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610c1f575b505050505090505b90565b610c5061151f565b610c5861151f565b60006000600554604051805910610c6c5750595b908082528060200260200182016040525b50925060009150600090505b600554811015610d0657858015610cb2575060008181526020819052604090206003015460ff16155b80610cd65750848015610cd6575060008181526020819052604090206003015460ff165b5b15610cfd57808383815181101515610ceb57fe5b60209081029091010152600191909101905b5b600101610c89565b878703604051805910610d165750595b908082528060200260200182016040525b5093508790505b86811015610d71578281815181101515610d4457fe5b9060200190602002015184898303815181101515610d5e57fe5b602090810290910101525b600101610d2e565b5b505050949350505050565b610d8561151f565b610d8d61151f565b6003546040516000918291805910610da25750595b908082528060200260200182016040525b50925060009150600090505b600354811015610e875760008581526001602052604081206003805491929184908110610de857fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000205460ff1615610e7e576003805482908110610e3157fe5b906000526020600020900160005b9054906101000a9004600160a060020a03168383815181101515610e5f57fe5b600160a060020a03909216602092830290910190910152600191909101905b5b600101610dbf565b81604051805910610e955750595b908082528060200260200182016040525b509350600090505b81811015610efc578281815181101515610ec457fe5b906020019060200201518482815181101515610edc57fe5b600160a060020a039092166020928302909101909101525b600101610eae565b5b505050919050565b60055481565b30600160a060020a031633600160a060020a0316141515610f2c5760006000fd5b600354816006821180610f3e57508181115b80610f47575080155b80610f50575081155b15610f5b5760006000fd5b60048390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a15b5b50505b50565b33600160a060020a03811660009081526002602052604090205460ff161515610fc45760006000fd5b6000828152602081905260409020548290600160a060020a03161515610fea5760006000fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff161561101f5760006000fd5b6000858152600160208181526040808420600160a060020a0333168086529252808420805460ff1916909317909255905187927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a36108b385611270565b5b5b50505b505b5050565b60006110968484846113d8565b90506110a181610f9b565b5b9392505050565b600681565b60045481565b600030600160a060020a031633600160a060020a03161415156110d75760006000fd5b600160a060020a038316600090815260026020526040902054839060ff1615156111015760006000fd5b600160a060020a038316600090815260026020526040902054839060ff161561112a5760006000fd5b600092505b6003548310156111d25784600160a060020a031660038481548110151561115257fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031614156111c6578360038481548110151561119157fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a031602179055506111d2565b5b60019092019161112f565b600160a060020a03808616600081815260026020526040808220805460ff1990811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a2604051600160a060020a038516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25b5b505b505b505050565b600081815260208190526040812060030154829060ff16156112925760006000fd5b61129b83610a98565b156107d9576000838152602081905260409081902060038101805460ff19166001908117909155815481830154935160028085018054959850600160a060020a03909316959492939192839285926000199183161561010002919091019091160480156113495780601f1061131e57610100808354040283529160200191611349565b820191906000526020600020905b81548152906001019060200180831161132c57829003601f168201915b505091505060006040518083038185876185025a03f192505050156113985760405183907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a26107d9565b60405183907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a260038201805460ff191690555b5b5b5b505050565b600083600160a060020a03811615156113f15760006000fd5b60055460408051608081018252600160a060020a0388811682526020808301898152838501898152600060608601819052878152808452959095208451815473ffffffffffffffffffffffffffffffffffffffff191694169390931783555160018301559251805194965091939092611471926002850192910190611543565b50606091909101516003909101805460ff191691151591909117905560058054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a25b5b509392505050565b8154818355818115116107d9576000838152602090206107d99181019083016115c2565b5b505050565b8154818355818115116107d9576000838152602090206107d99181019083016115c2565b5b505050565b60408051602081019091526000815290565b60408051602081019091526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061158457805160ff19168380011785556115b1565b828001600101855582156115b1579182015b828111156115b1578251825591602001919060010190611596565b5b506115be9291506115c2565b5090565b610c4591905b808211156115be57600081556001016115c8565b5090565b905600a165627a7a723058208eb8f030d0c8220c52ec98193e7659b9b2bc747d3b869347ae76e4ccbb7f7f330029
[codex:719182]
[codex:719182] thinking
[codex:719182] **Preparing bytecode analysis script**
[codex:719182] exec
[codex:719182] /bin/bash -lc "python - <<'PY'
[codex:719182] import sys, textwrap
[codex:719182] hexstr=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].strip().split('\\n')[0]
[codex:719182] # Actually file has 'FILE: runtime_bytecode.hex' then '0x...' one line. We'll parse using find.
[codex:719182] import re
[codex:719182] m=re.search(r'0x[0-9a-fA-F]+', open('BYTECODE_BUNDLE.txt').read())
[codex:719182] hexstr=m.group(0)[2:]
[codex:719182] code=bytes.fromhex(hexstr)
[codex:719182] # opcode map
[codex:719182] opnames={
[codex:719182] 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:719182] 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:719182] 0x20:'SHA3',
[codex:719182] 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:719182] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:719182] 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:719182] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:719182] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:719182] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:719182] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:719182] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:719182] }
[codex:719182]
[codex:719182] # disassemble; gather offsets for key ops
[codex:719182] key_ops={0xf1:'CALL',0xf2:'CALLCODE',0xf4:'DELEGATECALL',0xfa:'STATICCALL',0xff:'SELFDESTRUCT'}
[codex:719182]
[codex:719182] pc=0
[codex:719182] ops=[]
[codex:719182] while pc<len(code):
[codex:719182] op=code[pc]
[codex:719182] name=opnames.get(op, f'OP_{op:02x}')
[codex:719182] start=pc
[codex:719182] pc+=1
[codex:719182] imm=None
[codex:719182] if 0x60 <= op <= 0x7f:
[codex:719182] n=op-0x5f
[codex:719182] imm=code[pc:pc+n]
[codex:719182] pc+=n
[codex:719182] ops.append((start, op, name, imm))
[codex:719182]
[codex:719182] # print key ops with context
[codex:719182] for i,(pc,op,name,imm) in enumerate(ops):
[codex:719182] if op in key_ops:
[codex:719182] ctx=ops[max(0,i-5):i+6]
[codex:719182] print(f'@{pc:04x} {name}')
[codex:719182] for (cpc,cop,cname,cimm) in ctx:
[codex:719182] if cimm is not None:
[codex:719182] print(f' {cpc:04x}: {cname} 0x{cimm.hex()}')
[codex:719182] else:
[codex:719182] print(f' {cpc:04x}: {cname}')
[codex:719182] print('---')
[codex:719182]
[codex:719182] # print any SELFDESTRUCT
[codex:719182] print('selfdestructs:', [pc for pc,op,_,_ in ops if op==0xff])
[codex:719182]
[codex:719182] # Count DELEGATECALL etc
[codex:719182] from collections import Counter
[codex:719182] ctr=Counter(op for _,op,_,_ in ops)
[codex:719182] print('counts', {opnames[k]:ctr.get(k,0) for k in [0xf1,0xf2,0xf4,0xfa,0xff]})
[codex:719182] PY" in /tmp/codex-multi-512cwfyn succeeded in 32ms:
[codex:719182] @135f CALL
[codex:719182] 1358: DUP6
[codex:719182] 1359: DUP8
[codex:719182] 135a: PUSH2 0x8502
[codex:719182] 135d: GAS
[codex:719182] 135e: SUB
[codex:719182] 135f: CALL
[codex:719182] 1360: SWAP3
[codex:719182] 1361: POP
[codex:719182] 1362: POP
[codex:719182] 1363: POP
[codex:719182] 1364: ISZERO
[codex:719182] ---
[codex:719182] selfdestructs: []
[codex:719182] counts {'CALL': 1, 'CALLCODE': 0, 'DELEGATECALL': 0, 'STATICCALL': 0, 'SELFDESTRUCT': 0}
[codex:719182]
[codex:719182] thinking
[codex:719182] **Analyzing CALL instruction context**
[codex:719182] exec
[codex:719182] /bin/bash -lc "python - <<'PY'
[codex:719182] import re
[codex:719182] hexstr=re.search(r'0x[0-9a-fA-F]+', open('BYTECODE_BUNDLE.txt').read()).group(0)[2:]
[codex:719182] code=bytes.fromhex(hexstr)
[codex:719182] # simple disassembler
[codex:719182] opnames={
[codex:719182] 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:719182] 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:719182] 0x20:'SHA3',
[codex:719182] 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:719182] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:719182] 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:719182] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:719182] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:719182] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:719182] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:719182] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:719182] }
[codex:719182]
[codex:719182] # disassemble all, but focus on region around 0x12a0-0x13a0
[codex:719182] start=0x1280
[codex:719182] end=0x13d0
[codex:719182] pc=0
[codex:719182] while pc<len(code):
[codex:719182] op=code[pc]
[codex:719182] name=opnames.get(op, f'OP_{op:02x}')
[codex:719182] pc0=pc
[codex:719182] pc+=1
[codex:719182] imm=None
[codex:719182] if 0x60 <= op <= 0x7f:
[codex:719182] n=op-0x5f
[codex:719182] imm=code[pc:pc+n]
[codex:719182] pc+=n
[codex:719182] if start <= pc0 <= end:
[codex:719182] if imm is not None:
[codex:719182] print(f'{pc0:04x}: {name} 0x{imm.hex()}')
[codex:719182] else:
[codex:719182] print(f'{pc0:04x}: {name}')
[codex:719182] PY" in /tmp/codex-multi-512cwfyn succeeded in 26ms:
[codex:719182] 1281: ADD
[codex:719182] 1282: SLOAD
[codex:719182] 1283: DUP3
[codex:719182] 1284: SWAP1
[codex:719182] 1285: PUSH1 0xff
[codex:719182] 1287: AND
[codex:719182] 1288: ISZERO
[codex:719182] 1289: PUSH2 0x1292
[codex:719182] 128c: JUMPI
[codex:719182] 128d: PUSH1 0x00
[codex:719182] 128f: PUSH1 0x00
[codex:719182] 1291: REVERT
[codex:719182] 1292: JUMPDEST
[codex:719182] 1293: PUSH2 0x129b
[codex:719182] 1296: DUP4
[codex:719182] 1297: PUSH2 0x0a98
[codex:719182] 129a: JUMP
[codex:719182] 129b: JUMPDEST
[codex:719182] 129c: ISZERO
[codex:719182] 129d: PUSH2 0x07d9
[codex:719182]
[codex:719182] thinking
[codex:719182] **Analyzing EVM call behavior and potential vulnerabilities**
[codex:719182]
[codex:719182] I'm piecing together how the CALL instruction operates here, trying to determine if it's a safe token transfer or a risky external call with value and gas. I’m tracing the stack state and function selectors to spot any unauthorized value transfers or admin functions, considering if reentrancy protections or access controls are in place. It’s complex, but I’m simulating the stack symbolically and parsing dispatch logic to uncover any exploitable paths.
[codex:719182] exec
[codex:719182] /bin/bash -lc "python - <<'PY'
[codex:719182] import re
[codex:719182] hexstr=re.search(r'0x[0-9a-fA-F]+', open('BYTECODE_BUNDLE.txt').read()).group(0)[2:]
[codex:719182] code=bytes.fromhex(hexstr)
[codex:719182] # disassembler
[codex:719182] opnames={
[codex:719182] 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:719182] 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:719182] 0x20:'SHA3',
[codex:719182] 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:719182] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:719182] 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:719182] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:719182] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:719182] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:719182] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:719182] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:719182] }
[codex:719182]
[codex:719182] start=0x0a80
[codex:719182] end=0x0b20
[codex:719182] pc=0
[codex:719182] while pc<len(code):
[codex:719182] op=code[pc]; name=opnames.get(op, f'OP_{op:02x}')
[codex:719182] pc0=pc; pc+=1
[codex:719182] imm=None
[codex:719182] if 0x60 <= op <= 0x7f:
[codex:719182] n=op-0x5f
[codex:719182] imm=code[pc:pc+n]; pc+=n
[codex:719182] if start <= pc0 <= end:
[codex:719182] if imm is not None:
[codex:719182] print(f'{pc0:04x}: {name} 0x{imm.hex()}')
[codex:719182] else:
[codex:719182] print(f'{pc0:04x}: {name}')
[codex:719182] PY" in /tmp/codex-multi-512cwfyn succeeded in 33ms:
[codex:719182] 0a88: SWAP1
[codex:719182] 0a89: PUSH1 0x00
[codex:719182] 0a8b: SWAP1
[codex:719182] 0a8c: LOG2
[codex:719182] 0a8d: JUMPDEST
[codex:719182] 0a8e: JUMPDEST
[codex:719182] 0a8f: POP
[codex:719182] 0a90: POP
[codex:719182] 0a91: JUMPDEST
[codex:719182] 0a92: POP
[codex:719182] 0a93: JUMPDEST
[codex:719182] 0a94: POP
[codex:719182] 0a95: JUMPDEST
[codex:719182] 0a96: POP
[codex:719182] 0a97: JUMP
[codex:719182] 0a98: JUMPDEST
[codex:719182] 0a99: PUSH1 0x00
[codex:719182] 0a9b: DUP1
[codex:719182] 0a9c: DUP1
[codex:719182] 0a9d: JUMPDEST
[codex:719182]
[codex:719182] thinking
[codex:719182] **Analyzing contract call sequence and state updates**
[codex:719182]
[codex:719182] I'm digging into a tricky EVM function that seems related to ERC721's safeTransferFrom, focusing on how it updates state before making an external call—likely to onERC721Received—and checking if that call could enable reentrancy or vulnerabilities. I’m tracing the stack and memory around the CALL opcode carefully to understand if value is transferred or if the state updates properly guard against exploits. It’s a dense puzzle, but I want to clarify how the contract manages state and external calls to rule out risks.
[codex:719182] exec
[codex:719182] /bin/bash -lc 'which evm || which evmdasm || which hevm || which solc' in /tmp/codex-multi-512cwfyn exited 1 in 9ms:
[codex:719182]
[codex:719182]
[codex:719182]
[codex:719182] thinking
[codex:719182] **Designing symbolic stack execution for call arguments**
[codex:719182]
[codex:719182] I'm working through building a symbolic interpreter in Python to track the EVM stack around a function call site, starting at a jump destination with a symbolic initial stack; my goal is to identify which symbolic stack elements correspond to the call arguments—especially to check if the call value is zero—while approximating the effects of internal calls and loops to stay focused on the straight-line path leading to the CALL instruction.
[codex:719182] thinking
[codex:719182] **Planning symbolic path exploration for stack analysis**
[codex:719182]
[codex:719182] I’m preparing to build a symbolic executor in Python that explores possible execution paths between two points in the bytecode, handling branches by exploring both sides with bounded depth to avoid state explosion; this will help me accurately track the stack state at the CALL instruction by modeling symbolic values for memory and storage loads, while approximating or skipping loops to focus on the core call argument computations.
[codex:719182] exec
[codex:719182] /bin/bash -lc "python - <<'PY'
[codex:719182] import re
[codex:719182] hexstr=re.search(r'0x[0-9a-fA-F]+', open('BYTECODE_BUNDLE.txt').read()).group(0)[2:]
[codex:719182] code=bytes.fromhex(hexstr)
[codex:719182]
[codex:719182] # opcode info
[codex:719182] opnames={
[codex:719182] 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:719182] 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:719182] 0x20:'SHA3',
[codex:719182] 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:719182] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:719182] 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:719182] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:719182] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:719182] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:719182] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:719182] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:719182] }
[codex:719182]
[codex:719182] # decode into ops list with pc
[codex:719182] ops=[]
[codex:719182] pc=0
[codex:719182] while pc<len(code):
[codex:719182] op=code[pc]; name=opnames.get(op, f'OP_{op:02x}')
[codex:719182] pc0=pc; pc+=1; imm=None
[codex:719182] if 0x60 <= op <= 0x7f:
[codex:719182] n=op-0x5f; imm=code[pc:pc+n]; pc+=n
[codex:719182] ops.append((pc0,op,name,imm))
[codex:719182]
[codex:719182] # map pc->index
[codex:719182] pc_to_idx={pc:i for i,(pc,_,_,_) in enumerate(ops)}
[codex:719182]
[codex:719182] # simple symbolic stack value class
[codex:719182] class Val:
[codex:719182] def __init__(self, kind, data=None):
[codex:719182] self.kind=kind; self.data=data
[codex:719182] def __repr__(self):
[codex:719182] if self.kind=='const':
[codex:719182] return hex(self.data)
[codex:719182] return f\"{self.kind}({self.data})\" if self.data is not None else self.kind
[codex:719182]
[codex:719182] def const(v): return Val('const', v)
[codex:719182]
[codex:719182] def simplify(op, a, b=None):
[codex:719182] # only some ops
[codex:719182] if b is None:
[codex:719182] if op=='ISZERO' and a.kind=='const':
[codex:719182] return const(1 if a.data==0 else 0)
[codex:719182] if b is not None and a.kind=='const' and b.kind=='const':
[codex:719182] if op=='ADD': return const((a.data+b.data)&((1<<256)-1))
[codex:719182] if op=='SUB': return const((a.data-b.data)&((1<<256)-1))
[codex:719182] if op=='MUL': return const((a.data*b.data)&((1<<256)-1))
[codex:719182] if op=='DIV': return const(0 if b.data==0 else a.data//b.data)
[codex:719182] if op=='AND': return const(a.data & b.data)
[codex:719182] if op=='OR': return const(a.data | b.data)
[codex:719182] if op=='EQ': return const(1 if a.data==b.data else 0)
[codex:719182] if op=='LT': return const(1 if a.data<b.data else 0)
[codex:719182] if op=='GT': return const(1 if a.data>b.data else 0)
[codex:719182] return None
[codex:719182]
[codex:719182] # We explore from pc=0x129b to CALL at 0x135f
[codex:719182] start_pc=0x129b
[codex:719182] call_pc=0x135f
[codex:719182]
[codex:719182] # initial stack depth guess: let's use 10 unknowns
[codex:719182] init_stack=[Val('arg', i) for i in range(10)]
[codex:719182]
[codex:719182] from collections import deque
[codex:719182] State=tuple
[codex:719182] start_idx=pc_to_idx[start_pc]
[codex:719182]
[codex:719182] # use BFS with limited steps
[codex:719182] max_steps=500
[codex:719182] visited=set()
[codex:719182] queue=deque()
[codex:719182] queue.append((start_idx, init_stack.copy(), 0))
[codex:719182]
[codex:719182] found=None
[codex:719182]
[codex:719182] while queue:
[codex:719182] idx, stack, steps = queue.popleft()
[codex:719182] if steps>max_steps: continue
[codex:719182] pc,op,name,imm=ops[idx]
[codex:719182] state_key=(idx, tuple(v.kind for v in stack), len(stack))
[codex:719182] if state_key in visited: continue
[codex:719182] visited.add(state_key)
[codex:719182] # if reached call
[codex:719182] if pc==call_pc and op==0xf1:
[codex:719182] found=(stack.copy(), steps)
[codex:719182] break
[codex:719182] # execute op
[codex:719182] # If op is JUMPDEST, just move to next
[codex:719182] def next_idx(nidx):
[codex:719182] if nidx is None: return
[codex:719182] queue.append((nidx, stack.copy(), steps+1))
[codex:719182] # handle PUSH
[codex:719182] if 0x60 <= op <= 0x7f:
[codex:719182] n=op-0x5f
[codex:719182] stack.append(const(int.from_bytes(imm, 'big')))
[codex:719182] next_idx(idx+1)
[codex:719182] continue
[codex:719182] if 0x80 <= op <= 0x8f: # DUP
[codex:719182] n=op-0x7f
[codex:719182] if len(stack)>=n:
[codex:719182] stack.append(stack[-n])
[codex:719182] else:
[codex:719182] stack.append(Val('dup_undef'))
[codex:719182] next_idx(idx+1); continue
[codex:719182] if 0x90 <= op <= 0x9f: # SWAP
[codex:719182] n=op-0x8f
[codex:719182] if len(stack)>=n+1:
[codex:719182] stack[-1], stack[-1-n] = stack[-1-n], stack[-1]
[codex:719182] next_idx(idx+1); continue
[codex:719182] # opcodes that push a new symbolic value
[codex:719182] if op in [0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x5a,0x58,0x59]:
[codex:719182] stack.append(Val(name.lower()))
[codex:719182] next_idx(idx+1); continue
[codex:719182] # binary ops
[codex:719182] if op in [0x01,0x02,0x03,0x04,0x10,0x11,0x14,0x16,0x17,0x18,0x1b,0x1c,0x1d,0x1a,0x20]:
[codex:719182] if len(stack)>=2:
[codex:719182] b=stack.pop(); a=stack.pop()
[codex:719182] simp=simplify(opnames[op], a, b)
[codex:719182] if simp is None:
[codex:719182] stack.append(Val(opnames[op].lower(), (a,b)))
[codex:719182] else:
[codex:719182] stack.append(simp)
[codex:719182] else:
[codex:719182] stack.append(Val(opnames[op].lower()))
[codex:719182] next_idx(idx+1); continue
[codex:719182] # unary ops
[codex:719182] if op in [0x15,0x19]:
[codex:719182] if len(stack)>=1:
[codex:719182] a=stack.pop(); simp=simplify(opnames[op], a)
[codex:719182] if simp is None:
[codex:719182] stack.append(Val(opnames[op].lower(), a))
[codex:719182] else:
[codex:719182] stack.append(simp)
[codex:719182] else:
[codex:719182] stack.append(Val(opnames[op].lower()))
[codex:719182] next_idx(idx+1); continue
[codex:719182] # MLOAD/SLOAD
[codex:719182] if op in [0x51,0x54]:
[codex:719182] if stack: stack.pop()
[codex:719182] stack.append(Val(opnames[op].lower(), pc))
[codex:719182] next_idx(idx+1); continue
[codex:719182] # MSTORE/SSTORE/POP
[codex:719182] if op in [0x52,0x55,0x50,0x53]:
[codex:719182] # pop required args
[codex:719182] pops=2 if op in [0x52,0x55] else 1
[codex:719182] for _ in range(pops):
[codex:719182] if stack: stack.pop()
[codex:719182] next_idx(idx+1); continue
[codex:719182] # JUMP
[codex:719182] if op==0x56:
[codex:719182] # jump to dest if constant
[codex:719182] if stack:
[codex:719182] dest=stack.pop()
[codex:719182] if dest.kind=='const' and dest.data in pc_to_idx:
[codex:719182] next_idx(pc_to_idx[dest.data])
[codex:719182] else:
[codex:719182] # unknown jump, stop this path
[codex:719182] pass
[codex:719182] continue
[codex:719182] # JUMPI
[codex:719182] if op==0x57:
[codex:719182] # pop dest and cond
[codex:719182] dest=stack.pop() if stack else Val('undef')
[codex:719182] cond=stack.pop() if stack else Val('undef')
[codex:719182] # branch not taken: continue to next
[codex:719182] next_idx(idx+1)
[codex:719182] # branch taken if dest constant
[codex:719182] if dest.kind=='const' and dest.data in pc_to_idx:
[codex:719182] # add taken branch
[codex:719182] queue.append((pc_to_idx[dest.data], stack.copy(), steps+1))
[codex:719182] continue
[codex:719182] # JUMPDEST
[codex:719182] if op==0x5b:
[codex:719182] next_idx(idx+1); continue
[codex:719182] # CALL
[codex:719182] if op==0xf1:
[codex:719182] # nothing to do
[codex:719182] next_idx(idx+1); continue
[codex:719182] # RETURN/REVERT/STOP
[codex:719182] if op in [0xf3,0xfd,0x00,0xfe]:
[codex:719182] continue
[codex:719182] # default: just move on
[codex:719182] next_idx(idx+1)
[codex:719182]
[codex:719182] if found:
[codex:719182] stack,steps=found
[codex:719182] print('Found call stack depth', len(stack), 'steps', steps)
[codex:719182] print('Top 12 stack items:')
[codex:719182] for i,v in enumerate(stack[-12:]):
[codex:719182] print(len(stack)-12+i, v)
[codex:719182] # show top 7 (call args)
[codex:719182] print('Call args (top7, top first):')
[codex:719182] for v in stack[-1:-8:-1]:
[codex:719182] print(v)
[codex:719182] else:
[codex:719182] print('call not reached')
[codex:719182] PY" in /tmp/codex-multi-512cwfyn succeeded in 36ms:
[codex:719182] Found call stack depth 20 steps 105
[codex:719182] Top 12 stack items:
[codex:719182] 8 arg(8)
[codex:719182] 9 sload(4808)
[codex:719182] 10 and((0x9e, mload(4810)))
[codex:719182] 11 sload(4817)
[codex:719182] 12 0x2
[codex:719182] 13 0x0
[codex:719182] 14 mload(4947)
[codex:719182] 15 sub((mload(4947), 0x2))
[codex:719182] 16 mload(4947)
[codex:719182] 17 sload(4817)
[codex:719182] 18 and((0x9e, mload(4810)))
[codex:719182] 19 sub((0x8502, gas))
[codex:719182] Call args (top7, top first):
[codex:719182] sub((0x8502, gas))
[codex:719182] and((0x9e, mload(4810)))
[codex:719182] sload(4817)
[codex:719182] mload(4947)
[codex:719182] sub((mload(4947), 0x2))
[codex:719182]
[codex:719182] thinking
[codex:719182] **Analyzing symbolic execution call arguments**
[codex:719182] exec
[codex:719182] /bin/bash -lc "python - <<'PY'
[codex:719182] import re
[codex:719182] hexstr=re.search(r'0x[0-9a-fA-F]+', open('BYTECODE_BUNDLE.txt').read()).group(0)[2:]
[codex:719182] code=bytes.fromhex(hexstr)
[codex:719182]
[codex:719182] opnames={
[codex:719182] 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:719182] 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:719182] 0x20:'SHA3',
[codex:719182] 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:719182] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:719182] 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:719182] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:719182] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:719182] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:719182] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:719182] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:719182] }
[codex:719182]
[codex:719182] ops=[]
[codex:719182] pc=0
[codex:719182] while pc<len(code):
[codex:719182] op=code[pc]; name=opnames.get(op, f'OP_{op:02x}')
[codex:719182] pc0=pc; pc+=1; imm=None
[codex:719182] if 0x60 <= op <= 0x7f:
[codex:719182] n=op-0x5f; imm=code[pc:pc+n]; pc+=n
[codex:719182] ops.append((pc0,op,name,imm))
[codex:719182]
[codex:719182] pc_to_idx={pc:i for i,(pc,_,_,_) in enumerate(ops)}
[codex:719182]
[codex:719182] class Val:
[codex:719182] def __init__(self, kind, data=None):
[codex:719182] self.kind=kind; self.data=data
[codex:719182] def __repr__(self):
[codex:719182] if self.kind=='const': return hex(self.data)
[codex:719182] return f\"{self.kind}({self.data})\" if self.data is not None else self.kind
[codex:719182]
[codex:719182] def const(v): return Val('const', v)
[codex:719182]
[codex:719182] mask256=(1<<256)-1
[codex:719182]
[codex:719182] def eval_bin(op, a, b):
[codex:719182] # EVM pops a (top), b (next), result = b op a
[codex:719182] if a.kind=='const' and b.kind=='const':
[codex:719182] if op=='ADD': return const((b.data+a.data)&mask256)
[codex:719182] if op=='SUB': return const((b.data-a.data)&mask256)
[codex:719182] if op=='MUL': return const((b.data*a.data)&mask256)
[codex:719182] if op=='DIV': return const(0 if a.data==0 else b.data//a.data)
[codex:719182] if op=='AND': return const(b.data & a.data)
[codex:719182] if op=='OR': return const(b.data | a.data)
[codex:719182] if op=='EQ': return const(1 if b.data==a.data else 0)
[codex:719182] if op=='LT': return const(1 if b.data<a.data else 0)
[codex:719182] if op=='GT': return const(1 if b.data>a.data else 0)
[codex:719182] return Val(op.lower(), (b,a))
[codex:719182]
[codex:719182]
[codex:719182] def eval_un(op, a):
[codex:719182] if a.kind=='const':
[codex:719182] if op=='ISZERO': return const(1 if a.data==0 else 0)
[codex:719182] if op=='NOT': return const((~a.data)&mask256)
[codex:719182] return Val(op.lower(), a)
[codex:719182]
[codex:719182] # BFS exploration from start pc
[codex:719182] start_pc=0x129b
[codex:719182] call_pc=0x135f
[codex:719182] start_idx=pc_to_idx[start_pc]
[codex:719182] init_stack=[Val('arg', i) for i in range(12)]
[codex:719182]
[codex:719182] from collections import deque
[codex:719182] queue=deque()
[codex:719182] queue.append((start_idx, init_stack.copy(), 0))
[codex:719182] visited=set()
[codex:719182] max_steps=600
[codex:719182] found=None
[codex:719182]
[codex:719182] while queue:
[codex:719182] idx, stack, steps = queue.popleft()
[codex:719182] if steps>max_steps: continue
[codex:719182] pc,op,name,imm=ops[idx]
[codex:719182] state_key=(idx, tuple(v.kind for v in stack), len(stack))
[codex:719182] if state_key in visited: continue
[codex:719182] visited.add(state_key)
[codex:719182] if pc==call_pc and op==0xf1:
[codex:719182] found=(stack.copy(), steps)
[codex:719182] break
[codex:719182] # execute
[codex:719182] if 0x60 <= op <= 0x7f:
[codex:719182] stack.append(const(int.from_bytes(imm,'big')))
[codex:719182] queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182] if 0x80 <= op <= 0x8f:
[codex:719182] n=op-0x7f
[codex:719182] stack.append(stack[-n] if len(stack)>=n else Val('dup_undef'))
[codex:719182] queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182] if 0x90 <= op <= 0x9f:
[codex:719182] n=op-0x8f
[codex:719182] if len(stack)>=n+1:
[codex:719182] stack[-1], stack[-1-n] = stack[-1-n], stack[-1]
[codex:719182] queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182] if op in [0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x5a,0x58,0x59]:
[codex:719182] stack.append(Val(name.lower(), pc))
[codex:719182] queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182] if op in [0x01,0x02,0x03,0x04,0x10,0x11,0x14,0x16,0x17,0x18,0x1b,0x1c,0x1d,0x1a,0x20]:
[codex:719182] if len(stack)>=2:
[codex:719182] a=stack.pop(); b=stack.pop()
[codex:719182] stack.append(eval_bin(opnames[op], a, b))
[codex:719182] else:
[codex:719182] stack.append(Val(opnames[op].lower()))
[codex:719182] queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182] if op in [0x15,0x19]:
[codex:719182] if len(stack)>=1:
[codex:719182] a=stack.pop(); stack.append(eval_un(opnames[op], a))
[codex:719182] else:
[codex:719182] stack.append(Val(opnames[op].lower()))
[codex:719182] queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182] if op in [0x51,0x54]:
[codex:719182] if stack: stack.pop()
[codex:719182] stack.append(Val(opnames[op].lower(), pc))
[codex:719182] queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182] if op in [0x52,0x55,0x50,0x53]:
[codex:719182] pops=2 if op in [0x52,0x55] else 1
[codex:719182] for _ in range(pops):
[codex:719182] if stack: stack.pop()
[codex:719182] queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182] if op==0x56:
[codex:719182] if stack:
[codex:719182] dest=stack.pop()
[codex:719182] if dest.kind=='const' and dest.data in pc_to_idx:
[codex:719182] queue.append((pc_to_idx[dest.data], stack.copy(), steps+1))
[codex:719182] continue
[codex:719182] if op==0x57:
[codex:719182] dest=stack.pop() if stack else Val('undef')
[codex:719182] cond=stack.pop() if stack else Val('undef')
[codex:719182] # not taken
[codex:719182] queue.append((idx+1, stack.copy(), steps+1))
[codex:719182] # taken if constant dest
[codex:719182] if dest.kind=='const' and dest.data in pc_to_idx:
[codex:719182] queue.append((pc_to_idx[dest.data], stack.copy(), steps+1))
[codex:719182] continue
[codex:719182] if op==0x5b:
[codex:719182] queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182] if op in [0xf1,0xf3,0xfd,0x00,0xfe]:
[codex:719182] queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182] # default
[codex:719182] queue.append((idx+1, stack.copy(), steps+1))
[codex:719182]
[codex:719182] if found:
[codex:719182] stack,steps=found
[codex:719182] print('Found call, stack depth', len(stack))
[codex:719182] print('Top 10 stack items (bottom->top):')
[codex:719182] for v in stack[-10:]:
[codex:719182] print(v)
[codex:719182] print('Call args (top7, top first):')
[codex:719182] for v in stack[-1:-8:-1]:
[codex:719182] print(v)
[codex:719182] else:
[codex:719182] print('call not reached')
[codex:719182] PY" in /tmp/codex-multi-512cwfyn succeeded in 30ms:
[codex:719182] Found call, stack depth 22
[codex:719182] Top 10 stack items (bottom->top):
[codex:719182] and((0x9e, mload(4810)))
[codex:719182] sload(4817)
[codex:719182] 0x2
[codex:719182] 0x0
[codex:719182] mload(4947)
[codex:719182] sub((mload(4947), 0x2))
[codex:719182] mload(4947)
[codex:719182] sload(4817)
[codex:719182] and((0x9e, mload(4810)))
[codex:719182] sub((0x8502, gas(4957)))
[codex:719182] Call args (top7, top first):
[codex:719182] sub((0x8502, gas(4957)))
[codex:719182] and((0x9e, mload(4810)))
[codex:719182] sload(4817)
[codex:719182] mload(4947)
[codex:719182] sub((mload(4947), 0x2))
[codex:719182] mload(4947)
[codex:719182] 0x0
[codex:719182]
[codex:719182] thinking
[codex:719182] **Analyzing storage loads and EVM call construction**
[codex:719182] exec
[codex:719182] /bin/bash -lc "python - <<'PY'
[codex:719182] import re
[codex:719182] hexstr=re.search(r'0x[0-9a-fA-F]+', open('BYTECODE_BUNDLE.txt').read()).group(0)[2:]
[codex:719182] code=bytes.fromhex(hexstr)
[codex:719182]
[codex:719182] opnames={
[codex:719182] 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:719182] 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:719182] 0x20:'SHA3',
[codex:719182] 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:719182] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:719182] 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:719182] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:719182] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:719182] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:719182] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:719182] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:719182] }
[codex:719182]
[codex:719182] ops=[]
[codex:719182] pc=0
[codex:719182] while pc<len(code):
[codex:719182] op=code[pc]; name=opnames.get(op, f'OP_{op:02x}')
[codex:719182] pc0=pc; pc+=1; imm=None
[codex:719182] if 0x60 <= op <= 0x7f:
[codex:719182] n=op-0x5f; imm=code[pc:pc+n]; pc+=n
[codex:719182] ops.append((pc0,op,name,imm))
[codex:719182]
[codex:719182] pc_to_idx={pc:i for i,(pc,_,_,_) in enumerate(ops)}
[codex:719182]
[codex:719182] class Val:
[codex:719182] def __init__(self, kind, data=None):
[codex:719182] self.kind=kind; self.data=data
[codex:719182] def __repr__(self):
[codex:719182] if self.kind=='const': return hex(self.data)
[codex:719182] return f\"{self.kind}({self.data})\" if self.data is not None else self.kind
[codex:719182]
[codex:719182] def const(v): return Val('const', v)
[codex:719182]
[codex:719182] mask256=(1<<256)-1
[codex:719182]
[codex:719182] def eval_bin(op, a, b):
[codex:719182] # pops a (top), b (next), result = b op a
[codex:719182] if a.kind=='const' and b.kind=='const':
[codex:719182] if op=='ADD': return const((b.data+a.data)&mask256)
[codex:719182] if op=='SUB': return const((b.data-a.data)&mask256)
[codex:719182] if op=='MUL': return const((b.data*a.data)&mask256)
[codex:719182] if op=='DIV': return const(0 if a.data==0 else b.data//a.data)
[codex:719182] if op=='AND': return const(b.data & a.data)
[codex:719182] if op=='OR': return const(b.data | a.data)
[codex:719182] if op=='XOR': return const(b.data "'^ a.data)
[codex:719182] if op=='"'EQ': return const(1 if b.data==a.data else 0)
[codex:719182] if op=='LT': return const(1 if b.data<a.data else 0)
[codex:719182] if op=='GT': return const(1 if b.data>a.data else 0)
[codex:719182] if op=='EXP':
[codex:719182] return const(pow(b.data, a.data, 1<<256))
[codex:719182] if op=='SHL': return const((b.data << a.data)&mask256)
[codex:719182] if op=='SHR': return const((b.data >> a.data)&mask256)
[codex:719182] if op=='SAR':
[codex:719182] # sign-extend b.data then shift
[codex:719182] val=b.data
[codex:719182] if val & (1<<255):
[codex:719182] val = val - (1<<256)
[codex:719182] return const((val >> a.data)&mask256)
[codex:719182] if op=='BYTE':
[codex:719182] # byte(a, b)
[codex:719182] if a.data>=32: return const(0)
[codex:719182] return const((b.data >> (8*(31-a.data))) & 0xff)
[codex:719182] return Val(op.lower(), (b,a))
[codex:719182]
[codex:719182]
[codex:719182] def eval_un(op, a):
[codex:719182] if a.kind=='const':
[codex:719182] if op=='ISZERO': return const(1 if a.data==0 else 0)
[codex:719182] if op=='NOT': return const((~a.data)&mask256)
[codex:719182] return Val(op.lower(), a)
[codex:719182]
[codex:719182] start_pc=0x129b
[codex:719182] call_pc=0x135f
[codex:719182] start_idx=pc_to_idx[start_pc]
[codex:719182] init_stack=[Val('arg', i) for i in range(12)]
[codex:719182]
[codex:719182] from collections import deque
[codex:719182] queue=deque()
[codex:719182] queue.append((start_idx, init_stack.copy(), 0))
[codex:719182] visited=set()
[codex:719182] max_steps=800
[codex:719182] found=None
[codex:719182]
[codex:719182] while queue:
[codex:719182] idx, stack, steps = queue.popleft()
[codex:719182] if steps>max_steps: continue
[codex:719182] pc,op,name,imm=ops[idx]
[codex:719182] state_key=(idx, tuple(v.kind for v in stack), len(stack))
[codex:719182] if state_key in visited: continue
[codex:719182] visited.add(state_key)
[codex:719182] if pc==call_pc and op==0xf1:
[codex:719182] found=(stack.copy(), steps)
[codex:719182] break
[codex:719182] if 0x60 <= op <= 0x7f:
[codex:719182] stack.append(const(int.from_bytes(imm,'big')))
[codex:719182] queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182] if 0x80 <= op <= 0x8f:
[codex:719182] n=op-0x7f
[codex:719182] stack.append(stack[-n] if len(stack)>=n else Val('dup_undef'))
[codex:719182] queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182] if 0x90 <= op <= 0x9f:
[codex:719182] n=op-0x8f
[codex:719182] if len(stack)>=n+1:
[codex:719182] stack[-1], stack[-1-n] = stack[-1-n], stack[-1]
[codex:719182] queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182] if op in [0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x5a,0x58,0x59]:
[codex:719182] stack.append(Val(name.lower(), pc))
[codex:719182] queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182] if op in [0x01,0x02,0x03,0x04,0x08,0x09,0x0a,0x10,0x11,0x12,0x13,0x14,0x16,0x17,0x18,0x1a,0x1b,0x1c,0x1d,0x20]:
[codex:719182] if len(stack)>=2:
[codex:719182] a=stack.pop(); b=stack.pop()
[codex:719182] stack.append(eval_bin(opnames[op], a, b))
[codex:719182] else:
[codex:719182] stack.append(Val(opnames[op].lower()))
[codex:719182] queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182] if op in [0x15,0x19]:
[codex:719182] if len(stack)>=1:
[codex:719182] a=stack.pop(); stack.append(eval_un(opnames[op], a))
[codex:719182] else:
[codex:719182] stack.append(Val(opnames[op].lower()))
[codex:719182] queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182] if op in [0x51,0x54]:
[codex:719182] if stack: stack.pop()
[codex:719182] stack.append(Val(opnames[op].lower(), pc))
[codex:719182] queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182] if op in [0x52,0x55,0x50,0x53]:
[codex:719182] pops=2 if op in [0x52,0x55] else 1
[codex:719182] for _ in range(pops):
[codex:719182] if stack: stack.pop()
[codex:719182] queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182] if op==0x56:
[codex:719182] if stack:
[codex:719182] dest=stack.pop()
[codex:719182] if dest.kind=='const' and dest.data in pc_to_idx:
[codex:719182] queue.append((pc_to_idx[dest.data], stack.copy(), steps+1))
[codex:719182] continue
[codex:719182] if op==0x57:
[codex:719182] dest=stack.pop() if stack else Val('undef')
[codex:719182] cond=stack.pop() if stack else Val('undef')
[codex:719182] queue.append((idx+1, stack.copy(), steps+1))
[codex:719182] if dest.kind=='const' and dest.data in pc_to_idx:
[codex:719182] queue.append((pc_to_idx[dest.data], stack.copy(), steps+1))
[codex:719182] continue
[codex:719182] if op==0x5b:
[codex:719182] queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182] if op in [0xf1,0xf3,0xfd,0x00,0xfe]:
[codex:719182] queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182] queue.append((idx+1, stack.copy(), steps+1))
[codex:719182]
[codex:719182] if found:
[codex:719182] stack,steps=found
[codex:719182] print('Found call, stack depth', len(stack))
[codex:719182] print('Call args (top7, top first):')
[codex:719182] for v in stack[-1:-8:-1]:
[codex:719182] print(v)
[codex:719182] else:
[codex:719182] print('call not reached')
[codex:719182] PY" in /tmp/codex-multi-512cwfyn succeeded in 32ms:
[codex:719182] Found call, stack depth 21
[codex:719182] Call args (top7, top first):
[codex:719182] sub((0x8502, gas(4957)))
[codex:719182] and((0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c01, sload(4804)))
[codex:719182] sload(4808)
[codex:719182] mload(4947)
[codex:719182] sub((mload(4947), mload(4810)))
[codex:719182] mload(4947)
[codex:719182] 0x0
[codex:719182]
[codex:719182] thinking
[codex:719182] **Analyzing CALL destination and storage writes**
[codex:719182] exec
[codex:719182] /bin/bash -lc "python - <<'PY'
[codex:719182] import re
[codex:719182] hexstr=re.search(r'0x[0-9a-fA-F]+', open('BYTECODE_BUNDLE.txt').read()).group(0)[2:]
[codex:719182] code=bytes.fromhex(hexstr)
[codex:719182]
[codex:719182] opnames={
[codex:719182] 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:719182] 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:719182] 0x20:'SHA3',
[codex:719182] 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:719182] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:719182] 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:719182] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:719182] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:719182] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:719182] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:719182] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:719182] }
[codex:719182]
[codex:719182] ops=[]
[codex:719182] pc=0
[codex:719182] while pc<len(code):
[codex:719182] op=code[pc]; name=opnames.get(op, f'OP_{op:02x}')
[codex:719182] pc0=pc; pc+=1; imm=None
[codex:719182] if 0x60 <= op <= 0x7f:
[codex:719182] n=op-0x5f; imm=code[pc:pc+n]; pc+=n
[codex:719182] ops.append((pc0,op,name,imm))
[codex:719182]
[codex:719182] # find SSTOREs
[codex:719182] for i,(pc,op,name,imm) in enumerate(ops):
[codex:719182] if op==0x55:
[codex:719182] print(f'SSTORE at {pc:04x}')
[codex:719182] # print previous 12 ops
[codex:719182] for j in range(max(0,i-12), i+1):
[codex:719182] p,o,n,im=ops[j]
[codex:719182] if im is not None:
[codex:719182] print(f' {p:04x}: {n} 0x{im.hex()}')
[codex:719182] else:
[codex:719182] print(f' {p:04x}: {n}')
[codex:719182] print('---')
[codex:719182] PY" in /tmp/codex-multi-512cwfyn succeeded in 30ms:
[codex:719182] SSTORE at 069c
[codex:719182] 068c: PUSH1 0x02
[codex:719182] 068e: PUSH1 0x20
[codex:719182] 0690: MSTORE
[codex:719182] 0691: PUSH1 0x40
[codex:719182] 0693: DUP2
[codex:719182] 0694: SHA3
[codex:719182] 0695: DUP1
[codex:719182] 0696: SLOAD
[codex:719182] 0697: PUSH1 0xff
[codex:719182] 0699: NOT
[codex:719182] 069a: AND
[codex:719182] 069b: SWAP1
[codex:719182] 069c: SSTORE
[codex:719182] ---
[codex:719182] SSTORE at 0765
[codex:719182] 0756: AND
[codex:719182] 0757: SWAP1
[codex:719182] 0758: DUP4
[codex:719182] 0759: PUSH1 0x01
[codex:719182]
[codex:719182] thinking
[codex:719182] **Examining SSTORE operations and access checks**
[codex:719182] exec
[codex:719182] /bin/bash -lc "python - <<'PY'
[codex:719182] import re
[codex:719182] hexstr=re.search(r'0x[0-9a-fA-F]+', open('BYTECODE_BUNDLE.txt').read()).group(0)[2:]
[codex:719182] code=bytes.fromhex(hexstr)
[codex:719182]
[codex:719182] opnames={
[codex:719182] 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:719182] 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:719182] 0x20:'SHA3',
[codex:719182] 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:719182] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:719182] 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:719182] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:719182] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:719182] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:719182] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:719182] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:719182] }
[codex:719182]
[codex:719182] # disassemble region
[codex:719182] start=0x0f00
[codex:719182] end=0x0f80
[codex:719182] pc=0
[codex:719182] while pc<len(code):
[codex:719182] op=code[pc]; name=opnames.get(op, f'OP_{op:02x}')
[codex:719182] pc0=pc; pc+=1; imm=None
[codex:719182] if 0x60 <= op <= 0x7f:
[codex:719182] n=op-0x5f; imm=code[pc:pc+n]; pc+=n
[codex:719182] if start <= pc0 <= end:
[codex:719182] if imm is not None:
[codex:719182] print(f'{pc0:04x}: {name} 0x{imm.hex()}')
[codex:719182] else:
[codex:719182] print(f'{pc0:04x}: {name}')
[codex:719182] PY" in /tmp/codex-multi-512cwfyn succeeded in 27ms:
[codex:719182] 0f00: POP
[codex:719182] 0f01: SWAP2
[codex:719182] 0f02: SWAP1
[codex:719182] 0f03: POP
[codex:719182] 0f04: JUMP
[codex:719182] 0f05: JUMPDEST
[codex:719182] 0f06: PUSH1 0x05
[codex:719182] 0f08: SLOAD
[codex:719182] 0f09: DUP2
[codex:719182] 0f0a: JUMP
[codex:719182] 0f0b: JUMPDEST
[codex:719182] 0f0c: ADDRESS
[codex:719182] 0f0d: PUSH1 0x01
[codex:719182] 0f0f: PUSH1 0xa0
[codex:719182] 0f11: PUSH1 0x02
[codex:719182] 0f13: EXP
[codex:719182] 0f14: SUB
[codex:719182] 0f15: AND
[codex:719182] 0f16: CALLER
[codex:719182] 0f17: PUSH1 0x01
[codex:719182]
[codex:719182] thinking
[codex:719182] **Analyzing contract call protections**
[codex:719182] exec
[codex:719182] /bin/bash -lc 'cat codex-output-schema.json' in /tmp/codex-multi-512cwfyn succeeded in 5ms:
[codex:719182] {"type": "object", "additionalProperties": false, "required": ["no_findings", "summary", "findings"], "properties": {"no_findings": {"type": "boolean"}, "summary": {"type": "string"}, "findings": {"type": "array", "items": {"type": "object", "additionalProperties": false, "required": ["severity", "category", "title", "evidence", "locations", "exploit_scenario", "recommendation"], "properties": {"severity": {"type": "string", "enum": ["info", "low", "medium", "high", "critical"]}, "category": {"type": "string", "enum": ["access_control", "reentrancy", "math", "oracle", "upgradeability", "auth", "other"]}, "title": {"type": "string"}, "exploit_scenario": {"type": "string"}, "recommendation": {"type": "string"}, "evidence": {"type": "string"}, "locations": {"type": "array", "items": {"type": "string"}}}}}}}
[codex:719182]
[codex:719182] thinking
[codex:719182] **Preparing final JSON output**
[codex:719182] codex
[codex:719182] {"no_findings":true,"summary":"No concrete, exploitable value-extraction path identified from the provided bytecode alone.","findings":[]}
[codex:719182] tokens used
[codex:719182] 68,795
[codex:719182] {"no_findings":true,"summary":"No concrete, exploitable value-extraction path identified from the provided bytecode alone.","findings":[]}
{
"codex": {
"ran_at": "2026-01-02T03:06:27.180677+00:00",
"returncode": 0
},
"summary": "No concrete, exploitable value-extraction path identified from the provided bytecode alone.",
"raw_final": {
"summary": "No concrete, exploitable value-extraction path identified from the provided bytecode alone.",
"findings": [],
"no_findings": true
},
"no_findings": true,
"schema_version": 1
}
00000000: PUSH1 0x60 00000002: PUSH1 0x40 00000004: MSTORE 00000005: CALLDATASIZE 00000006: ISZERO 00000007: PUSH2 0x0101 0000000a: JUMPI 0000000b: PUSH4 0xffffffff 00000010: PUSH1 0xe0 00000012: PUSH1 0x02 00000014: EXP 00000015: PUSH1 0x00 00000017: CALLDATALOAD 00000018: DIV 00000019: AND 0000001a: PUSH4 0x025e7c27 0000001f: DUP2 00000020: EQ 00000021: PUSH2 0x0153 00000024: JUMPI 00000025: DUP1 00000026: PUSH4 0x173825d9 0000002b: EQ 0000002c: PUSH2 0x0182 0000002f: JUMPI 00000030: DUP1 00000031: PUSH4 0x20ea8d86 00000036: EQ 00000037: PUSH2 0x01a0 0000003a: JUMPI 0000003b: DUP1 0000003c: PUSH4 0x2f54bf6e 00000041: EQ 00000042: PUSH2 0x01b5 00000045: JUMPI 00000046: DUP1 00000047: PUSH4 0x3411c81c 0000004c: EQ 0000004d: PUSH2 0x01e5 00000050: JUMPI 00000051: DUP1 00000052: PUSH4 0x54741525 00000057: EQ 00000058: PUSH2 0x0218 0000005b: JUMPI 0000005c: DUP1 0000005d: PUSH4 0x7065cb48 00000062: EQ 00000063: PUSH2 0x0244 00000066: JUMPI 00000067: DUP1 00000068: PUSH4 0x784547a7 0000006d: EQ 0000006e: PUSH2 0x0262 00000071: JUMPI 00000072: DUP1 00000073: PUSH4 0x8b51d13f 00000078: EQ 00000079: PUSH2 0x0289 0000007c: JUMPI 0000007d: DUP1 0000007e: PUSH4 0x9ace38c2 00000083: EQ 00000084: PUSH2 0x02ae 00000087: JUMPI 00000088: DUP1 00000089: PUSH4 0xa0e67e2b 0000008e: EQ 0000008f: PUSH2 0x036b 00000092: JUMPI 00000093: DUP1 00000094: PUSH4 0xa8abe69a 00000099: EQ 0000009a: PUSH2 0x03d6 0000009d: JUMPI 0000009e: DUP1 0000009f: PUSH4 0xb5dc40c3 000000a4: EQ 000000a5: PUSH2 0x0451 000000a8: JUMPI 000000a9: DUP1 000000aa: PUSH4 0xb77bf600 000000af: EQ 000000b0: PUSH2 0x04bf 000000b3: JUMPI 000000b4: DUP1 000000b5: PUSH4 0xba51a6df 000000ba: EQ 000000bb: PUSH2 0x04e1 000000be: JUMPI 000000bf: DUP1 000000c0: PUSH4 0xc01a8c84 000000c5: EQ 000000c6: PUSH2 0x04f6 000000c9: JUMPI 000000ca: DUP1 000000cb: PUSH4 0xc6427474 000000d0: EQ 000000d1: PUSH2 0x050b 000000d4: JUMPI 000000d5: DUP1 000000d6: PUSH4 0xd74f8edd 000000db: EQ 000000dc: PUSH2 0x0580 000000df: JUMPI 000000e0: DUP1 000000e1: PUSH4 0xdc8452cd 000000e6: EQ 000000e7: PUSH2 0x05a2 000000ea: JUMPI 000000eb: DUP1 000000ec: PUSH4 0xe20056e6 000000f1: EQ 000000f2: PUSH2 0x05c4 000000f5: JUMPI 000000f6: DUP1 000000f7: PUSH4 0xee22610b 000000fc: EQ 000000fd: PUSH2 0x05e8 00000100: JUMPI 00000101: JUMPDEST 00000102: PUSH2 0x0151 00000105: JUMPDEST 00000106: PUSH1 0x00 00000108: CALLVALUE 00000109: GT 0000010a: ISZERO 0000010b: PUSH2 0x014e 0000010e: JUMPI 0000010f: PUSH1 0x40 00000111: DUP1 00000112: MLOAD 00000113: CALLVALUE 00000114: DUP2 00000115: MSTORE 00000116: SWAP1 00000117: MLOAD 00000118: PUSH1 0x01 0000011a: PUSH1 0xa0 0000011c: PUSH1 0x02 0000011e: EXP 0000011f: SUB 00000120: CALLER 00000121: AND 00000122: SWAP2 00000123: PUSH32 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c 00000144: SWAP2 00000145: SWAP1 00000146: DUP2 00000147: SWAP1 00000148: SUB 00000149: PUSH1 0x20 0000014b: ADD 0000014c: SWAP1 0000014d: LOG2 0000014e: JUMPDEST 0000014f: JUMPDEST 00000150: JUMP 00000151: JUMPDEST 00000152: STOP 00000153: JUMPDEST 00000154: CALLVALUE 00000155: ISZERO 00000156: PUSH2 0x015b 00000159: JUMPI 0000015a: INVALID 0000015b: JUMPDEST 0000015c: PUSH2 0x0166 0000015f: PUSH1 0x04 00000161: CALLDATALOAD 00000162: PUSH2 0x05fd 00000165: JUMP 00000166: JUMPDEST 00000167: PUSH1 0x40 00000169: DUP1 0000016a: MLOAD 0000016b: PUSH1 0x01 0000016d: PUSH1 0xa0 0000016f: PUSH1 0x02 00000171: EXP 00000172: SUB 00000173: SWAP1 00000174: SWAP3 00000175: AND 00000176: DUP3 00000177: MSTORE 00000178: MLOAD 00000179: SWAP1 0000017a: DUP2 0000017b: SWAP1 0000017c: SUB 0000017d: PUSH1 0x20 0000017f: ADD 00000180: SWAP1 00000181: RETURN 00000182: JUMPDEST 00000183: CALLVALUE 00000184: ISZERO 00000185: PUSH2 0x018a 00000188: JUMPI 00000189: INVALID 0000018a: JUMPDEST 0000018b: PUSH2 0x0151 0000018e: PUSH1 0x01 00000190: PUSH1 0xa0 00000192: PUSH1 0x02 00000194: EXP 00000195: SUB 00000196: PUSH1 0x04 00000198: CALLDATALOAD 00000199: AND 0000019a: PUSH2 0x062f 0000019d: JUMP 0000019e: JUMPDEST 0000019f: STOP 000001a0: JUMPDEST 000001a1: CALLVALUE 000001a2: ISZERO 000001a3: PUSH2 0x01a8 000001a6: JUMPI 000001a7: INVALID 000001a8: JUMPDEST 000001a9: PUSH2 0x0151 000001ac: PUSH1 0x04 000001ae: CALLDATALOAD 000001af: PUSH2 0x07e0 000001b2: JUMP 000001b3: JUMPDEST 000001b4: STOP 000001b5: JUMPDEST 000001b6: CALLVALUE 000001b7: ISZERO 000001b8: PUSH2 0x01bd 000001bb: JUMPI 000001bc: INVALID 000001bd: JUMPDEST 000001be: PUSH2 0x01d1 000001c1: PUSH1 0x01 000001c3: PUSH1 0xa0 000001c5: PUSH1 0x02 000001c7: EXP 000001c8: SUB 000001c9: PUSH1 0x04 000001cb: CALLDATALOAD 000001cc: AND 000001cd: PUSH2 0x08bd 000001d0: JUMP 000001d1: JUMPDEST 000001d2: PUSH1 0x40 000001d4: DUP1 000001d5: MLOAD 000001d6: SWAP2 000001d7: ISZERO 000001d8: ISZERO 000001d9: DUP3 000001da: MSTORE 000001db: MLOAD 000001dc: SWAP1 000001dd: DUP2 000001de: SWAP1 000001df: SUB 000001e0: PUSH1 0x20 000001e2: ADD 000001e3: SWAP1 000001e4: RETURN 000001e5: JUMPDEST 000001e6: CALLVALUE 000001e7: ISZERO 000001e8: PUSH2 0x01ed 000001eb: JUMPI 000001ec: INVALID 000001ed: JUMPDEST 000001ee: PUSH2 0x01d1 000001f1: PUSH1 0x04 000001f3: CALLDATALOAD 000001f4: PUSH1 0x01 000001f6: PUSH1 0xa0 000001f8: PUSH1 0x02 000001fa: EXP 000001fb: SUB 000001fc: PUSH1 0x24 000001fe: CALLDATALOAD 000001ff: AND 00000200: PUSH2 0x08d2 00000203: JUMP 00000204: JUMPDEST 00000205: PUSH1 0x40 00000207: DUP1 00000208: MLOAD 00000209: SWAP2 0000020a: ISZERO 0000020b: ISZERO 0000020c: DUP3 0000020d: MSTORE 0000020e: MLOAD 0000020f: SWAP1 00000210: DUP2 00000211: SWAP1 00000212: SUB 00000213: PUSH1 0x20 00000215: ADD 00000216: SWAP1 00000217: RETURN 00000218: JUMPDEST 00000219: CALLVALUE 0000021a: ISZERO 0000021b: PUSH2 0x0220 0000021e: JUMPI 0000021f: INVALID 00000220: JUMPDEST 00000221: PUSH2 0x0232 00000224: PUSH1 0x04 00000226: CALLDATALOAD 00000227: ISZERO 00000228: ISZERO 00000229: PUSH1 0x24 0000022b: CALLDATALOAD 0000022c: ISZERO 0000022d: ISZERO 0000022e: PUSH2 0x08f2 00000231: JUMP 00000232: JUMPDEST 00000233: PUSH1 0x40 00000235: DUP1 00000236: MLOAD 00000237: SWAP2 00000238: DUP3 00000239: MSTORE 0000023a: MLOAD 0000023b: SWAP1 0000023c: DUP2 0000023d: SWAP1 0000023e: SUB 0000023f: PUSH1 0x20 00000241: ADD 00000242: SWAP1 00000243: RETURN 00000244: JUMPDEST 00000245: CALLVALUE 00000246: ISZERO 00000247: PUSH2 0x024c 0000024a: JUMPI 0000024b: INVALID 0000024c: JUMPDEST 0000024d: PUSH2 0x0151 00000250: PUSH1 0x01 00000252: PUSH1 0xa0 00000254: PUSH1 0x02 00000256: EXP 00000257: SUB 00000258: PUSH1 0x04 0000025a: CALLDATALOAD 0000025b: AND 0000025c: PUSH2 0x0961 0000025f: JUMP 00000260: JUMPDEST 00000261: STOP 00000262: JUMPDEST 00000263: CALLVALUE 00000264: ISZERO 00000265: PUSH2 0x026a 00000268: JUMPI 00000269: INVALID 0000026a: JUMPDEST 0000026b: PUSH2 0x01d1 0000026e: PUSH1 0x04 00000270: CALLDATALOAD 00000271: PUSH2 0x0a98 00000274: JUMP 00000275: JUMPDEST 00000276: PUSH1 0x40 00000278: DUP1 00000279: MLOAD 0000027a: SWAP2 0000027b: ISZERO 0000027c: ISZERO 0000027d: DUP3 0000027e: MSTORE 0000027f: MLOAD 00000280: SWAP1 00000281: DUP2 00000282: SWAP1 00000283: SUB 00000284: PUSH1 0x20 00000286: ADD 00000287: SWAP1 00000288: RETURN 00000289: JUMPDEST 0000028a: CALLVALUE 0000028b: ISZERO 0000028c: PUSH2 0x0291 0000028f: JUMPI 00000290: INVALID 00000291: JUMPDEST 00000292: PUSH2 0x0232 00000295: PUSH1 0x04 00000297: CALLDATALOAD 00000298: PUSH2 0x0b2c 0000029b: JUMP 0000029c: JUMPDEST 0000029d: PUSH1 0x40 0000029f: DUP1 000002a0: MLOAD 000002a1: SWAP2 000002a2: DUP3 000002a3: MSTORE 000002a4: MLOAD 000002a5: SWAP1 000002a6: DUP2 000002a7: SWAP1 000002a8: SUB 000002a9: PUSH1 0x20 000002ab: ADD 000002ac: SWAP1 000002ad: RETURN 000002ae: JUMPDEST 000002af: CALLVALUE 000002b0: ISZERO 000002b1: PUSH2 0x02b6 000002b4: JUMPI 000002b5: INVALID 000002b6: JUMPDEST 000002b7: PUSH2 0x02c1 000002ba: PUSH1 0x04 000002bc: CALLDATALOAD 000002bd: PUSH2 0x0bab 000002c0: JUMP 000002c1: JUMPDEST 000002c2: PUSH1 0x40 000002c4: DUP1 000002c5: MLOAD 000002c6: PUSH1 0x01 000002c8: PUSH1 0xa0 000002ca: PUSH1 0x02 000002cc: EXP 000002cd: SUB 000002ce: DUP7 000002cf: AND 000002d0: DUP2 000002d1: MSTORE 000002d2: PUSH1 0x20 000002d4: DUP2 000002d5: ADD 000002d6: DUP6 000002d7: SWAP1 000002d8: MSTORE 000002d9: DUP3 000002da: ISZERO 000002db: ISZERO 000002dc: PUSH1 0x60 000002de: DUP3 000002df: ADD 000002e0: MSTORE 000002e1: PUSH1 0x80 000002e3: SWAP2 000002e4: DUP2 000002e5: ADD 000002e6: DUP3 000002e7: DUP2 000002e8: MSTORE 000002e9: DUP5 000002ea: SLOAD 000002eb: PUSH1 0x02 000002ed: PUSH1 0x00 000002ef: NOT 000002f0: PUSH2 0x0100 000002f3: PUSH1 0x01 000002f5: DUP5 000002f6: AND 000002f7: ISZERO 000002f8: MUL 000002f9: ADD 000002fa: SWAP1 000002fb: SWAP2 000002fc: AND 000002fd: DIV 000002fe: SWAP3 000002ff: DUP3 00000300: ADD 00000301: DUP4 00000302: SWAP1 00000303: MSTORE 00000304: SWAP1 00000305: SWAP2 00000306: PUSH1 0xa0 00000308: DUP4 00000309: ADD 0000030a: SWAP1 0000030b: DUP6 0000030c: SWAP1 0000030d: DUP1 0000030e: ISZERO 0000030f: PUSH2 0x0359 00000312: JUMPI 00000313: DUP1 00000314: PUSH1 0x1f 00000316: LT 00000317: PUSH2 0x032e 0000031a: JUMPI 0000031b: PUSH2 0x0100 0000031e: DUP1 0000031f: DUP4 00000320: SLOAD 00000321: DIV 00000322: MUL 00000323: DUP4 00000324: MSTORE 00000325: SWAP2 00000326: PUSH1 0x20 00000328: ADD 00000329: SWAP2 0000032a: PUSH2 0x0359 0000032d: JUMP 0000032e: JUMPDEST 0000032f: DUP3 00000330: ADD 00000331: SWAP2 00000332: SWAP1 00000333: PUSH1 0x00 00000335: MSTORE 00000336: PUSH1 0x20 00000338: PUSH1 0x00 0000033a: KECCAK256 0000033b: SWAP1 0000033c: JUMPDEST 0000033d: DUP2 0000033e: SLOAD 0000033f: DUP2 00000340: MSTORE 00000341: SWAP1 00000342: PUSH1 0x01 00000344: ADD 00000345: SWAP1 00000346: PUSH1 0x20 00000348: ADD 00000349: DUP1 0000034a: DUP4 0000034b: GT 0000034c: PUSH2 0x033c 0000034f: JUMPI 00000350: DUP3 00000351: SWAP1 00000352: SUB 00000353: PUSH1 0x1f 00000355: AND 00000356: DUP3 00000357: ADD 00000358: SWAP2 00000359: JUMPDEST 0000035a: POP 0000035b: POP 0000035c: SWAP6 0000035d: POP 0000035e: POP 0000035f: POP 00000360: POP 00000361: POP 00000362: POP 00000363: PUSH1 0x40 00000365: MLOAD 00000366: DUP1 00000367: SWAP2 00000368: SUB 00000369: SWAP1 0000036a: RETURN 0000036b: JUMPDEST 0000036c: CALLVALUE 0000036d: ISZERO 0000036e: PUSH2 0x0373 00000371: JUMPI 00000372: INVALID 00000373: JUMPDEST 00000374: PUSH2 0x037b 00000377: PUSH2 0x0bdf 0000037a: JUMP 0000037b: JUMPDEST 0000037c: PUSH1 0x40 0000037e: DUP1 0000037f: MLOAD 00000380: PUSH1 0x20 00000382: DUP1 00000383: DUP3 00000384: MSTORE 00000385: DUP4 00000386: MLOAD 00000387: DUP2 00000388: DUP4 00000389: ADD 0000038a: MSTORE 0000038b: DUP4 0000038c: MLOAD 0000038d: SWAP2 0000038e: SWAP3 0000038f: DUP4 00000390: SWAP3 00000391: SWAP1 00000392: DUP4 00000393: ADD 00000394: SWAP2 00000395: DUP6 00000396: DUP2 00000397: ADD 00000398: SWAP2 00000399: MUL 0000039a: DUP1 0000039b: DUP4 0000039c: DUP4 0000039d: DUP3 0000039e: ISZERO 0000039f: PUSH2 0x03c3 000003a2: JUMPI 000003a3: JUMPDEST 000003a4: DUP1 000003a5: MLOAD 000003a6: DUP3 000003a7: MSTORE 000003a8: PUSH1 0x20 000003aa: DUP4 000003ab: GT 000003ac: ISZERO 000003ad: PUSH2 0x03c3 000003b0: JUMPI 000003b1: PUSH1 0x1f 000003b3: NOT 000003b4: SWAP1 000003b5: SWAP3 000003b6: ADD 000003b7: SWAP2 000003b8: PUSH1 0x20 000003ba: SWAP2 000003bb: DUP3 000003bc: ADD 000003bd: SWAP2 000003be: ADD 000003bf: PUSH2 0x03a3 000003c2: JUMP 000003c3: JUMPDEST 000003c4: POP 000003c5: POP 000003c6: POP 000003c7: SWAP1 000003c8: POP 000003c9: ADD 000003ca: SWAP3 000003cb: POP 000003cc: POP 000003cd: POP 000003ce: PUSH1 0x40 000003d0: MLOAD 000003d1: DUP1 000003d2: SWAP2 000003d3: SUB 000003d4: SWAP1 000003d5: RETURN 000003d6: JUMPDEST 000003d7: CALLVALUE 000003d8: ISZERO 000003d9: PUSH2 0x03de 000003dc: JUMPI 000003dd: INVALID 000003de: JUMPDEST 000003df: PUSH2 0x037b 000003e2: PUSH1 0x04 000003e4: CALLDATALOAD 000003e5: PUSH1 0x24 000003e7: CALLDATALOAD 000003e8: PUSH1 0x44 000003ea: CALLDATALOAD 000003eb: ISZERO 000003ec: ISZERO 000003ed: PUSH1 0x64 000003ef: CALLDATALOAD 000003f0: ISZERO 000003f1: ISZERO 000003f2: PUSH2 0x0c48 000003f5: JUMP 000003f6: JUMPDEST 000003f7: PUSH1 0x40 000003f9: DUP1 000003fa: MLOAD 000003fb: PUSH1 0x20 000003fd: DUP1 000003fe: DUP3 000003ff: MSTORE 00000400: DUP4 00000401: MLOAD 00000402: DUP2 00000403: DUP4 00000404: ADD 00000405: MSTORE 00000406: DUP4 00000407: MLOAD 00000408: SWAP2 00000409: SWAP3 0000040a: DUP4 0000040b: SWAP3 0000040c: SWAP1 0000040d: DUP4 0000040e: ADD 0000040f: SWAP2 00000410: DUP6 00000411: DUP2 00000412: ADD 00000413: SWAP2 00000414: MUL 00000415: DUP1 00000416: DUP4 00000417: DUP4 00000418: DUP3 00000419: ISZERO 0000041a: PUSH2 0x03c3 0000041d: JUMPI 0000041e: JUMPDEST 0000041f: DUP1 00000420: MLOAD 00000421: DUP3 00000422: MSTORE 00000423: PUSH1 0x20 00000425: DUP4 00000426: GT 00000427: ISZERO 00000428: PUSH2 0x03c3 0000042b: JUMPI 0000042c: PUSH1 0x1f 0000042e: NOT 0000042f: SWAP1 00000430: SWAP3 00000431: ADD 00000432: SWAP2 00000433: PUSH1 0x20 00000435: SWAP2 00000436: DUP3 00000437: ADD 00000438: SWAP2 00000439: ADD 0000043a: PUSH2 0x03a3 0000043d: JUMP 0000043e: JUMPDEST 0000043f: POP 00000440: POP 00000441: POP 00000442: SWAP1 00000443: POP 00000444: ADD 00000445: SWAP3 00000446: POP 00000447: POP 00000448: POP 00000449: PUSH1 0x40 0000044b: MLOAD 0000044c: DUP1 0000044d: SWAP2 0000044e: SUB 0000044f: SWAP1 00000450: RETURN 00000451: JUMPDEST 00000452: CALLVALUE 00000453: ISZERO 00000454: PUSH2 0x0459 00000457: JUMPI 00000458: INVALID 00000459: JUMPDEST 0000045a: PUSH2 0x037b 0000045d: PUSH1 0x04 0000045f: CALLDATALOAD 00000460: PUSH2 0x0d7d 00000463: JUMP 00000464: JUMPDEST 00000465: PUSH1 0x40 00000467: DUP1 00000468: MLOAD 00000469: PUSH1 0x20 0000046b: DUP1 0000046c: DUP3 0000046d: MSTORE 0000046e: DUP4 0000046f: MLOAD 00000470: DUP2 00000471: DUP4 00000472: ADD 00000473: MSTORE 00000474: DUP4 00000475: MLOAD 00000476: SWAP2 00000477: SWAP3 00000478: DUP4 00000479: SWAP3 0000047a: SWAP1 0000047b: DUP4 0000047c: ADD 0000047d: SWAP2 0000047e: DUP6 0000047f: DUP2 00000480: ADD 00000481: SWAP2 00000482: MUL 00000483: DUP1 00000484: DUP4 00000485: DUP4 00000486: DUP3 00000487: ISZERO 00000488: PUSH2 0x03c3 0000048b: JUMPI 0000048c: JUMPDEST 0000048d: DUP1 0000048e: MLOAD 0000048f: DUP3 00000490: MSTORE 00000491: PUSH1 0x20 00000493: DUP4 00000494: GT 00000495: ISZERO 00000496: PUSH2 0x03c3 00000499: JUMPI 0000049a: PUSH1 0x1f 0000049c: NOT 0000049d: SWAP1 0000049e: SWAP3 0000049f: ADD 000004a0: SWAP2 000004a1: PUSH1 0x20 000004a3: SWAP2 000004a4: DUP3 000004a5: ADD 000004a6: SWAP2 000004a7: ADD 000004a8: PUSH2 0x03a3 000004ab: JUMP 000004ac: JUMPDEST 000004ad: POP 000004ae: POP 000004af: POP 000004b0: SWAP1 000004b1: POP 000004b2: ADD 000004b3: SWAP3 000004b4: POP 000004b5: POP 000004b6: POP 000004b7: PUSH1 0x40 000004b9: MLOAD 000004ba: DUP1 000004bb: SWAP2 000004bc: SUB 000004bd: SWAP1 000004be: RETURN 000004bf: JUMPDEST 000004c0: CALLVALUE 000004c1: ISZERO 000004c2: PUSH2 0x04c7 000004c5: JUMPI 000004c6: INVALID 000004c7: JUMPDEST 000004c8: PUSH2 0x0232 000004cb: PUSH2 0x0f05 000004ce: JUMP 000004cf: JUMPDEST 000004d0: PUSH1 0x40 000004d2: DUP1 000004d3: MLOAD 000004d4: SWAP2 000004d5: DUP3 000004d6: MSTORE 000004d7: MLOAD 000004d8: SWAP1 000004d9: DUP2 000004da: SWAP1 000004db: SUB 000004dc: PUSH1 0x20 000004de: ADD 000004df: SWAP1 000004e0: RETURN 000004e1: JUMPDEST 000004e2: CALLVALUE 000004e3: ISZERO 000004e4: PUSH2 0x04e9 000004e7: JUMPI 000004e8: INVALID 000004e9: JUMPDEST 000004ea: PUSH2 0x0151 000004ed: PUSH1 0x04 000004ef: CALLDATALOAD 000004f0: PUSH2 0x0f0b 000004f3: JUMP 000004f4: JUMPDEST 000004f5: STOP 000004f6: JUMPDEST 000004f7: CALLVALUE 000004f8: ISZERO 000004f9: PUSH2 0x04fe 000004fc: JUMPI 000004fd: INVALID 000004fe: JUMPDEST 000004ff: PUSH2 0x0151 00000502: PUSH1 0x04 00000504: CALLDATALOAD 00000505: PUSH2 0x0f9b 00000508: JUMP 00000509: JUMPDEST 0000050a: STOP 0000050b: JUMPDEST 0000050c: CALLVALUE 0000050d: ISZERO 0000050e: PUSH2 0x0513 00000511: JUMPI 00000512: INVALID 00000513: JUMPDEST 00000514: PUSH1 0x40 00000516: DUP1 00000517: MLOAD 00000518: PUSH1 0x20 0000051a: PUSH1 0x04 0000051c: PUSH1 0x44 0000051e: CALLDATALOAD 0000051f: DUP2 00000520: DUP2 00000521: ADD 00000522: CALLDATALOAD 00000523: PUSH1 0x1f 00000525: DUP2 00000526: ADD 00000527: DUP5 00000528: SWAP1 00000529: DIV 0000052a: DUP5 0000052b: MUL 0000052c: DUP6 0000052d: ADD 0000052e: DUP5 0000052f: ADD 00000530: SWAP1 00000531: SWAP6 00000532: MSTORE 00000533: DUP5 00000534: DUP5 00000535: MSTORE 00000536: PUSH2 0x0232 00000539: SWAP5 0000053a: DUP3 0000053b: CALLDATALOAD 0000053c: PUSH1 0x01 0000053e: PUSH1 0xa0 00000540: PUSH1 0x02 00000542: EXP 00000543: SUB 00000544: AND 00000545: SWAP5 00000546: PUSH1 0x24 00000548: DUP1 00000549: CALLDATALOAD 0000054a: SWAP6 0000054b: PUSH1 0x64 0000054d: SWAP5 0000054e: SWAP3 0000054f: SWAP4 00000550: SWAP2 00000551: SWAP1 00000552: SWAP3 00000553: ADD 00000554: SWAP2 00000555: DUP2 00000556: SWAP1 00000557: DUP5 00000558: ADD 00000559: DUP4 0000055a: DUP3 0000055b: DUP1 0000055c: DUP3 0000055d: DUP5 0000055e: CALLDATACOPY 0000055f: POP 00000560: SWAP5 00000561: SWAP7 00000562: POP 00000563: PUSH2 0x1089 00000566: SWAP6 00000567: POP 00000568: POP 00000569: POP 0000056a: POP 0000056b: POP 0000056c: POP 0000056d: JUMP 0000056e: JUMPDEST 0000056f: PUSH1 0x40 00000571: DUP1 00000572: MLOAD 00000573: SWAP2 00000574: DUP3 00000575: MSTORE 00000576: MLOAD 00000577: SWAP1 00000578: DUP2 00000579: SWAP1 0000057a: SUB 0000057b: PUSH1 0x20 0000057d: ADD 0000057e: SWAP1 0000057f: RETURN 00000580: JUMPDEST 00000581: CALLVALUE 00000582: ISZERO 00000583: PUSH2 0x0588 00000586: JUMPI 00000587: INVALID 00000588: JUMPDEST 00000589: PUSH2 0x0232 0000058c: PUSH2 0x10a9 0000058f: JUMP 00000590: JUMPDEST 00000591: PUSH1 0x40 00000593: DUP1 00000594: MLOAD 00000595: SWAP2 00000596: DUP3 00000597: MSTORE 00000598: MLOAD 00000599: SWAP1 0000059a: DUP2 0000059b: SWAP1 0000059c: SUB 0000059d: PUSH1 0x20 0000059f: ADD 000005a0: SWAP1 000005a1: RETURN 000005a2: JUMPDEST 000005a3: CALLVALUE 000005a4: ISZERO 000005a5: PUSH2 0x05aa 000005a8: JUMPI 000005a9: INVALID 000005aa: JUMPDEST 000005ab: PUSH2 0x0232 000005ae: PUSH2 0x10ae 000005b1: JUMP 000005b2: JUMPDEST 000005b3: PUSH1 0x40 000005b5: DUP1 000005b6: MLOAD 000005b7: SWAP2 000005b8: DUP3 000005b9: MSTORE 000005ba: MLOAD 000005bb: SWAP1 000005bc: DUP2 000005bd: SWAP1 000005be: SUB 000005bf: PUSH1 0x20 000005c1: ADD 000005c2: SWAP1 000005c3: RETURN 000005c4: JUMPDEST 000005c5: CALLVALUE 000005c6: ISZERO 000005c7: PUSH2 0x05cc 000005ca: JUMPI 000005cb: INVALID 000005cc: JUMPDEST 000005cd: PUSH2 0x0151 000005d0: PUSH1 0x01 000005d2: PUSH1 0xa0 000005d4: PUSH1 0x02 000005d6: EXP 000005d7: SUB 000005d8: PUSH1 0x04 000005da: CALLDATALOAD 000005db: DUP2 000005dc: AND 000005dd: SWAP1 000005de: PUSH1 0x24 000005e0: CALLDATALOAD 000005e1: AND 000005e2: PUSH2 0x10b4 000005e5: JUMP 000005e6: JUMPDEST 000005e7: STOP 000005e8: JUMPDEST 000005e9: CALLVALUE 000005ea: ISZERO 000005eb: PUSH2 0x05f0 000005ee: JUMPI 000005ef: INVALID 000005f0: JUMPDEST 000005f1: PUSH2 0x0151 000005f4: PUSH1 0x04 000005f6: CALLDATALOAD 000005f7: PUSH2 0x1270 000005fa: JUMP 000005fb: JUMPDEST 000005fc: STOP 000005fd: JUMPDEST 000005fe: PUSH1 0x03 00000600: DUP1 00000601: SLOAD 00000602: DUP3 00000603: SWAP1 00000604: DUP2 00000605: LT 00000606: PUSH2 0x060b 00000609: JUMPI 0000060a: INVALID 0000060b: JUMPDEST 0000060c: SWAP1 0000060d: PUSH1 0x00 0000060f: MSTORE 00000610: PUSH1 0x20 00000612: PUSH1 0x00 00000614: KECCAK256 00000615: SWAP1 00000616: ADD 00000617: PUSH1 0x00 00000619: JUMPDEST 0000061a: SWAP2 0000061b: POP 0000061c: SLOAD 0000061d: SWAP1 0000061e: PUSH2 0x0100 00000621: EXP 00000622: SWAP1 00000623: DIV 00000624: PUSH1 0x01 00000626: PUSH1 0xa0 00000628: PUSH1 0x02 0000062a: EXP 0000062b: SUB 0000062c: AND 0000062d: DUP2 0000062e: JUMP 0000062f: JUMPDEST 00000630: PUSH1 0x00 00000632: ADDRESS 00000633: PUSH1 0x01 00000635: PUSH1 0xa0 00000637: PUSH1 0x02 00000639: EXP 0000063a: SUB 0000063b: AND 0000063c: CALLER 0000063d: PUSH1 0x01 0000063f: PUSH1 0xa0 00000641: PUSH1 0x02 00000643: EXP 00000644: SUB 00000645: AND 00000646: EQ 00000647: ISZERO 00000648: ISZERO 00000649: PUSH2 0x0652 0000064c: JUMPI 0000064d: PUSH1 0x00 0000064f: PUSH1 0x00 00000651: REVERT 00000652: JUMPDEST 00000653: PUSH1 0x01 00000655: PUSH1 0xa0 00000657: PUSH1 0x02 00000659: EXP 0000065a: SUB 0000065b: DUP3 0000065c: AND 0000065d: PUSH1 0x00 0000065f: SWAP1 00000660: DUP2 00000661: MSTORE 00000662: PUSH1 0x02 00000664: PUSH1 0x20 00000666: MSTORE 00000667: PUSH1 0x40 00000669: SWAP1 0000066a: KECCAK256 0000066b: SLOAD 0000066c: DUP3 0000066d: SWAP1 0000066e: PUSH1 0xff 00000670: AND 00000671: ISZERO 00000672: ISZERO 00000673: PUSH2 0x067c 00000676: JUMPI 00000677: PUSH1 0x00 00000679: PUSH1 0x00 0000067b: REVERT 0000067c: JUMPDEST 0000067d: PUSH1 0x01 0000067f: PUSH1 0xa0 00000681: PUSH1 0x02 00000683: EXP 00000684: SUB 00000685: DUP4 00000686: AND 00000687: PUSH1 0x00 00000689: SWAP1 0000068a: DUP2 0000068b: MSTORE 0000068c: PUSH1 0x02 0000068e: PUSH1 0x20 00000690: MSTORE 00000691: PUSH1 0x40 00000693: DUP2 00000694: KECCAK256 00000695: DUP1 00000696: SLOAD 00000697: PUSH1 0xff 00000699: NOT 0000069a: AND 0000069b: SWAP1 0000069c: SSTORE 0000069d: SWAP2 0000069e: POP 0000069f: JUMPDEST 000006a0: PUSH1 0x03 000006a2: SLOAD 000006a3: PUSH1 0x00 000006a5: NOT 000006a6: ADD 000006a7: DUP3 000006a8: LT 000006a9: ISZERO 000006aa: PUSH2 0x0777 000006ad: JUMPI 000006ae: DUP3 000006af: PUSH1 0x01 000006b1: PUSH1 0xa0 000006b3: PUSH1 0x02 000006b5: EXP 000006b6: SUB 000006b7: AND 000006b8: PUSH1 0x03 000006ba: DUP4 000006bb: DUP2 000006bc: SLOAD 000006bd: DUP2 000006be: LT 000006bf: ISZERO 000006c0: ISZERO 000006c1: PUSH2 0x06c6 000006c4: JUMPI 000006c5: INVALID 000006c6: JUMPDEST 000006c7: SWAP1 000006c8: PUSH1 0x00 000006ca: MSTORE 000006cb: PUSH1 0x20 000006cd: PUSH1 0x00 000006cf: KECCAK256 000006d0: SWAP1 000006d1: ADD 000006d2: PUSH1 0x00 000006d4: JUMPDEST 000006d5: SWAP1 000006d6: SLOAD 000006d7: SWAP1 000006d8: PUSH2 0x0100 000006db: EXP 000006dc: SWAP1 000006dd: DIV 000006de: PUSH1 0x01 000006e0: PUSH1 0xa0 000006e2: PUSH1 0x02 000006e4: EXP 000006e5: SUB 000006e6: AND 000006e7: PUSH1 0x01 000006e9: PUSH1 0xa0 000006eb: PUSH1 0x02 000006ed: EXP 000006ee: SUB 000006ef: AND 000006f0: EQ 000006f1: ISZERO 000006f2: PUSH2 0x076b 000006f5: JUMPI 000006f6: PUSH1 0x03 000006f8: DUP1 000006f9: SLOAD 000006fa: PUSH1 0x00 000006fc: NOT 000006fd: DUP2 000006fe: ADD 000006ff: SWAP1 00000700: DUP2 00000701: LT 00000702: PUSH2 0x0707 00000705: JUMPI 00000706: INVALID 00000707: JUMPDEST 00000708: SWAP1 00000709: PUSH1 0x00 0000070b: MSTORE 0000070c: PUSH1 0x20 0000070e: PUSH1 0x00 00000710: KECCAK256 00000711: SWAP1 00000712: ADD 00000713: PUSH1 0x00 00000715: JUMPDEST 00000716: SWAP1 00000717: SLOAD 00000718: SWAP1 00000719: PUSH2 0x0100 0000071c: EXP 0000071d: SWAP1 0000071e: DIV 0000071f: PUSH1 0x01 00000721: PUSH1 0xa0 00000723: PUSH1 0x02 00000725: EXP 00000726: SUB 00000727: AND 00000728: PUSH1 0x03 0000072a: DUP4 0000072b: DUP2 0000072c: SLOAD 0000072d: DUP2 0000072e: LT 0000072f: ISZERO 00000730: ISZERO 00000731: PUSH2 0x0736 00000734: JUMPI 00000735: INVALID 00000736: JUMPDEST 00000737: SWAP1 00000738: PUSH1 0x00 0000073a: MSTORE 0000073b: PUSH1 0x20 0000073d: PUSH1 0x00 0000073f: KECCAK256 00000740: SWAP1 00000741: ADD 00000742: PUSH1 0x00 00000744: JUMPDEST 00000745: PUSH2 0x0100 00000748: EXP 00000749: DUP2 0000074a: SLOAD 0000074b: DUP2 0000074c: PUSH1 0x01 0000074e: PUSH1 0xa0 00000750: PUSH1 0x02 00000752: EXP 00000753: SUB 00000754: MUL 00000755: NOT 00000756: AND 00000757: SWAP1 00000758: DUP4 00000759: PUSH1 0x01 0000075b: PUSH1 0xa0 0000075d: PUSH1 0x02 0000075f: EXP 00000760: SUB 00000761: AND 00000762: MUL 00000763: OR 00000764: SWAP1 00000765: SSTORE 00000766: POP 00000767: PUSH2 0x0777 0000076a: JUMP 0000076b: JUMPDEST 0000076c: JUMPDEST 0000076d: PUSH1 0x01 0000076f: SWAP1 00000770: SWAP2 00000771: ADD 00000772: SWAP1 00000773: PUSH2 0x069f 00000776: JUMP 00000777: JUMPDEST 00000778: PUSH1 0x03 0000077a: DUP1 0000077b: SLOAD 0000077c: PUSH1 0x00 0000077e: NOT 0000077f: ADD 00000780: SWAP1 00000781: PUSH2 0x078a 00000784: SWAP1 00000785: DUP3 00000786: PUSH2 0x14cb 00000789: JUMP 0000078a: JUMPDEST 0000078b: POP 0000078c: PUSH1 0x03 0000078e: SLOAD 0000078f: PUSH1 0x04 00000791: SLOAD 00000792: GT 00000793: ISZERO 00000794: PUSH2 0x07a3 00000797: JUMPI 00000798: PUSH1 0x03 0000079a: SLOAD 0000079b: PUSH2 0x07a3 0000079e: SWAP1 0000079f: PUSH2 0x0f0b 000007a2: JUMP 000007a3: JUMPDEST 000007a4: JUMPDEST 000007a5: PUSH1 0x40 000007a7: MLOAD 000007a8: PUSH1 0x01 000007aa: PUSH1 0xa0 000007ac: PUSH1 0x02 000007ae: EXP 000007af: SUB 000007b0: DUP5 000007b1: AND 000007b2: SWAP1 000007b3: PUSH32 0x8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b90 000007d4: SWAP1 000007d5: PUSH1 0x00 000007d7: SWAP1 000007d8: LOG2 000007d9: JUMPDEST 000007da: JUMPDEST 000007db: POP 000007dc: JUMPDEST 000007dd: POP 000007de: POP 000007df: JUMP 000007e0: JUMPDEST 000007e1: CALLER 000007e2: PUSH1 0x01 000007e4: PUSH1 0xa0 000007e6: PUSH1 0x02 000007e8: EXP 000007e9: SUB 000007ea: DUP2 000007eb: AND 000007ec: PUSH1 0x00 000007ee: SWAP1 000007ef: DUP2 000007f0: MSTORE 000007f1: PUSH1 0x02 000007f3: PUSH1 0x20 000007f5: MSTORE 000007f6: PUSH1 0x40 000007f8: SWAP1 000007f9: KECCAK256 000007fa: SLOAD 000007fb: PUSH1 0xff 000007fd: AND 000007fe: ISZERO 000007ff: ISZERO 00000800: PUSH2 0x0809 00000803: JUMPI 00000804: PUSH1 0x00 00000806: PUSH1 0x00 00000808: REVERT 00000809: JUMPDEST 0000080a: PUSH1 0x00 0000080c: DUP3 0000080d: DUP2 0000080e: MSTORE 0000080f: PUSH1 0x01 00000811: PUSH1 0x20 00000813: SWAP1 00000814: DUP2 00000815: MSTORE 00000816: PUSH1 0x40 00000818: DUP1 00000819: DUP4 0000081a: KECCAK256 0000081b: CALLER 0000081c: PUSH1 0x01 0000081e: PUSH1 0xa0 00000820: PUSH1 0x02 00000822: EXP 00000823: SUB 00000824: DUP2 00000825: AND 00000826: DUP6 00000827: MSTORE 00000828: SWAP3 00000829: MSTORE 0000082a: SWAP1 0000082b: SWAP2 0000082c: KECCAK256 0000082d: SLOAD 0000082e: DUP4 0000082f: SWAP2 00000830: SWAP1 00000831: PUSH1 0xff 00000833: AND 00000834: ISZERO 00000835: ISZERO 00000836: PUSH2 0x083f 00000839: JUMPI 0000083a: PUSH1 0x00 0000083c: PUSH1 0x00 0000083e: REVERT 0000083f: JUMPDEST 00000840: PUSH1 0x00 00000842: DUP5 00000843: DUP2 00000844: MSTORE 00000845: PUSH1 0x20 00000847: DUP2 00000848: SWAP1 00000849: MSTORE 0000084a: PUSH1 0x40 0000084c: SWAP1 0000084d: KECCAK256 0000084e: PUSH1 0x03 00000850: ADD 00000851: SLOAD 00000852: DUP5 00000853: SWAP1 00000854: PUSH1 0xff 00000856: AND 00000857: ISZERO 00000858: PUSH2 0x0861 0000085b: JUMPI 0000085c: PUSH1 0x00 0000085e: PUSH1 0x00 00000860: REVERT 00000861: JUMPDEST 00000862: PUSH1 0x00 00000864: DUP6 00000865: DUP2 00000866: MSTORE 00000867: PUSH1 0x01 00000869: PUSH1 0x20 0000086b: SWAP1 0000086c: DUP2 0000086d: MSTORE 0000086e: PUSH1 0x40 00000870: DUP1 00000871: DUP4 00000872: KECCAK256 00000873: PUSH1 0x01 00000875: PUSH1 0xa0 00000877: PUSH1 0x02 00000879: EXP 0000087a: SUB 0000087b: CALLER 0000087c: AND 0000087d: DUP1 0000087e: DUP6 0000087f: MSTORE 00000880: SWAP3 00000881: MSTORE 00000882: DUP1 00000883: DUP4 00000884: KECCAK256 00000885: DUP1 00000886: SLOAD 00000887: PUSH1 0xff 00000889: NOT 0000088a: AND 0000088b: SWAP1 0000088c: SSTORE 0000088d: MLOAD 0000088e: DUP8 0000088f: SWAP3 00000890: PUSH32 0xf6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e9 000008b1: SWAP2 000008b2: LOG3 000008b3: JUMPDEST 000008b4: JUMPDEST 000008b5: POP 000008b6: JUMPDEST 000008b7: POP 000008b8: POP 000008b9: JUMPDEST 000008ba: POP 000008bb: POP 000008bc: JUMP 000008bd: JUMPDEST 000008be: PUSH1 0x02 000008c0: PUSH1 0x20 000008c2: MSTORE 000008c3: PUSH1 0x00 000008c5: SWAP1 000008c6: DUP2 000008c7: MSTORE 000008c8: PUSH1 0x40 000008ca: SWAP1 000008cb: KECCAK256 000008cc: SLOAD 000008cd: PUSH1 0xff 000008cf: AND 000008d0: DUP2 000008d1: JUMP 000008d2: JUMPDEST 000008d3: PUSH1 0x01 000008d5: PUSH1 0x20 000008d7: SWAP1 000008d8: DUP2 000008d9: MSTORE 000008da: PUSH1 0x00 000008dc: SWAP3 000008dd: DUP4 000008de: MSTORE 000008df: PUSH1 0x40 000008e1: DUP1 000008e2: DUP5 000008e3: KECCAK256 000008e4: SWAP1 000008e5: SWAP2 000008e6: MSTORE 000008e7: SWAP1 000008e8: DUP3 000008e9: MSTORE 000008ea: SWAP1 000008eb: KECCAK256 000008ec: SLOAD 000008ed: PUSH1 0xff 000008ef: AND 000008f0: DUP2 000008f1: JUMP 000008f2: JUMPDEST 000008f3: PUSH1 0x00 000008f5: DUP1 000008f6: JUMPDEST 000008f7: PUSH1 0x05 000008f9: SLOAD 000008fa: DUP2 000008fb: LT 000008fc: ISZERO 000008fd: PUSH2 0x0959 00000900: JUMPI 00000901: DUP4 00000902: DUP1 00000903: ISZERO 00000904: PUSH2 0x091f 00000907: JUMPI 00000908: POP 00000909: PUSH1 0x00 0000090b: DUP2 0000090c: DUP2 0000090d: MSTORE 0000090e: PUSH1 0x20 00000910: DUP2 00000911: SWAP1 00000912: MSTORE 00000913: PUSH1 0x40 00000915: SWAP1 00000916: KECCAK256 00000917: PUSH1 0x03 00000919: ADD 0000091a: SLOAD 0000091b: PUSH1 0xff 0000091d: AND 0000091e: ISZERO 0000091f: JUMPDEST 00000920: DUP1 00000921: PUSH2 0x0943 00000924: JUMPI 00000925: POP 00000926: DUP3 00000927: DUP1 00000928: ISZERO 00000929: PUSH2 0x0943 0000092c: JUMPI 0000092d: POP 0000092e: PUSH1 0x00 00000930: DUP2 00000931: DUP2 00000932: MSTORE 00000933: PUSH1 0x20 00000935: DUP2 00000936: SWAP1 00000937: MSTORE 00000938: PUSH1 0x40 0000093a: SWAP1 0000093b: KECCAK256 0000093c: PUSH1 0x03 0000093e: ADD 0000093f: SLOAD 00000940: PUSH1 0xff 00000942: AND 00000943: JUMPDEST 00000944: JUMPDEST 00000945: ISZERO 00000946: PUSH2 0x0950 00000949: JUMPI 0000094a: PUSH1 0x01 0000094c: DUP3 0000094d: ADD 0000094e: SWAP2 0000094f: POP 00000950: JUMPDEST 00000951: JUMPDEST 00000952: PUSH1 0x01 00000954: ADD 00000955: PUSH2 0x08f6 00000958: JUMP 00000959: JUMPDEST 0000095a: JUMPDEST 0000095b: POP 0000095c: SWAP3 0000095d: SWAP2 0000095e: POP 0000095f: POP 00000960: JUMP 00000961: JUMPDEST 00000962: ADDRESS 00000963: PUSH1 0x01 00000965: PUSH1 0xa0 00000967: PUSH1 0x02 00000969: EXP 0000096a: SUB 0000096b: AND 0000096c: CALLER 0000096d: PUSH1 0x01 0000096f: PUSH1 0xa0 00000971: PUSH1 0x02 00000973: EXP 00000974: SUB 00000975: AND 00000976: EQ 00000977: ISZERO 00000978: ISZERO 00000979: PUSH2 0x0982 0000097c: JUMPI 0000097d: PUSH1 0x00 0000097f: PUSH1 0x00 00000981: REVERT 00000982: JUMPDEST 00000983: PUSH1 0x01 00000985: PUSH1 0xa0 00000987: PUSH1 0x02 00000989: EXP 0000098a: SUB 0000098b: DUP2 0000098c: AND 0000098d: PUSH1 0x00 0000098f: SWAP1 00000990: DUP2 00000991: MSTORE 00000992: PUSH1 0x02 00000994: PUSH1 0x20 00000996: MSTORE 00000997: PUSH1 0x40 00000999: SWAP1 0000099a: KECCAK256 0000099b: SLOAD 0000099c: DUP2 0000099d: SWAP1 0000099e: PUSH1 0xff 000009a0: AND 000009a1: ISZERO 000009a2: PUSH2 0x09ab 000009a5: JUMPI 000009a6: PUSH1 0x00 000009a8: PUSH1 0x00 000009aa: REVERT 000009ab: JUMPDEST 000009ac: DUP2 000009ad: PUSH1 0x01 000009af: PUSH1 0xa0 000009b1: PUSH1 0x02 000009b3: EXP 000009b4: SUB 000009b5: DUP2 000009b6: AND 000009b7: ISZERO 000009b8: ISZERO 000009b9: PUSH2 0x09c2 000009bc: JUMPI 000009bd: PUSH1 0x00 000009bf: PUSH1 0x00 000009c1: REVERT 000009c2: JUMPDEST 000009c3: PUSH1 0x03 000009c5: DUP1 000009c6: SLOAD 000009c7: SWAP1 000009c8: POP 000009c9: PUSH1 0x01 000009cb: ADD 000009cc: PUSH1 0x04 000009ce: SLOAD 000009cf: PUSH1 0x06 000009d1: DUP3 000009d2: GT 000009d3: DUP1 000009d4: PUSH2 0x09dc 000009d7: JUMPI 000009d8: POP 000009d9: DUP2 000009da: DUP2 000009db: GT 000009dc: JUMPDEST 000009dd: DUP1 000009de: PUSH2 0x09e5 000009e1: JUMPI 000009e2: POP 000009e3: DUP1 000009e4: ISZERO 000009e5: JUMPDEST 000009e6: DUP1 000009e7: PUSH2 0x09ee 000009ea: JUMPI 000009eb: POP 000009ec: DUP2 000009ed: ISZERO 000009ee: JUMPDEST 000009ef: ISZERO 000009f0: PUSH2 0x09f9 000009f3: JUMPI 000009f4: PUSH1 0x00 000009f6: PUSH1 0x00 000009f8: REVERT 000009f9: JUMPDEST 000009fa: PUSH1 0x01 000009fc: PUSH1 0xa0 000009fe: PUSH1 0x02 00000a00: EXP 00000a01: SUB 00000a02: DUP6 00000a03: AND 00000a04: PUSH1 0x00 00000a06: SWAP1 00000a07: DUP2 00000a08: MSTORE 00000a09: PUSH1 0x02 00000a0b: PUSH1 0x20 00000a0d: MSTORE 00000a0e: PUSH1 0x40 00000a10: SWAP1 00000a11: KECCAK256 00000a12: DUP1 00000a13: SLOAD 00000a14: PUSH1 0xff 00000a16: NOT 00000a17: AND 00000a18: PUSH1 0x01 00000a1a: SWAP1 00000a1b: DUP2 00000a1c: OR 00000a1d: SWAP1 00000a1e: SWAP2 00000a1f: SSTORE 00000a20: PUSH1 0x03 00000a22: DUP1 00000a23: SLOAD 00000a24: SWAP1 00000a25: SWAP2 00000a26: DUP2 00000a27: ADD 00000a28: PUSH2 0x0a31 00000a2b: DUP4 00000a2c: DUP3 00000a2d: PUSH2 0x14cb 00000a30: JUMP 00000a31: JUMPDEST 00000a32: SWAP2 00000a33: PUSH1 0x00 00000a35: MSTORE 00000a36: PUSH1 0x20 00000a38: PUSH1 0x00 00000a3a: KECCAK256 00000a3b: SWAP1 00000a3c: ADD 00000a3d: PUSH1 0x00 00000a3f: JUMPDEST 00000a40: DUP2 00000a41: SLOAD 00000a42: PUSH1 0x01 00000a44: PUSH1 0xa0 00000a46: PUSH1 0x02 00000a48: EXP 00000a49: SUB 00000a4a: DUP1 00000a4b: DUP11 00000a4c: AND 00000a4d: PUSH2 0x0100 00000a50: SWAP4 00000a51: SWAP1 00000a52: SWAP4 00000a53: EXP 00000a54: DUP4 00000a55: DUP2 00000a56: MUL 00000a57: SWAP2 00000a58: MUL 00000a59: NOT 00000a5a: SWAP1 00000a5b: SWAP2 00000a5c: AND 00000a5d: OR 00000a5e: SWAP1 00000a5f: SWAP2 00000a60: SSTORE 00000a61: PUSH1 0x40 00000a63: MLOAD 00000a64: SWAP1 00000a65: SWAP2 00000a66: POP 00000a67: PUSH32 0xf39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d 00000a88: SWAP1 00000a89: PUSH1 0x00 00000a8b: SWAP1 00000a8c: LOG2 00000a8d: JUMPDEST 00000a8e: JUMPDEST 00000a8f: POP 00000a90: POP 00000a91: JUMPDEST 00000a92: POP 00000a93: JUMPDEST 00000a94: POP 00000a95: JUMPDEST 00000a96: POP 00000a97: JUMP 00000a98: JUMPDEST 00000a99: PUSH1 0x00 00000a9b: DUP1 00000a9c: DUP1 00000a9d: JUMPDEST 00000a9e: PUSH1 0x03 00000aa0: SLOAD 00000aa1: DUP2 00000aa2: LT 00000aa3: ISZERO 00000aa4: PUSH2 0x0b24 00000aa7: JUMPI 00000aa8: PUSH1 0x00 00000aaa: DUP5 00000aab: DUP2 00000aac: MSTORE 00000aad: PUSH1 0x01 00000aaf: PUSH1 0x20 00000ab1: MSTORE 00000ab2: PUSH1 0x40 00000ab4: DUP2 00000ab5: KECCAK256 00000ab6: PUSH1 0x03 00000ab8: DUP1 00000ab9: SLOAD 00000aba: SWAP2 00000abb: SWAP3 00000abc: SWAP2 00000abd: DUP5 00000abe: SWAP1 00000abf: DUP2 00000ac0: LT 00000ac1: PUSH2 0x0ac6 00000ac4: JUMPI 00000ac5: INVALID 00000ac6: JUMPDEST 00000ac7: SWAP1 00000ac8: PUSH1 0x00 00000aca: MSTORE 00000acb: PUSH1 0x20 00000acd: PUSH1 0x00 00000acf: KECCAK256 00000ad0: SWAP1 00000ad1: ADD 00000ad2: PUSH1 0x00 00000ad4: JUMPDEST 00000ad5: SWAP1 00000ad6: SLOAD 00000ad7: PUSH1 0x01 00000ad9: PUSH1 0xa0 00000adb: PUSH1 0x02 00000add: EXP 00000ade: SUB 00000adf: PUSH2 0x0100 00000ae2: SWAP3 00000ae3: SWAP1 00000ae4: SWAP3 00000ae5: EXP 00000ae6: SWAP1 00000ae7: DIV 00000ae8: AND 00000ae9: DUP2 00000aea: MSTORE 00000aeb: PUSH1 0x20 00000aed: DUP2 00000aee: ADD 00000aef: SWAP2 00000af0: SWAP1 00000af1: SWAP2 00000af2: MSTORE 00000af3: PUSH1 0x40 00000af5: ADD 00000af6: PUSH1 0x00 00000af8: KECCAK256 00000af9: SLOAD 00000afa: PUSH1 0xff 00000afc: AND 00000afd: ISZERO 00000afe: PUSH2 0x0b08 00000b01: JUMPI 00000b02: PUSH1 0x01 00000b04: DUP3 00000b05: ADD 00000b06: SWAP2 00000b07: POP 00000b08: JUMPDEST 00000b09: PUSH1 0x04 00000b0b: SLOAD 00000b0c: DUP3 00000b0d: EQ 00000b0e: ISZERO 00000b0f: PUSH2 0x0b1b 00000b12: JUMPI 00000b13: PUSH1 0x01 00000b15: SWAP3 00000b16: POP 00000b17: PUSH2 0x0b24 00000b1a: JUMP 00000b1b: JUMPDEST 00000b1c: JUMPDEST 00000b1d: PUSH1 0x01 00000b1f: ADD 00000b20: PUSH2 0x0a9d 00000b23: JUMP 00000b24: JUMPDEST 00000b25: JUMPDEST 00000b26: POP 00000b27: POP 00000b28: SWAP2 00000b29: SWAP1 00000b2a: POP 00000b2b: JUMP 00000b2c: JUMPDEST 00000b2d: PUSH1 0x00 00000b2f: DUP1 00000b30: JUMPDEST 00000b31: PUSH1 0x03 00000b33: SLOAD 00000b34: DUP2 00000b35: LT 00000b36: ISZERO 00000b37: PUSH2 0x0ba4 00000b3a: JUMPI 00000b3b: PUSH1 0x00 00000b3d: DUP4 00000b3e: DUP2 00000b3f: MSTORE 00000b40: PUSH1 0x01 00000b42: PUSH1 0x20 00000b44: MSTORE 00000b45: PUSH1 0x40 00000b47: DUP2 00000b48: KECCAK256 00000b49: PUSH1 0x03 00000b4b: DUP1 00000b4c: SLOAD 00000b4d: SWAP2 00000b4e: SWAP3 00000b4f: SWAP2 00000b50: DUP5 00000b51: SWAP1 00000b52: DUP2 00000b53: LT 00000b54: PUSH2 0x0b59 00000b57: JUMPI 00000b58: INVALID 00000b59: JUMPDEST 00000b5a: SWAP1 00000b5b: PUSH1 0x00 00000b5d: MSTORE 00000b5e: PUSH1 0x20 00000b60: PUSH1 0x00 00000b62: KECCAK256 00000b63: SWAP1 00000b64: ADD 00000b65: PUSH1 0x00 00000b67: JUMPDEST 00000b68: SWAP1 00000b69: SLOAD 00000b6a: PUSH1 0x01 00000b6c: PUSH1 0xa0 00000b6e: PUSH1 0x02 00000b70: EXP 00000b71: SUB 00000b72: PUSH2 0x0100 00000b75: SWAP3 00000b76: SWAP1 00000b77: SWAP3 00000b78: EXP 00000b79: SWAP1 00000b7a: DIV 00000b7b: AND 00000b7c: DUP2 00000b7d: MSTORE 00000b7e: PUSH1 0x20 00000b80: DUP2 00000b81: ADD 00000b82: SWAP2 00000b83: SWAP1 00000b84: SWAP2 00000b85: MSTORE 00000b86: PUSH1 0x40 00000b88: ADD 00000b89: PUSH1 0x00 00000b8b: KECCAK256 00000b8c: SLOAD 00000b8d: PUSH1 0xff 00000b8f: AND 00000b90: ISZERO 00000b91: PUSH2 0x0b9b 00000b94: JUMPI 00000b95: PUSH1 0x01 00000b97: DUP3 00000b98: ADD 00000b99: SWAP2 00000b9a: POP 00000b9b: JUMPDEST 00000b9c: JUMPDEST 00000b9d: PUSH1 0x01 00000b9f: ADD 00000ba0: PUSH2 0x0b30 00000ba3: JUMP 00000ba4: JUMPDEST 00000ba5: JUMPDEST 00000ba6: POP 00000ba7: SWAP2 00000ba8: SWAP1 00000ba9: POP 00000baa: JUMP 00000bab: JUMPDEST 00000bac: PUSH1 0x00 00000bae: PUSH1 0x20 00000bb0: DUP2 00000bb1: SWAP1 00000bb2: MSTORE 00000bb3: SWAP1 00000bb4: DUP2 00000bb5: MSTORE 00000bb6: PUSH1 0x40 00000bb8: SWAP1 00000bb9: KECCAK256 00000bba: DUP1 00000bbb: SLOAD 00000bbc: PUSH1 0x01 00000bbe: DUP3 00000bbf: ADD 00000bc0: SLOAD 00000bc1: PUSH1 0x03 00000bc3: DUP4 00000bc4: ADD 00000bc5: SLOAD 00000bc6: PUSH1 0x01 00000bc8: PUSH1 0xa0 00000bca: PUSH1 0x02 00000bcc: EXP 00000bcd: SUB 00000bce: SWAP1 00000bcf: SWAP3 00000bd0: AND 00000bd1: SWAP3 00000bd2: SWAP1 00000bd3: SWAP2 00000bd4: PUSH1 0x02 00000bd6: SWAP1 00000bd7: SWAP2 00000bd8: ADD 00000bd9: SWAP1 00000bda: PUSH1 0xff 00000bdc: AND 00000bdd: DUP5 00000bde: JUMP 00000bdf: JUMPDEST 00000be0: PUSH2 0x0be7 00000be3: PUSH2 0x151f 00000be6: JUMP 00000be7: JUMPDEST 00000be8: PUSH1 0x03 00000bea: DUP1 00000beb: SLOAD 00000bec: DUP1 00000bed: PUSH1 0x20 00000bef: MUL 00000bf0: PUSH1 0x20 00000bf2: ADD 00000bf3: PUSH1 0x40 00000bf5: MLOAD 00000bf6: SWAP1 00000bf7: DUP2 00000bf8: ADD 00000bf9: PUSH1 0x40 00000bfb: MSTORE 00000bfc: DUP1 00000bfd: SWAP3 00000bfe: SWAP2 00000bff: SWAP1 00000c00: DUP2 00000c01: DUP2 00000c02: MSTORE 00000c03: PUSH1 0x20 00000c05: ADD 00000c06: DUP3 00000c07: DUP1 00000c08: SLOAD 00000c09: DUP1 00000c0a: ISZERO 00000c0b: PUSH2 0x0c3d 00000c0e: JUMPI 00000c0f: PUSH1 0x20 00000c11: MUL 00000c12: DUP3 00000c13: ADD 00000c14: SWAP2 00000c15: SWAP1 00000c16: PUSH1 0x00 00000c18: MSTORE 00000c19: PUSH1 0x20 00000c1b: PUSH1 0x00 00000c1d: KECCAK256 00000c1e: SWAP1 00000c1f: JUMPDEST 00000c20: DUP2 00000c21: SLOAD 00000c22: PUSH1 0x01 00000c24: PUSH1 0xa0 00000c26: PUSH1 0x02 00000c28: EXP 00000c29: SUB 00000c2a: AND 00000c2b: DUP2 00000c2c: MSTORE 00000c2d: PUSH1 0x01 00000c2f: SWAP1 00000c30: SWAP2 00000c31: ADD 00000c32: SWAP1 00000c33: PUSH1 0x20 00000c35: ADD 00000c36: DUP1 00000c37: DUP4 00000c38: GT 00000c39: PUSH2 0x0c1f 00000c3c: JUMPI 00000c3d: JUMPDEST 00000c3e: POP 00000c3f: POP 00000c40: POP 00000c41: POP 00000c42: POP 00000c43: SWAP1 00000c44: POP 00000c45: JUMPDEST 00000c46: SWAP1 00000c47: JUMP 00000c48: JUMPDEST 00000c49: PUSH2 0x0c50 00000c4c: PUSH2 0x151f 00000c4f: JUMP 00000c50: JUMPDEST 00000c51: PUSH2 0x0c58 00000c54: PUSH2 0x151f 00000c57: JUMP 00000c58: JUMPDEST 00000c59: PUSH1 0x00 00000c5b: PUSH1 0x00 00000c5d: PUSH1 0x05 00000c5f: SLOAD 00000c60: PUSH1 0x40 00000c62: MLOAD 00000c63: DUP1 00000c64: MSIZE 00000c65: LT 00000c66: PUSH2 0x0c6c 00000c69: JUMPI 00000c6a: POP 00000c6b: MSIZE 00000c6c: JUMPDEST 00000c6d: SWAP1 00000c6e: DUP1 00000c6f: DUP3 00000c70: MSTORE 00000c71: DUP1 00000c72: PUSH1 0x20 00000c74: MUL 00000c75: PUSH1 0x20 00000c77: ADD 00000c78: DUP3 00000c79: ADD 00000c7a: PUSH1 0x40 00000c7c: MSTORE 00000c7d: JUMPDEST 00000c7e: POP 00000c7f: SWAP3 00000c80: POP 00000c81: PUSH1 0x00 00000c83: SWAP2 00000c84: POP 00000c85: PUSH1 0x00 00000c87: SWAP1 00000c88: POP 00000c89: JUMPDEST 00000c8a: PUSH1 0x05 00000c8c: SLOAD 00000c8d: DUP2 00000c8e: LT 00000c8f: ISZERO 00000c90: PUSH2 0x0d06 00000c93: JUMPI 00000c94: DUP6 00000c95: DUP1 00000c96: ISZERO 00000c97: PUSH2 0x0cb2 00000c9a: JUMPI 00000c9b: POP 00000c9c: PUSH1 0x00 00000c9e: DUP2 00000c9f: DUP2 00000ca0: MSTORE 00000ca1: PUSH1 0x20 00000ca3: DUP2 00000ca4: SWAP1 00000ca5: MSTORE 00000ca6: PUSH1 0x40 00000ca8: SWAP1 00000ca9: KECCAK256 00000caa: PUSH1 0x03 00000cac: ADD 00000cad: SLOAD 00000cae: PUSH1 0xff 00000cb0: AND 00000cb1: ISZERO 00000cb2: JUMPDEST 00000cb3: DUP1 00000cb4: PUSH2 0x0cd6 00000cb7: JUMPI 00000cb8: POP 00000cb9: DUP5 00000cba: DUP1 00000cbb: ISZERO 00000cbc: PUSH2 0x0cd6 00000cbf: JUMPI 00000cc0: POP 00000cc1: PUSH1 0x00 00000cc3: DUP2 00000cc4: DUP2 00000cc5: MSTORE 00000cc6: PUSH1 0x20 00000cc8: DUP2 00000cc9: SWAP1 00000cca: MSTORE 00000ccb: PUSH1 0x40 00000ccd: SWAP1 00000cce: KECCAK256 00000ccf: PUSH1 0x03 00000cd1: ADD 00000cd2: SLOAD 00000cd3: PUSH1 0xff 00000cd5: AND 00000cd6: JUMPDEST 00000cd7: JUMPDEST 00000cd8: ISZERO 00000cd9: PUSH2 0x0cfd 00000cdc: JUMPI 00000cdd: DUP1 00000cde: DUP4 00000cdf: DUP4 00000ce0: DUP2 00000ce1: MLOAD 00000ce2: DUP2 00000ce3: LT 00000ce4: ISZERO 00000ce5: ISZERO 00000ce6: PUSH2 0x0ceb 00000ce9: JUMPI 00000cea: INVALID 00000ceb: JUMPDEST 00000cec: PUSH1 0x20 00000cee: SWAP1 00000cef: DUP2 00000cf0: MUL 00000cf1: SWAP1 00000cf2: SWAP2 00000cf3: ADD 00000cf4: ADD 00000cf5: MSTORE 00000cf6: PUSH1 0x01 00000cf8: SWAP2 00000cf9: SWAP1 00000cfa: SWAP2 00000cfb: ADD 00000cfc: SWAP1 00000cfd: JUMPDEST 00000cfe: JUMPDEST 00000cff: PUSH1 0x01 00000d01: ADD 00000d02: PUSH2 0x0c89 00000d05: JUMP 00000d06: JUMPDEST 00000d07: DUP8 00000d08: DUP8 00000d09: SUB 00000d0a: PUSH1 0x40 00000d0c: MLOAD 00000d0d: DUP1 00000d0e: MSIZE 00000d0f: LT 00000d10: PUSH2 0x0d16 00000d13: JUMPI 00000d14: POP 00000d15: MSIZE 00000d16: JUMPDEST 00000d17: SWAP1 00000d18: DUP1 00000d19: DUP3 00000d1a: MSTORE 00000d1b: DUP1 00000d1c: PUSH1 0x20 00000d1e: MUL 00000d1f: PUSH1 0x20 00000d21: ADD 00000d22: DUP3 00000d23: ADD 00000d24: PUSH1 0x40 00000d26: MSTORE 00000d27: JUMPDEST 00000d28: POP 00000d29: SWAP4 00000d2a: POP 00000d2b: DUP8 00000d2c: SWAP1 00000d2d: POP 00000d2e: JUMPDEST 00000d2f: DUP7 00000d30: DUP2 00000d31: LT 00000d32: ISZERO 00000d33: PUSH2 0x0d71 00000d36: JUMPI 00000d37: DUP3 00000d38: DUP2 00000d39: DUP2 00000d3a: MLOAD 00000d3b: DUP2 00000d3c: LT 00000d3d: ISZERO 00000d3e: ISZERO 00000d3f: PUSH2 0x0d44 00000d42: JUMPI 00000d43: INVALID 00000d44: JUMPDEST 00000d45: SWAP1 00000d46: PUSH1 0x20 00000d48: ADD 00000d49: SWAP1 00000d4a: PUSH1 0x20 00000d4c: MUL 00000d4d: ADD 00000d4e: MLOAD 00000d4f: DUP5 00000d50: DUP10 00000d51: DUP4 00000d52: SUB 00000d53: DUP2 00000d54: MLOAD 00000d55: DUP2 00000d56: LT 00000d57: ISZERO 00000d58: ISZERO 00000d59: PUSH2 0x0d5e 00000d5c: JUMPI 00000d5d: INVALID 00000d5e: JUMPDEST 00000d5f: PUSH1 0x20 00000d61: SWAP1 00000d62: DUP2 00000d63: MUL 00000d64: SWAP1 00000d65: SWAP2 00000d66: ADD 00000d67: ADD 00000d68: MSTORE 00000d69: JUMPDEST 00000d6a: PUSH1 0x01 00000d6c: ADD 00000d6d: PUSH2 0x0d2e 00000d70: JUMP 00000d71: JUMPDEST 00000d72: JUMPDEST 00000d73: POP 00000d74: POP 00000d75: POP 00000d76: SWAP5 00000d77: SWAP4 00000d78: POP 00000d79: POP 00000d7a: POP 00000d7b: POP 00000d7c: JUMP 00000d7d: JUMPDEST 00000d7e: PUSH2 0x0d85 00000d81: PUSH2 0x151f 00000d84: JUMP 00000d85: JUMPDEST 00000d86: PUSH2 0x0d8d 00000d89: PUSH2 0x151f 00000d8c: JUMP 00000d8d: JUMPDEST 00000d8e: PUSH1 0x03 00000d90: SLOAD 00000d91: PUSH1 0x40 00000d93: MLOAD 00000d94: PUSH1 0x00 00000d96: SWAP2 00000d97: DUP3 00000d98: SWAP2 00000d99: DUP1 00000d9a: MSIZE 00000d9b: LT 00000d9c: PUSH2 0x0da2 00000d9f: JUMPI 00000da0: POP 00000da1: MSIZE 00000da2: JUMPDEST 00000da3: SWAP1 00000da4: DUP1 00000da5: DUP3 00000da6: MSTORE 00000da7: DUP1 00000da8: PUSH1 0x20 00000daa: MUL 00000dab: PUSH1 0x20 00000dad: ADD 00000dae: DUP3 00000daf: ADD 00000db0: PUSH1 0x40 00000db2: MSTORE 00000db3: JUMPDEST 00000db4: POP 00000db5: SWAP3 00000db6: POP 00000db7: PUSH1 0x00 00000db9: SWAP2 00000dba: POP 00000dbb: PUSH1 0x00 00000dbd: SWAP1 00000dbe: POP 00000dbf: JUMPDEST 00000dc0: PUSH1 0x03 00000dc2: SLOAD 00000dc3: DUP2 00000dc4: LT 00000dc5: ISZERO 00000dc6: PUSH2 0x0e87 00000dc9: JUMPI 00000dca: PUSH1 0x00 00000dcc: DUP6 00000dcd: DUP2 00000dce: MSTORE 00000dcf: PUSH1 0x01 00000dd1: PUSH1 0x20 00000dd3: MSTORE 00000dd4: PUSH1 0x40 00000dd6: DUP2 00000dd7: KECCAK256 00000dd8: PUSH1 0x03 00000dda: DUP1 00000ddb: SLOAD 00000ddc: SWAP2 00000ddd: SWAP3 00000dde: SWAP2 00000ddf: DUP5 00000de0: SWAP1 00000de1: DUP2 00000de2: LT 00000de3: PUSH2 0x0de8 00000de6: JUMPI 00000de7: INVALID 00000de8: JUMPDEST 00000de9: SWAP1 00000dea: PUSH1 0x00 00000dec: MSTORE 00000ded: PUSH1 0x20 00000def: PUSH1 0x00 00000df1: KECCAK256 00000df2: SWAP1 00000df3: ADD 00000df4: PUSH1 0x00 00000df6: JUMPDEST 00000df7: SWAP1 00000df8: SLOAD 00000df9: PUSH1 0x01 00000dfb: PUSH1 0xa0 00000dfd: PUSH1 0x02 00000dff: EXP 00000e00: SUB 00000e01: PUSH2 0x0100 00000e04: SWAP3 00000e05: SWAP1 00000e06: SWAP3 00000e07: EXP 00000e08: SWAP1 00000e09: DIV 00000e0a: AND 00000e0b: DUP2 00000e0c: MSTORE 00000e0d: PUSH1 0x20 00000e0f: DUP2 00000e10: ADD 00000e11: SWAP2 00000e12: SWAP1 00000e13: SWAP2 00000e14: MSTORE 00000e15: PUSH1 0x40 00000e17: ADD 00000e18: PUSH1 0x00 00000e1a: KECCAK256 00000e1b: SLOAD 00000e1c: PUSH1 0xff 00000e1e: AND 00000e1f: ISZERO 00000e20: PUSH2 0x0e7e 00000e23: JUMPI 00000e24: PUSH1 0x03 00000e26: DUP1 00000e27: SLOAD 00000e28: DUP3 00000e29: SWAP1 00000e2a: DUP2 00000e2b: LT 00000e2c: PUSH2 0x0e31 00000e2f: JUMPI 00000e30: INVALID 00000e31: JUMPDEST 00000e32: SWAP1 00000e33: PUSH1 0x00 00000e35: MSTORE 00000e36: PUSH1 0x20 00000e38: PUSH1 0x00 00000e3a: KECCAK256 00000e3b: SWAP1 00000e3c: ADD 00000e3d: PUSH1 0x00 00000e3f: JUMPDEST 00000e40: SWAP1 00000e41: SLOAD 00000e42: SWAP1 00000e43: PUSH2 0x0100 00000e46: EXP 00000e47: SWAP1 00000e48: DIV 00000e49: PUSH1 0x01 00000e4b: PUSH1 0xa0 00000e4d: PUSH1 0x02 00000e4f: EXP 00000e50: SUB 00000e51: AND 00000e52: DUP4 00000e53: DUP4 00000e54: DUP2 00000e55: MLOAD 00000e56: DUP2 00000e57: LT 00000e58: ISZERO 00000e59: ISZERO 00000e5a: PUSH2 0x0e5f 00000e5d: JUMPI 00000e5e: INVALID 00000e5f: JUMPDEST 00000e60: PUSH1 0x01 00000e62: PUSH1 0xa0 00000e64: PUSH1 0x02 00000e66: EXP 00000e67: SUB 00000e68: SWAP1 00000e69: SWAP3 00000e6a: AND 00000e6b: PUSH1 0x20 00000e6d: SWAP3 00000e6e: DUP4 00000e6f: MUL 00000e70: SWAP1 00000e71: SWAP2 00000e72: ADD 00000e73: SWAP1 00000e74: SWAP2 00000e75: ADD 00000e76: MSTORE 00000e77: PUSH1 0x01 00000e79: SWAP2 00000e7a: SWAP1 00000e7b: SWAP2 00000e7c: ADD 00000e7d: SWAP1 00000e7e: JUMPDEST 00000e7f: JUMPDEST 00000e80: PUSH1 0x01 00000e82: ADD 00000e83: PUSH2 0x0dbf 00000e86: JUMP 00000e87: JUMPDEST 00000e88: DUP2 00000e89: PUSH1 0x40 00000e8b: MLOAD 00000e8c: DUP1 00000e8d: MSIZE 00000e8e: LT 00000e8f: PUSH2 0x0e95 00000e92: JUMPI 00000e93: POP 00000e94: MSIZE 00000e95: JUMPDEST 00000e96: SWAP1 00000e97: DUP1 00000e98: DUP3 00000e99: MSTORE 00000e9a: DUP1 00000e9b: PUSH1 0x20 00000e9d: MUL 00000e9e: PUSH1 0x20 00000ea0: ADD 00000ea1: DUP3 00000ea2: ADD 00000ea3: PUSH1 0x40 00000ea5: MSTORE 00000ea6: JUMPDEST 00000ea7: POP 00000ea8: SWAP4 00000ea9: POP 00000eaa: PUSH1 0x00 00000eac: SWAP1 00000ead: POP 00000eae: JUMPDEST 00000eaf: DUP2 00000eb0: DUP2 00000eb1: LT 00000eb2: ISZERO 00000eb3: PUSH2 0x0efc 00000eb6: JUMPI 00000eb7: DUP3 00000eb8: DUP2 00000eb9: DUP2 00000eba: MLOAD 00000ebb: DUP2 00000ebc: LT 00000ebd: ISZERO 00000ebe: ISZERO 00000ebf: PUSH2 0x0ec4 00000ec2: JUMPI 00000ec3: INVALID 00000ec4: JUMPDEST 00000ec5: SWAP1 00000ec6: PUSH1 0x20 00000ec8: ADD 00000ec9: SWAP1 00000eca: PUSH1 0x20 00000ecc: MUL 00000ecd: ADD 00000ece: MLOAD 00000ecf: DUP5 00000ed0: DUP3 00000ed1: DUP2 00000ed2: MLOAD 00000ed3: DUP2 00000ed4: LT 00000ed5: ISZERO 00000ed6: ISZERO 00000ed7: PUSH2 0x0edc 00000eda: JUMPI 00000edb: INVALID 00000edc: JUMPDEST 00000edd: PUSH1 0x01 00000edf: PUSH1 0xa0 00000ee1: PUSH1 0x02 00000ee3: EXP 00000ee4: SUB 00000ee5: SWAP1 00000ee6: SWAP3 00000ee7: AND 00000ee8: PUSH1 0x20 00000eea: SWAP3 00000eeb: DUP4 00000eec: MUL 00000eed: SWAP1 00000eee: SWAP2 00000eef: ADD 00000ef0: SWAP1 00000ef1: SWAP2 00000ef2: ADD 00000ef3: MSTORE 00000ef4: JUMPDEST 00000ef5: PUSH1 0x01 00000ef7: ADD 00000ef8: PUSH2 0x0eae 00000efb: JUMP 00000efc: JUMPDEST 00000efd: JUMPDEST 00000efe: POP 00000eff: POP 00000f00: POP 00000f01: SWAP2 00000f02: SWAP1 00000f03: POP 00000f04: JUMP 00000f05: JUMPDEST 00000f06: PUSH1 0x05 00000f08: SLOAD 00000f09: DUP2 00000f0a: JUMP 00000f0b: JUMPDEST 00000f0c: ADDRESS 00000f0d: PUSH1 0x01 00000f0f: PUSH1 0xa0 00000f11: PUSH1 0x02 00000f13: EXP 00000f14: SUB 00000f15: AND 00000f16: CALLER 00000f17: PUSH1 0x01 00000f19: PUSH1 0xa0 00000f1b: PUSH1 0x02 00000f1d: EXP 00000f1e: SUB 00000f1f: AND 00000f20: EQ 00000f21: ISZERO 00000f22: ISZERO 00000f23: PUSH2 0x0f2c 00000f26: JUMPI 00000f27: PUSH1 0x00 00000f29: PUSH1 0x00 00000f2b: REVERT 00000f2c: JUMPDEST 00000f2d: PUSH1 0x03 00000f2f: SLOAD 00000f30: DUP2 00000f31: PUSH1 0x06 00000f33: DUP3 00000f34: GT 00000f35: DUP1 00000f36: PUSH2 0x0f3e 00000f39: JUMPI 00000f3a: POP 00000f3b: DUP2 00000f3c: DUP2 00000f3d: GT 00000f3e: JUMPDEST 00000f3f: DUP1 00000f40: PUSH2 0x0f47 00000f43: JUMPI 00000f44: POP 00000f45: DUP1 00000f46: ISZERO 00000f47: JUMPDEST 00000f48: DUP1 00000f49: PUSH2 0x0f50 00000f4c: JUMPI 00000f4d: POP 00000f4e: DUP2 00000f4f: ISZERO 00000f50: JUMPDEST 00000f51: ISZERO 00000f52: PUSH2 0x0f5b 00000f55: JUMPI 00000f56: PUSH1 0x00 00000f58: PUSH1 0x00 00000f5a: REVERT 00000f5b: JUMPDEST 00000f5c: PUSH1 0x04 00000f5e: DUP4 00000f5f: SWAP1 00000f60: SSTORE 00000f61: PUSH1 0x40 00000f63: DUP1 00000f64: MLOAD 00000f65: DUP5 00000f66: DUP2 00000f67: MSTORE 00000f68: SWAP1 00000f69: MLOAD 00000f6a: PUSH32 0xa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a 00000f8b: SWAP2 00000f8c: DUP2 00000f8d: SWAP1 00000f8e: SUB 00000f8f: PUSH1 0x20 00000f91: ADD 00000f92: SWAP1 00000f93: LOG1 00000f94: JUMPDEST 00000f95: JUMPDEST 00000f96: POP 00000f97: POP 00000f98: JUMPDEST 00000f99: POP 00000f9a: JUMP 00000f9b: JUMPDEST 00000f9c: CALLER 00000f9d: PUSH1 0x01 00000f9f: PUSH1 0xa0 00000fa1: PUSH1 0x02 00000fa3: EXP 00000fa4: SUB 00000fa5: DUP2 00000fa6: AND 00000fa7: PUSH1 0x00 00000fa9: SWAP1 00000faa: DUP2 00000fab: MSTORE 00000fac: PUSH1 0x02 00000fae: PUSH1 0x20 00000fb0: MSTORE 00000fb1: PUSH1 0x40 00000fb3: SWAP1 00000fb4: KECCAK256 00000fb5: SLOAD 00000fb6: PUSH1 0xff 00000fb8: AND 00000fb9: ISZERO 00000fba: ISZERO 00000fbb: PUSH2 0x0fc4 00000fbe: JUMPI 00000fbf: PUSH1 0x00 00000fc1: PUSH1 0x00 00000fc3: REVERT 00000fc4: JUMPDEST 00000fc5: PUSH1 0x00 00000fc7: DUP3 00000fc8: DUP2 00000fc9: MSTORE 00000fca: PUSH1 0x20 00000fcc: DUP2 00000fcd: SWAP1 00000fce: MSTORE 00000fcf: PUSH1 0x40 00000fd1: SWAP1 00000fd2: KECCAK256 00000fd3: SLOAD 00000fd4: DUP3 00000fd5: SWAP1 00000fd6: PUSH1 0x01 00000fd8: PUSH1 0xa0 00000fda: PUSH1 0x02 00000fdc: EXP 00000fdd: SUB 00000fde: AND 00000fdf: ISZERO 00000fe0: ISZERO 00000fe1: PUSH2 0x0fea 00000fe4: JUMPI 00000fe5: PUSH1 0x00 00000fe7: PUSH1 0x00 00000fe9: REVERT 00000fea: JUMPDEST 00000feb: PUSH1 0x00 00000fed: DUP4 00000fee: DUP2 00000fef: MSTORE 00000ff0: PUSH1 0x01 00000ff2: PUSH1 0x20 00000ff4: SWAP1 00000ff5: DUP2 00000ff6: MSTORE 00000ff7: PUSH1 0x40 00000ff9: DUP1 00000ffa: DUP4 00000ffb: KECCAK256 00000ffc: CALLER 00000ffd: PUSH1 0x01 00000fff: PUSH1 0xa0 00001001: PUSH1 0x02 00001003: EXP 00001004: SUB 00001005: DUP2 00001006: AND 00001007: DUP6 00001008: MSTORE 00001009: SWAP3 0000100a: MSTORE 0000100b: SWAP1 0000100c: SWAP2 0000100d: KECCAK256 0000100e: SLOAD 0000100f: DUP5 00001010: SWAP2 00001011: SWAP1 00001012: PUSH1 0xff 00001014: AND 00001015: ISZERO 00001016: PUSH2 0x101f 00001019: JUMPI 0000101a: PUSH1 0x00 0000101c: PUSH1 0x00 0000101e: REVERT 0000101f: JUMPDEST 00001020: PUSH1 0x00 00001022: DUP6 00001023: DUP2 00001024: MSTORE 00001025: PUSH1 0x01 00001027: PUSH1 0x20 00001029: DUP2 0000102a: DUP2 0000102b: MSTORE 0000102c: PUSH1 0x40 0000102e: DUP1 0000102f: DUP5 00001030: KECCAK256 00001031: PUSH1 0x01 00001033: PUSH1 0xa0 00001035: PUSH1 0x02 00001037: EXP 00001038: SUB 00001039: CALLER 0000103a: AND 0000103b: DUP1 0000103c: DUP7 0000103d: MSTORE 0000103e: SWAP3 0000103f: MSTORE 00001040: DUP1 00001041: DUP5 00001042: KECCAK256 00001043: DUP1 00001044: SLOAD 00001045: PUSH1 0xff 00001047: NOT 00001048: AND 00001049: SWAP1 0000104a: SWAP4 0000104b: OR 0000104c: SWAP1 0000104d: SWAP3 0000104e: SSTORE 0000104f: SWAP1 00001050: MLOAD 00001051: DUP8 00001052: SWAP3 00001053: PUSH32 0x4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef 00001074: SWAP2 00001075: LOG3 00001076: PUSH2 0x08b3 00001079: DUP6 0000107a: PUSH2 0x1270 0000107d: JUMP 0000107e: JUMPDEST 0000107f: JUMPDEST 00001080: JUMPDEST 00001081: POP 00001082: POP 00001083: JUMPDEST 00001084: POP 00001085: JUMPDEST 00001086: POP 00001087: POP 00001088: JUMP 00001089: JUMPDEST 0000108a: PUSH1 0x00 0000108c: PUSH2 0x1096 0000108f: DUP5 00001090: DUP5 00001091: DUP5 00001092: PUSH2 0x13d8 00001095: JUMP 00001096: JUMPDEST 00001097: SWAP1 00001098: POP 00001099: PUSH2 0x10a1 0000109c: DUP2 0000109d: PUSH2 0x0f9b 000010a0: JUMP 000010a1: JUMPDEST 000010a2: JUMPDEST 000010a3: SWAP4 000010a4: SWAP3 000010a5: POP 000010a6: POP 000010a7: POP 000010a8: JUMP 000010a9: JUMPDEST 000010aa: PUSH1 0x06 000010ac: DUP2 000010ad: JUMP 000010ae: JUMPDEST 000010af: PUSH1 0x04 000010b1: SLOAD 000010b2: DUP2 000010b3: JUMP 000010b4: JUMPDEST 000010b5: PUSH1 0x00 000010b7: ADDRESS 000010b8: PUSH1 0x01 000010ba: PUSH1 0xa0 000010bc: PUSH1 0x02 000010be: EXP 000010bf: SUB 000010c0: AND 000010c1: CALLER 000010c2: PUSH1 0x01 000010c4: PUSH1 0xa0 000010c6: PUSH1 0x02 000010c8: EXP 000010c9: SUB 000010ca: AND 000010cb: EQ 000010cc: ISZERO 000010cd: ISZERO 000010ce: PUSH2 0x10d7 000010d1: JUMPI 000010d2: PUSH1 0x00 000010d4: PUSH1 0x00 000010d6: REVERT 000010d7: JUMPDEST 000010d8: PUSH1 0x01 000010da: PUSH1 0xa0 000010dc: PUSH1 0x02 000010de: EXP 000010df: SUB 000010e0: DUP4 000010e1: AND 000010e2: PUSH1 0x00 000010e4: SWAP1 000010e5: DUP2 000010e6: MSTORE 000010e7: PUSH1 0x02 000010e9: PUSH1 0x20 000010eb: MSTORE 000010ec: PUSH1 0x40 000010ee: SWAP1 000010ef: KECCAK256 000010f0: SLOAD 000010f1: DUP4 000010f2: SWAP1 000010f3: PUSH1 0xff 000010f5: AND 000010f6: ISZERO 000010f7: ISZERO 000010f8: PUSH2 0x1101 000010fb: JUMPI 000010fc: PUSH1 0x00 000010fe: PUSH1 0x00 00001100: REVERT 00001101: JUMPDEST 00001102: PUSH1 0x01 00001104: PUSH1 0xa0 00001106: PUSH1 0x02 00001108: EXP 00001109: SUB 0000110a: DUP4 0000110b: AND 0000110c: PUSH1 0x00 0000110e: SWAP1 0000110f: DUP2 00001110: MSTORE 00001111: PUSH1 0x02 00001113: PUSH1 0x20 00001115: MSTORE 00001116: PUSH1 0x40 00001118: SWAP1 00001119: KECCAK256 0000111a: SLOAD 0000111b: DUP4 0000111c: SWAP1 0000111d: PUSH1 0xff 0000111f: AND 00001120: ISZERO 00001121: PUSH2 0x112a 00001124: JUMPI 00001125: PUSH1 0x00 00001127: PUSH1 0x00 00001129: REVERT 0000112a: JUMPDEST 0000112b: PUSH1 0x00 0000112d: SWAP3 0000112e: POP 0000112f: JUMPDEST 00001130: PUSH1 0x03 00001132: SLOAD 00001133: DUP4 00001134: LT 00001135: ISZERO 00001136: PUSH2 0x11d2 00001139: JUMPI 0000113a: DUP5 0000113b: PUSH1 0x01 0000113d: PUSH1 0xa0 0000113f: PUSH1 0x02 00001141: EXP 00001142: SUB 00001143: AND 00001144: PUSH1 0x03 00001146: DUP5 00001147: DUP2 00001148: SLOAD 00001149: DUP2 0000114a: LT 0000114b: ISZERO 0000114c: ISZERO 0000114d: PUSH2 0x1152 00001150: JUMPI 00001151: INVALID 00001152: JUMPDEST 00001153: SWAP1 00001154: PUSH1 0x00 00001156: MSTORE 00001157: PUSH1 0x20 00001159: PUSH1 0x00 0000115b: KECCAK256 0000115c: SWAP1 0000115d: ADD 0000115e: PUSH1 0x00 00001160: JUMPDEST 00001161: SWAP1 00001162: SLOAD 00001163: SWAP1 00001164: PUSH2 0x0100 00001167: EXP 00001168: SWAP1 00001169: DIV 0000116a: PUSH1 0x01 0000116c: PUSH1 0xa0 0000116e: PUSH1 0x02 00001170: EXP 00001171: SUB 00001172: AND 00001173: PUSH1 0x01 00001175: PUSH1 0xa0 00001177: PUSH1 0x02 00001179: EXP 0000117a: SUB 0000117b: AND 0000117c: EQ 0000117d: ISZERO 0000117e: PUSH2 0x11c6 00001181: JUMPI 00001182: DUP4 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: PUSH2 0x0100 000011a3: EXP 000011a4: DUP2 000011a5: SLOAD 000011a6: DUP2 000011a7: PUSH1 0x01 000011a9: PUSH1 0xa0 000011ab: PUSH1 0x02 000011ad: EXP 000011ae: SUB 000011af: MUL 000011b0: NOT 000011b1: AND 000011b2: SWAP1 000011b3: DUP4 000011b4: PUSH1 0x01 000011b6: PUSH1 0xa0 000011b8: PUSH1 0x02 000011ba: EXP 000011bb: SUB 000011bc: AND 000011bd: MUL 000011be: OR 000011bf: SWAP1 000011c0: SSTORE 000011c1: POP 000011c2: PUSH2 0x11d2 000011c5: JUMP 000011c6: JUMPDEST 000011c7: JUMPDEST 000011c8: PUSH1 0x01 000011ca: SWAP1 000011cb: SWAP3 000011cc: ADD 000011cd: SWAP2 000011ce: PUSH2 0x112f 000011d1: JUMP 000011d2: JUMPDEST 000011d3: PUSH1 0x01 000011d5: PUSH1 0xa0 000011d7: PUSH1 0x02 000011d9: EXP 000011da: SUB 000011db: DUP1 000011dc: DUP7 000011dd: AND 000011de: PUSH1 0x00 000011e0: DUP2 000011e1: DUP2 000011e2: MSTORE 000011e3: PUSH1 0x02 000011e5: PUSH1 0x20 000011e7: MSTORE 000011e8: PUSH1 0x40 000011ea: DUP1 000011eb: DUP3 000011ec: KECCAK256 000011ed: DUP1 000011ee: SLOAD 000011ef: PUSH1 0xff 000011f1: NOT 000011f2: SWAP1 000011f3: DUP2 000011f4: AND 000011f5: SWAP1 000011f6: SWAP2 000011f7: SSTORE 000011f8: SWAP4 000011f9: DUP9 000011fa: AND 000011fb: DUP3 000011fc: MSTORE 000011fd: DUP1 000011fe: DUP3 000011ff: KECCAK256 00001200: DUP1 00001201: SLOAD 00001202: SWAP1 00001203: SWAP5 00001204: AND 00001205: PUSH1 0x01 00001207: OR 00001208: SWAP1 00001209: SWAP4 0000120a: SSTORE 0000120b: SWAP2 0000120c: MLOAD 0000120d: SWAP1 0000120e: SWAP2 0000120f: PUSH32 0x8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b90 00001230: SWAP2 00001231: LOG2 00001232: PUSH1 0x40 00001234: MLOAD 00001235: PUSH1 0x01 00001237: PUSH1 0xa0 00001239: PUSH1 0x02 0000123b: EXP 0000123c: SUB 0000123d: DUP6 0000123e: AND 0000123f: SWAP1 00001240: PUSH32 0xf39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d 00001261: SWAP1 00001262: PUSH1 0x00 00001264: SWAP1 00001265: LOG2 00001266: JUMPDEST 00001267: JUMPDEST 00001268: POP 00001269: JUMPDEST 0000126a: POP 0000126b: JUMPDEST 0000126c: POP 0000126d: POP 0000126e: POP 0000126f: JUMP 00001270: JUMPDEST 00001271: PUSH1 0x00 00001273: DUP2 00001274: DUP2 00001275: MSTORE 00001276: PUSH1 0x20 00001278: DUP2 00001279: SWAP1 0000127a: MSTORE 0000127b: PUSH1 0x40 0000127d: DUP2 0000127e: KECCAK256 0000127f: PUSH1 0x03 00001281: ADD 00001282: SLOAD 00001283: DUP3 00001284: SWAP1 00001285: PUSH1 0xff 00001287: AND 00001288: ISZERO 00001289: PUSH2 0x1292 0000128c: JUMPI 0000128d: PUSH1 0x00 0000128f: PUSH1 0x00 00001291: REVERT 00001292: JUMPDEST 00001293: PUSH2 0x129b 00001296: DUP4 00001297: PUSH2 0x0a98 0000129a: JUMP 0000129b: JUMPDEST 0000129c: ISZERO 0000129d: PUSH2 0x07d9 000012a0: JUMPI 000012a1: PUSH1 0x00 000012a3: DUP4 000012a4: DUP2 000012a5: MSTORE 000012a6: PUSH1 0x20 000012a8: DUP2 000012a9: SWAP1 000012aa: MSTORE 000012ab: PUSH1 0x40 000012ad: SWAP1 000012ae: DUP2 000012af: SWAP1 000012b0: KECCAK256 000012b1: PUSH1 0x03 000012b3: DUP2 000012b4: ADD 000012b5: DUP1 000012b6: SLOAD 000012b7: PUSH1 0xff 000012b9: NOT 000012ba: AND 000012bb: PUSH1 0x01 000012bd: SWAP1 000012be: DUP2 000012bf: OR 000012c0: SWAP1 000012c1: SWAP2 000012c2: SSTORE 000012c3: DUP2 000012c4: SLOAD 000012c5: DUP2 000012c6: DUP4 000012c7: ADD 000012c8: SLOAD 000012c9: SWAP4 000012ca: MLOAD 000012cb: PUSH1 0x02 000012cd: DUP1 000012ce: DUP6 000012cf: ADD 000012d0: DUP1 000012d1: SLOAD 000012d2: SWAP6 000012d3: SWAP9 000012d4: POP 000012d5: PUSH1 0x01 000012d7: PUSH1 0xa0 000012d9: PUSH1 0x02 000012db: EXP 000012dc: SUB 000012dd: SWAP1 000012de: SWAP4 000012df: AND 000012e0: SWAP6 000012e1: SWAP5 000012e2: SWAP3 000012e3: SWAP4 000012e4: SWAP2 000012e5: SWAP3 000012e6: DUP4 000012e7: SWAP3 000012e8: DUP6 000012e9: SWAP3 000012ea: PUSH1 0x00 000012ec: NOT 000012ed: SWAP2 000012ee: DUP4 000012ef: AND 000012f0: ISZERO 000012f1: PUSH2 0x0100 000012f4: MUL 000012f5: SWAP2 000012f6: SWAP1 000012f7: SWAP2 000012f8: ADD 000012f9: SWAP1 000012fa: SWAP2 000012fb: AND 000012fc: DIV 000012fd: DUP1 000012fe: ISZERO 000012ff: PUSH2 0x1349 00001302: JUMPI 00001303: DUP1 00001304: PUSH1 0x1f 00001306: LT 00001307: PUSH2 0x131e 0000130a: JUMPI 0000130b: PUSH2 0x0100 0000130e: DUP1 0000130f: DUP4 00001310: SLOAD 00001311: DIV 00001312: MUL 00001313: DUP4 00001314: MSTORE 00001315: SWAP2 00001316: PUSH1 0x20 00001318: ADD 00001319: SWAP2 0000131a: PUSH2 0x1349 0000131d: JUMP 0000131e: JUMPDEST 0000131f: DUP3 00001320: ADD 00001321: SWAP2 00001322: SWAP1 00001323: PUSH1 0x00 00001325: MSTORE 00001326: PUSH1 0x20 00001328: PUSH1 0x00 0000132a: KECCAK256 0000132b: SWAP1 0000132c: JUMPDEST 0000132d: DUP2 0000132e: SLOAD 0000132f: DUP2 00001330: MSTORE 00001331: SWAP1 00001332: PUSH1 0x01 00001334: ADD 00001335: SWAP1 00001336: PUSH1 0x20 00001338: ADD 00001339: DUP1 0000133a: DUP4 0000133b: GT 0000133c: PUSH2 0x132c 0000133f: JUMPI 00001340: DUP3 00001341: SWAP1 00001342: SUB 00001343: PUSH1 0x1f 00001345: AND 00001346: DUP3 00001347: ADD 00001348: SWAP2 00001349: JUMPDEST 0000134a: POP 0000134b: POP 0000134c: SWAP2 0000134d: POP 0000134e: POP 0000134f: PUSH1 0x00 00001351: PUSH1 0x40 00001353: MLOAD 00001354: DUP1 00001355: DUP4 00001356: SUB 00001357: DUP2 00001358: DUP6 00001359: DUP8 0000135a: PUSH2 0x8502 0000135d: GAS 0000135e: SUB 0000135f: CALL 00001360: SWAP3 00001361: POP 00001362: POP 00001363: POP 00001364: ISZERO 00001365: PUSH2 0x1398 00001368: JUMPI 00001369: PUSH1 0x40 0000136b: MLOAD 0000136c: DUP4 0000136d: SWAP1 0000136e: PUSH32 0x33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed75 0000138f: SWAP1 00001390: PUSH1 0x00 00001392: SWAP1 00001393: LOG2 00001394: PUSH2 0x07d9 00001397: JUMP 00001398: JUMPDEST 00001399: PUSH1 0x40 0000139b: MLOAD 0000139c: DUP4 0000139d: SWAP1 0000139e: PUSH32 0x526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b79236 000013bf: SWAP1 000013c0: PUSH1 0x00 000013c2: SWAP1 000013c3: LOG2 000013c4: PUSH1 0x03 000013c6: DUP3 000013c7: ADD 000013c8: DUP1 000013c9: SLOAD 000013ca: PUSH1 0xff 000013cc: NOT 000013cd: AND 000013ce: SWAP1 000013cf: SSTORE 000013d0: JUMPDEST 000013d1: JUMPDEST 000013d2: JUMPDEST 000013d3: JUMPDEST 000013d4: POP 000013d5: POP 000013d6: POP 000013d7: JUMP 000013d8: JUMPDEST 000013d9: PUSH1 0x00 000013db: DUP4 000013dc: PUSH1 0x01 000013de: PUSH1 0xa0 000013e0: PUSH1 0x02 000013e2: EXP 000013e3: SUB 000013e4: DUP2 000013e5: AND 000013e6: ISZERO 000013e7: ISZERO 000013e8: PUSH2 0x13f1 000013eb: JUMPI 000013ec: PUSH1 0x00 000013ee: PUSH1 0x00 000013f0: REVERT 000013f1: JUMPDEST 000013f2: PUSH1 0x05 000013f4: SLOAD 000013f5: PUSH1 0x40 000013f7: DUP1 000013f8: MLOAD 000013f9: PUSH1 0x80 000013fb: DUP2 000013fc: ADD 000013fd: DUP3 000013fe: MSTORE 000013ff: PUSH1 0x01 00001401: PUSH1 0xa0 00001403: PUSH1 0x02 00001405: EXP 00001406: SUB 00001407: DUP9 00001408: DUP2 00001409: AND 0000140a: DUP3 0000140b: MSTORE 0000140c: PUSH1 0x20 0000140e: DUP1 0000140f: DUP4 00001410: ADD 00001411: DUP10 00001412: DUP2 00001413: MSTORE 00001414: DUP4 00001415: DUP6 00001416: ADD 00001417: DUP10 00001418: DUP2 00001419: MSTORE 0000141a: PUSH1 0x00 0000141c: PUSH1 0x60 0000141e: DUP7 0000141f: ADD 00001420: DUP2 00001421: SWAP1 00001422: MSTORE 00001423: DUP8 00001424: DUP2 00001425: MSTORE 00001426: DUP1 00001427: DUP5 00001428: MSTORE 00001429: SWAP6 0000142a: SWAP1 0000142b: SWAP6 0000142c: KECCAK256 0000142d: DUP5 0000142e: MLOAD 0000142f: DUP2 00001430: SLOAD 00001431: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001446: NOT 00001447: AND 00001448: SWAP5 00001449: AND 0000144a: SWAP4 0000144b: SWAP1 0000144c: SWAP4 0000144d: OR 0000144e: DUP4 0000144f: SSTORE 00001450: MLOAD 00001451: PUSH1 0x01 00001453: DUP4 00001454: ADD 00001455: SSTORE 00001456: SWAP3 00001457: MLOAD 00001458: DUP1 00001459: MLOAD 0000145a: SWAP5 0000145b: SWAP7 0000145c: POP 0000145d: SWAP2 0000145e: SWAP4 0000145f: SWAP1 00001460: SWAP3 00001461: PUSH2 0x1471 00001464: SWAP3 00001465: PUSH1 0x02 00001467: DUP6 00001468: ADD 00001469: SWAP3 0000146a: SWAP2 0000146b: ADD 0000146c: SWAP1 0000146d: PUSH2 0x1543 00001470: JUMP 00001471: JUMPDEST 00001472: POP 00001473: PUSH1 0x60 00001475: SWAP2 00001476: SWAP1 00001477: SWAP2 00001478: ADD 00001479: MLOAD 0000147a: PUSH1 0x03 0000147c: SWAP1 0000147d: SWAP2 0000147e: ADD 0000147f: DUP1 00001480: SLOAD 00001481: PUSH1 0xff 00001483: NOT 00001484: AND 00001485: SWAP2 00001486: ISZERO 00001487: ISZERO 00001488: SWAP2 00001489: SWAP1 0000148a: SWAP2 0000148b: OR 0000148c: SWAP1 0000148d: SSTORE 0000148e: PUSH1 0x05 00001490: DUP1 00001491: SLOAD 00001492: PUSH1 0x01 00001494: ADD 00001495: SWAP1 00001496: SSTORE 00001497: PUSH1 0x40 00001499: MLOAD 0000149a: DUP3 0000149b: SWAP1 0000149c: PUSH32 0xc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e51 000014bd: SWAP1 000014be: PUSH1 0x00 000014c0: SWAP1 000014c1: LOG2 000014c2: JUMPDEST 000014c3: JUMPDEST 000014c4: POP 000014c5: SWAP4 000014c6: SWAP3 000014c7: POP 000014c8: POP 000014c9: POP 000014ca: JUMP 000014cb: JUMPDEST 000014cc: DUP2 000014cd: SLOAD 000014ce: DUP2 000014cf: DUP4 000014d0: SSTORE 000014d1: DUP2 000014d2: DUP2 000014d3: ISZERO 000014d4: GT 000014d5: PUSH2 0x07d9 000014d8: JUMPI 000014d9: PUSH1 0x00 000014db: DUP4 000014dc: DUP2 000014dd: MSTORE 000014de: PUSH1 0x20 000014e0: SWAP1 000014e1: KECCAK256 000014e2: PUSH2 0x07d9 000014e5: SWAP2 000014e6: DUP2 000014e7: ADD 000014e8: SWAP1 000014e9: DUP4 000014ea: ADD 000014eb: PUSH2 0x15c2 000014ee: JUMP 000014ef: JUMPDEST 000014f0: JUMPDEST 000014f1: POP 000014f2: POP 000014f3: POP 000014f4: JUMP 000014f5: JUMPDEST 000014f6: DUP2 000014f7: SLOAD 000014f8: DUP2 000014f9: DUP4 000014fa: SSTORE 000014fb: DUP2 000014fc: DUP2 000014fd: ISZERO 000014fe: GT 000014ff: PUSH2 0x07d9 00001502: JUMPI 00001503: PUSH1 0x00 00001505: DUP4 00001506: DUP2 00001507: MSTORE 00001508: PUSH1 0x20 0000150a: SWAP1 0000150b: KECCAK256 0000150c: PUSH2 0x07d9 0000150f: SWAP2 00001510: DUP2 00001511: ADD 00001512: SWAP1 00001513: DUP4 00001514: ADD 00001515: PUSH2 0x15c2 00001518: JUMP 00001519: JUMPDEST 0000151a: JUMPDEST 0000151b: POP 0000151c: POP 0000151d: POP 0000151e: JUMP 0000151f: JUMPDEST 00001520: PUSH1 0x40 00001522: DUP1 00001523: MLOAD 00001524: PUSH1 0x20 00001526: DUP2 00001527: ADD 00001528: SWAP1 00001529: SWAP2 0000152a: MSTORE 0000152b: PUSH1 0x00 0000152d: DUP2 0000152e: MSTORE 0000152f: SWAP1 00001530: JUMP 00001531: JUMPDEST 00001532: PUSH1 0x40 00001534: DUP1 00001535: MLOAD 00001536: PUSH1 0x20 00001538: DUP2 00001539: ADD 0000153a: SWAP1 0000153b: SWAP2 0000153c: MSTORE 0000153d: PUSH1 0x00 0000153f: DUP2 00001540: MSTORE 00001541: SWAP1 00001542: JUMP 00001543: JUMPDEST 00001544: DUP3 00001545: DUP1 00001546: SLOAD 00001547: PUSH1 0x01 00001549: DUP2 0000154a: PUSH1 0x01 0000154c: AND 0000154d: ISZERO 0000154e: PUSH2 0x0100 00001551: MUL 00001552: SUB 00001553: AND 00001554: PUSH1 0x02 00001556: SWAP1 00001557: DIV 00001558: SWAP1 00001559: PUSH1 0x00 0000155b: MSTORE 0000155c: PUSH1 0x20 0000155e: PUSH1 0x00 00001560: KECCAK256 00001561: SWAP1 00001562: PUSH1 0x1f 00001564: ADD 00001565: PUSH1 0x20 00001567: SWAP1 00001568: DIV 00001569: DUP2 0000156a: ADD 0000156b: SWAP3 0000156c: DUP3 0000156d: PUSH1 0x1f 0000156f: LT 00001570: PUSH2 0x1584 00001573: JUMPI 00001574: DUP1 00001575: MLOAD 00001576: PUSH1 0xff 00001578: NOT 00001579: AND 0000157a: DUP4 0000157b: DUP1 0000157c: ADD 0000157d: OR 0000157e: DUP6 0000157f: SSTORE 00001580: PUSH2 0x15b1 00001583: JUMP 00001584: JUMPDEST 00001585: DUP3 00001586: DUP1 00001587: ADD 00001588: PUSH1 0x01 0000158a: ADD 0000158b: DUP6 0000158c: SSTORE 0000158d: DUP3 0000158e: ISZERO 0000158f: PUSH2 0x15b1 00001592: JUMPI 00001593: SWAP2 00001594: DUP3 00001595: ADD 00001596: JUMPDEST 00001597: DUP3 00001598: DUP2 00001599: GT 0000159a: ISZERO 0000159b: PUSH2 0x15b1 0000159e: JUMPI 0000159f: DUP3 000015a0: MLOAD 000015a1: DUP3 000015a2: SSTORE 000015a3: SWAP2 000015a4: PUSH1 0x20 000015a6: ADD 000015a7: SWAP2 000015a8: SWAP1 000015a9: PUSH1 0x01 000015ab: ADD 000015ac: SWAP1 000015ad: PUSH2 0x1596 000015b0: JUMP 000015b1: JUMPDEST 000015b2: JUMPDEST 000015b3: POP 000015b4: PUSH2 0x15be 000015b7: SWAP3 000015b8: SWAP2 000015b9: POP 000015ba: PUSH2 0x15c2 000015bd: JUMP 000015be: JUMPDEST 000015bf: POP 000015c0: SWAP1 000015c1: JUMP 000015c2: JUMPDEST 000015c3: PUSH2 0x0c45 000015c6: SWAP2 000015c7: SWAP1 000015c8: JUMPDEST 000015c9: DUP1 000015ca: DUP3 000015cb: GT 000015cc: ISZERO 000015cd: PUSH2 0x15be 000015d0: JUMPI 000015d1: PUSH1 0x00 000015d3: DUP2 000015d4: SSTORE 000015d5: PUSH1 0x01 000015d7: ADD 000015d8: PUSH2 0x15c8 000015db: JUMP 000015dc: JUMPDEST 000015dd: POP 000015de: SWAP1 000015df: JUMP 000015e0: JUMPDEST 000015e1: SWAP1 000015e2: JUMP 000015e3: STOP 000015e4: LOG1 000015e5: PUSH6 0x627a7a723058 000015ec: KECCAK256 000015ed: DUP15 000015ee: UNKNOWN(0xB8) 000015ef: CREATE 000015f0: ADDRESS 000015f1: UNKNOWN(0xD0) 000015f2: UNKNOWN(0xC8) 000015f3: UNKNOWN(0x22) 000015f4: UNKNOWN(0x0C) 000015f5: MSTORE 000015f6: UNKNOWN(0xEC) 000015f7: SWAP9 000015f8: NOT 000015f9: RETURNDATACOPY 000015fa: PUSH23
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0x8f2b6e2015b4b27e39ea17bcdc9b9d3b6be086a432bed1adcefa19303400cf56
call_targets:
0x6cd67b2155cdd5144a567b8fe47cae2825df1db7
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x8f2b6e2015b4b27e39ea17bcdc9b9d3b6be086a432bed1adcefa19303400cf56",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x6cd67b2155cdd5144a567b8fe47cae2825df1db7"
],
"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": 4959,
"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 |
viewtrace_id: 0x8f2b6e2015b4b27e39ea17bcdc9b9d3b6be086a432bed1adcefa19303400cf56
call_targets:
0x6cd67b2155cdd5144a567b8fe47cae2825df1db7
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x8f2b6e2015b4b27e39ea17bcdc9b9d3b6be086a432bed1adcefa19303400cf56",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x6cd67b2155cdd5144a567b8fe47cae2825df1db7"
],
"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": 4959,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 1,
"guards_detected": []
}
|
| medium | other | detector | CREATE/CREATE2 reachable | 45 | no | no |
viewtrace_id: 0x0c8aa774f05bcf7c948a98ce47d101bd197f8e013102b9bac2fece15b4ddf2ff
validation_json{
"sink": "CREATE",
"errors": 0,
"status": "unknown",
"attempts": 32,
"trace_id": "0x0c8aa774f05bcf7c948a98ce47d101bd197f8e013102b9bac2fece15b4ddf2ff",
"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{
"create_count": 1,
"create2_count": 0
}
|
| low | other | cast | Contract creation opcode present | 60 | no | — |
viewevidence_json{
"notes": "runtime can deploy contracts dynamically via CREATE/CREATE2",
"create_count": 1,
"create2_count": 0
}
|