4461348a-3101-4598-a289-fbd5b88aa3c5
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 |
|---|---|---|---|---|
| 31424 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 77170 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 77171 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 77172 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 77173 | capability.graph | complete | 1 / 3 | 1 week ago |
| 77174 | detector.run | complete | 1 / 3 | 1 week ago |
| 77175 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:987965] OpenAI Codex v0.77.0 (research preview)
[codex:987965] --------
[codex:987965] workdir: /tmp/codex-multi-cyu1asis
[codex:987965] model: gpt-5.2-codex
[codex:987965] provider: openai
[codex:987965] approval: never
[codex:987965] sandbox: read-only
[codex:987965] reasoning effort: xhigh
[codex:987965] reasoning summaries: auto
[codex:987965] session id: 019b818d-a960-7720-ba01-dff97449ab55
[codex:987965] --------
[codex:987965] user
[codex:987965] 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:987965]
[codex:987965] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:987965]
[codex:987965] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:987965] - Gas inefficiency, code quality, or best practices
[codex:987965] - Theoretical vulnerabilities without a clear extraction path
[codex:987965] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:987965] - Issues requiring social engineering or off-chain coordination
[codex:987965]
[codex:987965] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:987965] - CALL/DELEGATECALL with controllable destination or calldata
[codex:987965] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:987965] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:987965] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:987965] - External calls before state updates (reentrancy)
[codex:987965] - SELFDESTRUCT with controllable beneficiary
[codex:987965] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:987965]
[codex:987965] For each finding, you MUST explain:
[codex:987965] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:987965] 2. The concrete sequence of transactions to extract value
[codex:987965] 3. Why you believe this is exploitable (not just suspicious)
[codex:987965]
[codex:987965] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:987965] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:987965]
[codex:987965] Output MUST be valid JSON matching the provided schema.
[codex:987965] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:987965] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:987965] mcp startup: no servers
[codex:987965]
[codex:987965] thinking
[codex:987965] **Accessing BYTECODE_BUNDLE.txt**
[codex:987965] exec
[codex:987965] /bin/bash -lc ls in /tmp/codex-multi-cyu1asis succeeded in 5ms:
[codex:987965] BYTECODE_BUNDLE.txt
[codex:987965] codex-output-schema.json
[codex:987965] exec
[codex:987965] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-cyu1asis succeeded in 5ms:
[codex:987965] Runtime bytecode bundle for best-effort auditing.
[codex:987965] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:987965]
[codex:987965] FILE: runtime_bytecode.hex
[codex:987965] 0x608080604052600436101561001d575b50361561001b57600080fd5b005b60003560e01c90816301cce4be146116d357508063043fa11d1461131057806324057e1014610a115780632b7ac3f3146109bf57806330c2f42d1461094e5780633644e515146108f55780636b8a3fa21461089c578063715018a6146108005780638da5cb5b146107ae578063a654575d1461069e578063a7c3210214610634578063ac9650d81461032b578063af83a9fa146102d2578063cdae7c66146102095763f2fde38b146100cf573861000f565b346102045760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610204576101066117c3565b61010e611844565b73ffffffffffffffffffffffffffffffffffffffff80911690811561018057600054827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b600080fd5b346102045760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610204576102406117c3565b6024359081151580920361020457602073ffffffffffffffffffffffffffffffffffffffff7ff74a7e0211c0b5093895ff26748f0867f9ba95a25bf0ef5a83a1893584118d3c9261028f611844565b1692836000526003825260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff8316179055604051908152a2005b346102045760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102045760206040517f83ff2829503e6b25933e0c1d0422aeb9b68fe6259418bffd98b105c4ef89c4d48152f35b34610204576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102045767ffffffffffffffff6004358181116102045761037c90369060040161176f565b909161038782611934565b9261039560405194856118f3565b8284527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06103c284611934565b018560005b8281106106255750505060005b83811061045757604080518781528651818901819052600092600582901b8301810191898b01918b9085015b82871061040d5785850386f35b909192938280610447837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08a6001960301865288516117e6565b9601920196019592919092610400565b8060051b8201357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1833603018112156102045782018035908482116102045787018136038113610204576104ac913691611986565b604051906104b9826118d7565b602782527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c888301527f206661696c6564000000000000000000000000000000000000000000000000006040830152303b156105a15790600080838a61052d95519101305af4610527611a00565b90611a30565b61053782876119bd565b5261054281866119bd565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610572576001016103d4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b608488604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152fd5b606087820183015281016103c7565b346102045760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102045773ffffffffffffffffffffffffffffffffffffffff6106806117c3565b166000526003602052602060ff604060002054166040519015158152f35b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610204576106d0611740565b7fe2d720c0ec6278814542be7b28dc57fd374b4c0920247e0ce632703fe8c7cc4c60606106fb6117a0565b927fffffffffffffffffffffffffffffffff0000000000000000000000000000000060443591169384600052600260205261073b60406000205415611a8e565b436107995784600052600260205260016040600020555b73ffffffffffffffffffffffffffffffffffffffff81169182610787575050345b6040519182526020820152336040820152a2005b6107949130903390611ea7565b610773565b84600052600260205243604060002055610752565b346102045760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020457602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b346102045760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020457610837611844565b600073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346102045760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102045760206040517f128db24430fa2fc5b7de9305b8518573b5e9ed0bde3a71ed68fc27427fcdac9b8152f35b346102045760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102045760206040517f48a7c38831f5161a72e249c43086721798d52b6ca8ec2ea3e120a257a1bc99cf8152f35b346102045760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610204577fffffffffffffffffffffffffffffffff000000000000000000000000000000006109a6611740565b1660005260016020526020604060002054604051908152f35b346102045760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020457602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b346102045760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020457610a48611740565b610a506117a0565b9073ffffffffffffffffffffffffffffffffffffffff60843516608435036102045767ffffffffffffffff60a435116102045736602360a4350112156102045767ffffffffffffffff60a43560040135116102045736602460a4356004013560a4350101116102045760c43567ffffffffffffffff811161020457610ad990369060040161176f565b9033600052600360205260ff6040600020541680156112fd575b15610204577fffffffffffffffffffffffffffffffff0000000000000000000000000000000083166000526001602052610b3260406000205415611a8e565b436112c6577fffffffffffffffffffffffffffffffff000000000000000000000000000000008316600052600160205260016040600020555b610b813660a43560040135602460a43501611986565b6020815191012091604051927f128db24430fa2fc5b7de9305b8518573b5e9ed0bde3a71ed68fc27427fcdac9b60208501527fffffffffffffffffffffffffffffffff000000000000000000000000000000008516604085015273ffffffffffffffffffffffffffffffffffffffff86166060850152604435608085015260643560a085015273ffffffffffffffffffffffffffffffffffffffff6084351660c085015260e084015260e083528261010081011067ffffffffffffffff610100850111176112975760209161010084016040527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084610cf28151868301209473ffffffffffffffffffffffffffffffffffffffff60045416947f8394786f000000000000000000000000000000000000000000000000000000006101008501526101008401967f48a7c38831f5161a72e249c43086721798d52b6ca8ec2ea3e120a257a1bc99cf6101048601611b0b565b0301906101008501905afa9081156110835760009161125f575b50156112015773ffffffffffffffffffffffffffffffffffffffff8216610e2c577fa3a407ca9c8f72918b37b717afb70b7c6b00078c3aecbff60db587287255077e906060907fffffffffffffffffffffffffffffffff0000000000000000000000000000000090600460a435013515610e0e57610dc5610d91606435604435611c17565b610da73660a43560040135602460a43501611986565b73ffffffffffffffffffffffffffffffffffffffff60843516611d3c565b505b73ffffffffffffffffffffffffffffffffffffffff60405195168552604435602086015273ffffffffffffffffffffffffffffffffffffffff6084351660408601521692a2005b610e27610e1f606435604435611c17565b608435611c24565b610dc7565b600460a43501351561117f576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff87165afa9081156110835760009161114d575b50604435116110c95773ffffffffffffffffffffffffffffffffffffffff82163b15610204576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff608435811660048301526044803560248401526000918391908290849088165af18015611083576110ba575b50610f3c606435610da73660a43560040135602460a43501611986565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff87165afa80156110835761108f575b5073ffffffffffffffffffffffffffffffffffffffff82163b15610204576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff608435166004820152600060248201526000816044818373ffffffffffffffffffffffffffffffffffffffff88165af18015611083577fa3a407ca9c8f72918b37b717afb70b7c6b00078c3aecbff60db587287255077e926060927fffffffffffffffffffffffffffffffff0000000000000000000000000000000092611074575b50610dc7565b61107d906118c3565b8561106e565b6040513d6000823e3d90fd5b602090813d83116110b3575b6110a581836118f3565b810103126102045782610f93565b503d61109b565b6110c3906118c3565b82610f1f565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f53616665546f6b656e3a20696e73756666696369656e742062616c616e63652060448201527f666f7220617070726f76650000000000000000000000000000000000000000006064820152fd5b90506020813d602011611177575b81611168602093836118f3565b81010312610204575183610e92565b3d915061115b565b60607fffffffffffffffffffffffffffffffff000000000000000000000000000000007fa3a407ca9c8f72918b37b717afb70b7c6b00078c3aecbff60db587287255077e926111ea60443573ffffffffffffffffffffffffffffffffffffffff608435163088611ea7565b5060643515610dc757610e27606435608435611c24565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a20696e76616c6964207369676e6174757265730000000000006044820152fd5b61128a915060203d602011611290575b6101008161128082938386016118f3565b8301019101611af3565b83610d0c565b503d61126f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008316600052600160205243604060002055610b6b565b503260005260ff60406000205416610af3565b346102045760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102045760043573ffffffffffffffffffffffffffffffffffffffff8082168092036102045760243567ffffffffffffffff6044358181116102045761138590369060040161176f565b606492919235828111610204576113a090369060040161176f565b91909385421161167557604051602096878201907f83ff2829503e6b25933e0c1d0422aeb9b68fe6259418bffd98b105c4ef89c4d482528a60408401526060830152606082526080820195828710908711176112975785604052815190209487817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80846114787f48a7c38831f5161a72e249c43086721798d52b6ca8ec2ea3e120a257a1bc99cf987f8394786f00000000000000000000000000000000000000000000000000000000988986528c8b60848601611b0b565b0301818d5afa91821561108357600092611642575b5050156115be5760045496871692836114cb575b7fffffffffffffffffffffffff000000000000000000000000000000000000000088168917600455005b906114e9879594939260405197889687958695865260048601611b0b565b03915afa90811561108357600091611591575b501561150d578080808080806114a1565b608490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f4272696467653a20696e76616c6964207369676e617475726520666f72206f6c60448201527f64207665726966696572000000000000000000000000000000000000000000006064820152fd5b6115b19150823d84116115b7575b6115a981836118f3565b810190611af3565b846114fc565b503d61159f565b608486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f4272696467653a20696e76616c6964207369676e617475726520666f72206e6560448201527f77207665726966696572000000000000000000000000000000000000000000006064820152fd5b611666925060809089903d8b1161166d575b61165e82856118f3565b010190611af3565b898061148d565b3d9150611654565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4272696467653a206578706972656400000000000000000000000000000000006044820152fd5b346102045760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610204576020907fffffffffffffffffffffffffffffffff0000000000000000000000000000000061172e611740565b16600052600282526040600020548152f35b600435907fffffffffffffffffffffffffffffffff000000000000000000000000000000008216820361020457565b9181601f840112156102045782359167ffffffffffffffff8311610204576020808501948460051b01011161020457565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361020457565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361020457565b919082519283825260005b8481106118305750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b6020818301810151848301820152016117f1565b73ffffffffffffffffffffffffffffffffffffffff60005416330361186557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b67ffffffffffffffff811161129757604052565b6060810190811067ffffffffffffffff82111761129757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761129757604052565b67ffffffffffffffff81116112975760051b60200190565b67ffffffffffffffff811161129757601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926119928261194c565b916119a060405193846118f3565b829481845281830111610204578281602093846000960137010152565b80518210156119d15760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3d15611a2b573d90611a118261194c565b91611a1f60405193846118f3565b82523d6000602084013e565b606090565b90919015611a3c575090565b815115611a4c5750805190602001fd5b611a8a906040519182917f08c379a00000000000000000000000000000000000000000000000000000000083526020600484015260248301906117e6565b0390fd5b15611a9557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4272696467653a207575696420616c72656164792075736564000000000000006044820152fd5b90816020910312610204575180151581036102045790565b9380929160608601908652602092838701526060604087015252608084019360808360051b82010194846000925b858410611b4a575050505050505090565b909192939495967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082820301845287357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181121561020457830186810191903567ffffffffffffffff81116102045780360383136102045787827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f848060019886989787985286860137600085828601015201160101990194019401929594939190611b39565b9190820180921161057257565b814710611cde57600080809373ffffffffffffffffffffffffffffffffffffffff8294165af1611c52611a00565b5015611c5a57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152fd5b6040519192611d4a836118d7565b602983527f416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c60208401527f7565206661696c656400000000000000000000000000000000000000000000006040840152804710611e2357813b15611dc5578360009283926020611dc297519301915af1610527611a00565b90565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152fd5b9273ffffffffffffffffffffffffffffffffffffffff809416936040948551947f70a082310000000000000000000000000000000000000000000000000000000080875283600096169060049582878a015260209360249985818c818a5afa90811561212b579083918b916121b6575b5010612135578a5196838852811693848989015285888c818a5afa97881561212b578a986120f8575b503081036120815750853b1561207d578a517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116888201908152602081019290925290889082908190604001038183895af180156120735791888a92869594612051575b50505b8a5195869384928352898301525afa96871561204857508496612018575b50508403938411611fef5750505090565b6011907f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b9080929650813d8311612041575b61203081836118f3565b810103126102045751933880611fde565b503d612026565b513d86823e3d90fd5b909250612060919394506118c3565b61206f57908783928838611fbd565b8680fd5b8a513d8a823e3d90fd5b8880fd5b919050853b1561207d578a51917f23b872dd00000000000000000000000000000000000000000000000000000000835288830152838a8301526044820152878160648183895af1801561207357908992916120e1575b5090839291611fc0565b976120ef85949392996118c3565b979091926120d7565b9097508581813d8311612124575b61211081836118f3565b8101031261212057519638611f40565b8980fd5b503d612106565b8c513d8c823e3d90fd5b60848860288c888f51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f53616665546f6b656e3a20696e73756666696369656e742062616c616e63652060448201527f666f72206d6f76650000000000000000000000000000000000000000000000006064820152fd5b809250878092503d83116121e0575b6121cf81836118f3565b810103126121205782905138611f17565b503d6121c556fea26469706673582212205be635b01603a215078403ef71329b0b36e7ade37f78096f0f65d071d4d8293864736f6c63430008110033
[codex:987965]
[codex:987965] thinking
[codex:987965] **Analyzing bytecode for delegatecall exploits**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # simple disasm
[codex:987965] opcodes={
[codex:987965] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965] 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:987965] 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:987965] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965] 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:987965] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965]
[codex:987965] # produce list with offsets and opcodes
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965] op=bytecode[pc]
[codex:987965] name=opcodes.get(op, f'OP{op:02x}')
[codex:987965] pc0=pc
[codex:987965] pc+=1
[codex:987965] arg=None
[codex:987965] if 0x60<=op<=0x7f:
[codex:987965] n=op-0x5f
[codex:987965] arg=bytecode[pc:pc+n]
[codex:987965] pc+=n
[codex:987965] out.append((pc0, name, arg.hex() if arg else None))
[codex:987965]
[codex:987965] # find delegatecall occurrences
[codex:987965] for i,(pc,name,arg) in enumerate(out):
[codex:987965] if name=='DELEGATECALL':
[codex:987965] # show few ops around
[codex:987965] start=max(0,i-10); end=min(len(out),i+10)
[codex:987965] print('--- delegatecall at',hex(pc))
[codex:987965] for j in range(start,end):
[codex:987965] p,n,a=out[j]
[codex:987965] if a is None:
[codex:987965] print(hex(p), n)
[codex:987965] else:
[codex:987965] print(hex(p), n, a)
[codex:987965]
[codex:987965] # find CALL with value non-zero? Hard to know.
[codex:987965]
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 33ms:
[codex:987965] --- delegatecall at 0x51f
[codex:987965] 0x513 OP80
[codex:987965] 0x514 OP83
[codex:987965] 0x515 OP8a
[codex:987965] 0x516 PUSH2 052d
[codex:987965] 0x519 OP95
[codex:987965] 0x51a MLOAD
[codex:987965] 0x51b OP91
[codex:987965] 0x51c ADD
[codex:987965] 0x51d ADDRESS
[codex:987965] 0x51e GAS
[codex:987965] 0x51f DELEGATECALL
[codex:987965] 0x520 PUSH2 0527
[codex:987965] 0x523 PUSH2 1a00
[codex:987965] 0x526 JUMP
[codex:987965] 0x527 JUMPDEST
[codex:987965] 0x528 OP90
[codex:987965] 0x529 PUSH2 1a30
[codex:987965] 0x52c JUMP
[codex:987965] 0x52d JUMPDEST
[codex:987965]
[codex:987965] thinking
[codex:987965] **Extending opcode mappings**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965]
[codex:987965] opcodes={
[codex:987965] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965] **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965] **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965] **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965] 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:987965] 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:987965] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965] 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:987965] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965]
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965] op=bytecode[pc]
[codex:987965] name=opcodes.get(op, f'OP{op:02x}')
[codex:987965] pc0=pc
[codex:987965] pc+=1
[codex:987965] arg=None
[codex:987965] if 0x60<=op<=0x7f:
[codex:987965] n=op-0x5f
[codex:987965] arg=bytecode[pc:pc+n]
[codex:987965] pc+=n
[codex:987965] out.append((pc0,name,arg.hex() if arg else None))
[codex:987965]
[codex:987965] # helper to print window
[codex:987965]
[codex:987965] def print_window(start_pc, window=40):
[codex:987965] # find index by pc
[codex:987965] idx=next(i for i,(pc,_,_) in enumerate(out) if pc>=start_pc)
[codex:987965] for i in range(idx, min(len(out), idx+window)):
[codex:987965] pc,n,a=out[i]
[codex:987965] if a is None:
[codex:987965] print(f'{pc:04x} {n}')
[codex:987965] else:
[codex:987965] print(f'{pc:04x} {n} {a}')
[codex:987965]
[codex:987965] # show around delegatecall
[codex:987965] for i,(pc,name,arg) in enumerate(out):
[codex:987965] if name=='DELEGATECALL':
[codex:987965] print('--- delegatecall at',hex(pc))
[codex:987965] print_window(pc-40, 80)
[codex:987965] print()
[codex:987965]
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 28ms:
[codex:987965] --- delegatecall at 0x51f
[codex:987965] 0504 PUSH1 40
[codex:987965] 0506 DUP4
[codex:987965] 0507 ADD
[codex:987965] 0508 MSTORE
[codex:987965] 0509 ADDRESS
[codex:987965] 050a EXTCODESIZE
[codex:987965] 050b ISZERO
[codex:987965] 050c PUSH2 05a1
[codex:987965] 050f JUMPI
[codex:987965] 0510 SWAP1
[codex:987965] 0511 PUSH1 00
[codex:987965] 0513 DUP1
[codex:987965] 0514 DUP4
[codex:987965] 0515 DUP11
[codex:987965] 0516 PUSH2 052d
[codex:987965] 0519 SWAP6
[codex:987965] 051a MLOAD
[codex:987965] 051b SWAP2
[codex:987965] 051c ADD
[codex:987965]
[codex:987965] thinking
[codex:987965] **Analyzing delegatecall usage and access control**
[codex:987965]
[codex:987965] I'm trying to understand why delegatecall points to the contract itself and whether it relates to multi-sig verification or upgrade logic. There’s also a focus on confirming if sensitive setters like `setVerifier` are guarded by onlyOwner, because if not, that could allow malicious verifier changes enabling token drains. I plan to trace storage writes and their authorization checks by scanning opcode patterns around SSTORE instructions to clarify protection enforcement.
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965]
[codex:987965] opcodes={
[codex:987965] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965] **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965] **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965] **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965] 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:987965] 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:987965] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965] 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:987965] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965]
[codex:987965] # disasm
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965] op=bytecode[pc]
[codex:987965] name=opcodes.get(op, f'OP{op:02x}')
[codex:987965] pc0=pc
[codex:987965] pc+=1
[codex:987965] arg=None
[codex:987965] if 0x60<=op<=0x7f:
[codex:987965] n=op-0x5f
[codex:987965] arg=bytecode[pc:pc+n]
[codex:987965] pc+=n
[codex:987965] out.append((pc0,name,arg.hex() if arg else None))
[codex:987965]
[codex:987965] # indexes of SSTORE
[codex:987965] sstore_idxs=[i for i,(pc,name,arg) in enumerate(out) if name=='SSTORE']
[codex:987965]
[codex:987965] for idx in sstore_idxs:
[codex:987965] pc,_,_=out[idx]
[codex:987965] print('--- SSTORE at',hex(pc))
[codex:987965] # print a small window
[codex:987965] start=max(0,idx-12)
[codex:987965] end=min(len(out),idx+8)
[codex:987965] for j in range(start,end):
[codex:987965] p,n,a=out[j]
[codex:987965] if a is None:
[codex:987965] print(f'{p:04x} {n}')
[codex:987965] else:
[codex:987965] print(f'{p:04x} {n} {a}')
[codex:987965] print()
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 27ms:
[codex:987965] --- SSTORE at 0x158
[codex:987965] 0128 DUP2
[codex:987965] 0129 ISZERO
[codex:987965] 012a PUSH2 0180
[codex:987965] 012d JUMPI
[codex:987965] 012e PUSH1 00
[codex:987965] 0130 SLOAD
[codex:987965] 0131 DUP3
[codex:987965] 0132 PUSH32 ffffffffffffffffffffffff0000000000000000000000000000000000000000
[codex:987965] 0153 DUP3
[codex:987965] 0154 AND
[codex:987965] 0155 OR
[codex:987965] 0156 PUSH1 00
[codex:987965] 0158 SSTORE
[codex:987965] 0159 AND
[codex:987965] 015a PUSH32 8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
[codex:987965] 017b PUSH1 00
[codex:987965] 017d DUP1
[codex:987965] 017e LOG3
[codex:987965] 017f STOP
[codex:987965]
[codex:987965] thinking
[codex:987965] **Analyzing SSTORE usage and access control**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965]
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965] **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965] **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965] **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965] 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:987965] 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:987965] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965] 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:987965] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965]
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965] op=bytecode[pc]
[codex:987965] name=opcodes.get(op, f'OP{op:02x}')
[codex:987965] pc0=pc
[codex:987965] pc+=1
[codex:987965] arg=None
[codex:987965] if 0x60<=op<=0x7f:
[codex:987965] n=op-0x5f
[codex:987965] arg=bytecode[pc:pc+n]
[codex:987965] pc+=n
[codex:987965] out.append((pc0,name,arg.hex() if arg else None))
[codex:987965]
[codex:987965] # print around 0x1844
[codex:987965] start=0x1830
[codex:987965] end=0x1875
[codex:987965] for pc,name,arg in out:
[codex:987965] if start<=pc<=end:
[codex:987965] if arg:
[codex:987965] print(f'{pc:04x} {name} {arg}')
[codex:987965] else:
[codex:987965] print(f'{pc:04x} {name}')
[codex:987965]
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 28ms:
[codex:987965] 1830 JUMPDEST
[codex:987965] 1831 PUSH1 20
[codex:987965] 1833 DUP2
[codex:987965] 1834 DUP4
[codex:987965] 1835 ADD
[codex:987965] 1836 DUP2
[codex:987965] 1837 ADD
[codex:987965] 1838 MLOAD
[codex:987965] 1839 DUP5
[codex:987965] 183a DUP4
[codex:987965] 183b ADD
[codex:987965] 183c DUP3
[codex:987965] 183d ADD
[codex:987965] 183e MSTORE
[codex:987965] 183f ADD
[codex:987965] 1840 PUSH2 17f1
[codex:987965] 1843 JUMP
[codex:987965] 1844 JUMPDEST
[codex:987965] 1845 PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:987965] 185a PUSH1 00
[codex:987965]
[codex:987965] thinking
[codex:987965] **Analyzing onlyOwner jump references**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965]
[codex:987965] # disasm
[codex:987965] opcodes={**{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},**{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},**{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},**{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:987965]
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965] op=bytecode[pc]
[codex:987965] name=opcodes.get(op, f'OP{op:02x}')
[codex:987965] pc0=pc
[codex:987965] pc+=1
[codex:987965] arg=None
[codex:987965] if 0x60<=op<=0x7f:
[codex:987965] n=op-0x5f
[codex:987965] arg=bytecode[pc:pc+n]
[codex:987965] pc+=n
[codex:987965] out.append((pc0,name,arg))
[codex:987965]
[codex:987965] # find sequences PUSH2 0x1844 JUMP
[codex:987965] for i,(pc,name,arg) in enumerate(out):
[codex:987965] if name=='PUSH2' and arg==bytes.fromhex('1844'):
[codex:987965] # check next opcode is JUMP
[codex:987965] if i+1<len(out) and out[i+1][1]=='JUMP':
[codex:987965] print('jump to 0x1844 at',hex(pc))
[codex:987965]
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 26ms:
[codex:987965] jump to 0x1844 at 0x10a
[codex:987965] jump to 0x1844 at 0x28b
[codex:987965] jump to 0x1844 at 0x833
[codex:987965]
[codex:987965] thinking
[codex:987965] **Mapping onlyOwner usage and ORIGIN inspection**
[codex:987965]
[codex:987965] I'm tracking which functions use the onlyOwner guard—transferOwnership, renounceOwnership, and another likely setVerifier-type function at 0x0209—and then looking for any suspicious uses of SSTORE or delegatecall outside those. The use of ORIGIN (tx.origin) near 0x12fe jumps out as a potential security risk, so I'm planning a detailed inspection around 0x12c0 to 0x1330 to see how that factors into signature verification or token transfers.
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm
[codex:987965] opcodes={
[codex:987965] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965] **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965] **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965] **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965] 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:987965] 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:987965] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965] 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:987965] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965]
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965] op=bytecode[pc]
[codex:987965] name=opcodes.get(op, f'OP{op:02x}')
[codex:987965] pc0=pc
[codex:987965] pc+=1
[codex:987965] arg=None
[codex:987965] if 0x60<=op<=0x7f:
[codex:987965] n=op-0x5f
[codex:987965] arg=bytecode[pc:pc+n]
[codex:987965] pc+=n
[codex:987965] out.append((pc0,name,arg.hex() if arg else None))
[codex:987965]
[codex:987965] # print around 0x12c0-0x1340
[codex:987965] for pc,name,arg in out:
[codex:987965] if 0x12c0<=pc<=0x1340:
[codex:987965] if arg:
[codex:987965] print(f'{pc:04x} {name} {arg}')
[codex:987965] else:
[codex:987965] print(f'{pc:04x} {name}')
[codex:987965]
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 27ms:
[codex:987965] 12c0 MSTORE
[codex:987965] 12c1 PUSH1 24
[codex:987965] 12c3 PUSH1 00
[codex:987965] 12c5 REVERT
[codex:987965] 12c6 JUMPDEST
[codex:987965] 12c7 PUSH32 ffffffffffffffffffffffffffffffff00000000000000000000000000000000
[codex:987965] 12e8 DUP4
[codex:987965] 12e9 AND
[codex:987965] 12ea PUSH1 00
[codex:987965] 12ec MSTORE
[codex:987965] 12ed PUSH1 01
[codex:987965] 12ef PUSH1 20
[codex:987965] 12f1 MSTORE
[codex:987965] 12f2 NUMBER
[codex:987965] 12f3 PUSH1 40
[codex:987965] 12f5 PUSH1 00
[codex:987965] 12f7 SHA3
[codex:987965] 12f8 SSTORE
[codex:987965] 12f9 PUSH2 0b6b
[codex:987965] 12fc JUMP
[codex:987965]
[codex:987965] thinking
[codex:987965] **Analyzing storage slot computation and tx.origin usage**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965] **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965] **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965] **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965] 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:987965] 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:987965] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965] 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:987965] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965]
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965] op=bytecode[pc]
[codex:987965] name=opcodes.get(op, f'OP{op:02x}')
[codex:987965] pc0=pc
[codex:987965] pc+=1
[codex:987965] arg=None
[codex:987965] if 0x60<=op<=0x7f:
[codex:987965] n=op-0x5f
[codex:987965] arg=bytecode[pc:pc+n]
[codex:987965] pc+=n
[codex:987965] out.append((pc0,name,arg.hex() if arg else None))
[codex:987965]
[codex:987965] # print around 0x0a11 function entry 0x0a11 is JUMPDEST? We'll show from 0x0a00 to 0x0c00
[codex:987965] for pc,name,arg in out:
[codex:987965] if 0x0a00<=pc<=0x0c00:
[codex:987965] if arg:
[codex:987965] print(f'{pc:04x} {name} {arg}')
[codex:987965] else:
[codex:987965] print(f'{pc:04x} {name}')
[codex:987965]
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 28ms:
[codex:987965] 0a06 PUSH1 04
[codex:987965] 0a08 SLOAD
[codex:987965] 0a09 AND
[codex:987965] 0a0a PUSH1 40
[codex:987965] 0a0c MLOAD
[codex:987965] 0a0d SWAP1
[codex:987965] 0a0e DUP2
[codex:987965] 0a0f MSTORE
[codex:987965] 0a10 RETURN
[codex:987965] 0a11 JUMPDEST
[codex:987965] 0a12 CALLVALUE
[codex:987965] 0a13 PUSH2 0204
[codex:987965] 0a16 JUMPI
[codex:987965] 0a17 PUSH1 e0
[codex:987965] 0a19 PUSH32 fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
[codex:987965] 0a3a CALLDATASIZE
[codex:987965] 0a3b ADD
[codex:987965] 0a3c SLT
[codex:987965] 0a3d PUSH2 0204
[codex:987965] 0a40 JUMPI
[codex:987965]
[codex:987965] thinking
[codex:987965] **Analyzing complex function structure**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965] **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965] **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965] **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965] 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:987965] 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:987965] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965] 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:987965] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965]
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965] op=bytecode[pc]
[codex:987965] name=opcodes.get(op, f'OP{op:02x}')
[codex:987965] pc0=pc
[codex:987965] pc+=1
[codex:987965] arg=None
[codex:987965] if 0x60<=op<=0x7f:
[codex:987965] n=op-0x5f
[codex:987965] arg=bytecode[pc:pc+n]
[codex:987965] pc+=n
[codex:987965] out.append((pc0,name,arg.hex() if arg else None))
[codex:987965]
[codex:987965] # print around 0xb80 to 0xd40
[codex:987965] for pc,name,arg in out:
[codex:987965] if 0x0b80<=pc<=0x0d40:
[codex:987965] if arg:
[codex:987965] print(f'{pc:04x} {name} {arg}')
[codex:987965] else:
[codex:987965] print(f'{pc:04x} {name}')
[codex:987965]
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 28ms:
[codex:987965] 0b80 JUMP
[codex:987965] 0b81 JUMPDEST
[codex:987965] 0b82 PUSH1 20
[codex:987965] 0b84 DUP2
[codex:987965] 0b85 MLOAD
[codex:987965] 0b86 SWAP2
[codex:987965] 0b87 ADD
[codex:987965] 0b88 SHA3
[codex:987965] 0b89 SWAP2
[codex:987965] 0b8a PUSH1 40
[codex:987965] 0b8c MLOAD
[codex:987965] 0b8d SWAP3
[codex:987965] 0b8e PUSH32 128db24430fa2fc5b7de9305b8518573b5e9ed0bde3a71ed68fc27427fcdac9b
[codex:987965] 0baf PUSH1 20
[codex:987965] 0bb1 DUP6
[codex:987965] 0bb2 ADD
[codex:987965] 0bb3 MSTORE
[codex:987965] 0bb4 PUSH32 ffffffffffffffffffffffffffffffff00000000000000000000000000000000
[codex:987965] 0bd5 DUP6
[codex:987965] 0bd6 AND
[codex:987965]
[codex:987965] thinking
[codex:987965] **Analyzing signature verification and reentrancy**
[codex:987965]
[codex:987965] I'm piecing together how this function verifies signatures using STATICCALL with specific selectors and addresses stored in contract storage. I see it tracks UUID usage in a mapping before signature checks, which likely protects against reentrancy by marking UUIDs early. There might be some special caller conditions that bypass signature verification, so I'll keep exploring the code to confirm how signature validation and token transfers are handled in detail.
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965] **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965] **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965] **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965] 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:987965] 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:987965] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965] 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:987965] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965]
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965] op=bytecode[pc]
[codex:987965] name=opcodes.get(op, f'OP{op:02x}')
[codex:987965] pc0=pc
[codex:987965] pc+=1
[codex:987965] arg=None
[codex:987965] if 0x60<=op<=0x7f:
[codex:987965] n=op-0x5f
[codex:987965] arg=bytecode[pc:pc+n]
[codex:987965] pc+=n
[codex:987965] out.append((pc0,name,arg.hex() if arg else None))
[codex:987965]
[codex:987965] # print around 0xd0c to 0xf80
[codex:987965] for pc,name,arg in out:
[codex:987965] if 0x0d0c<=pc<=0x0f80:
[codex:987965] if arg:
[codex:987965] print(f'{pc:04x} {name} {arg}')
[codex:987965] else:
[codex:987965] print(f'{pc:04x} {name}')
[codex:987965]
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 28ms:
[codex:987965] 0d0c JUMPDEST
[codex:987965] 0d0d POP
[codex:987965] 0d0e ISZERO
[codex:987965] 0d0f PUSH2 1201
[codex:987965] 0d12 JUMPI
[codex:987965] 0d13 PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:987965] 0d28 DUP3
[codex:987965] 0d29 AND
[codex:987965] 0d2a PUSH2 0e2c
[codex:987965] 0d2d JUMPI
[codex:987965] 0d2e PUSH32 a3a407ca9c8f72918b37b717afb70b7c6b00078c3aecbff60db587287255077e
[codex:987965] 0d4f SWAP1
[codex:987965] 0d50 PUSH1 60
[codex:987965] 0d52 SWAP1
[codex:987965] 0d53 PUSH32 ffffffffffffffffffffffffffffffff00000000000000000000000000000000
[codex:987965] 0d74 SWAP1
[codex:987965] 0d75 PUSH1 04
[codex:987965] 0d77 PUSH1 a4
[codex:987965] 0d79 CALLDATALOAD
[codex:987965] 0d7a ADD
[codex:987965]
[codex:987965] thinking
[codex:987965] **Scrolling through address range**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965] **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965] **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965] **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965] 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:987965] 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:987965] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965] 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:987965] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965]
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965] op=bytecode[pc]
[codex:987965] name=opcodes.get(op, f'OP{op:02x}')
[codex:987965] pc0=pc
[codex:987965] pc+=1
[codex:987965] arg=None
[codex:987965] if 0x60<=op<=0x7f:
[codex:987965] n=op-0x5f
[codex:987965] arg=bytecode[pc:pc+n]
[codex:987965] pc+=n
[codex:987965] out.append((pc0,name,arg.hex() if arg else None))
[codex:987965]
[codex:987965] # print around 0x0f80 to 0x1110
[codex:987965] for pc,name,arg in out:
[codex:987965] if 0x0f80<=pc<=0x1110:
[codex:987965] if arg:
[codex:987965] print(f'{pc:04x} {name} {arg}')
[codex:987965] else:
[codex:987965] print(f'{pc:04x} {name}')
[codex:987965]
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 32ms:
[codex:987965] 0f85 DUP8
[codex:987965] 0f86 AND
[codex:987965] 0f87 GAS
[codex:987965] 0f88 STATICCALL
[codex:987965] 0f89 DUP1
[codex:987965] 0f8a ISZERO
[codex:987965] 0f8b PUSH2 1083
[codex:987965] 0f8e JUMPI
[codex:987965] 0f8f PUSH2 108f
[codex:987965] 0f92 JUMPI
[codex:987965] 0f93 JUMPDEST
[codex:987965] 0f94 POP
[codex:987965] 0f95 PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:987965] 0faa DUP3
[codex:987965] 0fab AND
[codex:987965] 0fac EXTCODESIZE
[codex:987965] 0fad ISZERO
[codex:987965] 0fae PUSH2 0204
[codex:987965] 0fb1 JUMPI
[codex:987965] 0fb2 PUSH1 40
[codex:987965]
[codex:987965] thinking
[codex:987965] **Investigating token transfer authorization risks**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965] **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965] **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965] **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965] 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:987965] 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:987965] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965] 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:987965] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965]
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965] op=bytecode[pc]
[codex:987965] name=opcodes.get(op, f'OP{op:02x}')
[codex:987965] pc0=pc
[codex:987965] pc+=1
[codex:987965] arg=None
[codex:987965] if 0x60<=op<=0x7f:
[codex:987965] n=op-0x5f
[codex:987965] arg=bytecode[pc:pc+n]
[codex:987965] pc+=n
[codex:987965] out.append((pc0,name,arg.hex() if arg else None))
[codex:987965]
[codex:987965] for pc,name,arg in out:
[codex:987965] if 0x1460<=pc<=0x1520:
[codex:987965] if arg:
[codex:987965] print(f'{pc:04x} {name} {arg}')
[codex:987965] else:
[codex:987965] print(f'{pc:04x} {name}')
[codex:987965]
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 30ms:
[codex:987965] 146a SWAP9
[codex:987965] 146b DUP10
[codex:987965] 146c DUP7
[codex:987965] 146d MSTORE
[codex:987965] 146e DUP13
[codex:987965] 146f DUP12
[codex:987965] 1470 PUSH1 84
[codex:987965] 1472 DUP7
[codex:987965] 1473 ADD
[codex:987965] 1474 PUSH2 1b0b
[codex:987965] 1477 JUMP
[codex:987965] 1478 JUMPDEST
[codex:987965] 1479 SUB
[codex:987965] 147a ADD
[codex:987965] 147b DUP2
[codex:987965] 147c DUP14
[codex:987965] 147d GAS
[codex:987965] 147e STATICCALL
[codex:987965] 147f SWAP2
[codex:987965] 1480 DUP3
[codex:987965]
[codex:987965] thinking
[codex:987965] **Analyzing function boundaries and verifier update**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965] **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965] **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965] **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965] 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:987965] 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:987965] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965] 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:987965] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965]
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965] op=bytecode[pc]
[codex:987965] name=opcodes.get(op, f'OP{op:02x}')
[codex:987965] pc0=pc
[codex:987965] pc+=1
[codex:987965] arg=None
[codex:987965] if 0x60<=op<=0x7f:
[codex:987965] n=op-0x5f
[codex:987965] arg=bytecode[pc:pc+n]
[codex:987965] pc+=n
[codex:987965] out.append((pc0,name,arg.hex() if arg else None))
[codex:987965]
[codex:987965] for pc,name,arg in out:
[codex:987965] if 0x1360<=pc<=0x146a:
[codex:987965] if arg:
[codex:987965] print(f'{pc:04x} {name} {arg}')
[codex:987965] else:
[codex:987965] print(f'{pc:04x} {name}')
[codex:987965]
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 28ms:
[codex:987965] 1361 JUMPI
[codex:987965] 1362 PUSH1 24
[codex:987965] 1364 CALLDATALOAD
[codex:987965] 1365 PUSH8 ffffffffffffffff
[codex:987965] 136e PUSH1 44
[codex:987965] 1370 CALLDATALOAD
[codex:987965] 1371 DUP2
[codex:987965] 1372 DUP2
[codex:987965] 1373 GT
[codex:987965] 1374 PUSH2 0204
[codex:987965] 1377 JUMPI
[codex:987965] 1378 PUSH2 1385
[codex:987965] 137b SWAP1
[codex:987965] 137c CALLDATASIZE
[codex:987965] 137d SWAP1
[codex:987965] 137e PUSH1 04
[codex:987965] 1380 ADD
[codex:987965] 1381 PUSH2 176f
[codex:987965] 1384 JUMP
[codex:987965] 1385 JUMPDEST
[codex:987965]
[codex:987965] thinking
[codex:987965] **Mapping function behaviors in disassembly**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965] **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965] **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965] **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965] 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:987965] 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:987965] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965] 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:987965] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965]
[codex:987965] # disasm to list
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965] op=bytecode[pc]
[codex:987965] name=opcodes.get(op, f'OP{op:02x}')
[codex:987965] pc0=pc
[codex:987965] pc+=1
[codex:987965] arg=None
[codex:987965] if 0x60<=op<=0x7f:
[codex:987965] n=op-0x5f
[codex:987965] arg=bytecode[pc:pc+n]
[codex:987965] pc+=n
[codex:987965] out.append((pc0,name,arg.hex() if arg else None))
[codex:987965]
[codex:987965] # print from 0x032b to 0x0625
[codex:987965] for pc,name,arg in out:
[codex:987965] if 0x032b<=pc<=0x0625:
[codex:987965] if arg:
[codex:987965] print(f'{pc:04x} {name} {arg}')
[codex:987965] else:
[codex:987965] print(f'{pc:04x} {name}')
[codex:987965]
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 29ms:
[codex:987965] 032b JUMPDEST
[codex:987965] 032c CALLVALUE
[codex:987965] 032d PUSH2 0204
[codex:987965] 0330 JUMPI
[codex:987965] 0331 PUSH1 20
[codex:987965] 0333 DUP1
[codex:987965] 0334 PUSH32 fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
[codex:987965] 0355 CALLDATASIZE
[codex:987965] 0356 ADD
[codex:987965] 0357 SLT
[codex:987965] 0358 PUSH2 0204
[codex:987965] 035b JUMPI
[codex:987965] 035c PUSH8 ffffffffffffffff
[codex:987965] 0365 PUSH1 04
[codex:987965] 0367 CALLDATALOAD
[codex:987965] 0368 DUP2
[codex:987965] 0369 DUP2
[codex:987965] 036a GT
[codex:987965] 036b PUSH2 0204
[codex:987965] 036e JUMPI
[codex:987965]
[codex:987965] thinking
[codex:987965] **Analyzing delegatecall-based multicall function**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965] **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965] **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965] **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965] 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:987965] 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:987965] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965] 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:987965] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965]
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965] op=bytecode[pc]
[codex:987965] name=opcodes.get(op, f'OP{op:02x}')
[codex:987965] pc0=pc
[codex:987965] pc+=1
[codex:987965] arg=None
[codex:987965] if 0x60<=op<=0x7f:
[codex:987965] n=op-0x5f
[codex:987965] arg=bytecode[pc:pc+n]
[codex:987965] pc+=n
[codex:987965] out.append((pc0,name,arg.hex() if arg else None))
[codex:987965]
[codex:987965] for pc,name,arg in out:
[codex:987965] if 0x0200<=pc<=0x02d5:
[codex:987965] if arg:
[codex:987965] print(f'{pc:04x} {name} {arg}')
[codex:987965] else:
[codex:987965] print(f'{pc:04x} {name}')
[codex:987965]
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 30ms:
[codex:987965] 0200 DUP3
[codex:987965] 0201 ADD
[codex:987965] 0202 MSTORE
[codex:987965] 0203 REVERT
[codex:987965] 0204 JUMPDEST
[codex:987965] 0205 PUSH1 00
[codex:987965] 0207 DUP1
[codex:987965] 0208 REVERT
[codex:987965] 0209 JUMPDEST
[codex:987965] 020a CALLVALUE
[codex:987965] 020b PUSH2 0204
[codex:987965] 020e JUMPI
[codex:987965] 020f PUSH1 40
[codex:987965] 0211 PUSH32 fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
[codex:987965] 0232 CALLDATASIZE
[codex:987965] 0233 ADD
[codex:987965] 0234 SLT
[codex:987965] 0235 PUSH2 0204
[codex:987965] 0238 JUMPI
[codex:987965] 0239 PUSH2 0240
[codex:987965]
[codex:987965] thinking
[codex:987965] **Analyzing calldata handling and authorization check**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965] **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965] **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965] **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965] 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:987965] 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:987965] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965] 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:987965] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965]
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965] op=bytecode[pc]
[codex:987965] name=opcodes.get(op, f'OP{op:02x}')
[codex:987965] pc0=pc
[codex:987965] pc+=1
[codex:987965] arg=None
[codex:987965] if 0x60<=op<=0x7f:
[codex:987965] n=op-0x5f
[codex:987965] arg=bytecode[pc:pc+n]
[codex:987965] pc+=n
[codex:987965] out.append((pc0,name,arg.hex() if arg else None))
[codex:987965]
[codex:987965] for pc,name,arg in out:
[codex:987965] if 0x02d2<=pc<=0x032b:
[codex:987965] if arg:
[codex:987965] print(f'{pc:04x} {name} {arg}')
[codex:987965] else:
[codex:987965] print(f'{pc:04x} {name}')
[codex:987965]
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 26ms:
[codex:987965] 02d2 JUMPDEST
[codex:987965] 02d3 CALLVALUE
[codex:987965] 02d4 PUSH2 0204
[codex:987965] 02d7 JUMPI
[codex:987965] 02d8 PUSH1 00
[codex:987965] 02da PUSH32 fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
[codex:987965] 02fb CALLDATASIZE
[codex:987965] 02fc ADD
[codex:987965] 02fd SLT
[codex:987965] 02fe PUSH2 0204
[codex:987965] 0301 JUMPI
[codex:987965] 0302 PUSH1 20
[codex:987965] 0304 PUSH1 40
[codex:987965] 0306 MLOAD
[codex:987965] 0307 PUSH32 83ff2829503e6b25933e0c1d0422aeb9b68fe6259418bffd98b105c4ef89c4d4
[codex:987965] 0328 DUP2
[codex:987965] 0329 MSTORE
[codex:987965] 032a RETURN
[codex:987965] 032b JUMPDEST
[codex:987965]
[codex:987965] thinking
[codex:987965] **Analyzing potential exploit vectors**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965]
[codex:987965] opcodes={
[codex:987965] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965] **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965] **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965] **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965] 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:987965] 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:987965] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965] 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:987965] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965]
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965] op=bytecode[pc]
[codex:987965] name=opcodes.get(op, f'OP{op:02x}')
[codex:987965] pc0=pc
[codex:987965] pc+=1
[codex:987965] arg=None
[codex:987965] if 0x60<=op<=0x7f:
[codex:987965] n=op-0x5f
[codex:987965] arg=bytecode[pc:pc+n]
[codex:987965] pc+=n
[codex:987965] out.append((pc0,name,arg.hex() if arg else None))
[codex:987965]
[codex:987965] # functions around 0x0634 to 0x07ae
[codex:987965] for pc,name,arg in out:
[codex:987965] if 0x0634<=pc<=0x07c0:
[codex:987965] if arg:
[codex:987965] print(f'{pc:04x} {name} {arg}')
[codex:987965] else:
[codex:987965] print(f'{pc:04x} {name}')
[codex:987965]
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 28ms:
[codex:987965] 0634 JUMPDEST
[codex:987965] 0635 CALLVALUE
[codex:987965] 0636 PUSH2 0204
[codex:987965] 0639 JUMPI
[codex:987965] 063a PUSH1 20
[codex:987965] 063c PUSH32 fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
[codex:987965] 065d CALLDATASIZE
[codex:987965] 065e ADD
[codex:987965] 065f SLT
[codex:987965] 0660 PUSH2 0204
[codex:987965] 0663 JUMPI
[codex:987965] 0664 PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:987965] 0679 PUSH2 0680
[codex:987965] 067c PUSH2 17c3
[codex:987965] 067f JUMP
[codex:987965] 0680 JUMPDEST
[codex:987965] 0681 AND
[codex:987965] 0682 PUSH1 00
[codex:987965] 0684 MSTORE
[codex:987965] 0685 PUSH1 03
[codex:987965]
[codex:987965] thinking
[codex:987965] **Analyzing token deposit and transfer functions**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965]
[codex:987965] opcodes={
[codex:987965] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965] **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965] **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965] **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965] 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:987965] 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:987965] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965] 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:987965] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965]
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965] op=bytecode[pc]
[codex:987965] name=opcodes.get(op, f'OP{op:02x}')
[codex:987965] pc0=pc
[codex:987965] pc+=1
[codex:987965] arg=None
[codex:987965] if 0x60<=op<=0x7f:
[codex:987965] n=op-0x5f
[codex:987965] arg=bytecode[pc:pc+n]
[codex:987965] pc+=n
[codex:987965] out.append((pc0,name,arg.hex() if arg else None))
[codex:987965]
[codex:987965] for i,(pc,name,arg) in enumerate(out):
[codex:987965] if name=='CALL':
[codex:987965] print('--- CALL at',hex(pc))
[codex:987965] for j in range(max(0,i-8), min(len(out), i+8)):
[codex:987965] p,n,a=out[j]
[codex:987965] if a:
[codex:987965] print(f'{p:04x} {n} {a}')
[codex:987965] else:
[codex:987965] print(f'{p:04x} {n}')
[codex:987965] print()
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 28ms:
[codex:987965] --- CALL at 0xf14
[codex:987965] 0f0c SWAP1
[codex:987965] 0f0d DUP3
[codex:987965] 0f0e SWAP1
[codex:987965] 0f0f DUP5
[codex:987965] 0f10 SWAP1
[codex:987965] 0f11 DUP9
[codex:987965] 0f12 AND
[codex:987965] 0f13 GAS
[codex:987965] 0f14 CALL
[codex:987965] 0f15 DUP1
[codex:987965] 0f16 ISZERO
[codex:987965] 0f17 PUSH2 1083
[codex:987965] 0f1a JUMPI
[codex:987965] 0f1b PUSH2 10ba
[codex:987965] 0f1e JUMPI
[codex:987965] 0f1f JUMPDEST
[codex:987965]
[codex:987965] --- CALL at 0x101c
[codex:987965] 0fff DUP2
[codex:987965]
[codex:987965] thinking
[codex:987965] **Analyzing internal token and ETH transfer calls**
[codex:987965]
[codex:987965] I'm examining several internal calls related to token approvals and safe ETH/token transfers, focusing on whether user inputs can manipulate transfer values or recipients without authorization. I’ll inspect functions around specific addresses like 0x1c17 and 0x116d3 to understand any potential vulnerabilities, especially around withdrawal mechanisms that might allow unauthorized fund extraction.
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965] **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965] **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965] **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965] 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:987965] 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:987965] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965] 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:987965] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965]
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965] op=bytecode[pc]
[codex:987965] name=opcodes.get(op, f'OP{op:02x}')
[codex:987965] pc0=pc
[codex:987965] pc+=1
[codex:987965] arg=None
[codex:987965] if 0x60<=op<=0x7f:
[codex:987965] n=op-0x5f
[codex:987965] arg=bytecode[pc:pc+n]
[codex:987965] pc+=n
[codex:987965] out.append((pc0,name,arg.hex() if arg else None))
[codex:987965]
[codex:987965] for pc,name,arg in out:
[codex:987965] if 0x116d3<=pc<=0x11850:
[codex:987965] if arg:
[codex:987965] print(f'{pc:04x} {name} {arg}')
[codex:987965] else:
[codex:987965] print(f'{pc:04x} {name}')
[codex:987965]
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 26ms:
[codex:987965]
[codex:987965]
[codex:987965] thinking
[codex:987965] **Checking bytecode length**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] import re
[codex:987965] from binascii import unhexlify
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] print('len', len(hexstr)//2)
[codex:987965] print('max pc', hex(len(hexstr)//2-1))
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 25ms:
[codex:987965] len 8733
[codex:987965] max pc 0x221c
[codex:987965]
[codex:987965] thinking
[codex:987965] **Clarifying jump destination in bytecode**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965] **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965] **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965] **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965] 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:987965] 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:987965] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965] 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:987965] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965]
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965] op=bytecode[pc]
[codex:987965] name=opcodes.get(op, f'OP{op:02x}')
[codex:987965] pc0=pc
[codex:987965] pc+=1
[codex:987965] arg=None
[codex:987965] if 0x60<=op<=0x7f:
[codex:987965] n=op-0x5f
[codex:987965] arg=bytecode[pc:pc+n]
[codex:987965] pc+=n
[codex:987965] out.append((pc0,name,arg.hex() if arg else None))
[codex:987965]
[codex:987965] for pc,name,arg in out:
[codex:987965] if 0x16d3<=pc<=0x1760:
[codex:987965] if arg:
[codex:987965] print(f'{pc:04x} {name} {arg}')
[codex:987965] else:
[codex:987965] print(f'{pc:04x} {name}')
[codex:987965]
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 31ms:
[codex:987965] 16d3 JUMPDEST
[codex:987965] 16d4 CALLVALUE
[codex:987965] 16d5 PUSH2 0204
[codex:987965] 16d8 JUMPI
[codex:987965] 16d9 PUSH1 20
[codex:987965] 16db PUSH32 fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
[codex:987965] 16fc CALLDATASIZE
[codex:987965] 16fd ADD
[codex:987965] 16fe SLT
[codex:987965] 16ff PUSH2 0204
[codex:987965] 1702 JUMPI
[codex:987965] 1703 PUSH1 20
[codex:987965] 1705 SWAP1
[codex:987965] 1706 PUSH32 ffffffffffffffffffffffffffffffff00000000000000000000000000000000
[codex:987965] 1727 PUSH2 172e
[codex:987965] 172a PUSH2 1740
[codex:987965] 172d JUMP
[codex:987965] 172e JUMPDEST
[codex:987965] 172f AND
[codex:987965] 1730 PUSH1 00
[codex:987965]
[codex:987965] thinking
[codex:987965] **Analyzing contract functions for vulnerabilities**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965] **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965] **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965] **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965] 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:987965] 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:987965] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965] 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:987965] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965]
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965] op=bytecode[pc]
[codex:987965] name=opcodes.get(op, f'OP{op:02x}')
[codex:987965] pc0=pc
[codex:987965] pc+=1
[codex:987965] arg=None
[codex:987965] if 0x60<=op<=0x7f:
[codex:987965] n=op-0x5f
[codex:987965] arg=bytecode[pc:pc+n]
[codex:987965] pc+=n
[codex:987965] out.append((pc0,name,arg.hex() if arg else None))
[codex:987965]
[codex:987965] for pc,name,arg in out:
[codex:987965] if 0x094e<=pc<=0x0a20:
[codex:987965] if arg:
[codex:987965] print(f'{pc:04x} {name} {arg}')
[codex:987965] else:
[codex:987965] print(f'{pc:04x} {name}')
[codex:987965]
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 28ms:
[codex:987965] 094e JUMPDEST
[codex:987965] 094f CALLVALUE
[codex:987965] 0950 PUSH2 0204
[codex:987965] 0953 JUMPI
[codex:987965] 0954 PUSH1 20
[codex:987965] 0956 PUSH32 fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
[codex:987965] 0977 CALLDATASIZE
[codex:987965] 0978 ADD
[codex:987965] 0979 SLT
[codex:987965] 097a PUSH2 0204
[codex:987965] 097d JUMPI
[codex:987965] 097e PUSH32 ffffffffffffffffffffffffffffffff00000000000000000000000000000000
[codex:987965] 099f PUSH2 09a6
[codex:987965] 09a2 PUSH2 1740
[codex:987965] 09a5 JUMP
[codex:987965] 09a6 JUMPDEST
[codex:987965] 09a7 AND
[codex:987965] 09a8 PUSH1 00
[codex:987965] 09aa MSTORE
[codex:987965] 09ab PUSH1 01
[codex:987965] Reconnecting... 1/5
[codex:987965]
[codex:987965] thinking
[codex:987965] **Analyzing signature and replay protections**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] print('SELFDESTRUCT occurrences', bytecode.count(bytes([0xff])))
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 26ms:
[codex:987965] SELFDESTRUCT occurrences 1792
[codex:987965]
[codex:987965] thinking
[codex:987965] **Checking for SELFDESTRUCT opcode**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # simple disasm to find SELFDESTRUCT op
[codex:987965] pc=0
[codex:987965] selfdes=[]
[codex:987965] while pc<len(bytecode):
[codex:987965] op=bytecode[pc]
[codex:987965] if op==0xff:
[codex:987965] selfdes.append(pc)
[codex:987965] pc+=1
[codex:987965] if 0x60<=op<=0x7f:
[codex:987965] pc+=op-0x5f
[codex:987965]
[codex:987965] print(selfdes[:10], 'count', len(selfdes))
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 25ms:
[codex:987965] [] count 0
[codex:987965]
[codex:987965] thinking
[codex:987965] **Analyzing delegatecall and verifier update risks**
[codex:987965] exec
[codex:987965] /bin/bash -lc "python - <<'PY'
[codex:987965] from binascii import unhexlify
[codex:987965] import re
[codex:987965] code=open('/tmp/codex-multi-cyu1asis/BYTECODE_BUNDLE.txt').read()
[codex:987965] hexstr=re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:987965] bytecode=unhexlify(hexstr)
[codex:987965] # disasm mapping
[codex:987965] opcodes={
[codex:987965] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:987965] **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:987965] **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:987965] **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:987965] 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:987965] 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:987965] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:987965] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:987965] 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:987965] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:987965] }
[codex:987965]
[codex:987965] pc=0
[codex:987965] out=[]
[codex:987965] while pc<len(bytecode):
[codex:987965] op=bytecode[pc]
[codex:987965] name=opcodes.get(op, f'OP{op:02x}')
[codex:987965] pc0=pc
[codex:987965] pc+=1
[codex:987965] arg=None
[codex:987965] if 0x60<=op<=0x7f:
[codex:987965] n=op-0x5f
[codex:987965] arg=bytecode[pc:pc+n]
[codex:987965] pc+=n
[codex:987965] out.append((pc0,name,arg.hex() if arg else None))
[codex:987965]
[codex:987965] for pc,name,arg in out:
[codex:987965] if 0x1310<=pc<=0x16d2:
[codex:987965] if arg:
[codex:987965] print(f'{pc:04x} {name} {arg}')
[codex:987965] else:
[codex:987965] print(f'{pc:04x} {name}')
[codex:987965]
[codex:987965] PY" in /tmp/codex-multi-cyu1asis succeeded in 28ms:
[codex:987965] 1310 JUMPDEST
[codex:987965] 1311 CALLVALUE
[codex:987965] 1312 PUSH2 0204
[codex:987965] 1315 JUMPI
[codex:987965] 1316 PUSH1 80
[codex:987965] 1318 PUSH32 fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
[codex:987965] 1339 CALLDATASIZE
[codex:987965] 133a ADD
[codex:987965] 133b SLT
[codex:987965] 133c PUSH2 0204
[codex:987965] 133f JUMPI
[codex:987965] 1340 PUSH1 04
[codex:987965] 1342 CALLDATALOAD
[codex:987965] 1343 PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:987965] 1358 DUP1
[codex:987965] 1359 DUP3
[codex:987965] 135a AND
[codex:987965] 135b DUP1
[codex:987965] 135c SWAP3
[codex:987965] 135d SUB
[codex:987965]
[codex:987965] thinking
[codex:987965] **Analyzing updateVerifier function security**
[codex:987965]
[codex:987965] I’m carefully reviewing the updateVerifier function and its signature checks, focusing on expiry validation, staticcall verifications to old and new verifiers, and whether it protects against zero-address assignment. Although no obvious exploit or bypass surfaces from the bytecode, I want to finalize a strict JSON summary indicating no exploitable profit path was found. This ensures clear, concise reporting while strictly adhering to the user’s schema requirements.
[codex:987965] codex
[codex:987965] {"no_findings":true,"summary":"No concrete, exploitable profit path identified from bytecode-only analysis of BYTECODE_BUNDLE.txt.","findings":[]}
[codex:987965] tokens used
[codex:987965] 103,632
[codex:987965] {"no_findings":true,"summary":"No concrete, exploitable profit path identified from bytecode-only analysis of BYTECODE_BUNDLE.txt.","findings":[]}
{
"codex": {
"ran_at": "2026-01-03T02:03:59.243467+00:00",
"returncode": 0
},
"summary": "No concrete, exploitable profit path identified from bytecode-only analysis of BYTECODE_BUNDLE.txt.",
"raw_final": {
"summary": "No concrete, exploitable profit path identified from bytecode-only analysis of BYTECODE_BUNDLE.txt.",
"findings": [],
"no_findings": true
},
"no_findings": true,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: DUP1 00000003: PUSH1 0x40 00000005: MSTORE 00000006: PUSH1 0x04 00000008: CALLDATASIZE 00000009: LT 0000000a: ISZERO 0000000b: PUSH2 0x001d 0000000e: JUMPI 0000000f: JUMPDEST 00000010: POP 00000011: CALLDATASIZE 00000012: ISZERO 00000013: PUSH2 0x001b 00000016: JUMPI 00000017: PUSH1 0x00 00000019: DUP1 0000001a: REVERT 0000001b: JUMPDEST 0000001c: STOP 0000001d: JUMPDEST 0000001e: PUSH1 0x00 00000020: CALLDATALOAD 00000021: PUSH1 0xe0 00000023: SHR 00000024: SWAP1 00000025: DUP2 00000026: PUSH4 0x01cce4be 0000002b: EQ 0000002c: PUSH2 0x16d3 0000002f: JUMPI 00000030: POP 00000031: DUP1 00000032: PUSH4 0x043fa11d 00000037: EQ 00000038: PUSH2 0x1310 0000003b: JUMPI 0000003c: DUP1 0000003d: PUSH4 0x24057e10 00000042: EQ 00000043: PUSH2 0x0a11 00000046: JUMPI 00000047: DUP1 00000048: PUSH4 0x2b7ac3f3 0000004d: EQ 0000004e: PUSH2 0x09bf 00000051: JUMPI 00000052: DUP1 00000053: PUSH4 0x30c2f42d 00000058: EQ 00000059: PUSH2 0x094e 0000005c: JUMPI 0000005d: DUP1 0000005e: PUSH4 0x3644e515 00000063: EQ 00000064: PUSH2 0x08f5 00000067: JUMPI 00000068: DUP1 00000069: PUSH4 0x6b8a3fa2 0000006e: EQ 0000006f: PUSH2 0x089c 00000072: JUMPI 00000073: DUP1 00000074: PUSH4 0x715018a6 00000079: EQ 0000007a: PUSH2 0x0800 0000007d: JUMPI 0000007e: DUP1 0000007f: PUSH4 0x8da5cb5b 00000084: EQ 00000085: PUSH2 0x07ae 00000088: JUMPI 00000089: DUP1 0000008a: PUSH4 0xa654575d 0000008f: EQ 00000090: PUSH2 0x069e 00000093: JUMPI 00000094: DUP1 00000095: PUSH4 0xa7c32102 0000009a: EQ 0000009b: PUSH2 0x0634 0000009e: JUMPI 0000009f: DUP1 000000a0: PUSH4 0xac9650d8 000000a5: EQ 000000a6: PUSH2 0x032b 000000a9: JUMPI 000000aa: DUP1 000000ab: PUSH4 0xaf83a9fa 000000b0: EQ 000000b1: PUSH2 0x02d2 000000b4: JUMPI 000000b5: DUP1 000000b6: PUSH4 0xcdae7c66 000000bb: EQ 000000bc: PUSH2 0x0209 000000bf: JUMPI 000000c0: PUSH4 0xf2fde38b 000000c5: EQ 000000c6: PUSH2 0x00cf 000000c9: JUMPI 000000ca: CODESIZE 000000cb: PUSH2 0x000f 000000ce: JUMP 000000cf: JUMPDEST 000000d0: CALLVALUE 000000d1: PUSH2 0x0204 000000d4: JUMPI 000000d5: PUSH1 0x20 000000d7: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 000000f8: CALLDATASIZE 000000f9: ADD 000000fa: SLT 000000fb: PUSH2 0x0204 000000fe: JUMPI 000000ff: PUSH2 0x0106 00000102: PUSH2 0x17c3 00000105: JUMP 00000106: JUMPDEST 00000107: PUSH2 0x010e 0000010a: PUSH2 0x1844 0000010d: JUMP 0000010e: JUMPDEST 0000010f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000124: DUP1 00000125: SWAP2 00000126: AND 00000127: SWAP1 00000128: DUP2 00000129: ISZERO 0000012a: PUSH2 0x0180 0000012d: JUMPI 0000012e: PUSH1 0x00 00000130: SLOAD 00000131: DUP3 00000132: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 00000153: DUP3 00000154: AND 00000155: OR 00000156: PUSH1 0x00 00000158: SSTORE 00000159: AND 0000015a: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 0000017b: PUSH1 0x00 0000017d: DUP1 0000017e: LOG3 0000017f: STOP 00000180: JUMPDEST 00000181: PUSH1 0x84 00000183: PUSH1 0x40 00000185: MLOAD 00000186: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000001a7: DUP2 000001a8: MSTORE 000001a9: PUSH1 0x20 000001ab: PUSH1 0x04 000001ad: DUP3 000001ae: ADD 000001af: MSTORE 000001b0: PUSH1 0x26 000001b2: PUSH1 0x24 000001b4: DUP3 000001b5: ADD 000001b6: MSTORE 000001b7: PUSH32 0x4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061 000001d8: PUSH1 0x44 000001da: DUP3 000001db: ADD 000001dc: MSTORE 000001dd: PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 000001fe: PUSH1 0x64 00000200: DUP3 00000201: ADD 00000202: MSTORE 00000203: REVERT 00000204: JUMPDEST 00000205: PUSH1 0x00 00000207: DUP1 00000208: REVERT 00000209: JUMPDEST 0000020a: CALLVALUE 0000020b: PUSH2 0x0204 0000020e: JUMPI 0000020f: PUSH1 0x40 00000211: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 00000232: CALLDATASIZE 00000233: ADD 00000234: SLT 00000235: PUSH2 0x0204 00000238: JUMPI 00000239: PUSH2 0x0240 0000023c: PUSH2 0x17c3 0000023f: JUMP 00000240: JUMPDEST 00000241: PUSH1 0x24 00000243: CALLDATALOAD 00000244: SWAP1 00000245: DUP2 00000246: ISZERO 00000247: ISZERO 00000248: DUP1 00000249: SWAP3 0000024a: SUB 0000024b: PUSH2 0x0204 0000024e: JUMPI 0000024f: PUSH1 0x20 00000251: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000266: PUSH32 0xf74a7e0211c0b5093895ff26748f0867f9ba95a25bf0ef5a83a1893584118d3c 00000287: SWAP3 00000288: PUSH2 0x028f 0000028b: PUSH2 0x1844 0000028e: JUMP 0000028f: JUMPDEST 00000290: AND 00000291: SWAP3 00000292: DUP4 00000293: PUSH1 0x00 00000295: MSTORE 00000296: PUSH1 0x03 00000298: DUP3 00000299: MSTORE 0000029a: PUSH1 0x40 0000029c: PUSH1 0x00 0000029e: KECCAK256 0000029f: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 000002c0: DUP2 000002c1: SLOAD 000002c2: AND 000002c3: PUSH1 0xff 000002c5: DUP4 000002c6: AND 000002c7: OR 000002c8: SWAP1 000002c9: SSTORE 000002ca: PUSH1 0x40 000002cc: MLOAD 000002cd: SWAP1 000002ce: DUP2 000002cf: MSTORE 000002d0: LOG2 000002d1: STOP 000002d2: JUMPDEST 000002d3: CALLVALUE 000002d4: PUSH2 0x0204 000002d7: JUMPI 000002d8: PUSH1 0x00 000002da: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 000002fb: CALLDATASIZE 000002fc: ADD 000002fd: SLT 000002fe: PUSH2 0x0204 00000301: JUMPI 00000302: PUSH1 0x20 00000304: PUSH1 0x40 00000306: MLOAD 00000307: PUSH32 0x83ff2829503e6b25933e0c1d0422aeb9b68fe6259418bffd98b105c4ef89c4d4 00000328: DUP2 00000329: MSTORE 0000032a: RETURN 0000032b: JUMPDEST 0000032c: CALLVALUE 0000032d: PUSH2 0x0204 00000330: JUMPI 00000331: PUSH1 0x20 00000333: DUP1 00000334: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 00000355: CALLDATASIZE 00000356: ADD 00000357: SLT 00000358: PUSH2 0x0204 0000035b: JUMPI 0000035c: PUSH8 0xffffffffffffffff 00000365: PUSH1 0x04 00000367: CALLDATALOAD 00000368: DUP2 00000369: DUP2 0000036a: GT 0000036b: PUSH2 0x0204 0000036e: JUMPI 0000036f: PUSH2 0x037c 00000372: SWAP1 00000373: CALLDATASIZE 00000374: SWAP1 00000375: PUSH1 0x04 00000377: ADD 00000378: PUSH2 0x176f 0000037b: JUMP 0000037c: JUMPDEST 0000037d: SWAP1 0000037e: SWAP2 0000037f: PUSH2 0x0387 00000382: DUP3 00000383: PUSH2 0x1934 00000386: JUMP 00000387: JUMPDEST 00000388: SWAP3 00000389: PUSH2 0x0395 0000038c: PUSH1 0x40 0000038e: MLOAD 0000038f: SWAP5 00000390: DUP6 00000391: PUSH2 0x18f3 00000394: JUMP 00000395: JUMPDEST 00000396: DUP3 00000397: DUP5 00000398: MSTORE 00000399: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 000003ba: PUSH2 0x03c2 000003bd: DUP5 000003be: PUSH2 0x1934 000003c1: JUMP 000003c2: JUMPDEST 000003c3: ADD 000003c4: DUP6 000003c5: PUSH1 0x00 000003c7: JUMPDEST 000003c8: DUP3 000003c9: DUP2 000003ca: LT 000003cb: PUSH2 0x0625 000003ce: JUMPI 000003cf: POP 000003d0: POP 000003d1: POP 000003d2: PUSH1 0x00 000003d4: JUMPDEST 000003d5: DUP4 000003d6: DUP2 000003d7: LT 000003d8: PUSH2 0x0457 000003db: JUMPI 000003dc: PUSH1 0x40 000003de: DUP1 000003df: MLOAD 000003e0: DUP8 000003e1: DUP2 000003e2: MSTORE 000003e3: DUP7 000003e4: MLOAD 000003e5: DUP2 000003e6: DUP10 000003e7: ADD 000003e8: DUP2 000003e9: SWAP1 000003ea: MSTORE 000003eb: PUSH1 0x00 000003ed: SWAP3 000003ee: PUSH1 0x05 000003f0: DUP3 000003f1: SWAP1 000003f2: SHL 000003f3: DUP4 000003f4: ADD 000003f5: DUP2 000003f6: ADD 000003f7: SWAP2 000003f8: DUP10 000003f9: DUP12 000003fa: ADD 000003fb: SWAP2 000003fc: DUP12 000003fd: SWAP1 000003fe: DUP6 000003ff: ADD 00000400: JUMPDEST 00000401: DUP3 00000402: DUP8 00000403: LT 00000404: PUSH2 0x040d 00000407: JUMPI 00000408: DUP6 00000409: DUP6 0000040a: SUB 0000040b: DUP7 0000040c: RETURN 0000040d: JUMPDEST 0000040e: SWAP1 0000040f: SWAP2 00000410: SWAP3 00000411: SWAP4 00000412: DUP3 00000413: DUP1 00000414: PUSH2 0x0447 00000417: DUP4 00000418: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0 00000439: DUP11 0000043a: PUSH1 0x01 0000043c: SWAP7 0000043d: SUB 0000043e: ADD 0000043f: DUP7 00000440: MSTORE 00000441: DUP9 00000442: MLOAD 00000443: PUSH2 0x17e6 00000446: JUMP 00000447: JUMPDEST 00000448: SWAP7 00000449: ADD 0000044a: SWAP3 0000044b: ADD 0000044c: SWAP7 0000044d: ADD 0000044e: SWAP6 0000044f: SWAP3 00000450: SWAP2 00000451: SWAP1 00000452: SWAP3 00000453: PUSH2 0x0400 00000456: JUMP 00000457: JUMPDEST 00000458: DUP1 00000459: PUSH1 0x05 0000045b: SHL 0000045c: DUP3 0000045d: ADD 0000045e: CALLDATALOAD 0000045f: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1 00000480: DUP4 00000481: CALLDATASIZE 00000482: SUB 00000483: ADD 00000484: DUP2 00000485: SLT 00000486: ISZERO 00000487: PUSH2 0x0204 0000048a: JUMPI 0000048b: DUP3 0000048c: ADD 0000048d: DUP1 0000048e: CALLDATALOAD 0000048f: SWAP1 00000490: DUP5 00000491: DUP3 00000492: GT 00000493: PUSH2 0x0204 00000496: JUMPI 00000497: DUP8 00000498: ADD 00000499: DUP2 0000049a: CALLDATASIZE 0000049b: SUB 0000049c: DUP2 0000049d: SGT 0000049e: PUSH2 0x0204 000004a1: JUMPI 000004a2: PUSH2 0x04ac 000004a5: SWAP2 000004a6: CALLDATASIZE 000004a7: SWAP2 000004a8: PUSH2 0x1986 000004ab: JUMP 000004ac: JUMPDEST 000004ad: PUSH1 0x40 000004af: MLOAD 000004b0: SWAP1 000004b1: PUSH2 0x04b9 000004b4: DUP3 000004b5: PUSH2 0x18d7 000004b8: JUMP 000004b9: JUMPDEST 000004ba: PUSH1 0x27 000004bc: DUP3 000004bd: MSTORE 000004be: PUSH32 0x416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c 000004df: DUP9 000004e0: DUP4 000004e1: ADD 000004e2: MSTORE 000004e3: PUSH32 0x206661696c656400000000000000000000000000000000000000000000000000 00000504: PUSH1 0x40 00000506: DUP4 00000507: ADD 00000508: MSTORE 00000509: ADDRESS 0000050a: EXTCODESIZE 0000050b: ISZERO 0000050c: PUSH2 0x05a1 0000050f: JUMPI 00000510: SWAP1 00000511: PUSH1 0x00 00000513: DUP1 00000514: DUP4 00000515: DUP11 00000516: PUSH2 0x052d 00000519: SWAP6 0000051a: MLOAD 0000051b: SWAP2 0000051c: ADD 0000051d: ADDRESS 0000051e: GAS 0000051f: DELEGATECALL 00000520: PUSH2 0x0527 00000523: PUSH2 0x1a00 00000526: JUMP 00000527: JUMPDEST 00000528: SWAP1 00000529: PUSH2 0x1a30 0000052c: JUMP 0000052d: JUMPDEST 0000052e: PUSH2 0x0537 00000531: DUP3 00000532: DUP8 00000533: PUSH2 0x19bd 00000536: JUMP 00000537: JUMPDEST 00000538: MSTORE 00000539: PUSH2 0x0542 0000053c: DUP2 0000053d: DUP7 0000053e: PUSH2 0x19bd 00000541: JUMP 00000542: JUMPDEST 00000543: POP 00000544: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00000565: DUP2 00000566: EQ 00000567: PUSH2 0x0572 0000056a: JUMPI 0000056b: PUSH1 0x01 0000056d: ADD 0000056e: PUSH2 0x03d4 00000571: JUMP 00000572: JUMPDEST 00000573: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00000594: PUSH1 0x00 00000596: MSTORE 00000597: PUSH1 0x11 00000599: PUSH1 0x04 0000059b: MSTORE 0000059c: PUSH1 0x24 0000059e: PUSH1 0x00 000005a0: REVERT 000005a1: JUMPDEST 000005a2: PUSH1 0x84 000005a4: DUP9 000005a5: PUSH1 0x40 000005a7: MLOAD 000005a8: SWAP1 000005a9: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000005ca: DUP3 000005cb: MSTORE 000005cc: PUSH1 0x04 000005ce: DUP3 000005cf: ADD 000005d0: MSTORE 000005d1: PUSH1 0x26 000005d3: PUSH1 0x24 000005d5: DUP3 000005d6: ADD 000005d7: MSTORE 000005d8: PUSH32 0x416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f 000005f9: PUSH1 0x44 000005fb: DUP3 000005fc: ADD 000005fd: MSTORE 000005fe: PUSH32 0x6e74726163740000000000000000000000000000000000000000000000000000 0000061f: PUSH1 0x64 00000621: DUP3 00000622: ADD 00000623: MSTORE 00000624: REVERT 00000625: JUMPDEST 00000626: PUSH1 0x60 00000628: DUP8 00000629: DUP3 0000062a: ADD 0000062b: DUP4 0000062c: ADD 0000062d: MSTORE 0000062e: DUP2 0000062f: ADD 00000630: PUSH2 0x03c7 00000633: JUMP 00000634: JUMPDEST 00000635: CALLVALUE 00000636: PUSH2 0x0204 00000639: JUMPI 0000063a: PUSH1 0x20 0000063c: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 0000065d: CALLDATASIZE 0000065e: ADD 0000065f: SLT 00000660: PUSH2 0x0204 00000663: JUMPI 00000664: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000679: PUSH2 0x0680 0000067c: PUSH2 0x17c3 0000067f: JUMP 00000680: JUMPDEST 00000681: AND 00000682: PUSH1 0x00 00000684: MSTORE 00000685: PUSH1 0x03 00000687: PUSH1 0x20 00000689: MSTORE 0000068a: PUSH1 0x20 0000068c: PUSH1 0xff 0000068e: PUSH1 0x40 00000690: PUSH1 0x00 00000692: KECCAK256 00000693: SLOAD 00000694: AND 00000695: PUSH1 0x40 00000697: MLOAD 00000698: SWAP1 00000699: ISZERO 0000069a: ISZERO 0000069b: DUP2 0000069c: MSTORE 0000069d: RETURN 0000069e: JUMPDEST 0000069f: PUSH1 0x60 000006a1: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 000006c2: CALLDATASIZE 000006c3: ADD 000006c4: SLT 000006c5: PUSH2 0x0204 000006c8: JUMPI 000006c9: PUSH2 0x06d0 000006cc: PUSH2 0x1740 000006cf: JUMP 000006d0: JUMPDEST 000006d1: PUSH32 0xe2d720c0ec6278814542be7b28dc57fd374b4c0920247e0ce632703fe8c7cc4c 000006f2: PUSH1 0x60 000006f4: PUSH2 0x06fb 000006f7: PUSH2 0x17a0 000006fa: JUMP 000006fb: JUMPDEST 000006fc: SWAP3 000006fd: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000 0000071e: PUSH1 0x44 00000720: CALLDATALOAD 00000721: SWAP2 00000722: AND 00000723: SWAP4 00000724: DUP5 00000725: PUSH1 0x00 00000727: MSTORE 00000728: PUSH1 0x02 0000072a: PUSH1 0x20 0000072c: MSTORE 0000072d: PUSH2 0x073b 00000730: PUSH1 0x40 00000732: PUSH1 0x00 00000734: KECCAK256 00000735: SLOAD 00000736: ISZERO 00000737: PUSH2 0x1a8e 0000073a: JUMP 0000073b: JUMPDEST 0000073c: NUMBER 0000073d: PUSH2 0x0799 00000740: JUMPI 00000741: DUP5 00000742: PUSH1 0x00 00000744: MSTORE 00000745: PUSH1 0x02 00000747: PUSH1 0x20 00000749: MSTORE 0000074a: PUSH1 0x01 0000074c: PUSH1 0x40 0000074e: PUSH1 0x00 00000750: KECCAK256 00000751: SSTORE 00000752: JUMPDEST 00000753: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000768: DUP2 00000769: AND 0000076a: SWAP2 0000076b: DUP3 0000076c: PUSH2 0x0787 0000076f: JUMPI 00000770: POP 00000771: POP 00000772: CALLVALUE 00000773: JUMPDEST 00000774: PUSH1 0x40 00000776: MLOAD 00000777: SWAP2 00000778: DUP3 00000779: MSTORE 0000077a: PUSH1 0x20 0000077c: DUP3 0000077d: ADD 0000077e: MSTORE 0000077f: CALLER 00000780: PUSH1 0x40 00000782: DUP3 00000783: ADD 00000784: MSTORE 00000785: LOG2 00000786: STOP 00000787: JUMPDEST 00000788: PUSH2 0x0794 0000078b: SWAP2 0000078c: ADDRESS 0000078d: SWAP1 0000078e: CALLER 0000078f: SWAP1 00000790: PUSH2 0x1ea7 00000793: JUMP 00000794: JUMPDEST 00000795: PUSH2 0x0773 00000798: JUMP 00000799: JUMPDEST 0000079a: DUP5 0000079b: PUSH1 0x00 0000079d: MSTORE 0000079e: PUSH1 0x02 000007a0: PUSH1 0x20 000007a2: MSTORE 000007a3: NUMBER 000007a4: PUSH1 0x40 000007a6: PUSH1 0x00 000007a8: KECCAK256 000007a9: SSTORE 000007aa: PUSH2 0x0752 000007ad: JUMP 000007ae: JUMPDEST 000007af: CALLVALUE 000007b0: PUSH2 0x0204 000007b3: JUMPI 000007b4: PUSH1 0x00 000007b6: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 000007d7: CALLDATASIZE 000007d8: ADD 000007d9: SLT 000007da: PUSH2 0x0204 000007dd: JUMPI 000007de: PUSH1 0x20 000007e0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000007f5: PUSH1 0x00 000007f7: SLOAD 000007f8: AND 000007f9: PUSH1 0x40 000007fb: MLOAD 000007fc: SWAP1 000007fd: DUP2 000007fe: MSTORE 000007ff: RETURN 00000800: JUMPDEST 00000801: CALLVALUE 00000802: PUSH2 0x0204 00000805: JUMPI 00000806: PUSH1 0x00 00000808: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 00000829: CALLDATASIZE 0000082a: ADD 0000082b: SLT 0000082c: PUSH2 0x0204 0000082f: JUMPI 00000830: PUSH2 0x0837 00000833: PUSH2 0x1844 00000836: JUMP 00000837: JUMPDEST 00000838: PUSH1 0x00 0000083a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000084f: DUP2 00000850: SLOAD 00000851: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 00000872: DUP2 00000873: AND 00000874: DUP4 00000875: SSTORE 00000876: AND 00000877: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 00000898: DUP3 00000899: DUP1 0000089a: LOG3 0000089b: STOP 0000089c: JUMPDEST 0000089d: CALLVALUE 0000089e: PUSH2 0x0204 000008a1: JUMPI 000008a2: PUSH1 0x00 000008a4: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 000008c5: CALLDATASIZE 000008c6: ADD 000008c7: SLT 000008c8: PUSH2 0x0204 000008cb: JUMPI 000008cc: PUSH1 0x20 000008ce: PUSH1 0x40 000008d0: MLOAD 000008d1: PUSH32 0x128db24430fa2fc5b7de9305b8518573b5e9ed0bde3a71ed68fc27427fcdac9b 000008f2: DUP2 000008f3: MSTORE 000008f4: RETURN 000008f5: JUMPDEST 000008f6: CALLVALUE 000008f7: PUSH2 0x0204 000008fa: JUMPI 000008fb: PUSH1 0x00 000008fd: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 0000091e: CALLDATASIZE 0000091f: ADD 00000920: SLT 00000921: PUSH2 0x0204 00000924: JUMPI 00000925: PUSH1 0x20 00000927: PUSH1 0x40 00000929: MLOAD 0000092a: PUSH32 0x48a7c38831f5161a72e249c43086721798d52b6ca8ec2ea3e120a257a1bc99cf 0000094b: DUP2 0000094c: MSTORE 0000094d: RETURN 0000094e: JUMPDEST 0000094f: CALLVALUE 00000950: PUSH2 0x0204 00000953: JUMPI 00000954: PUSH1 0x20 00000956: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 00000977: CALLDATASIZE 00000978: ADD 00000979: SLT 0000097a: PUSH2 0x0204 0000097d: JUMPI 0000097e: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000 0000099f: PUSH2 0x09a6 000009a2: PUSH2 0x1740 000009a5: JUMP 000009a6: JUMPDEST 000009a7: AND 000009a8: PUSH1 0x00 000009aa: MSTORE 000009ab: PUSH1 0x01 000009ad: PUSH1 0x20 000009af: MSTORE 000009b0: PUSH1 0x20 000009b2: PUSH1 0x40 000009b4: PUSH1 0x00 000009b6: KECCAK256 000009b7: SLOAD 000009b8: PUSH1 0x40 000009ba: MLOAD 000009bb: SWAP1 000009bc: DUP2 000009bd: MSTORE 000009be: RETURN 000009bf: JUMPDEST 000009c0: CALLVALUE 000009c1: PUSH2 0x0204 000009c4: JUMPI 000009c5: PUSH1 0x00 000009c7: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 000009e8: CALLDATASIZE 000009e9: ADD 000009ea: SLT 000009eb: PUSH2 0x0204 000009ee: JUMPI 000009ef: PUSH1 0x20 000009f1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a06: PUSH1 0x04 00000a08: SLOAD 00000a09: AND 00000a0a: PUSH1 0x40 00000a0c: MLOAD 00000a0d: SWAP1 00000a0e: DUP2 00000a0f: MSTORE 00000a10: RETURN 00000a11: JUMPDEST 00000a12: CALLVALUE 00000a13: PUSH2 0x0204 00000a16: JUMPI 00000a17: PUSH1 0xe0 00000a19: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 00000a3a: CALLDATASIZE 00000a3b: ADD 00000a3c: SLT 00000a3d: PUSH2 0x0204 00000a40: JUMPI 00000a41: PUSH2 0x0a48 00000a44: PUSH2 0x1740 00000a47: JUMP 00000a48: JUMPDEST 00000a49: PUSH2 0x0a50 00000a4c: PUSH2 0x17a0 00000a4f: JUMP 00000a50: JUMPDEST 00000a51: SWAP1 00000a52: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a67: PUSH1 0x84 00000a69: CALLDATALOAD 00000a6a: AND 00000a6b: PUSH1 0x84 00000a6d: CALLDATALOAD 00000a6e: SUB 00000a6f: PUSH2 0x0204 00000a72: JUMPI 00000a73: PUSH8 0xffffffffffffffff 00000a7c: PUSH1 0xa4 00000a7e: CALLDATALOAD 00000a7f: GT 00000a80: PUSH2 0x0204 00000a83: JUMPI 00000a84: CALLDATASIZE 00000a85: PUSH1 0x23 00000a87: PUSH1 0xa4 00000a89: CALLDATALOAD 00000a8a: ADD 00000a8b: SLT 00000a8c: ISZERO 00000a8d: PUSH2 0x0204 00000a90: JUMPI 00000a91: PUSH8 0xffffffffffffffff 00000a9a: PUSH1 0xa4 00000a9c: CALLDATALOAD 00000a9d: PUSH1 0x04 00000a9f: ADD 00000aa0: CALLDATALOAD 00000aa1: GT 00000aa2: PUSH2 0x0204 00000aa5: JUMPI 00000aa6: CALLDATASIZE 00000aa7: PUSH1 0x24 00000aa9: PUSH1 0xa4 00000aab: CALLDATALOAD 00000aac: PUSH1 0x04 00000aae: ADD 00000aaf: CALLDATALOAD 00000ab0: PUSH1 0xa4 00000ab2: CALLDATALOAD 00000ab3: ADD 00000ab4: ADD 00000ab5: GT 00000ab6: PUSH2 0x0204 00000ab9: JUMPI 00000aba: PUSH1 0xc4 00000abc: CALLDATALOAD 00000abd: PUSH8 0xffffffffffffffff 00000ac6: DUP2 00000ac7: GT 00000ac8: PUSH2 0x0204 00000acb: JUMPI 00000acc: PUSH2 0x0ad9 00000acf: SWAP1 00000ad0: CALLDATASIZE 00000ad1: SWAP1 00000ad2: PUSH1 0x04 00000ad4: ADD 00000ad5: PUSH2 0x176f 00000ad8: JUMP 00000ad9: JUMPDEST 00000ada: SWAP1 00000adb: CALLER 00000adc: PUSH1 0x00 00000ade: MSTORE 00000adf: PUSH1 0x03 00000ae1: PUSH1 0x20 00000ae3: MSTORE 00000ae4: PUSH1 0xff 00000ae6: PUSH1 0x40 00000ae8: PUSH1 0x00 00000aea: KECCAK256 00000aeb: SLOAD 00000aec: AND 00000aed: DUP1 00000aee: ISZERO 00000aef: PUSH2 0x12fd 00000af2: JUMPI 00000af3: JUMPDEST 00000af4: ISZERO 00000af5: PUSH2 0x0204 00000af8: JUMPI 00000af9: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000 00000b1a: DUP4 00000b1b: AND 00000b1c: PUSH1 0x00 00000b1e: MSTORE 00000b1f: PUSH1 0x01 00000b21: PUSH1 0x20 00000b23: MSTORE 00000b24: PUSH2 0x0b32 00000b27: PUSH1 0x40 00000b29: PUSH1 0x00 00000b2b: KECCAK256 00000b2c: SLOAD 00000b2d: ISZERO 00000b2e: PUSH2 0x1a8e 00000b31: JUMP 00000b32: JUMPDEST 00000b33: NUMBER 00000b34: PUSH2 0x12c6 00000b37: JUMPI 00000b38: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000 00000b59: DUP4 00000b5a: AND 00000b5b: PUSH1 0x00 00000b5d: MSTORE 00000b5e: PUSH1 0x01 00000b60: PUSH1 0x20 00000b62: MSTORE 00000b63: PUSH1 0x01 00000b65: PUSH1 0x40 00000b67: PUSH1 0x00 00000b69: KECCAK256 00000b6a: SSTORE 00000b6b: JUMPDEST 00000b6c: PUSH2 0x0b81 00000b6f: CALLDATASIZE 00000b70: PUSH1 0xa4 00000b72: CALLDATALOAD 00000b73: PUSH1 0x04 00000b75: ADD 00000b76: CALLDATALOAD 00000b77: PUSH1 0x24 00000b79: PUSH1 0xa4 00000b7b: CALLDATALOAD 00000b7c: ADD 00000b7d: PUSH2 0x1986 00000b80: JUMP 00000b81: JUMPDEST 00000b82: PUSH1 0x20 00000b84: DUP2 00000b85: MLOAD 00000b86: SWAP2 00000b87: ADD 00000b88: KECCAK256 00000b89: SWAP2 00000b8a: PUSH1 0x40 00000b8c: MLOAD 00000b8d: SWAP3 00000b8e: PUSH32 0x128db24430fa2fc5b7de9305b8518573b5e9ed0bde3a71ed68fc27427fcdac9b 00000baf: PUSH1 0x20 00000bb1: DUP6 00000bb2: ADD 00000bb3: MSTORE 00000bb4: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000 00000bd5: DUP6 00000bd6: AND 00000bd7: PUSH1 0x40 00000bd9: DUP6 00000bda: ADD 00000bdb: MSTORE 00000bdc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000bf1: DUP7 00000bf2: AND 00000bf3: PUSH1 0x60 00000bf5: DUP6 00000bf6: ADD 00000bf7: MSTORE 00000bf8: PUSH1 0x44 00000bfa: CALLDATALOAD 00000bfb: PUSH1 0x80 00000bfd: DUP6 00000bfe: ADD 00000bff: MSTORE 00000c00: PUSH1 0x64 00000c02: CALLDATALOAD 00000c03: PUSH1 0xa0 00000c05: DUP6 00000c06: ADD 00000c07: MSTORE 00000c08: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c1d: PUSH1 0x84 00000c1f: CALLDATALOAD 00000c20: AND 00000c21: PUSH1 0xc0 00000c23: DUP6 00000c24: ADD 00000c25: MSTORE 00000c26: PUSH1 0xe0 00000c28: DUP5 00000c29: ADD 00000c2a: MSTORE 00000c2b: PUSH1 0xe0 00000c2d: DUP4 00000c2e: MSTORE 00000c2f: DUP3 00000c30: PUSH2 0x0100 00000c33: DUP2 00000c34: ADD 00000c35: LT 00000c36: PUSH8 0xffffffffffffffff 00000c3f: PUSH2 0x0100 00000c42: DUP6 00000c43: ADD 00000c44: GT 00000c45: OR 00000c46: PUSH2 0x1297 00000c49: JUMPI 00000c4a: PUSH1 0x20 00000c4c: SWAP2 00000c4d: PUSH2 0x0100 00000c50: DUP5 00000c51: ADD 00000c52: PUSH1 0x40 00000c54: MSTORE 00000c55: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 00000c76: DUP5 00000c77: PUSH2 0x0cf2 00000c7a: DUP2 00000c7b: MLOAD 00000c7c: DUP7 00000c7d: DUP4 00000c7e: ADD 00000c7f: KECCAK256 00000c80: SWAP5 00000c81: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c96: PUSH1 0x04 00000c98: SLOAD 00000c99: AND 00000c9a: SWAP5 00000c9b: PUSH32 0x8394786f00000000000000000000000000000000000000000000000000000000 00000cbc: PUSH2 0x0100 00000cbf: DUP6 00000cc0: ADD 00000cc1: MSTORE 00000cc2: PUSH2 0x0100 00000cc5: DUP5 00000cc6: ADD 00000cc7: SWAP7 00000cc8: PUSH32 0x48a7c38831f5161a72e249c43086721798d52b6ca8ec2ea3e120a257a1bc99cf 00000ce9: PUSH2 0x0104 00000cec: DUP7 00000ced: ADD 00000cee: PUSH2 0x1b0b 00000cf1: JUMP 00000cf2: JUMPDEST 00000cf3: SUB 00000cf4: ADD 00000cf5: SWAP1 00000cf6: PUSH2 0x0100 00000cf9: DUP6 00000cfa: ADD 00000cfb: SWAP1 00000cfc: GAS 00000cfd: STATICCALL 00000cfe: SWAP1 00000cff: DUP2 00000d00: ISZERO 00000d01: PUSH2 0x1083 00000d04: JUMPI 00000d05: PUSH1 0x00 00000d07: SWAP2 00000d08: PUSH2 0x125f 00000d0b: JUMPI 00000d0c: JUMPDEST 00000d0d: POP 00000d0e: ISZERO 00000d0f: PUSH2 0x1201 00000d12: JUMPI 00000d13: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d28: DUP3 00000d29: AND 00000d2a: PUSH2 0x0e2c 00000d2d: JUMPI 00000d2e: PUSH32 0xa3a407ca9c8f72918b37b717afb70b7c6b00078c3aecbff60db587287255077e 00000d4f: SWAP1 00000d50: PUSH1 0x60 00000d52: SWAP1 00000d53: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000 00000d74: SWAP1 00000d75: PUSH1 0x04 00000d77: PUSH1 0xa4 00000d79: CALLDATALOAD 00000d7a: ADD 00000d7b: CALLDATALOAD 00000d7c: ISZERO 00000d7d: PUSH2 0x0e0e 00000d80: JUMPI 00000d81: PUSH2 0x0dc5 00000d84: PUSH2 0x0d91 00000d87: PUSH1 0x64 00000d89: CALLDATALOAD 00000d8a: PUSH1 0x44 00000d8c: CALLDATALOAD 00000d8d: PUSH2 0x1c17 00000d90: JUMP 00000d91: JUMPDEST 00000d92: PUSH2 0x0da7 00000d95: CALLDATASIZE 00000d96: PUSH1 0xa4 00000d98: CALLDATALOAD 00000d99: PUSH1 0x04 00000d9b: ADD 00000d9c: CALLDATALOAD 00000d9d: PUSH1 0x24 00000d9f: PUSH1 0xa4 00000da1: CALLDATALOAD 00000da2: ADD 00000da3: PUSH2 0x1986 00000da6: JUMP 00000da7: JUMPDEST 00000da8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000dbd: PUSH1 0x84 00000dbf: CALLDATALOAD 00000dc0: AND 00000dc1: PUSH2 0x1d3c 00000dc4: JUMP 00000dc5: JUMPDEST 00000dc6: POP 00000dc7: JUMPDEST 00000dc8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ddd: PUSH1 0x40 00000ddf: MLOAD 00000de0: SWAP6 00000de1: AND 00000de2: DUP6 00000de3: MSTORE 00000de4: PUSH1 0x44 00000de6: CALLDATALOAD 00000de7: PUSH1 0x20 00000de9: DUP7 00000dea: ADD 00000deb: MSTORE 00000dec: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e01: PUSH1 0x84 00000e03: CALLDATALOAD 00000e04: AND 00000e05: PUSH1 0x40 00000e07: DUP7 00000e08: ADD 00000e09: MSTORE 00000e0a: AND 00000e0b: SWAP3 00000e0c: LOG2 00000e0d: STOP 00000e0e: JUMPDEST 00000e0f: PUSH2 0x0e27 00000e12: PUSH2 0x0e1f 00000e15: PUSH1 0x64 00000e17: CALLDATALOAD 00000e18: PUSH1 0x44 00000e1a: CALLDATALOAD 00000e1b: PUSH2 0x1c17 00000e1e: JUMP 00000e1f: JUMPDEST 00000e20: PUSH1 0x84 00000e22: CALLDATALOAD 00000e23: PUSH2 0x1c24 00000e26: JUMP 00000e27: JUMPDEST 00000e28: PUSH2 0x0dc7 00000e2b: JUMP 00000e2c: JUMPDEST 00000e2d: PUSH1 0x04 00000e2f: PUSH1 0xa4 00000e31: CALLDATALOAD 00000e32: ADD 00000e33: CALLDATALOAD 00000e34: ISZERO 00000e35: PUSH2 0x117f 00000e38: JUMPI 00000e39: PUSH1 0x40 00000e3b: MLOAD 00000e3c: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000 00000e5d: DUP2 00000e5e: MSTORE 00000e5f: ADDRESS 00000e60: PUSH1 0x04 00000e62: DUP3 00000e63: ADD 00000e64: MSTORE 00000e65: PUSH1 0x20 00000e67: DUP2 00000e68: PUSH1 0x24 00000e6a: DUP2 00000e6b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e80: DUP8 00000e81: AND 00000e82: GAS 00000e83: STATICCALL 00000e84: SWAP1 00000e85: DUP2 00000e86: ISZERO 00000e87: PUSH2 0x1083 00000e8a: JUMPI 00000e8b: PUSH1 0x00 00000e8d: SWAP2 00000e8e: PUSH2 0x114d 00000e91: JUMPI 00000e92: JUMPDEST 00000e93: POP 00000e94: PUSH1 0x44 00000e96: CALLDATALOAD 00000e97: GT 00000e98: PUSH2 0x10c9 00000e9b: JUMPI 00000e9c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000eb1: DUP3 00000eb2: AND 00000eb3: EXTCODESIZE 00000eb4: ISZERO 00000eb5: PUSH2 0x0204 00000eb8: JUMPI 00000eb9: PUSH1 0x40 00000ebb: MLOAD 00000ebc: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000 00000edd: DUP2 00000ede: MSTORE 00000edf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ef4: PUSH1 0x84 00000ef6: CALLDATALOAD 00000ef7: DUP2 00000ef8: AND 00000ef9: PUSH1 0x04 00000efb: DUP4 00000efc: ADD 00000efd: MSTORE 00000efe: PUSH1 0x44 00000f00: DUP1 00000f01: CALLDATALOAD 00000f02: PUSH1 0x24 00000f04: DUP5 00000f05: ADD 00000f06: MSTORE 00000f07: PUSH1 0x00 00000f09: SWAP2 00000f0a: DUP4 00000f0b: SWAP2 00000f0c: SWAP1 00000f0d: DUP3 00000f0e: SWAP1 00000f0f: DUP5 00000f10: SWAP1 00000f11: DUP9 00000f12: AND 00000f13: GAS 00000f14: CALL 00000f15: DUP1 00000f16: ISZERO 00000f17: PUSH2 0x1083 00000f1a: JUMPI 00000f1b: PUSH2 0x10ba 00000f1e: JUMPI 00000f1f: JUMPDEST 00000f20: POP 00000f21: PUSH2 0x0f3c 00000f24: PUSH1 0x64 00000f26: CALLDATALOAD 00000f27: PUSH2 0x0da7 00000f2a: CALLDATASIZE 00000f2b: PUSH1 0xa4 00000f2d: CALLDATALOAD 00000f2e: PUSH1 0x04 00000f30: ADD 00000f31: CALLDATALOAD 00000f32: PUSH1 0x24 00000f34: PUSH1 0xa4 00000f36: CALLDATALOAD 00000f37: ADD 00000f38: PUSH2 0x1986 00000f3b: JUMP 00000f3c: JUMPDEST 00000f3d: POP 00000f3e: PUSH1 0x40 00000f40: MLOAD 00000f41: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000 00000f62: DUP2 00000f63: MSTORE 00000f64: ADDRESS 00000f65: PUSH1 0x04 00000f67: DUP3 00000f68: ADD 00000f69: MSTORE 00000f6a: PUSH1 0x20 00000f6c: DUP2 00000f6d: PUSH1 0x24 00000f6f: DUP2 00000f70: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f85: DUP8 00000f86: AND 00000f87: GAS 00000f88: STATICCALL 00000f89: DUP1 00000f8a: ISZERO 00000f8b: PUSH2 0x1083 00000f8e: JUMPI 00000f8f: PUSH2 0x108f 00000f92: JUMPI 00000f93: JUMPDEST 00000f94: POP 00000f95: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000faa: DUP3 00000fab: AND 00000fac: EXTCODESIZE 00000fad: ISZERO 00000fae: PUSH2 0x0204 00000fb1: JUMPI 00000fb2: PUSH1 0x40 00000fb4: MLOAD 00000fb5: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000 00000fd6: DUP2 00000fd7: MSTORE 00000fd8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000fed: PUSH1 0x84 00000fef: CALLDATALOAD 00000ff0: AND 00000ff1: PUSH1 0x04 00000ff3: DUP3 00000ff4: ADD 00000ff5: MSTORE 00000ff6: PUSH1 0x00 00000ff8: PUSH1 0x24 00000ffa: DUP3 00000ffb: ADD 00000ffc: MSTORE 00000ffd: PUSH1 0x00 00000fff: DUP2 00001000: PUSH1 0x44 00001002: DUP2 00001003: DUP4 00001004: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001019: DUP9 0000101a: AND 0000101b: GAS 0000101c: CALL 0000101d: DUP1 0000101e: ISZERO 0000101f: PUSH2 0x1083 00001022: JUMPI 00001023: PUSH32 0xa3a407ca9c8f72918b37b717afb70b7c6b00078c3aecbff60db587287255077e 00001044: SWAP3 00001045: PUSH1 0x60 00001047: SWAP3 00001048: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000 00001069: SWAP3 0000106a: PUSH2 0x1074 0000106d: JUMPI 0000106e: JUMPDEST 0000106f: POP 00001070: PUSH2 0x0dc7 00001073: JUMP 00001074: JUMPDEST 00001075: PUSH2 0x107d 00001078: SWAP1 00001079: PUSH2 0x18c3 0000107c: JUMP 0000107d: JUMPDEST 0000107e: DUP6 0000107f: PUSH2 0x106e 00001082: JUMP 00001083: JUMPDEST 00001084: PUSH1 0x40 00001086: MLOAD 00001087: RETURNDATASIZE 00001088: PUSH1 0x00 0000108a: DUP3 0000108b: RETURNDATACOPY 0000108c: RETURNDATASIZE 0000108d: SWAP1 0000108e: REVERT 0000108f: JUMPDEST 00001090: PUSH1 0x20 00001092: SWAP1 00001093: DUP2 00001094: RETURNDATASIZE 00001095: DUP4 00001096: GT 00001097: PUSH2 0x10b3 0000109a: JUMPI 0000109b: JUMPDEST 0000109c: PUSH2 0x10a5 0000109f: DUP2 000010a0: DUP4 000010a1: PUSH2 0x18f3 000010a4: JUMP 000010a5: JUMPDEST 000010a6: DUP2 000010a7: ADD 000010a8: SUB 000010a9: SLT 000010aa: PUSH2 0x0204 000010ad: JUMPI 000010ae: DUP3 000010af: PUSH2 0x0f93 000010b2: JUMP 000010b3: JUMPDEST 000010b4: POP 000010b5: RETURNDATASIZE 000010b6: PUSH2 0x109b 000010b9: JUMP 000010ba: JUMPDEST 000010bb: PUSH2 0x10c3 000010be: SWAP1 000010bf: PUSH2 0x18c3 000010c2: JUMP 000010c3: JUMPDEST 000010c4: DUP3 000010c5: PUSH2 0x0f1f 000010c8: JUMP 000010c9: JUMPDEST 000010ca: PUSH1 0x84 000010cc: PUSH1 0x40 000010ce: MLOAD 000010cf: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000010f0: DUP2 000010f1: MSTORE 000010f2: PUSH1 0x20 000010f4: PUSH1 0x04 000010f6: DUP3 000010f7: ADD 000010f8: MSTORE 000010f9: PUSH1 0x2b 000010fb: PUSH1 0x24 000010fd: DUP3 000010fe: ADD 000010ff: MSTORE 00001100: PUSH32 0x53616665546f6b656e3a20696e73756666696369656e742062616c616e636520 00001121: PUSH1 0x44 00001123: DUP3 00001124: ADD 00001125: MSTORE 00001126: PUSH32 0x666f7220617070726f7665000000000000000000000000000000000000000000 00001147: PUSH1 0x64 00001149: DUP3 0000114a: ADD 0000114b: MSTORE 0000114c: REVERT 0000114d: JUMPDEST 0000114e: SWAP1 0000114f: POP 00001150: PUSH1 0x20 00001152: DUP2 00001153: RETURNDATASIZE 00001154: PUSH1 0x20 00001156: GT 00001157: PUSH2 0x1177 0000115a: JUMPI 0000115b: JUMPDEST 0000115c: DUP2 0000115d: PUSH2 0x1168 00001160: PUSH1 0x20 00001162: SWAP4 00001163: DUP4 00001164: PUSH2 0x18f3 00001167: JUMP 00001168: JUMPDEST 00001169: DUP2 0000116a: ADD 0000116b: SUB 0000116c: SLT 0000116d: PUSH2 0x0204 00001170: JUMPI 00001171: MLOAD 00001172: DUP4 00001173: PUSH2 0x0e92 00001176: JUMP 00001177: JUMPDEST 00001178: RETURNDATASIZE 00001179: SWAP2 0000117a: POP 0000117b: PUSH2 0x115b 0000117e: JUMP 0000117f: JUMPDEST 00001180: PUSH1 0x60 00001182: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000 000011a3: PUSH32 0xa3a407ca9c8f72918b37b717afb70b7c6b00078c3aecbff60db587287255077e 000011c4: SWAP3 000011c5: PUSH2 0x11ea 000011c8: PUSH1 0x44 000011ca: CALLDATALOAD 000011cb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000011e0: PUSH1 0x84 000011e2: CALLDATALOAD 000011e3: AND 000011e4: ADDRESS 000011e5: DUP9 000011e6: PUSH2 0x1ea7 000011e9: JUMP 000011ea: JUMPDEST 000011eb: POP 000011ec: PUSH1 0x64 000011ee: CALLDATALOAD 000011ef: ISZERO 000011f0: PUSH2 0x0dc7 000011f3: JUMPI 000011f4: PUSH2 0x0e27 000011f7: PUSH1 0x64 000011f9: CALLDATALOAD 000011fa: PUSH1 0x84 000011fc: CALLDATALOAD 000011fd: PUSH2 0x1c24 00001200: JUMP 00001201: JUMPDEST 00001202: PUSH1 0x64 00001204: PUSH1 0x40 00001206: MLOAD 00001207: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001228: DUP2 00001229: MSTORE 0000122a: PUSH1 0x20 0000122c: PUSH1 0x04 0000122e: DUP3 0000122f: ADD 00001230: MSTORE 00001231: PUSH1 0x1a 00001233: PUSH1 0x24 00001235: DUP3 00001236: ADD 00001237: MSTORE 00001238: PUSH32 0x4272696467653a20696e76616c6964207369676e617475726573000000000000 00001259: PUSH1 0x44 0000125b: DUP3 0000125c: ADD 0000125d: MSTORE 0000125e: REVERT 0000125f: JUMPDEST 00001260: PUSH2 0x128a 00001263: SWAP2 00001264: POP 00001265: PUSH1 0x20 00001267: RETURNDATASIZE 00001268: PUSH1 0x20 0000126a: GT 0000126b: PUSH2 0x1290 0000126e: JUMPI 0000126f: JUMPDEST 00001270: PUSH2 0x0100 00001273: DUP2 00001274: PUSH2 0x1280 00001277: DUP3 00001278: SWAP4 00001279: DUP4 0000127a: DUP7 0000127b: ADD 0000127c: PUSH2 0x18f3 0000127f: JUMP 00001280: JUMPDEST 00001281: DUP4 00001282: ADD 00001283: ADD 00001284: SWAP2 00001285: ADD 00001286: PUSH2 0x1af3 00001289: JUMP 0000128a: JUMPDEST 0000128b: DUP4 0000128c: PUSH2 0x0d0c 0000128f: JUMP 00001290: JUMPDEST 00001291: POP 00001292: RETURNDATASIZE 00001293: PUSH2 0x126f 00001296: JUMP 00001297: JUMPDEST 00001298: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 000012b9: PUSH1 0x00 000012bb: MSTORE 000012bc: PUSH1 0x41 000012be: PUSH1 0x04 000012c0: MSTORE 000012c1: PUSH1 0x24 000012c3: PUSH1 0x00 000012c5: REVERT 000012c6: JUMPDEST 000012c7: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000 000012e8: DUP4 000012e9: AND 000012ea: PUSH1 0x00 000012ec: MSTORE 000012ed: PUSH1 0x01 000012ef: PUSH1 0x20 000012f1: MSTORE 000012f2: NUMBER 000012f3: PUSH1 0x40 000012f5: PUSH1 0x00 000012f7: KECCAK256 000012f8: SSTORE 000012f9: PUSH2 0x0b6b 000012fc: JUMP 000012fd: JUMPDEST 000012fe: POP 000012ff: ORIGIN 00001300: PUSH1 0x00 00001302: MSTORE 00001303: PUSH1 0xff 00001305: PUSH1 0x40 00001307: PUSH1 0x00 00001309: KECCAK256 0000130a: SLOAD 0000130b: AND 0000130c: PUSH2 0x0af3 0000130f: JUMP 00001310: JUMPDEST 00001311: CALLVALUE 00001312: PUSH2 0x0204 00001315: JUMPI 00001316: PUSH1 0x80 00001318: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 00001339: CALLDATASIZE 0000133a: ADD 0000133b: SLT 0000133c: PUSH2 0x0204 0000133f: JUMPI 00001340: PUSH1 0x04 00001342: CALLDATALOAD 00001343: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001358: DUP1 00001359: DUP3 0000135a: AND 0000135b: DUP1 0000135c: SWAP3 0000135d: SUB 0000135e: PUSH2 0x0204 00001361: JUMPI 00001362: PUSH1 0x24 00001364: CALLDATALOAD 00001365: PUSH8 0xffffffffffffffff 0000136e: PUSH1 0x44 00001370: CALLDATALOAD 00001371: DUP2 00001372: DUP2 00001373: GT 00001374: PUSH2 0x0204 00001377: JUMPI 00001378: PUSH2 0x1385 0000137b: SWAP1 0000137c: CALLDATASIZE 0000137d: SWAP1 0000137e: PUSH1 0x04 00001380: ADD 00001381: PUSH2 0x176f 00001384: JUMP 00001385: JUMPDEST 00001386: PUSH1 0x64 00001388: SWAP3 00001389: SWAP2 0000138a: SWAP3 0000138b: CALLDATALOAD 0000138c: DUP3 0000138d: DUP2 0000138e: GT 0000138f: PUSH2 0x0204 00001392: JUMPI 00001393: PUSH2 0x13a0 00001396: SWAP1 00001397: CALLDATASIZE 00001398: SWAP1 00001399: PUSH1 0x04 0000139b: ADD 0000139c: PUSH2 0x176f 0000139f: JUMP 000013a0: JUMPDEST 000013a1: SWAP2 000013a2: SWAP1 000013a3: SWAP4 000013a4: DUP6 000013a5: TIMESTAMP 000013a6: GT 000013a7: PUSH2 0x1675 000013aa: JUMPI 000013ab: PUSH1 0x40 000013ad: MLOAD 000013ae: PUSH1 0x20 000013b0: SWAP7 000013b1: DUP8 000013b2: DUP3 000013b3: ADD 000013b4: SWAP1 000013b5: PUSH32 0x83ff2829503e6b25933e0c1d0422aeb9b68fe6259418bffd98b105c4ef89c4d4 000013d6: DUP3 000013d7: MSTORE 000013d8: DUP11 000013d9: PUSH1 0x40 000013db: DUP5 000013dc: ADD 000013dd: MSTORE 000013de: PUSH1 0x60 000013e0: DUP4 000013e1: ADD 000013e2: MSTORE 000013e3: PUSH1 0x60 000013e5: DUP3 000013e6: MSTORE 000013e7: PUSH1 0x80 000013e9: DUP3 000013ea: ADD 000013eb: SWAP6 000013ec: DUP3 000013ed: DUP8 000013ee: LT 000013ef: SWAP1 000013f0: DUP8 000013f1: GT 000013f2: OR 000013f3: PUSH2 0x1297 000013f6: JUMPI 000013f7: DUP6 000013f8: PUSH1 0x40 000013fa: MSTORE 000013fb: DUP2 000013fc: MLOAD 000013fd: SWAP1 000013fe: KECCAK256 000013ff: SWAP5 00001400: DUP8 00001401: DUP2 00001402: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80 00001423: DUP5 00001424: PUSH2 0x1478 00001427: PUSH32 0x48a7c38831f5161a72e249c43086721798d52b6ca8ec2ea3e120a257a1bc99cf 00001448: SWAP9 00001449: PUSH32 0x8394786f00000000000000000000000000000000000000000000000000000000 0000146a: SWAP9 0000146b: DUP10 0000146c: DUP7 0000146d: MSTORE 0000146e: DUP13 0000146f: DUP12 00001470: PUSH1 0x84 00001472: DUP7 00001473: ADD 00001474: PUSH2 0x1b0b 00001477: JUMP 00001478: JUMPDEST 00001479: SUB 0000147a: ADD 0000147b: DUP2 0000147c: DUP14 0000147d: GAS 0000147e: STATICCALL 0000147f: SWAP2 00001480: DUP3 00001481: ISZERO 00001482: PUSH2 0x1083 00001485: JUMPI 00001486: PUSH1 0x00 00001488: SWAP3 00001489: PUSH2 0x1642 0000148c: JUMPI 0000148d: JUMPDEST 0000148e: POP 0000148f: POP 00001490: ISZERO 00001491: PUSH2 0x15be 00001494: JUMPI 00001495: PUSH1 0x04 00001497: SLOAD 00001498: SWAP7 00001499: DUP8 0000149a: AND 0000149b: SWAP3 0000149c: DUP4 0000149d: PUSH2 0x14cb 000014a0: JUMPI 000014a1: JUMPDEST 000014a2: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 000014c3: DUP9 000014c4: AND 000014c5: DUP10 000014c6: OR 000014c7: PUSH1 0x04 000014c9: SSTORE 000014ca: STOP 000014cb: JUMPDEST 000014cc: SWAP1 000014cd: PUSH2 0x14e9 000014d0: DUP8 000014d1: SWAP6 000014d2: SWAP5 000014d3: SWAP4 000014d4: SWAP3 000014d5: PUSH1 0x40 000014d7: MLOAD 000014d8: SWAP8 000014d9: DUP9 000014da: SWAP7 000014db: DUP8 000014dc: SWAP6 000014dd: DUP7 000014de: SWAP6 000014df: DUP7 000014e0: MSTORE 000014e1: PUSH1 0x04 000014e3: DUP7 000014e4: ADD 000014e5: PUSH2 0x1b0b 000014e8: JUMP 000014e9: JUMPDEST 000014ea: SUB 000014eb: SWAP2 000014ec: GAS 000014ed: STATICCALL 000014ee: SWAP1 000014ef: DUP2 000014f0: ISZERO 000014f1: PUSH2 0x1083 000014f4: JUMPI 000014f5: PUSH1 0x00 000014f7: SWAP2 000014f8: PUSH2 0x1591 000014fb: JUMPI 000014fc: JUMPDEST 000014fd: POP 000014fe: ISZERO 000014ff: PUSH2 0x150d 00001502: JUMPI 00001503: DUP1 00001504: DUP1 00001505: DUP1 00001506: DUP1 00001507: DUP1 00001508: DUP1 00001509: PUSH2 0x14a1 0000150c: JUMP 0000150d: JUMPDEST 0000150e: PUSH1 0x84 00001510: SWAP1 00001511: PUSH1 0x40 00001513: MLOAD 00001514: SWAP1 00001515: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001536: DUP3 00001537: MSTORE 00001538: PUSH1 0x04 0000153a: DUP3 0000153b: ADD 0000153c: MSTORE 0000153d: PUSH1 0x2a 0000153f: PUSH1 0x24 00001541: DUP3 00001542: ADD 00001543: MSTORE 00001544: PUSH32 0x4272696467653a20696e76616c6964207369676e617475726520666f72206f6c 00001565: PUSH1 0x44 00001567: DUP3 00001568: ADD 00001569: MSTORE 0000156a: PUSH32 0x6420766572696669657200000000000000000000000000000000000000000000 0000158b: PUSH1 0x64 0000158d: DUP3 0000158e: ADD 0000158f: MSTORE 00001590: REVERT 00001591: JUMPDEST 00001592: PUSH2 0x15b1 00001595: SWAP2 00001596: POP 00001597: DUP3 00001598: RETURNDATASIZE 00001599: DUP5 0000159a: GT 0000159b: PUSH2 0x15b7 0000159e: JUMPI 0000159f: JUMPDEST 000015a0: PUSH2 0x15a9 000015a3: DUP2 000015a4: DUP4 000015a5: PUSH2 0x18f3 000015a8: JUMP 000015a9: JUMPDEST 000015aa: DUP2 000015ab: ADD 000015ac: SWAP1 000015ad: PUSH2 0x1af3 000015b0: JUMP 000015b1: JUMPDEST 000015b2: DUP5 000015b3: PUSH2 0x14fc 000015b6: JUMP 000015b7: JUMPDEST 000015b8: POP 000015b9: RETURNDATASIZE 000015ba: PUSH2 0x159f 000015bd: JUMP 000015be: JUMPDEST 000015bf: PUSH1 0x84 000015c1: DUP7 000015c2: PUSH1 0x40 000015c4: MLOAD 000015c5: SWAP1 000015c6: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000015e7: DUP3 000015e8: MSTORE 000015e9: PUSH1 0x04 000015eb: DUP3 000015ec: ADD 000015ed: MSTORE 000015ee: PUSH1 0x2a 000015f0: PUSH1 0x24 000015f2: DUP3 000015f3: ADD 000015f4: MSTORE 000015f5: PUSH32 0x4272696467653a20696e76616c6964207369676e617475726520666f72206e65 00001616: PUSH1 0x44 00001618: DUP3 00001619: ADD 0000161a: MSTORE 0000161b: PUSH32 0x7720766572696669657200000000000000000000000000000000000000000000 0000163c: PUSH1 0x64 0000163e: DUP3 0000163f: ADD 00001640: MSTORE 00001641: REVERT 00001642: JUMPDEST 00001643: PUSH2 0x1666 00001646: SWAP3 00001647: POP 00001648: PUSH1 0x80 0000164a: SWAP1 0000164b: DUP10 0000164c: SWAP1 0000164d: RETURNDATASIZE 0000164e: DUP12 0000164f: GT 00001650: PUSH2 0x166d 00001653: JUMPI 00001654: JUMPDEST 00001655: PUSH2 0x165e 00001658: DUP3 00001659: DUP6 0000165a: PUSH2 0x18f3 0000165d: JUMP 0000165e: JUMPDEST 0000165f: ADD 00001660: ADD 00001661: SWAP1 00001662: PUSH2 0x1af3 00001665: JUMP 00001666: JUMPDEST 00001667: DUP10 00001668: DUP1 00001669: PUSH2 0x148d 0000166c: JUMP 0000166d: JUMPDEST 0000166e: RETURNDATASIZE 0000166f: SWAP2 00001670: POP 00001671: PUSH2 0x1654 00001674: JUMP 00001675: JUMPDEST 00001676: PUSH1 0x64 00001678: PUSH1 0x40 0000167a: MLOAD 0000167b: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 0000169c: DUP2 0000169d: MSTORE 0000169e: PUSH1 0x20 000016a0: PUSH1 0x04 000016a2: DUP3 000016a3: ADD 000016a4: MSTORE 000016a5: PUSH1 0x0f 000016a7: PUSH1 0x24 000016a9: DUP3 000016aa: ADD 000016ab: MSTORE 000016ac: PUSH32 0x4272696467653a20657870697265640000000000000000000000000000000000 000016cd: PUSH1 0x44 000016cf: DUP3 000016d0: ADD 000016d1: MSTORE 000016d2: REVERT 000016d3: JUMPDEST 000016d4: CALLVALUE 000016d5: PUSH2 0x0204 000016d8: JUMPI 000016d9: PUSH1 0x20 000016db: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc 000016fc: CALLDATASIZE 000016fd: ADD 000016fe: SLT 000016ff: PUSH2 0x0204 00001702: JUMPI 00001703: PUSH1 0x20 00001705: SWAP1 00001706: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000 00001727: PUSH2 0x172e 0000172a: PUSH2 0x1740 0000172d: JUMP 0000172e: JUMPDEST 0000172f: AND 00001730: PUSH1 0x00 00001732: MSTORE 00001733: PUSH1 0x02 00001735: DUP3 00001736: MSTORE 00001737: PUSH1 0x40 00001739: PUSH1 0x00 0000173b: KECCAK256 0000173c: SLOAD 0000173d: DUP2 0000173e: MSTORE 0000173f: RETURN 00001740: JUMPDEST 00001741: PUSH1 0x04 00001743: CALLDATALOAD 00001744: SWAP1 00001745: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000 00001766: DUP3 00001767: AND 00001768: DUP3 00001769: SUB 0000176a: PUSH2 0x0204 0000176d: JUMPI 0000176e: JUMP 0000176f: JUMPDEST 00001770: SWAP2 00001771: DUP2 00001772: PUSH1 0x1f 00001774: DUP5 00001775: ADD 00001776: SLT 00001777: ISZERO 00001778: PUSH2 0x0204 0000177b: JUMPI 0000177c: DUP3 0000177d: CALLDATALOAD 0000177e: SWAP2 0000177f: PUSH8 0xffffffffffffffff 00001788: DUP4 00001789: GT 0000178a: PUSH2 0x0204 0000178d: JUMPI 0000178e: PUSH1 0x20 00001790: DUP1 00001791: DUP6 00001792: ADD 00001793: SWAP5 00001794: DUP5 00001795: PUSH1 0x05 00001797: SHL 00001798: ADD 00001799: ADD 0000179a: GT 0000179b: PUSH2 0x0204 0000179e: JUMPI 0000179f: JUMP 000017a0: JUMPDEST 000017a1: PUSH1 0x24 000017a3: CALLDATALOAD 000017a4: SWAP1 000017a5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000017ba: DUP3 000017bb: AND 000017bc: DUP3 000017bd: SUB 000017be: PUSH2 0x0204 000017c1: JUMPI 000017c2: JUMP 000017c3: JUMPDEST 000017c4: PUSH1 0x04 000017c6: CALLDATALOAD 000017c7: SWAP1 000017c8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000017dd: DUP3 000017de: AND 000017df: DUP3 000017e0: SUB 000017e1: PUSH2 0x0204 000017e4: JUMPI 000017e5: JUMP 000017e6: JUMPDEST 000017e7: SWAP2 000017e8: SWAP1 000017e9: DUP3 000017ea: MLOAD 000017eb: SWAP3 000017ec: DUP4 000017ed: DUP3 000017ee: MSTORE 000017ef: PUSH1 0x00 000017f1: JUMPDEST 000017f2: DUP5 000017f3: DUP2 000017f4: LT 000017f5: PUSH2 0x1830 000017f8: JUMPI 000017f9: POP 000017fa: POP 000017fb: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 0000181c: PUSH1 0x1f 0000181e: DUP5 0000181f: PUSH1 0x00 00001821: PUSH1 0x20 00001823: DUP1 00001824: SWAP7 00001825: SWAP8 00001826: DUP7 00001827: ADD 00001828: ADD 00001829: MSTORE 0000182a: ADD 0000182b: AND 0000182c: ADD 0000182d: ADD 0000182e: SWAP1 0000182f: JUMP 00001830: JUMPDEST 00001831: PUSH1 0x20 00001833: DUP2 00001834: DUP4 00001835: ADD 00001836: DUP2 00001837: ADD 00001838: MLOAD 00001839: DUP5 0000183a: DUP4 0000183b: ADD 0000183c: DUP3 0000183d: ADD 0000183e: MSTORE 0000183f: ADD 00001840: PUSH2 0x17f1 00001843: JUMP 00001844: JUMPDEST 00001845: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000185a: PUSH1 0x00 0000185c: SLOAD 0000185d: AND 0000185e: CALLER 0000185f: SUB 00001860: PUSH2 0x1865 00001863: JUMPI 00001864: JUMP 00001865: JUMPDEST 00001866: PUSH1 0x64 00001868: PUSH1 0x40 0000186a: MLOAD 0000186b: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 0000188c: DUP2 0000188d: MSTORE 0000188e: PUSH1 0x20 00001890: PUSH1 0x04 00001892: DUP3 00001893: ADD 00001894: MSTORE 00001895: PUSH1 0x20 00001897: PUSH1 0x24 00001899: DUP3 0000189a: ADD 0000189b: MSTORE 0000189c: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572 000018bd: PUSH1 0x44 000018bf: DUP3 000018c0: ADD 000018c1: MSTORE 000018c2: REVERT 000018c3: JUMPDEST 000018c4: PUSH8 0xffffffffffffffff 000018cd: DUP2 000018ce: GT 000018cf: PUSH2 0x1297 000018d2: JUMPI 000018d3: PUSH1 0x40 000018d5: MSTORE 000018d6: JUMP 000018d7: JUMPDEST 000018d8: PUSH1 0x60 000018da: DUP2 000018db: ADD 000018dc: SWAP1 000018dd: DUP2 000018de: LT 000018df: PUSH8 0xffffffffffffffff 000018e8: DUP3 000018e9: GT 000018ea: OR 000018eb: PUSH2 0x1297 000018ee: JUMPI 000018ef: PUSH1 0x40 000018f1: MSTORE 000018f2: JUMP 000018f3: JUMPDEST 000018f4: SWAP1 000018f5: PUSH1 0x1f 000018f7: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00001918: SWAP2 00001919: ADD 0000191a: AND 0000191b: DUP2 0000191c: ADD 0000191d: SWAP1 0000191e: DUP2 0000191f: LT 00001920: PUSH8 0xffffffffffffffff 00001929: DUP3 0000192a: GT 0000192b: OR 0000192c: PUSH2 0x1297 0000192f: JUMPI 00001930: PUSH1 0x40 00001932: MSTORE 00001933: JUMP 00001934: JUMPDEST 00001935: PUSH8 0xffffffffffffffff 0000193e: DUP2 0000193f: GT 00001940: PUSH2 0x1297 00001943: JUMPI 00001944: PUSH1 0x05 00001946: SHL 00001947: PUSH1 0x20 00001949: ADD 0000194a: SWAP1 0000194b: JUMP 0000194c: JUMPDEST 0000194d: PUSH8 0xffffffffffffffff 00001956: DUP2 00001957: GT 00001958: PUSH2 0x1297 0000195b: JUMPI 0000195c: PUSH1 0x1f 0000195e: ADD 0000195f: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00001980: AND 00001981: PUSH1 0x20 00001983: ADD 00001984: SWAP1 00001985: JUMP 00001986: JUMPDEST 00001987: SWAP3 00001988: SWAP2 00001989: SWAP3 0000198a: PUSH2 0x1992 0000198d: DUP3 0000198e: PUSH2 0x194c 00001991: JUMP 00001992: JUMPDEST 00001993: SWAP2 00001994: PUSH2 0x19a0 00001997: PUSH1 0x40 00001999: MLOAD 0000199a: SWAP4 0000199b: DUP5 0000199c: PUSH2 0x18f3 0000199f: JUMP 000019a0: JUMPDEST 000019a1: DUP3 000019a2: SWAP5 000019a3: DUP2 000019a4: DUP5 000019a5: MSTORE 000019a6: DUP2 000019a7: DUP4 000019a8: ADD 000019a9: GT 000019aa: PUSH2 0x0204 000019ad: JUMPI 000019ae: DUP3 000019af: DUP2 000019b0: PUSH1 0x20 000019b2: SWAP4 000019b3: DUP5 000019b4: PUSH1 0x00 000019b6: SWAP7 000019b7: ADD 000019b8: CALLDATACOPY 000019b9: ADD 000019ba: ADD 000019bb: MSTORE 000019bc: JUMP 000019bd: JUMPDEST 000019be: DUP1 000019bf: MLOAD 000019c0: DUP3 000019c1: LT 000019c2: ISZERO 000019c3: PUSH2 0x19d1 000019c6: JUMPI 000019c7: PUSH1 0x20 000019c9: SWAP2 000019ca: PUSH1 0x05 000019cc: SHL 000019cd: ADD 000019ce: ADD 000019cf: SWAP1 000019d0: JUMP 000019d1: JUMPDEST 000019d2: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 000019f3: PUSH1 0x00 000019f5: MSTORE 000019f6: PUSH1 0x32 000019f8: PUSH1 0x04 000019fa: MSTORE 000019fb: PUSH1 0x24 000019fd: PUSH1 0x00 000019ff: REVERT 00001a00: JUMPDEST 00001a01: RETURNDATASIZE 00001a02: ISZERO 00001a03: PUSH2 0x1a2b 00001a06: JUMPI 00001a07: RETURNDATASIZE 00001a08: SWAP1 00001a09: PUSH2 0x1a11 00001a0c: DUP3 00001a0d: PUSH2 0x194c 00001a10: JUMP 00001a11: JUMPDEST 00001a12: SWAP2 00001a13: PUSH2 0x1a1f 00001a16: PUSH1 0x40 00001a18: MLOAD 00001a19: SWAP4 00001a1a: DUP5 00001a1b: PUSH2 0x18f3 00001a1e: JUMP 00001a1f: JUMPDEST 00001a20: DUP3 00001a21: MSTORE 00001a22: RETURNDATASIZE 00001a23: PUSH1 0x00 00001a25: PUSH1 0x20 00001a27: DUP5 00001a28: ADD 00001a29: RETURNDATACOPY 00001a2a: JUMP 00001a2b: JUMPDEST 00001a2c: PUSH1 0x60 00001a2e: SWAP1 00001a2f: JUMP 00001a30: JUMPDEST 00001a31: SWAP1 00001a32: SWAP2 00001a33: SWAP1 00001a34: ISZERO 00001a35: PUSH2 0x1a3c 00001a38: JUMPI 00001a39: POP 00001a3a: SWAP1 00001a3b: JUMP 00001a3c: JUMPDEST 00001a3d: DUP2 00001a3e: MLOAD 00001a3f: ISZERO 00001a40: PUSH2 0x1a4c 00001a43: JUMPI 00001a44: POP 00001a45: DUP1 00001a46: MLOAD 00001a47: SWAP1 00001a48: PUSH1 0x20 00001a4a: ADD 00001a4b: REVERT 00001a4c: JUMPDEST 00001a4d: PUSH2 0x1a8a 00001a50: SWAP1 00001a51: PUSH1 0x40 00001a53: MLOAD 00001a54: SWAP2 00001a55: DUP3 00001a56: SWAP2 00001a57: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001a78: DUP4 00001a79: MSTORE 00001a7a: PUSH1 0x20 00001a7c: PUSH1 0x04 00001a7e: DUP5 00001a7f: ADD 00001a80: MSTORE 00001a81: PUSH1 0x24 00001a83: DUP4 00001a84: ADD 00001a85: SWAP1 00001a86: PUSH2 0x17e6 00001a89: JUMP 00001a8a: JUMPDEST 00001a8b: SUB 00001a8c: SWAP1 00001a8d: REVERT 00001a8e: JUMPDEST 00001a8f: ISZERO 00001a90: PUSH2 0x1a95 00001a93: JUMPI 00001a94: JUMP 00001a95: JUMPDEST 00001a96: PUSH1 0x64 00001a98: PUSH1 0x40 00001a9a: MLOAD 00001a9b: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001abc: DUP2 00001abd: MSTORE 00001abe: PUSH1 0x20 00001ac0: PUSH1 0x04 00001ac2: DUP3 00001ac3: ADD 00001ac4: MSTORE 00001ac5: PUSH1 0x19 00001ac7: PUSH1 0x24 00001ac9: DUP3 00001aca: ADD 00001acb: MSTORE 00001acc: PUSH32 0x4272696467653a207575696420616c7265616479207573656400000000000000 00001aed: PUSH1 0x44 00001aef: DUP3 00001af0: ADD 00001af1: MSTORE 00001af2: REVERT 00001af3: JUMPDEST 00001af4: SWAP1 00001af5: DUP2 00001af6: PUSH1 0x20 00001af8: SWAP2 00001af9: SUB 00001afa: SLT 00001afb: PUSH2 0x0204 00001afe: JUMPI 00001aff: MLOAD 00001b00: DUP1 00001b01: ISZERO 00001b02: ISZERO 00001b03: DUP2 00001b04: SUB 00001b05: PUSH2 0x0204 00001b08: JUMPI 00001b09: SWAP1 00001b0a: JUMP 00001b0b: JUMPDEST 00001b0c: SWAP4 00001b0d: DUP1 00001b0e: SWAP3 00001b0f: SWAP2 00001b10: PUSH1 0x60 00001b12: DUP7 00001b13: ADD 00001b14: SWAP1 00001b15: DUP7 00001b16: MSTORE 00001b17: PUSH1 0x20 00001b19: SWAP3 00001b1a: DUP4 00001b1b: DUP8 00001b1c: ADD 00001b1d: MSTORE 00001b1e: PUSH1 0x60 00001b20: PUSH1 0x40 00001b22: DUP8 00001b23: ADD 00001b24: MSTORE 00001b25: MSTORE 00001b26: PUSH1 0x80 00001b28: DUP5 00001b29: ADD 00001b2a: SWAP4 00001b2b: PUSH1 0x80 00001b2d: DUP4 00001b2e: PUSH1 0x05 00001b30: SHL 00001b31: DUP3 00001b32: ADD 00001b33: ADD 00001b34: SWAP5 00001b35: DUP5 00001b36: PUSH1 0x00 00001b38: SWAP3 00001b39: JUMPDEST 00001b3a: DUP6 00001b3b: DUP5 00001b3c: LT 00001b3d: PUSH2 0x1b4a 00001b40: JUMPI 00001b41: POP 00001b42: POP 00001b43: POP 00001b44: POP 00001b45: POP 00001b46: POP 00001b47: POP 00001b48: SWAP1 00001b49: JUMP 00001b4a: JUMPDEST 00001b4b: SWAP1 00001b4c: SWAP2 00001b4d: SWAP3 00001b4e: SWAP4 00001b4f: SWAP5 00001b50: SWAP6 00001b51: SWAP7 00001b52: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80 00001b73: DUP3 00001b74: DUP3 00001b75: SUB 00001b76: ADD 00001b77: DUP5 00001b78: MSTORE 00001b79: DUP8 00001b7a: CALLDATALOAD 00001b7b: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1 00001b9c: DUP5 00001b9d: CALLDATASIZE 00001b9e: SUB 00001b9f: ADD 00001ba0: DUP2 00001ba1: SLT 00001ba2: ISZERO 00001ba3: PUSH2 0x0204 00001ba6: JUMPI 00001ba7: DUP4 00001ba8: ADD 00001ba9: DUP7 00001baa: DUP2 00001bab: ADD 00001bac: SWAP2 00001bad: SWAP1 00001bae: CALLDATALOAD 00001baf: PUSH8 0xffffffffffffffff 00001bb8: DUP2 00001bb9: GT 00001bba: PUSH2 0x0204 00001bbd: JUMPI 00001bbe: DUP1 00001bbf: CALLDATASIZE 00001bc0: SUB 00001bc1: DUP4 00001bc2: SGT 00001bc3: PUSH2 0x0204 00001bc6: JUMPI 00001bc7: DUP8 00001bc8: DUP3 00001bc9: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00001bea: PUSH1 0x1f 00001bec: DUP5 00001bed: DUP1 00001bee: PUSH1 0x01 00001bf0: SWAP9 00001bf1: DUP7 00001bf2: SWAP9 00001bf3: SWAP8 00001bf4: DUP8 00001bf5: SWAP9 00001bf6: MSTORE 00001bf7: DUP7 00001bf8: DUP7 00001bf9: ADD 00001bfa: CALLDATACOPY 00001bfb: PUSH1 0x00 00001bfd: DUP6 00001bfe: DUP3 00001bff: DUP7 00001c00: ADD 00001c01: ADD 00001c02: MSTORE 00001c03: ADD 00001c04: AND 00001c05: ADD 00001c06: ADD 00001c07: SWAP10 00001c08: ADD 00001c09: SWAP5 00001c0a: ADD 00001c0b: SWAP5 00001c0c: ADD 00001c0d: SWAP3 00001c0e: SWAP6 00001c0f: SWAP5 00001c10: SWAP4 00001c11: SWAP2 00001c12: SWAP1 00001c13: PUSH2 0x1b39 00001c16: JUMP 00001c17: JUMPDEST 00001c18: SWAP2 00001c19: SWAP1 00001c1a: DUP3 00001c1b: ADD 00001c1c: DUP1 00001c1d: SWAP3 00001c1e: GT 00001c1f: PUSH2 0x0572 00001c22: JUMPI 00001c23: JUMP 00001c24: JUMPDEST 00001c25: DUP2 00001c26: SELFBALANCE 00001c27: LT 00001c28: PUSH2 0x1cde 00001c2b: JUMPI 00001c2c: PUSH1 0x00 00001c2e: DUP1 00001c2f: DUP1 00001c30: SWAP4 00001c31: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001c46: DUP3 00001c47: SWAP5 00001c48: AND 00001c49: GAS 00001c4a: CALL 00001c4b: PUSH2 0x1c52 00001c4e: PUSH2 0x1a00 00001c51: JUMP 00001c52: JUMPDEST 00001c53: POP 00001c54: ISZERO 00001c55: PUSH2 0x1c5a 00001c58: JUMPI 00001c59: JUMP 00001c5a: JUMPDEST 00001c5b: PUSH1 0x84 00001c5d: PUSH1 0x40 00001c5f: MLOAD 00001c60: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001c81: DUP2 00001c82: MSTORE 00001c83: PUSH1 0x20 00001c85: PUSH1 0x04 00001c87: DUP3 00001c88: ADD 00001c89: MSTORE 00001c8a: PUSH1 0x3a 00001c8c: PUSH1 0x24 00001c8e: DUP3 00001c8f: ADD 00001c90: MSTORE 00001c91: PUSH32 0x416464726573733a20756e61626c6520746f2073656e642076616c75652c2072 00001cb2: PUSH1 0x44 00001cb4: DUP3 00001cb5: ADD 00001cb6: MSTORE 00001cb7: PUSH32 0x6563697069656e74206d61792068617665207265766572746564000000000000 00001cd8: PUSH1 0x64 00001cda: DUP3 00001cdb: ADD 00001cdc: MSTORE 00001cdd: REVERT 00001cde: JUMPDEST 00001cdf: PUSH1 0x64 00001ce1: PUSH1 0x40 00001ce3: MLOAD 00001ce4: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001d05: DUP2 00001d06: MSTORE 00001d07: PUSH1 0x20 00001d09: PUSH1 0x04 00001d0b: DUP3 00001d0c: ADD 00001d0d: MSTORE 00001d0e: PUSH1 0x1d 00001d10: PUSH1 0x24 00001d12: DUP3 00001d13: ADD 00001d14: MSTORE 00001d15: PUSH32 0x416464726573733a20696e73756666696369656e742062616c616e6365000000 00001d36: PUSH1 0x44 00001d38: DUP3 00001d39: ADD 00001d3a: MSTORE 00001d3b: REVERT 00001d3c: JUMPDEST 00001d3d: PUSH1 0x40 00001d3f: MLOAD 00001d40: SWAP2 00001d41: SWAP3 00001d42: PUSH2 0x1d4a 00001d45: DUP4 00001d46: PUSH2 0x18d7 00001d49: JUMP 00001d4a: JUMPDEST 00001d4b: PUSH1 0x29 00001d4d: DUP4 00001d4e: MSTORE 00001d4f: PUSH32 0x416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c 00001d70: PUSH1 0x20 00001d72: DUP5 00001d73: ADD 00001d74: MSTORE 00001d75: PUSH32 0x7565206661696c65640000000000000000000000000000000000000000000000 00001d96: PUSH1 0x40 00001d98: DUP5 00001d99: ADD 00001d9a: MSTORE 00001d9b: DUP1 00001d9c: SELFBALANCE 00001d9d: LT 00001d9e: PUSH2 0x1e23 00001da1: JUMPI 00001da2: DUP2 00001da3: EXTCODESIZE 00001da4: ISZERO 00001da5: PUSH2 0x1dc5 00001da8: JUMPI 00001da9: DUP4 00001daa: PUSH1 0x00 00001dac: SWAP3 00001dad: DUP4 00001dae: SWAP3 00001daf: PUSH1 0x20 00001db1: PUSH2 0x1dc2 00001db4: SWAP8 00001db5: MLOAD 00001db6: SWAP4 00001db7: ADD 00001db8: SWAP2 00001db9: GAS 00001dba: CALL 00001dbb: PUSH2 0x0527 00001dbe: PUSH2 0x1a00 00001dc1: JUMP 00001dc2: JUMPDEST 00001dc3: SWAP1 00001dc4: JUMP 00001dc5: JUMPDEST 00001dc6: PUSH1 0x64 00001dc8: PUSH1 0x40 00001dca: MLOAD 00001dcb: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001dec: DUP2 00001ded: MSTORE 00001dee: PUSH1 0x20 00001df0: PUSH1 0x04 00001df2: DUP3 00001df3: ADD 00001df4: MSTORE 00001df5: PUSH1 0x1d 00001df7: PUSH1 0x24 00001df9: DUP3 00001dfa: ADD 00001dfb: MSTORE 00001dfc: PUSH32 0x416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000 00001e1d: PUSH1 0x44 00001e1f: DUP3 00001e20: ADD 00001e21: MSTORE 00001e22: REVERT 00001e23: JUMPDEST 00001e24: PUSH1 0x84 00001e26: PUSH1 0x40 00001e28: MLOAD 00001e29: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001e4a: DUP2 00001e4b: MSTORE 00001e4c: PUSH1 0x20 00001e4e: PUSH1 0x04 00001e50: DUP3 00001e51: ADD 00001e52: MSTORE 00001e53: PUSH1 0x26 00001e55: PUSH1 0x24 00001e57: DUP3 00001e58: ADD 00001e59: MSTORE 00001e5a: PUSH32 0x416464726573733a20696e73756666696369656e742062616c616e636520666f 00001e7b: PUSH1 0x44 00001e7d: DUP3 00001e7e: ADD 00001e7f: MSTORE 00001e80: PUSH32 0x722063616c6c0000000000000000000000000000000000000000000000000000 00001ea1: PUSH1 0x64 00001ea3: DUP3 00001ea4: ADD 00001ea5: MSTORE 00001ea6: REVERT 00001ea7: JUMPDEST 00001ea8: SWAP3 00001ea9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001ebe: DUP1 00001ebf: SWAP5 00001ec0: AND 00001ec1: SWAP4 00001ec2: PUSH1 0x40 00001ec4: SWAP5 00001ec5: DUP6 00001ec6: MLOAD 00001ec7: SWAP5 00001ec8: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000 00001ee9: DUP1 00001eea: DUP8 00001eeb: MSTORE 00001eec: DUP4 00001eed: PUSH1 0x00 00001eef: SWAP7 00001ef0: AND 00001ef1: SWAP1 00001ef2: PUSH1 0x04 00001ef4: SWAP6 00001ef5: DUP3 00001ef6: DUP8 00001ef7: DUP11 00001ef8: ADD 00001ef9: MSTORE 00001efa: PUSH1 0x20 00001efc: SWAP4 00001efd: PUSH1 0x24 00001eff: SWAP10 00001f00: DUP6 00001f01: DUP2 00001f02: DUP13 00001f03: DUP2 00001f04: DUP11 00001f05: GAS 00001f06: STATICCALL 00001f07: SWAP1 00001f08: DUP2 00001f09: ISZERO 00001f0a: PUSH2 0x212b 00001f0d: JUMPI 00001f0e: SWAP1 00001f0f: DUP4 00001f10: SWAP2 00001f11: DUP12 00001f12: SWAP2 00001f13: PUSH2 0x21b6 00001f16: JUMPI 00001f17: JUMPDEST 00001f18: POP 00001f19: LT 00001f1a: PUSH2 0x2135 00001f1d: JUMPI 00001f1e: DUP11 00001f1f: MLOAD 00001f20: SWAP7 00001f21: DUP4 00001f22: DUP9 00001f23: MSTORE 00001f24: DUP2 00001f25: AND 00001f26: SWAP4 00001f27: DUP5 00001f28: DUP10 00001f29: DUP10 00001f2a: ADD 00001f2b: MSTORE 00001f2c: DUP6 00001f2d: DUP9 00001f2e: DUP13 00001f2f: DUP2 00001f30: DUP11 00001f31: GAS 00001f32: STATICCALL 00001f33: SWAP8 00001f34: DUP9 00001f35: ISZERO 00001f36: PUSH2 0x212b 00001f39: JUMPI 00001f3a: DUP11 00001f3b: SWAP9 00001f3c: PUSH2 0x20f8 00001f3f: JUMPI 00001f40: JUMPDEST 00001f41: POP 00001f42: ADDRESS 00001f43: DUP2 00001f44: SUB 00001f45: PUSH2 0x2081 00001f48: JUMPI 00001f49: POP 00001f4a: DUP6 00001f4b: EXTCODESIZE 00001f4c: ISZERO 00001f4d: PUSH2 0x207d 00001f50: JUMPI 00001f51: DUP11 00001f52: MLOAD 00001f53: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000 00001f74: DUP2 00001f75: MSTORE 00001f76: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001f8b: SWAP1 00001f8c: SWAP2 00001f8d: AND 00001f8e: DUP9 00001f8f: DUP3 00001f90: ADD 00001f91: SWAP1 00001f92: DUP2 00001f93: MSTORE 00001f94: PUSH1 0x20 00001f96: DUP2 00001f97: ADD 00001f98: SWAP3 00001f99: SWAP1 00001f9a: SWAP3 00001f9b: MSTORE 00001f9c: SWAP1 00001f9d: DUP9 00001f9e: SWAP1 00001f9f: DUP3 00001fa0: SWAP1 00001fa1: DUP2 00001fa2: SWAP1 00001fa3: PUSH1 0x40 00001fa5: ADD 00001fa6: SUB 00001fa7: DUP2 00001fa8: DUP4 00001fa9: DUP10 00001faa: GAS 00001fab: CALL 00001fac: DUP1 00001fad: ISZERO 00001fae: PUSH2 0x2073 00001fb1: JUMPI 00001fb2: SWAP2 00001fb3: DUP9 00001fb4: DUP11 00001fb5: SWAP3 00001fb6: DUP7 00001fb7: SWAP6 00001fb8: SWAP5 00001fb9: PUSH2 0x2051 00001fbc: JUMPI 00001fbd: JUMPDEST 00001fbe: POP 00001fbf: POP 00001fc0: JUMPDEST 00001fc1: DUP11 00001fc2: MLOAD 00001fc3: SWAP6 00001fc4: DUP7 00001fc5: SWAP4 00001fc6: DUP5 00001fc7: SWAP3 00001fc8: DUP4 00001fc9: MSTORE 00001fca: DUP10 00001fcb: DUP4 00001fcc: ADD 00001fcd: MSTORE 00001fce: GAS 00001fcf: STATICCALL 00001fd0: SWAP7 00001fd1: DUP8 00001fd2: ISZERO 00001fd3: PUSH2 0x2048 00001fd6: JUMPI 00001fd7: POP 00001fd8: DUP5 00001fd9: SWAP7 00001fda: PUSH2 0x2018 00001fdd: JUMPI 00001fde: JUMPDEST 00001fdf: POP 00001fe0: POP 00001fe1: DUP5 00001fe2: SUB 00001fe3: SWAP4 00001fe4: DUP5 00001fe5: GT 00001fe6: PUSH2 0x1fef 00001fe9: JUMPI 00001fea: POP 00001feb: POP 00001fec: POP 00001fed: SWAP1 00001fee: JUMP 00001fef: JUMPDEST 00001ff0: PUSH1 0x11 00001ff2: SWAP1 00001ff3: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00002014: DUP4 00002015: MSTORE 00002016: MSTORE 00002017: REVERT 00002018: JUMPDEST 00002019: SWAP1 0000201a: DUP1 0000201b: SWAP3 0000201c: SWAP7 0000201d: POP 0000201e: DUP2 0000201f: RETURNDATASIZE 00002020: DUP4 00002021: GT 00002022: PUSH2 0x2041 00002025: JUMPI 00002026: JUMPDEST 00002027: PUSH2 0x2030 0000202a: DUP2 0000202b: DUP4 0000202c: PUSH2 0x18f3 0000202f: JUMP 00002030: JUMPDEST 00002031: DUP2 00002032: ADD 00002033: SUB 00002034: SLT 00002035: PUSH2 0x0204 00002038: JUMPI 00002039: MLOAD 0000203a: SWAP4 0000203b: CODESIZE 0000203c: DUP1 0000203d: PUSH2 0x1fde 00002040: JUMP 00002041: JUMPDEST 00002042: POP 00002043: RETURNDATASIZE 00002044: PUSH2 0x2026 00002047: JUMP 00002048: JUMPDEST 00002049: MLOAD 0000204a: RETURNDATASIZE 0000204b: DUP7 0000204c: DUP3 0000204d: RETURNDATACOPY 0000204e: RETURNDATASIZE 0000204f: SWAP1 00002050: REVERT 00002051: JUMPDEST 00002052: SWAP1 00002053: SWAP3 00002054: POP 00002055: PUSH2 0x2060 00002058: SWAP2 00002059: SWAP4 0000205a: SWAP5 0000205b: POP 0000205c: PUSH2 0x18c3 0000205f: JUMP 00002060: JUMPDEST 00002061: PUSH2 0x206f 00002064: JUMPI 00002065: SWAP1 00002066: DUP8 00002067: DUP4 00002068: SWAP3 00002069: DUP9 0000206a: CODESIZE 0000206b: PUSH2 0x1fbd 0000206e: JUMP 0000206f: JUMPDEST 00002070: DUP7 00002071: DUP1 00002072: REVERT 00002073: JUMPDEST 00002074: DUP11 00002075: MLOAD 00002076: RETURNDATASIZE 00002077: DUP11 00002078: DUP3 00002079: RETURNDATACOPY 0000207a: RETURNDATASIZE 0000207b: SWAP1 0000207c: REVERT 0000207d: JUMPDEST 0000207e: DUP9 0000207f: DUP1 00002080: REVERT 00002081: JUMPDEST 00002082: SWAP2 00002083: SWAP1 00002084: POP 00002085: DUP6 00002086: EXTCODESIZE 00002087: ISZERO 00002088: PUSH2 0x207d 0000208b: JUMPI 0000208c: DUP11 0000208d: MLOAD 0000208e: SWAP2 0000208f: PUSH32 0x23b872dd00000000000000000000000000000000000000000000000000000000 000020b0: DUP4 000020b1: MSTORE 000020b2: DUP9 000020b3: DUP4 000020b4: ADD 000020b5: MSTORE 000020b6: DUP4 000020b7: DUP11 000020b8: DUP4 000020b9: ADD 000020ba: MSTORE 000020bb: PUSH1 0x44 000020bd: DUP3 000020be: ADD 000020bf: MSTORE 000020c0: DUP8 000020c1: DUP2 000020c2: PUSH1 0x64 000020c4: DUP2 000020c5: DUP4 000020c6: DUP10 000020c7: GAS 000020c8: CALL 000020c9: DUP1 000020ca: ISZERO 000020cb: PUSH2 0x2073 000020ce: JUMPI 000020cf: SWAP1 000020d0: DUP10 000020d1: SWAP3 000020d2: SWAP2 000020d3: PUSH2 0x20e1 000020d6: JUMPI 000020d7: JUMPDEST 000020d8: POP 000020d9: SWAP1 000020da: DUP4 000020db: SWAP3 000020dc: SWAP2 000020dd: PUSH2 0x1fc0 000020e0: JUMP 000020e1: JUMPDEST 000020e2: SWAP8 000020e3: PUSH2 0x20ef 000020e6: DUP6 000020e7: SWAP5 000020e8: SWAP4 000020e9: SWAP3 000020ea: SWAP10 000020eb: PUSH2 0x18c3 000020ee: JUMP 000020ef: JUMPDEST 000020f0: SWAP8 000020f1: SWAP1 000020f2: SWAP2 000020f3: SWAP3 000020f4: PUSH2 0x20d7 000020f7: JUMP 000020f8: JUMPDEST 000020f9: SWAP1 000020fa: SWAP8 000020fb: POP 000020fc: DUP6 000020fd: DUP2 000020fe: DUP2 000020ff: RETURNDATASIZE 00002100: DUP4 00002101: GT 00002102: PUSH2 0x2124 00002105: JUMPI 00002106: JUMPDEST 00002107: PUSH2 0x2110 0000210a: DUP2 0000210b: DUP4 0000210c: PUSH2 0x18f3 0000210f: JUMP 00002110: JUMPDEST 00002111: DUP2 00002112: ADD 00002113: SUB 00002114: SLT 00002115: PUSH2 0x2120 00002118: JUMPI 00002119: MLOAD 0000211a: SWAP7 0000211b: CODESIZE 0000211c: PUSH2 0x1f40 0000211f: JUMP 00002120: JUMPDEST 00002121: DUP10 00002122: DUP1 00002123: REVERT 00002124: JUMPDEST 00002125: POP 00002126: RETURNDATASIZE 00002127: PUSH2 0x2106 0000212a: JUMP 0000212b: JUMPDEST 0000212c: DUP13 0000212d: MLOAD 0000212e: RETURNDATASIZE 0000212f: DUP13 00002130: DUP3 00002131: RETURNDATACOPY 00002132: RETURNDATASIZE 00002133: SWAP1 00002134: REVERT 00002135: JUMPDEST 00002136: PUSH1 0x84 00002138: DUP9 00002139: PUSH1 0x28 0000213b: DUP13 0000213c: DUP9 0000213d: DUP16 0000213e: MLOAD 0000213f: SWAP4 00002140: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00002161: DUP6 00002162: MSTORE 00002163: DUP5 00002164: ADD 00002165: MSTORE 00002166: DUP3 00002167: ADD 00002168: MSTORE 00002169: PUSH32 0x53616665546f6b656e3a20696e73756666696369656e742062616c616e636520 0000218a: PUSH1 0x44 0000218c: DUP3 0000218d: ADD 0000218e: MSTORE 0000218f: PUSH32 0x666f72206d6f7665000000000000000000000000000000000000000000000000 000021b0: PUSH1 0x64 000021b2: DUP3 000021b3: ADD 000021b4: MSTORE 000021b5: REVERT 000021b6: JUMPDEST 000021b7: DUP1 000021b8: SWAP3 000021b9: POP 000021ba: DUP8 000021bb: DUP1 000021bc: SWAP3 000021bd: POP 000021be: RETURNDATASIZE 000021bf: DUP4 000021c0: GT 000021c1: PUSH2 0x21e0 000021c4: JUMPI 000021c5: JUMPDEST 000021c6: PUSH2 0x21cf 000021c9: DUP2 000021ca: DUP4 000021cb: PUSH2 0x18f3 000021ce: JUMP 000021cf: JUMPDEST 000021d0: DUP2 000021d1: ADD 000021d2: SUB 000021d3: SLT 000021d4: PUSH2 0x2120 000021d7: JUMPI 000021d8: DUP3 000021d9: SWAP1 000021da: MLOAD 000021db: CODESIZE 000021dc: PUSH2 0x1f17 000021df: JUMP 000021e0: JUMPDEST 000021e1: POP 000021e2: RETURNDATASIZE 000021e3: PUSH2 0x21c5 000021e6: JUMP 000021e7: INVALID 000021e8: LOG2 000021e9: PUSH5 0x6970667358 000021ef: UNKNOWN(0x22) 000021f0: SLT 000021f1: KECCAK256 000021f2: JUMPDEST 000021f3: UNKNOWN(0xE6) 000021f4: CALLDATALOAD 000021f5: UNKNOWN(0xB0) 000021f6: AND 000021f7: SUB 000021f8: LOG2 000021f9: ISZERO 000021fa: SMOD 000021fb: DUP5 000021fc: SUB 000021fd: UNKNOWN(0xEF) 000021fe: PUSH18 0x329b0b36e7ade37f78096f0f65d071d4d829 00002211: CODESIZE 00002212: PUSH5 0x736f6c6343 00002218: STOP 00002219: ADDMOD 0000221a: GT 0000221b: STOP 0000221c: CALLER
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | auth | detector | Authorization based on tx.origin | 70 | no | — |
viewvalidation_json{
"reason": "missing sink mapping",
"status": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x01cce4be",
"selector": "0x01cce4be",
"calldata_variants": [
"0x01cce4be",
"0x01cce4be0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x043fa11d",
"selector": "0x043fa11d",
"calldata_variants": [
"0x043fa11d",
"0x043fa11d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x24057e10",
"selector": "0x24057e10",
"calldata_variants": [
"0x24057e10",
"0x24057e100000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2b7ac3f3",
"selector": "0x2b7ac3f3",
"calldata_variants": [
"0x2b7ac3f3",
"0x2b7ac3f30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x30c2f42d",
"selector": "0x30c2f42d",
"calldata_variants": [
"0x30c2f42d",
"0x30c2f42d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3644e515",
"selector": "0x3644e515",
"calldata_variants": [
"0x3644e515",
"0x3644e5150000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x6b8a3fa2",
"selector": "0x6b8a3fa2",
"calldata_variants": [
"0x6b8a3fa2",
"0x6b8a3fa20000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x715018a6",
"selector": "0x715018a6",
"calldata_variants": [
"0x715018a6",
"0x715018a60000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"guards_detected": [
{
"pc": 4863,
"type": "tx_origin_used"
}
]
}
|
| high | upgradeability | detector | Untrusted DELEGATECALL target reachable | 55 | no | no |
viewtrace_id: 0xe8011ffcc0c71540cb7d8eaf9998e42d346d1dbcbeb01895bcd0766684a85b86
validation_json{
"sink": "DELEGATECALL",
"errors": 0,
"status": "unknown",
"attempts": 180,
"trace_id": "0xe8011ffcc0c71540cb7d8eaf9998e42d346d1dbcbeb01895bcd0766684a85b86",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": null,
"matched_probe": null,
"target_varies": null,
"classification": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x01cce4be",
"selector": "0x01cce4be",
"calldata_variants": [
"0x01cce4be",
"0x01cce4be0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x043fa11d",
"selector": "0x043fa11d",
"calldata_variants": [
"0x043fa11d",
"0x043fa11d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x24057e10",
"selector": "0x24057e10",
"calldata_variants": [
"0x24057e10",
"0x24057e100000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2b7ac3f3",
"selector": "0x2b7ac3f3",
"calldata_variants": [
"0x2b7ac3f3",
"0x2b7ac3f30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x30c2f42d",
"selector": "0x30c2f42d",
"calldata_variants": [
"0x30c2f42d",
"0x30c2f42d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3644e515",
"selector": "0x3644e515",
"calldata_variants": [
"0x3644e515",
"0x3644e5150000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x6b8a3fa2",
"selector": "0x6b8a3fa2",
"calldata_variants": [
"0x6b8a3fa2",
"0x6b8a3fa20000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x715018a6",
"selector": "0x715018a6",
"calldata_variants": [
"0x715018a6",
"0x715018a60000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1311,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
}
],
"guards_detected": [
{
"pc": 4863,
"type": "tx_origin_used"
}
],
"delegatecall_count": 1,
"untrusted_delegatecall_count": 1
}
|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0x5b03d21b83a62af43c00c99659e2895438ee1f755420d95413bccf2f9c1204a5
call_targets:
0xa0bb1ebf52a9307f30509d3b385754c33b7f2e26
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x5b03d21b83a62af43c00c99659e2895438ee1f755420d95413bccf2f9c1204a5",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xa0bb1ebf52a9307f30509d3b385754c33b7f2e26"
],
"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": "0x01cce4be",
"selector": "0x01cce4be",
"calldata_variants": [
"0x01cce4be",
"0x01cce4be0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x043fa11d",
"selector": "0x043fa11d",
"calldata_variants": [
"0x043fa11d",
"0x043fa11d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x24057e10",
"selector": "0x24057e10",
"calldata_variants": [
"0x24057e10",
"0x24057e100000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2b7ac3f3",
"selector": "0x2b7ac3f3",
"calldata_variants": [
"0x2b7ac3f3",
"0x2b7ac3f30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x30c2f42d",
"selector": "0x30c2f42d",
"calldata_variants": [
"0x30c2f42d",
"0x30c2f42d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3644e515",
"selector": "0x3644e515",
"calldata_variants": [
"0x3644e515",
"0x3644e5150000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x6b8a3fa2",
"selector": "0x6b8a3fa2",
"calldata_variants": [
"0x6b8a3fa2",
"0x6b8a3fa20000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x715018a6",
"selector": "0x715018a6",
"calldata_variants": [
"0x715018a6",
"0x715018a60000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 3860,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 4124,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 7242,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 6,
"guards_detected": [
{
"pc": 4863,
"type": "tx_origin_used"
}
],
"untrusted_call_count": 6
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0x5b03d21b83a62af43c00c99659e2895438ee1f755420d95413bccf2f9c1204a5
call_targets:
0xa0bb1ebf52a9307f30509d3b385754c33b7f2e26
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x5b03d21b83a62af43c00c99659e2895438ee1f755420d95413bccf2f9c1204a5",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xa0bb1ebf52a9307f30509d3b385754c33b7f2e26"
],
"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": "0x01cce4be",
"selector": "0x01cce4be",
"calldata_variants": [
"0x01cce4be",
"0x01cce4be0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x043fa11d",
"selector": "0x043fa11d",
"calldata_variants": [
"0x043fa11d",
"0x043fa11d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x24057e10",
"selector": "0x24057e10",
"calldata_variants": [
"0x24057e10",
"0x24057e100000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2b7ac3f3",
"selector": "0x2b7ac3f3",
"calldata_variants": [
"0x2b7ac3f3",
"0x2b7ac3f30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x30c2f42d",
"selector": "0x30c2f42d",
"calldata_variants": [
"0x30c2f42d",
"0x30c2f42d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3644e515",
"selector": "0x3644e515",
"calldata_variants": [
"0x3644e515",
"0x3644e5150000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x6b8a3fa2",
"selector": "0x6b8a3fa2",
"calldata_variants": [
"0x6b8a3fa2",
"0x6b8a3fa20000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x715018a6",
"selector": "0x715018a6",
"calldata_variants": [
"0x715018a6",
"0x715018a60000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 3860,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 4124,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 7242,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 6,
"guards_detected": [
{
"pc": 4863,
"type": "tx_origin_used"
}
]
}
|
| medium | upgradeability | cast | DELEGATECALL present | 80 | no | — |
viewevidence_json{
"notes": "delegatecall enables execution in caller context; common in proxies/upgradeable patterns",
"delegatecall_count": 1
}
|
| info | other | cast | Heavy CALL-family usage | 55 | no | — |
viewevidence_json{
"notes": "large number of CALL/CALLCODE/STATICCALL opcodes; review external call patterns",
"call_family_count": 14
}
|
| info | other | cast | Heavy EXTCODE*/BALANCE usage | 55 | no | — |
viewevidence_json{
"notes": "frequent external code or balance checks; may indicate introspection or validation logic",
"ext_balance_count": 6
}
|