75ec90a9-7b3b-496b-80fc-91ad3182cb8b
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 |
|---|---|---|---|---|
| 31406 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 77062 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 77063 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 77064 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 77065 | capability.graph | complete | 1 / 3 | 1 week ago |
| 77066 | detector.run | complete | 1 / 3 | 1 week ago |
| 77067 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:686963] OpenAI Codex v0.77.0 (research preview)
[codex:686963] --------
[codex:686963] workdir: /tmp/codex-multi-93vz2sxq
[codex:686963] model: gpt-5.2-codex
[codex:686963] provider: openai
[codex:686963] approval: never
[codex:686963] sandbox: read-only
[codex:686963] reasoning effort: xhigh
[codex:686963] reasoning summaries: auto
[codex:686963] session id: 019b8144-ea5a-7cf3-a953-6fb53244091f
[codex:686963] --------
[codex:686963] user
[codex:686963] 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:686963]
[codex:686963] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:686963]
[codex:686963] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:686963] - Gas inefficiency, code quality, or best practices
[codex:686963] - Theoretical vulnerabilities without a clear extraction path
[codex:686963] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:686963] - Issues requiring social engineering or off-chain coordination
[codex:686963]
[codex:686963] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:686963] - CALL/DELEGATECALL with controllable destination or calldata
[codex:686963] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:686963] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:686963] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:686963] - External calls before state updates (reentrancy)
[codex:686963] - SELFDESTRUCT with controllable beneficiary
[codex:686963] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:686963]
[codex:686963] For each finding, you MUST explain:
[codex:686963] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:686963] 2. The concrete sequence of transactions to extract value
[codex:686963] 3. Why you believe this is exploitable (not just suspicious)
[codex:686963]
[codex:686963] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:686963] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:686963]
[codex:686963] Output MUST be valid JSON matching the provided schema.
[codex:686963] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:686963] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:686963] mcp startup: no servers
[codex:686963]
[codex:686963] thinking
[codex:686963] **Reading BYTECODE_BUNDLE file**
[codex:686963] exec
[codex:686963] /bin/bash -lc ls in /tmp/codex-multi-93vz2sxq succeeded in 5ms:
[codex:686963] BYTECODE_BUNDLE.txt
[codex:686963] codex-output-schema.json
[codex:686963] exec
[codex:686963] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-93vz2sxq succeeded in 6ms:
[codex:686963] Runtime bytecode bundle for best-effort auditing.
[codex:686963] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:686963]
[codex:686963] FILE: runtime_bytecode.hex
[codex:686963] 0x6080604052600436106101145760003560e01c8063744d49cc116100a0578063de35f5cb11610064578063de35f5cb14610392578063dfbc6269146103bd578063e0acac7f146103e8578063ed72eb2414610413578063f358ec611461043e57610114565b8063744d49cc146102ab578063b2b22a85146102d6578063b81f853c14610301578063c7a983b51461032a578063dde4d9501461035557610114565b80634bd2d7f9116100e75780634bd2d7f9146101b257806352d1902d146101ef578063593777b51461021a5780635b69a7d814610245578063612411101461028257610114565b8063073b142214610119578063183bdeaa146101355780632333ad8b14610160578063465c4d1514610189575b600080fd5b610133600480360381019061012e9190612669565b610467565b005b34801561014157600080fd5b5061014a6105de565b6040516101579190613513565b60405180910390f35b34801561016c57600080fd5b5061018760048036038101906101829190612945565b6105f8565b005b34801561019557600080fd5b506101b060048036038101906101ab9190612814565b610a6a565b005b3480156101be57600080fd5b506101d960048036038101906101d491906127e7565b610f2c565b6040516101e691906130e5565b60405180910390f35b3480156101fb57600080fd5b50610204610f44565b60405161021191906130e5565b60405180910390f35b34801561022657600080fd5b5061022f610ffd565b60405161023c91906134f8565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190612723565b611003565b60405161027991906130ca565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a491906128ae565b611042565b005b3480156102b757600080fd5b506102c061126a565b6040516102cd91906134f8565b60405180910390f35b3480156102e257600080fd5b506102eb611270565b6040516102f891906134f8565b60405180910390f35b34801561030d57600080fd5b50610328600480360381019061032391906126c3565b611276565b005b34801561033657600080fd5b5061033f61154a565b60405161034c91906131a0565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190612723565b611570565b60405161038991906130e5565b60405180910390f35b34801561039e57600080fd5b506103a7611588565b6040516103b49190613513565b60405180910390f35b3480156103c957600080fd5b506103d26115a2565b6040516103df9190613513565b60405180910390f35b3480156103f457600080fd5b506103fd6115bc565b60405161040a91906134f8565b60405180910390f35b34801561041f57600080fd5b506104286115c2565b60405161043591906134f8565b60405180910390f35b34801561044a57600080fd5b5061046560048036038101906104609190612750565b6115cf565b005b346001541115801561047b57506002543411155b6104ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b190613418565b60405180910390fd5b600060f81b816000601581106104d3576104d2613bbc565b5b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053090613298565b60405180910390fd5b60008060029054906101000a900467ffffffffffffffff1690506001600060028282829054906101000a900467ffffffffffffffff16610579919061379c565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f01bc4bb7c8ad3891d2159f29189c74d9528104fb81b05893732d1f06621e2c4f8183346040516105d2939291906135d4565b60405180910390a15050565b600760009054906101000a900467ffffffffffffffff1681565b600660149054906101000a900467ffffffffffffffff1667ffffffffffffffff168667ffffffffffffffff161015610665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065c90613438565b60405180910390fd5b6000604090506000818787905061067c91906137da565b9050600081116106c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b8906134d8565b60405180910390fd5b6000600230600760009054906101000a900467ffffffffffffffff16888b8b6040516020016106f4959493929190612f68565b6040516020818303038152906040526040516107109190613013565b602060405180830381855afa15801561072d573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906107509190612696565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631d574bc68a8388886040518563ffffffff1660e01b81526004016107b3949392919061360b565b60206040518083038186803b1580156107cb57600080fd5b505afa1580156107df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610803919061263c565b610842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083990613378565b60405180910390fd5b8560086000600760009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000208190555060008267ffffffffffffffff8111156108a05761089f613beb565b5b6040519080825280602002602001820160405280156108ce5781602001602082028036833780820191505090505b50905060005b838110156109c95760008a8a87846108ec919061380b565b90886001866108fb9190613746565b610905919061380b565b926109129392919061370b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090506000818051906020012060001c90508084848151811061097a57610979613bbc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050505080806109c190613a5d565b9150506108d4565b5080600590805190602001906109e0929190612331565b506001600760008282829054906101000a900467ffffffffffffffff16610a07919061379c565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555089600660146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600060038190555050505050505050505050565b60045484600354610a7b9190613746565b1115610abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab3906132b8565b60405180910390fd5b6000604190506000600230600760009054906101000a900467ffffffffffffffff168a8a8a604051602001610af5959493929190612fb4565b604051602081830303815290604052604051610b119190613013565b602060405180830381855afa158015610b2e573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610b519190612696565b9050600080600084905060005b878790508211610d3057600088888885610b789190613865565b908592610b879392919061370b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090505b6005805490508463ffffffff16108015610bff5750600060018563ffffffff168c63ffffffff16901c1663ffffffff16145b15610c17578380610c0f90613aa6565b945050610bcd565b6005805490508463ffffffff161415610c305750610d30565b610c3a8682611775565b73ffffffffffffffffffffffffffffffffffffffff1660058563ffffffff1681548110610c6a57610c69613bbc565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce290613378565b60405180910390fd5b8363ffffffff16600163ffffffff16901b821791508380610d0b90613aa6565b9450508480610d1990613a5d565b9550508683610d289190613746565b925050610b5e565b60016002600580549050610d4491906137da565b610d4e9190613746565b841015610d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8790613258565b60405180910390fd5b8960036000828254610da29190613746565b9250508190555060008c67ffffffffffffffff166040600760009054906101000a900467ffffffffffffffff1667ffffffffffffffff16901b610de59190613746565b90506000801b600960008381526020019081526020016000205414610e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e36906132f8565b60405180910390fd5b6000600760009054906101000a900467ffffffffffffffff168e8e8e604051602001610e6e949392919061307c565b6040516020818303038152906040528051906020012090508060096000848152602001908152602001600020819055507f028315f59a3b3e104b3beec5aca23db0d4409cd0d1d749204d785cfd39a4009a8e8e8e600760009054906101000a900467ffffffffffffffff1687604051610eeb959493929190613581565b60405180910390a1610f1c8c8e73ffffffffffffffffffffffffffffffffffffffff1661179c90919063ffffffff16565b5050505050505050505050505050565b60086020528060005260406000206000915090505481565b60007f0000000000000000000000006191d13860d792487bbd89e63e4c877dbb56d39773ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb906134b8565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60025481565b6005818154811061101357600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860008467ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020549050600060028787876040516020016110879392919061303f565b6040516020818303038152906040526040516110a39190613013565b602060405180830381855afa1580156110c0573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906110e39190612696565b90506110f0838383611890565b61112f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112690613278565b60405180910390fd5b60008767ffffffffffffffff1660408667ffffffffffffffff16901b6111559190613746565b9050600085898989604051602001611170949392919061307c565b60405160208183030381529060405280519060200120905080600960008481526020019081526020016000205414156111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d5906132f8565b60405180910390fd5b8060096000848152602001908152602001600020819055507f028315f59a3b3e104b3beec5aca23db0d4409cd0d1d749204d785cfd39a4009a89898989600060405161122e95949392919061352e565b60405180910390a161125f878973ffffffffffffffffffffffffffffffffffffffff1661179c90919063ffffffff16565b505050505050505050565b60015481565b60045481565b7f0000000000000000000000006191d13860d792487bbd89e63e4c877dbb56d39773ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415611305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fc90613478565b60405180910390fd5b7f0000000000000000000000006191d13860d792487bbd89e63e4c877dbb56d39773ffffffffffffffffffffffffffffffffffffffff166113446119d6565b73ffffffffffffffffffffffffffffffffffffffff161461139a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139190613218565b60405180910390fd5b60006002306113a76119d6565b846040516020016113ba93929190612f2b565b6040516020818303038152906040526040516113d69190613013565b602060405180830381855afa1580156113f3573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906114169190612696565b9050611420611a2d565b73ffffffffffffffffffffffffffffffffffffffff1663a7c5b1118286866040518463ffffffff1660e01b815260040161145c93929190613129565b60206040518083038186803b15801561147457600080fd5b505afa158015611488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ac919061263c565b6114eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e2906132d8565b60405180910390fd5b61154482600067ffffffffffffffff81111561150a57611509613beb565b5b6040519080825280601f01601f19166020018201604052801561153c5781602001600182028036833780820191505090505b506000611a57565b50505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915090505481565b600060029054906101000a900467ffffffffffffffff1681565b600660149054906101000a900467ffffffffffffffff1681565b60035481565b6000600580549050905090565b60006115db6001611bd4565b905080156115ff576001600060016101000a81548160ff0219169083151502179055505b60008060026101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508560018190555084600281905550836004819055506000600381905550826005908051906020019061165b929190612331565b5081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600760006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550801561174a5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161174191906131bb565b60405180910390a15b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008060006117848585611cc4565b9150915061179181611d47565b819250505092915050565b804710156117df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d690613358565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516118059061302a565b60006040518083038185875af1925050503d8060008114611842576040519150601f19603f3d011682016040523d82523d6000602084013e611847565b606091505b505090508061188b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188290613318565b60405180910390fd5b505050565b60008082905060005b85518110156119c85760008682815181106118b7576118b6613bbc565b5b6020026020010151905080831161194057600283826040516020016118dd929190613100565b6040516020818303038152906040526040516118f99190613013565b602060405180830381855afa158015611916573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906119399190612696565b92506119b4565b60028184604051602001611955929190613100565b6040516020818303038152906040526040516119719190613013565b602060405180830381855afa15801561198e573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906119b19190612696565b92505b5080806119c090613a5d565b915050611899565b508381149150509392505050565b6000611a047f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611f1c565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a837f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611f26565b60000160009054906101000a900460ff1615611aa757611aa283611f30565b611bcf565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611aed57600080fd5b505afa925050508015611b1e57506040513d601f19601f82011682018060405250810190611b1b9190612696565b60015b611b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b54906133f8565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb990613398565b60405180910390fd5b50611bce838383611fe9565b5b505050565b60008060019054906101000a900460ff1615611c4b5760018260ff16148015611c035750611c0130611752565b155b611c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c39906133b8565b60405180910390fd5b60009050611cbf565b8160ff1660008054906101000a900460ff1660ff1610611ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c97906133b8565b60405180910390fd5b816000806101000a81548160ff021916908360ff160217905550600190505b919050565b600080604183511415611d065760008060006020860151925060408601519150606086015160001a9050611cfa87828585612015565b94509450505050611d40565b604083511415611d37576000806020850151915060408501519050611d2c868383612122565b935093505050611d40565b60006002915091505b9250929050565b60006004811115611d5b57611d5a613b8d565b5b816004811115611d6e57611d6d613b8d565b5b1415611d7957611f19565b60016004811115611d8d57611d8c613b8d565b5b816004811115611da057611d9f613b8d565b5b1415611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd8906131f8565b60405180910390fd5b60026004811115611df557611df4613b8d565b5b816004811115611e0857611e07613b8d565b5b1415611e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4090613238565b60405180910390fd5b60036004811115611e5d57611e5c613b8d565b5b816004811115611e7057611e6f613b8d565b5b1415611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea890613338565b60405180910390fd5b600480811115611ec457611ec3613b8d565b5b816004811115611ed757611ed6613b8d565b5b1415611f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0f906133d8565b60405180910390fd5b5b50565b6000819050919050565b6000819050919050565b611f3981611752565b611f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6f90613458565b60405180910390fd5b80611fa57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611f1c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611ff283612181565b600082511180611fff5750805b156120105761200e83836121d0565b505b505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115612050576000600391509150612119565b601b8560ff16141580156120685750601c8560ff1614155b1561207a576000600491509150612119565b60006001878787876040516000815260200160405260405161209f949392919061315b565b6020604051602081039080840390855afa1580156120c1573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561211057600060019250925050612119565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c6121659190613746565b905061217387828885612015565b935093505050935093915050565b61218a81611f30565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606121f58383604051806060016040528060278152602001614243602791396121fd565b905092915050565b606061220884611752565b612247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223e90613498565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff168560405161226f9190613013565b600060405180830381855af49150503d80600081146122aa576040519150601f19603f3d011682016040523d82523d6000602084013e6122af565b606091505b50915091506122bf8282866122ca565b925050509392505050565b606083156122da5782905061232a565b6000835111156122ed5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232191906131d6565b60405180910390fd5b9392505050565b8280548282559060005260206000209081019282156123aa579160200282015b828111156123a95782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612351565b5b5090506123b791906123bb565b5090565b5b808211156123d45760008160009055506001016123bc565b5090565b60006123eb6123e684613670565b61364b565b9050808382526020820190508285602086028201111561240e5761240d613c2e565b5b60005b8581101561243e578161242488826124b8565b845260208401935060208301925050600181019050612411565b5050509392505050565b600061245b6124568461369c565b61364b565b9050808382526020820190508285602086028201111561247e5761247d613c2e565b5b60005b858110156124ae57816124948882612568565b845260208401935060208301925050600181019050612481565b5050509392505050565b6000813590506124c781614173565b92915050565b6000813590506124dc8161418a565b92915050565b600082601f8301126124f7576124f6613c1f565b5b81356125078482602086016123d8565b91505092915050565b600082601f83011261252557612524613c1f565b5b8135612535848260208601612448565b91505092915050565b60008151905061254d816141a1565b92915050565b600081359050612562816141b8565b92915050565b600081359050612577816141cf565b92915050565b60008151905061258c816141cf565b92915050565b60008083601f8401126125a8576125a7613c1f565b5b8235905067ffffffffffffffff8111156125c5576125c4613c1a565b5b6020830191508360018202830111156125e1576125e0613c2e565b5b9250929050565b6000813590506125f7816141e6565b92915050565b60008135905061260c816141fd565b92915050565b60008135905061262181614214565b92915050565b6000813590506126368161422b565b92915050565b60006020828403121561265257612651613c38565b5b60006126608482850161253e565b91505092915050565b60006020828403121561267f5761267e613c38565b5b600061268d84828501612553565b91505092915050565b6000602082840312156126ac576126ab613c38565b5b60006126ba8482850161257d565b91505092915050565b6000806000604084860312156126dc576126db613c38565b5b600084013567ffffffffffffffff8111156126fa576126f9613c33565b5b61270686828701612592565b93509350506020612719868287016124b8565b9150509250925092565b60006020828403121561273957612738613c38565b5b6000612747848285016125fd565b91505092915050565b600080600080600060a0868803121561276c5761276b613c38565b5b600061277a888289016125fd565b955050602061278b888289016125fd565b945050604061279c888289016125fd565b935050606086013567ffffffffffffffff8111156127bd576127bc613c33565b5b6127c9888289016124e2565b92505060806127da888289016125e8565b9150509295509295909350565b6000602082840312156127fd576127fc613c38565b5b600061280b84828501612627565b91505092915050565b60008060008060008060a0878903121561283157612830613c38565b5b600061283f89828a01612627565b965050602061285089828a016124cd565b955050604061286189828a016125fd565b945050606061287289828a01612612565b935050608087013567ffffffffffffffff81111561289357612892613c33565b5b61289f89828a01612592565b92509250509295509295509295565b600080600080600060a086880312156128ca576128c9613c38565b5b60006128d888828901612627565b95505060206128e9888289016124cd565b94505060406128fa888289016125fd565b935050606061290b88828901612627565b925050608086013567ffffffffffffffff81111561292c5761292b613c33565b5b61293888828901612510565b9150509295509295909350565b6000806000806000806080878903121561296257612961613c38565b5b600061297089828a01612627565b965050602087013567ffffffffffffffff81111561299157612990613c33565b5b61299d89828a01612592565b955095505060406129b089828a01612568565b935050606087013567ffffffffffffffff8111156129d1576129d0613c33565b5b6129dd89828a01612592565b92509250509295509295509295565b6129f58161396c565b82525050565b612a0c612a07826138ab565b613ae5565b82525050565b612a1b81613899565b82525050565b612a32612a2d82613899565b613ad3565b82525050565b612a41816138c9565b82525050565b612a50816138f5565b82525050565b612a67612a62826138f5565b613af7565b82525050565b6000612a7983856136de565b9350612a868385846139ea565b612a8f83613c3d565b840190509392505050565b6000612aa683856136ef565b9350612ab38385846139ea565b82840190509392505050565b6000612aca826136c8565b612ad481856136ef565b9350612ae48185602086016139f9565b80840191505092915050565b612af98161397e565b82525050565b612b08816139a2565b82525050565b612b17816139b4565b82525050565b6000612b28826136d3565b612b3281856136fa565b9350612b428185602086016139f9565b612b4b81613c3d565b840191505092915050565b6000612b636018836136fa565b9150612b6e82613c68565b602082019050919050565b6000612b86601c836136fa565b9150612b9182613c91565b602082019050919050565b6000612ba9601f836136fa565b9150612bb482613cba565b602082019050919050565b6000612bcc6015836136fa565b9150612bd782613ce3565b602082019050919050565b6000612bef6016836136fa565b9150612bfa82613d0c565b602082019050919050565b6000612c126013836136fa565b9150612c1d82613d35565b602082019050919050565b6000612c356019836136fa565b9150612c4082613d5e565b602082019050919050565b6000612c586011836136fa565b9150612c6382613d87565b602082019050919050565b6000612c7b601c836136fa565b9150612c8682613db0565b602082019050919050565b6000612c9e603a836136fa565b9150612ca982613dd9565b604082019050919050565b6000612cc16022836136fa565b9150612ccc82613e28565b604082019050919050565b6000612ce4601d836136fa565b9150612cef82613e77565b602082019050919050565b6000612d07601a836136fa565b9150612d1282613ea0565b602082019050919050565b6000612d2a6029836136fa565b9150612d3582613ec9565b604082019050919050565b6000612d4d602e836136fa565b9150612d5882613f18565b604082019050919050565b6000612d706022836136fa565b9150612d7b82613f67565b604082019050919050565b6000612d93602e836136fa565b9150612d9e82613fb6565b604082019050919050565b6000612db66016836136fa565b9150612dc182614005565b602082019050919050565b6000612dd9601f836136fa565b9150612de48261402e565b602082019050919050565b6000612dfc602d836136fa565b9150612e0782614057565b604082019050919050565b6000612e1f601c836136fa565b9150612e2a826140a6565b602082019050919050565b6000612e426026836136fa565b9150612e4d826140cf565b604082019050919050565b6000612e656000836136ef565b9150612e708261411e565b600082019050919050565b6000612e886020836136fa565b9150612e9382614121565b602082019050919050565b6000612eab600a836136fa565b9150612eb68261414a565b602082019050919050565b612eca81613931565b82525050565b612ee1612edc82613931565b613b13565b82525050565b612ef08161393b565b82525050565b612eff8161394b565b82525050565b612f16612f118261394b565b613b1d565b82525050565b612f258161395f565b82525050565b6000612f378286612a21565b601482019150612f478285612a21565b601482019150612f578284612a21565b601482019150819050949350505050565b6000612f748288612a21565b601482019150612f848287612f05565b600882019150612f948286612a56565b602082019150612fa5828486612a9a565b91508190509695505050505050565b6000612fc08288612a21565b601482019150612fd08287612f05565b600882019150612fe08286612f05565b600882019150612ff082856129fb565b6014820191506130008284612ed0565b6020820191508190509695505050505050565b600061301f8284612abf565b915081905092915050565b600061303582612e58565b9150819050919050565b600061304b8286612f05565b60088201915061305b82856129fb565b60148201915061306b8284612ed0565b602082019150819050949350505050565b60006130888287612f05565b6008820191506130988286612f05565b6008820191506130a882856129fb565b6014820191506130b88284612ed0565b60208201915081905095945050505050565b60006020820190506130df6000830184612a12565b92915050565b60006020820190506130fa6000830184612a47565b92915050565b60006040820190506131156000830185612a47565b6131226020830184612a47565b9392505050565b600060408201905061313e6000830186612a47565b8181036020830152613151818486612a6d565b9050949350505050565b60006080820190506131706000830187612a47565b61317d6020830186612f1c565b61318a6040830185612a47565b6131976060830184612a47565b95945050505050565b60006020820190506131b56000830184612af0565b92915050565b60006020820190506131d06000830184612b0e565b92915050565b600060208201905081810360008301526131f08184612b1d565b905092915050565b6000602082019050818103600083015261321181612b56565b9050919050565b6000602082019050818103600083015261323181612b79565b9050919050565b6000602082019050818103600083015261325181612b9c565b9050919050565b6000602082019050818103600083015261327181612bbf565b9050919050565b6000602082019050818103600083015261329181612be2565b9050919050565b600060208201905081810360008301526132b181612c05565b9050919050565b600060208201905081810360008301526132d181612c28565b9050919050565b600060208201905081810360008301526132f181612c4b565b9050919050565b6000602082019050818103600083015261331181612c6e565b9050919050565b6000602082019050818103600083015261333181612c91565b9050919050565b6000602082019050818103600083015261335181612cb4565b9050919050565b6000602082019050818103600083015261337181612cd7565b9050919050565b6000602082019050818103600083015261339181612cfa565b9050919050565b600060208201905081810360008301526133b181612d1d565b9050919050565b600060208201905081810360008301526133d181612d40565b9050919050565b600060208201905081810360008301526133f181612d63565b9050919050565b6000602082019050818103600083015261341181612d86565b9050919050565b6000602082019050818103600083015261343181612da9565b9050919050565b6000602082019050818103600083015261345181612dcc565b9050919050565b6000602082019050818103600083015261347181612def565b9050919050565b6000602082019050818103600083015261349181612e12565b9050919050565b600060208201905081810360008301526134b181612e35565b9050919050565b600060208201905081810360008301526134d181612e7b565b9050919050565b600060208201905081810360008301526134f181612e9e565b9050919050565b600060208201905061350d6000830184612ec1565b92915050565b60006020820190506135286000830184612ef6565b92915050565b600060a0820190506135436000830188612ef6565b61355060208301876129ec565b61355d6040830186612ec1565b61356a6060830185612ef6565b6135776080830184612aff565b9695505050505050565b600060a0820190506135966000830188612ef6565b6135a360208301876129ec565b6135b06040830186612ec1565b6135bd6060830185612ef6565b6135ca6080830184612ee7565b9695505050505050565b60006060820190506135e96000830186612ef6565b6135f66020830185612a38565b6136036040830184612ec1565b949350505050565b60006060820190506136206000830187612ef6565b61362d6020830186612a47565b8181036040830152613640818486612a6d565b905095945050505050565b6000613655613666565b90506136618282613a2c565b919050565b6000604051905090565b600067ffffffffffffffff82111561368b5761368a613beb565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156136b7576136b6613beb565b5b602082029050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000808585111561371f5761371e613c29565b5b838611156137305761372f613c24565b5b6001850283019150848603905094509492505050565b600061375182613931565b915061375c83613931565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561379157613790613b2f565b5b828201905092915050565b60006137a78261394b565b91506137b28361394b565b92508267ffffffffffffffff038211156137cf576137ce613b2f565b5b828201905092915050565b60006137e582613931565b91506137f083613931565b925082613800576137ff613b5e565b5b828204905092915050565b600061381682613931565b915061382183613931565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561385a57613859613b2f565b5b828202905092915050565b600061387082613931565b915061387b83613931565b92508282101561388e5761388d613b2f565b5b828203905092915050565b60006138a482613911565b9050919050565b60006138b682613911565b9050919050565b60008115159050919050565b60007fffffffffffffffffffffffffffffffffffffffffff000000000000000000000082169050919050565b6000819050919050565b600061390a82613899565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b6000613977826139c6565b9050919050565b600061398982613990565b9050919050565b600061399b82613911565b9050919050565b60006139ad8261393b565b9050919050565b60006139bf8261395f565b9050919050565b60006139d1826139d8565b9050919050565b60006139e382613911565b9050919050565b82818337600083830152505050565b60005b83811015613a175780820151818401526020810190506139fc565b83811115613a26576000848401525b50505050565b613a3582613c3d565b810181811067ffffffffffffffff82111715613a5457613a53613beb565b5b80604052505050565b6000613a6882613931565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a9b57613a9a613b2f565b5b600182019050919050565b6000613ab18261393b565b915063ffffffff821415613ac857613ac7613b2f565b5b600182019050919050565b6000613ade82613b01565b9050919050565b6000613af082613b01565b9050919050565b6000819050919050565b6000613b0c82613c5b565b9050919050565b6000819050919050565b6000613b2882613c4e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160c01b9050919050565b60008160601b9050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f6d757374206265207468726f756768206163746976652070726f787900000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f4e6f7420656e6f756768207369676e6174757265730000000000000000000000600082015250565b7f556e61626c6520746f207665726966792070726f6f6600000000000000000000600082015250565b7f496e76616c69642064657374696e6174696f6e00000000000000000000000000600082015250565b7f556e61626c6520746f20776974686472617720616d6f756e7400000000000000600082015250565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b7f5769746864726177616c20616c72656164792070726f63657373656400000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f436f756c64206e6f7420766572696679207369676e6174757265000000000000600082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f496e76616c6964206465706f73697420616d6f756e7400000000000000000000600082015250565b7f496e76616c6964206e6f6e636520666f72206f7261636c652075706461746500600082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f6d757374206265207468726f7567682064656c656761746563616c6c00000000600082015250565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b50565b7f6d757374206e6f74206265207468726f7567682064656c656761746563616c6c600082015250565b7f4e6f206f7261636c657300000000000000000000000000000000000000000000600082015250565b61417c81613899565b811461418757600080fd5b50565b614193816138ab565b811461419e57600080fd5b50565b6141aa816138bd565b81146141b557600080fd5b50565b6141c1816138c9565b81146141cc57600080fd5b50565b6141d8816138f5565b81146141e357600080fd5b50565b6141ef816138ff565b81146141fa57600080fd5b50565b61420681613931565b811461421157600080fd5b50565b61421d8161393b565b811461422857600080fd5b50565b6142348161394b565b811461423f57600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220569a15327a2ccc3fc8b285be7a0c08fd860cd6f57e1a4d060ae04c2037f8fb6364736f6c63430008060033
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing EVM bytecode for vulnerabilities**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963]
[codex:686963] # load bytecode from file
[codex:686963] import sys
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] # find runtime hex after 'FILE: runtime_bytecode.hex'
[codex:686963] m=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text)
[codex:686963] if not m:
[codex:686963] print('no hex found'); sys.exit(1)
[codex:686963] hexstr=m.group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] # opcode names
[codex:686963] opnames={
[codex:686963] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:686963] **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:686963] **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:686963] **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:686963] }
[codex:686963] # base opcodes mapping for relevant ones
[codex:686963] base={
[codex:686963] 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:686963] 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:686963] 0x20:'SHA3',
[codex:686963] 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:686963] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:686963] 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:686963] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:686963] }
[codex:686963]
[codex:686963] opnames.update(base)
[codex:686963]
[codex:686963] def disasm(code):
[codex:686963] i=0
[codex:686963] out=[]
[codex:686963] while i < len(code):
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op, 'UNKNOWN')
[codex:686963] if 0x60 <= op <= 0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] out.append((i,name,data))
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] out.append((i,name,None))
[codex:686963] i+=1
[codex:686963] return out
[codex:686963]
[codex:686963] ops=disasm(code)
[codex:686963]
[codex:686963] # gather call-like
[codex:686963] call_ops=[o for o in ops if o[1] in ('CALL','DELEGATECALL','STATICCALL','CALLCODE','SELFDESTRUCT')]
[codex:686963] print('call-like ops count', len(call_ops))
[codex:686963] for off,name,data in call_ops:
[codex:686963] print(hex(off), name)
[codex:686963]
[codex:686963] # gather SSTORE offsets
[codex:686963] sstore=[o for o in ops if o[1]=='SSTORE']
[codex:686963] print('SSTORE count', len(sstore))
[codex:686963] print('first few', [hex(o[0]) for o in sstore[:10]])
[codex:686963]
[codex:686963] # find PUSH before selfdestruct etc? For now just print context of call ops
[codex:686963] # build map offset->index for easier context
[codex:686963] idx={off:i for i,(off,_,_) in enumerate(ops)}
[codex:686963]
[codex:686963] # function to print context
[codex:686963] for off,name,data in call_ops:
[codex:686963] i=idx[off]
[codex:686963] ctx=ops[max(0,i-10):i+1]
[codex:686963] # show last few ops before call
[codex:686963] print('\\ncontext for',name,'at',hex(off))
[codex:686963] for off2,name2,data2 in ctx:
[codex:686963] if data2 is None:
[codex:686963] print(hex(off2).rjust(6), name2)
[codex:686963] else:
[codex:686963] print(hex(off2).rjust(6), name2, data2.hex())
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 34ms:
[codex:686963] call-like ops count 12
[codex:686963] 0x71c STATICCALL
[codex:686963] 0x7ce STATICCALL
[codex:686963] 0xb1d STATICCALL
[codex:686963] 0x10af STATICCALL
[codex:686963] 0x13e2 STATICCALL
[codex:686963] 0x1477 STATICCALL
[codex:686963] 0x1812 CALL
[codex:686963] 0x1905 STATICCALL
[codex:686963] 0x197d STATICCALL
[codex:686963] 0x1af0 STATICCALL
[codex:686963] 0x20b0 STATICCALL
[codex:686963] 0x227b DELEGATECALL
[codex:686963] SSTORE count 23
[codex:686963] first few ['0x59e', '0x883', '0xa2c', '0xa55', '0xa5d', '0xda8', '0xe9d', '0x11f5', '0x15fd', '0x1627']
[codex:686963]
[codex:686963] context for STATICCALL at 0x71c
[codex:686963] 0x710 JUMPDEST
[codex:686963] 0x711 PUSH1 20
[codex:686963] 0x713 PUSH1 40
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing contract call patterns and potential withdrawal risks**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] # disasm quick
[codex:686963] i=0
[codex:686963] chain_offsets=[]
[codex:686963] while i<len(code):
[codex:686963] op=code[i]
[codex:686963] if op==0x46: # CHAINID
[codex:686963] chain_offsets.append(i)
[codex:686963] i+=1; continue
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] i+=1+(op-0x5f)
[codex:686963] else:
[codex:686963] i+=1
[codex:686963] print('CHAINID offsets', [hex(x) for x in chain_offsets])
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 27ms:
[codex:686963] CHAINID offsets []
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing contract initialization and upgrade functions**
[codex:686963]
[codex:686963] I'm assessing whether the contract has unprotected initialization exposing ownership or fund withdrawal risks, checking for missing chain ID in signatures that could lead to replay attacks across chains, and trying to decode its function dispatch table to identify critical functions like upgrades or signatures by parsing selectors and jump destinations. This will clarify if any concrete exploit paths exist or if I should mark no findings.
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] # Disassemble small to identify selectors: pattern PUSH4 <sig> EQ PUSH2 <dest> JUMPI
[codex:686963]
[codex:686963] def read_push(i):
[codex:686963] op=code[i]
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] return n,data
[codex:686963] return None,None
[codex:686963]
[codex:686963] selectors=[]
[codex:686963] i=0
[codex:686963] while i<len(code)-1:
[codex:686963] op=code[i]
[codex:686963] if op==0x63: # PUSH4
[codex:686963] n,data=read_push(i)
[codex:686963] if n==4:
[codex:686963] sig=data.hex()
[codex:686963] # look ahead for EQ PUSH2 dest JUMPI
[codex:686963] j=i+1+n
[codex:686963] # skip maybe? But typical pattern: PUSH4 sig; EQ; PUSH2 dest; JUMPI
[codex:686963] if code[j]==0x14 and code[j+1]==0x61: # EQ, PUSH2
[codex:686963] dest=int.from_bytes(code[j+2:j+4],'big')
[codex:686963] if code[j+4]==0x57: # JUMPI
[codex:686963] selectors.append((sig,dest,i))
[codex:686963]
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] i+=1
[codex:686963]
[codex:686963] print('selectors count', len(selectors))
[codex:686963] for sig,dest,off in selectors:
[codex:686963] print(sig, hex(dest))
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 30ms:
[codex:686963] selectors count 19
[codex:686963] de35f5cb 0x392
[codex:686963] dfbc6269 0x3bd
[codex:686963] e0acac7f 0x3e8
[codex:686963] ed72eb24 0x413
[codex:686963] f358ec61 0x43e
[codex:686963] 744d49cc 0x2ab
[codex:686963] b2b22a85 0x2d6
[codex:686963] b81f853c 0x301
[codex:686963] c7a983b5 0x32a
[codex:686963] dde4d950 0x355
[codex:686963] 4bd2d7f9 0x1b2
[codex:686963] 52d1902d 0x1ef
[codex:686963] 593777b5 0x21a
[codex:686963] 5b69a7d8 0x245
[codex:686963] 61241110 0x282
[codex:686963] 073b1422 0x119
[codex:686963] 183bdeaa 0x135
[codex:686963] 2333ad8b 0x160
[codex:686963] 465c4d15 0x189
[codex:686963]
[codex:686963] thinking
[codex:686963] **Mapping functions for access checks**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] # find CALLER opcodes
[codex:686963] caller_offsets=[]
[codex:686963] i=0
[codex:686963] while i < len(code):
[codex:686963] op=code[i]
[codex:686963] if op==0x33:
[codex:686963] caller_offsets.append(i)
[codex:686963] i+=1
[codex:686963] continue
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] i+=1+(op-0x5f)
[codex:686963] else:
[codex:686963] i+=1
[codex:686963] print('CALLER offsets', [hex(x) for x in caller_offsets])
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 26ms:
[codex:686963] CALLER offsets ['0x429e']
[codex:686963]
[codex:686963] thinking
[codex:686963] **Investigating CALLER opcode usage**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] # disasm around 0x429e
[codex:686963] start=0x4280
[codex:686963] end=0x42c0
[codex:686963]
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963] op=code[i]
[codex:686963] name=''
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] print(hex(i).rjust(6), f'PUSH{n}', data.hex())
[codex:686963] i+=1+n
[codex:686963] continue
[codex:686963] # map known op
[codex:686963] names={0x33:'CALLER',0x56:'JUMP',0x57:'JUMPI',0x5b:'JUMPDEST',0x54:'SLOAD',0x55:'SSTORE',0xf1:'CALL',0xf4:'DELEGATECALL',0xfa:'STATICCALL',0xfd:'REVERT',0xf3:'RETURN'}
[codex:686963] name=names.get(op, f'OP_{op:02x}')
[codex:686963] print(hex(i).rjust(6), name)
[codex:686963] i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq exited 1 in 35ms:
[codex:686963] 0x4280 PUSH27 0c08fd860cd6f57e1a4d060ae04c2037f8fb6364736f6c63430008
[codex:686963] 0x429c OP_06
[codex:686963] 0x429d OP_00
[codex:686963] 0x429e CALLER
[codex:686963] Traceback (most recent call last):
[codex:686963] File "<stdin>", line 13, in <module>
[codex:686963] IndexError: index out of range
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing contract bytecode for CALLER and ORIGIN opcodes**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] # search for ORIGIN opcode 0x32
[codex:686963] origin_offsets=[]
[codex:686963]
[codex:686963] i=0
[codex:686963] while i<len(code):
[codex:686963] op=code[i]
[codex:686963] if op==0x32:
[codex:686963] origin_offsets.append(i)
[codex:686963] i+=1
[codex:686963] continue
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] i+=1+(op-0x5f)
[codex:686963] else:
[codex:686963] i+=1
[codex:686963] print('ORIGIN offsets', [hex(x) for x in origin_offsets])
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 29ms:
[codex:686963] ORIGIN offsets ['0x4277']
[codex:686963]
[codex:686963] thinking
[codex:686963] **Examining ACCESS CONTROL and CALLER usage**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] opnames={
[codex:686963] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:686963] **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:686963] **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:686963] **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:686963] }
[codex:686963] base={
[codex:686963] 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:686963] 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:686963] 0x20:'SHA3',
[codex:686963] 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:686963] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:686963] 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:686963] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:686963] }
[codex:686963] opnames.update(base)
[codex:686963]
[codex:686963] # function selectors mapping from previous run
[codex:686963] selectors={
[codex:686963] '073b1422':0x119,
[codex:686963] '183bdeaa':0x135,
[codex:686963] '2333ad8b':0x160,
[codex:686963] '465c4d15':0x189,
[codex:686963] '4bd2d7f9':0x1b2,
[codex:686963] '52d1902d':0x1ef,
[codex:686963] '593777b5':0x21a,
[codex:686963] '5b69a7d8':0x245,
[codex:686963] '61241110':0x282,
[codex:686963] '744d49cc':0x2ab,
[codex:686963] 'b2b22a85':0x2d6,
[codex:686963] 'b81f853c':0x301,
[codex:686963] 'c7a983b5':0x32a,
[codex:686963] 'dde4d950':0x355,
[codex:686963] 'de35f5cb':0x392,
[codex:686963] 'dfbc6269':0x3bd,
[codex:686963] 'e0acac7f':0x3e8,
[codex:686963] 'ed72eb24':0x413,
[codex:686963] 'f358ec61':0x43e,
[codex:686963] }
[codex:686963]
[codex:686963] # function to disasm from start for N bytes
[codex:686963]
[codex:686963] def disasm(start, count=200):
[codex:686963] i=start
[codex:686963] end=min(len(code), start+count)
[codex:686963] out=[]
[codex:686963] while i<end:
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op, f'OP_{op:02x}')
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] out.append((i,f'{name} {data.hex()}'))
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] out.append((i,name))
[codex:686963] i+=1
[codex:686963] return out
[codex:686963]
[codex:686963] for sig, start in selectors.items():
[codex:686963] print('\\nFunction',sig,'at',hex(start))
[codex:686963] for off,ins in disasm(start,120):
[codex:686963] print(hex(off).rjust(6), ins)
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 27ms:
[codex:686963]
[codex:686963] Function 073b1422 at 0x119
[codex:686963] 0x119 JUMPDEST
[codex:686963] 0x11a PUSH2 0133
[codex:686963] 0x11d PUSH1 04
[codex:686963] 0x11f DUP1
[codex:686963] 0x120 CALLDATASIZE
[codex:686963] 0x121 SUB
[codex:686963] 0x122 DUP2
[codex:686963] 0x123 ADD
[codex:686963] 0x124 SWAP1
[codex:686963] 0x125 PUSH2 012e
[codex:686963] 0x128 SWAP2
[codex:686963] 0x129 SWAP1
[codex:686963] 0x12a PUSH2 2669
[codex:686963] 0x12d JUMP
[codex:686963] 0x12e JUMPDEST
[codex:686963] 0x12f PUSH2 0467
[codex:686963] 0x132 JUMP
[codex:686963] 0x133 JUMPDEST
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing internal function logic and flow**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] # disasm from 0x0467 to 0x0550
[codex:686963] start=0x0467
[codex:686963] end=0x0550
[codex:686963]
[codex:686963] opnames={
[codex:686963] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:686963] **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:686963] **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:686963] **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:686963] }
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963]
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op, f'OP_{op:02x}')
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] print(hex(i).rjust(6), name)
[codex:686963] i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 23ms:
[codex:686963] 0x467 JUMPDEST
[codex:686963] 0x468 CALLVALUE
[codex:686963] 0x469 PUSH1 01
[codex:686963] 0x46b SLOAD
[codex:686963] 0x46c GT
[codex:686963] 0x46d ISZERO
[codex:686963] 0x46e DUP1
[codex:686963] 0x46f ISZERO
[codex:686963] 0x470 PUSH2 047b
[codex:686963] 0x473 JUMPI
[codex:686963] 0x474 POP
[codex:686963] 0x475 PUSH1 02
[codex:686963] 0x477 SLOAD
[codex:686963] 0x478 CALLVALUE
[codex:686963] 0x479 GT
[codex:686963] 0x47a ISZERO
[codex:686963] 0x47b JUMPDEST
[codex:686963] 0x47c PUSH2 04ba
[codex:686963] 0x47f JUMPI
[codex:686963] 0x480 PUSH1 40
[codex:686963]
[codex:686963] thinking
[codex:686963] **Continuing exploration**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] start=0x0539
[codex:686963] end=0x05e0
[codex:686963]
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963]
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op, f'OP_{op:02x}')
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] print(hex(i).rjust(6), name)
[codex:686963] i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 23ms:
[codex:686963] 0x539 JUMPDEST
[codex:686963] 0x53a PUSH1 00
[codex:686963] 0x53c DUP1
[codex:686963] 0x53d PUSH1 02
[codex:686963] 0x53f SWAP1
[codex:686963] 0x540 SLOAD
[codex:686963] 0x541 SWAP1
[codex:686963] 0x542 PUSH2 0100
[codex:686963] 0x545 EXP
[codex:686963] 0x546 SWAP1
[codex:686963] 0x547 DIV
[codex:686963] 0x548 PUSH8 ffffffffffffffff
[codex:686963] 0x551 AND
[codex:686963] 0x552 SWAP1
[codex:686963] 0x553 POP
[codex:686963] 0x554 PUSH1 01
[codex:686963] 0x556 PUSH1 00
[codex:686963] 0x558 PUSH1 02
[codex:686963] 0x55a DUP3
[codex:686963] 0x55b DUP3
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing payable function and seeking upgrade method**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963]
[codex:686963] start=0x0f44
[codex:686963] end=0x0ff0
[codex:686963]
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op, f'OP_{op:02x}')
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] print(hex(i).rjust(6), name)
[codex:686963] i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 23ms:
[codex:686963] 0xf44 JUMPDEST
[codex:686963] 0xf45 PUSH1 00
[codex:686963] 0xf47 PUSH32 0000000000000000000000006191d13860d792487bbd89e63e4c877dbb56d397
[codex:686963] 0xf68 PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:686963] 0xf7d AND
[codex:686963] 0xf7e ADDRESS
[codex:686963] 0xf7f PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:686963] 0xf94 AND
[codex:686963] 0xf95 EQ
[codex:686963] 0xf96 PUSH2 0fd4
[codex:686963] 0xf99 JUMPI
[codex:686963] 0xf9a PUSH1 40
[codex:686963] 0xf9c MLOAD
[codex:686963] 0xf9d PUSH32 08c379a000000000000000000000000000000000000000000000000000000000
[codex:686963] 0xfbe DUP2
[codex:686963] 0xfbf MSTORE
[codex:686963] 0xfc0 PUSH1 04
[codex:686963] 0xfc2 ADD
[codex:686963] 0xfc3 PUSH2 0fcb
[codex:686963] 0xfc6 SWAP1
[codex:686963]
[codex:686963] thinking
[codex:686963] **Continuing process**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963]
[codex:686963] start=0x0fd4
[codex:686963] end=0x1010
[codex:686963]
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op, f'OP_{op:02x}')
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] print(hex(i).rjust(6), name)
[codex:686963] i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 27ms:
[codex:686963] 0xfd4 JUMPDEST
[codex:686963] 0xfd5 PUSH32 360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc
[codex:686963] 0xff6 PUSH1 00
[codex:686963] 0xff8 SHL
[codex:686963] 0xff9 SWAP1
[codex:686963] 0xffa POP
[codex:686963] 0xffb SWAP1
[codex:686963] 0xffc JUMP
[codex:686963] 0xffd JUMPDEST
[codex:686963] 0xffe PUSH1 02
[codex:686963] 0x1000 SLOAD
[codex:686963] 0x1001 DUP2
[codex:686963] 0x1002 JUMP
[codex:686963] 0x1003 JUMPDEST
[codex:686963] 0x1004 PUSH1 05
[codex:686963] 0x1006 DUP2
[codex:686963] 0x1007 DUP2
[codex:686963] 0x1008 SLOAD
[codex:686963] 0x1009 DUP2
[codex:686963] 0x100a LT
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing UUPS proxy checks**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] # find string near 0x34b8 by scanning for ASCII bytes in that region
[codex:686963] start=0x34b8
[codex:686963] end=0x34b8+200
[codex:686963] sub=code[start:end]
[codex:686963] print(sub)
[codex:686963] # attempt to decode ascii sequences
[codex:686963] import re
[codex:686963] for m in re.finditer(b'([ -~]{5,})', sub):
[codex:686963] print('ascii', m.group(1))
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 28ms:
[codex:686963] b'[`\x00` \x82\x01\x90P\x81\x81\x03`\x00\x83\x01Ra4\xd1\x81a.{V[\x90P\x91\x90PV[`\x00` \x82\x01\x90P\x81\x81\x03`\x00\x83\x01Ra4\xf1\x81a.\x9eV[\x90P\x91\x90PV[`\x00` \x82\x01\x90Pa5\r`\x00\x83\x01\x84a.\xc1V[\x92\x91PPV[`\x00` \x82\x01\x90Pa5(`\x00\x83\x01\x84a.\xf6V[\x92\x91PPV[`\x00`\xa0\x82\x01\x90Pa5C`\x00\x83\x01\x88a.\xf6V[a5P` \x83\x01\x87a)\xecV[a5]`@\x83\x01\x86a.\xc1V[a5j``\x83\x01\x85a.\xf6V[a5w`\x80\x83\x01\x84a*\xffV[\x96\x95PPPPPP'
[codex:686963] ascii b'a.{V['
[codex:686963] ascii b'PPV[`'
[codex:686963] ascii b'Pa5(`'
[codex:686963] ascii b'PPV[`'
[codex:686963] ascii b'Pa5C`'
[codex:686963] ascii b'V[a5P` '
[codex:686963] ascii b'V[a5]`@'
[codex:686963] ascii b'V[a5j``'
[codex:686963] ascii b'V[a5w`'
[codex:686963] ascii b'PPPPPP'
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing proxy-related checks and selectors**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963]
[codex:686963] start=0x15cf
[codex:686963] end=0x1750
[codex:686963]
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op, f'OP_{op:02x}')
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] print(hex(i).rjust(6), name)
[codex:686963] i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 24ms:
[codex:686963] 0x15cf JUMPDEST
[codex:686963] 0x15d0 PUSH1 00
[codex:686963] 0x15d2 PUSH2 15db
[codex:686963] 0x15d5 PUSH1 01
[codex:686963] 0x15d7 PUSH2 1bd4
[codex:686963] 0x15da JUMP
[codex:686963] 0x15db JUMPDEST
[codex:686963] 0x15dc SWAP1
[codex:686963] 0x15dd POP
[codex:686963] 0x15de DUP1
[codex:686963] 0x15df ISZERO
[codex:686963] 0x15e0 PUSH2 15ff
[codex:686963] 0x15e3 JUMPI
[codex:686963] 0x15e4 PUSH1 01
[codex:686963] 0x15e6 PUSH1 00
[codex:686963] 0x15e8 PUSH1 01
[codex:686963] 0x15ea PUSH2 0100
[codex:686963] 0x15ed EXP
[codex:686963] 0x15ee DUP2
[codex:686963] 0x15ef SLOAD
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing initializer function details**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963]
[codex:686963] start=0x1bd4
[codex:686963] end=0x1c80
[codex:686963]
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op, f'OP_{op:02x}')
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] print(hex(i).rjust(6), name)
[codex:686963] i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 26ms:
[codex:686963] 0x1bd4 JUMPDEST
[codex:686963] 0x1bd5 PUSH1 00
[codex:686963] 0x1bd7 DUP1
[codex:686963] 0x1bd8 PUSH1 01
[codex:686963] 0x1bda SWAP1
[codex:686963] 0x1bdb SLOAD
[codex:686963] 0x1bdc SWAP1
[codex:686963] 0x1bdd PUSH2 0100
[codex:686963] 0x1be0 EXP
[codex:686963] 0x1be1 SWAP1
[codex:686963] 0x1be2 DIV
[codex:686963] 0x1be3 PUSH1 ff
[codex:686963] 0x1be5 AND
[codex:686963] 0x1be6 ISZERO
[codex:686963] 0x1be7 PUSH2 1c4b
[codex:686963] 0x1bea JUMPI
[codex:686963] 0x1beb PUSH1 01
[codex:686963] 0x1bed DUP3
[codex:686963] 0x1bee PUSH1 ff
[codex:686963] 0x1bf0 AND
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing upgradeable contract logic**
[codex:686963]
[codex:686963] I'm examining an OpenZeppelin Initializable pattern, realizing this contract is likely the UUPS implementation—not a proxy—and it contains upgrade functions without fallback delegatecall. I'll focus on finding the upgrade function by locating storage writes to the EIP1967 implementation slot to understand potential access control risks.
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963] const=bytes.fromhex('360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc')
[codex:686963] idx=[i for i in range(len(code)) if code.startswith(const,i)]
[codex:686963] print('const occurrences', [hex(i) for i in idx])
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 28ms:
[codex:686963] const occurrences ['0xfd6', '0x19dd', '0x1b5f', '0x1f7e']
[codex:686963]
[codex:686963] thinking
[codex:686963] **Investigating constant usage locations**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963]
[codex:686963] start=0x19c0
[codex:686963] end=0x1a30
[codex:686963]
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op, f'OP_{op:02x}')
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] print(hex(i).rjust(6), name)
[codex:686963] i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 24ms:
[codex:686963] 0x19c0 JUMPDEST
[codex:686963] 0x19c1 SWAP2
[codex:686963] 0x19c2 POP
[codex:686963] 0x19c3 POP
[codex:686963] 0x19c4 PUSH2 1899
[codex:686963] 0x19c7 JUMP
[codex:686963] 0x19c8 JUMPDEST
[codex:686963] 0x19c9 POP
[codex:686963] 0x19ca DUP4
[codex:686963] 0x19cb DUP2
[codex:686963] 0x19cc EQ
[codex:686963] 0x19cd SWAP2
[codex:686963] 0x19ce POP
[codex:686963] 0x19cf POP
[codex:686963] 0x19d0 SWAP4
[codex:686963] 0x19d1 SWAP3
[codex:686963] 0x19d2 POP
[codex:686963] 0x19d3 POP
[codex:686963] 0x19d4 POP
[codex:686963] 0x19d5 JUMP
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing low-level implementation retrieval**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963]
[codex:686963] start=0x1b30
[codex:686963] end=0x1be5
[codex:686963]
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op, f'OP_{op:02x}')
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] print(hex(i).rjust(6), name)
[codex:686963] i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 26ms:
[codex:686963] 0x1b30 STOP
[codex:686963] 0x1b31 STOP
[codex:686963] 0x1b32 STOP
[codex:686963] 0x1b33 STOP
[codex:686963] 0x1b34 STOP
[codex:686963] 0x1b35 STOP
[codex:686963] 0x1b36 STOP
[codex:686963] 0x1b37 STOP
[codex:686963] 0x1b38 STOP
[codex:686963] 0x1b39 STOP
[codex:686963] 0x1b3a STOP
[codex:686963] 0x1b3b STOP
[codex:686963] 0x1b3c STOP
[codex:686963] 0x1b3d STOP
[codex:686963] 0x1b3e STOP
[codex:686963] 0x1b3f STOP
[codex:686963] 0x1b40 STOP
[codex:686963] 0x1b41 STOP
[codex:686963] 0x1b42 STOP
[codex:686963] 0x1b43 STOP
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing upgrade function references**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] # search for PUSH2 1b5d occurrences
[codex:686963] pattern=bytes([0x61,0x1b,0x5d])
[codex:686963] idx=[i for i in range(len(code)) if code.startswith(pattern,i)]
[codex:686963] print('PUSH2 1b5d at', [hex(i) for i in idx])
[codex:686963]
[codex:686963] # search for PUSH2 1bce etc
[codex:686963] pattern=bytes([0x61,0x1b,0xce])
[codex:686963] idx=[i for i in range(len(code)) if code.startswith(pattern,i)]
[codex:686963] print('PUSH2 1bce at', [hex(i) for i in idx])
[codex:686963]
[codex:686963] # search for PUSH2 1fe9 etc
[codex:686963] pattern=bytes([0x61,0x1f,0xe9])
[codex:686963] idx=[i for i in range(len(code)) if code.startswith(pattern,i)]
[codex:686963] print('PUSH2 1fe9 at', [hex(i) for i in idx])
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 27ms:
[codex:686963] PUSH2 1b5d at ['0x1b1f']
[codex:686963] PUSH2 1bce at ['0x1bc4']
[codex:686963] PUSH2 1fe9 at ['0x1bca']
[codex:686963]
[codex:686963] thinking
[codex:686963] **Inspecting function around 0x1b00**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963]
[codex:686963] start=0x1af0
[codex:686963] end=0x1b30
[codex:686963]
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op, f'OP_{op:02x}')
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] print(hex(i).rjust(6), name)
[codex:686963] i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 27ms:
[codex:686963] 0x1af0 STATICCALL
[codex:686963] 0x1af1 SWAP3
[codex:686963] 0x1af2 POP
[codex:686963] 0x1af3 POP
[codex:686963] 0x1af4 POP
[codex:686963] 0x1af5 DUP1
[codex:686963] 0x1af6 ISZERO
[codex:686963] 0x1af7 PUSH2 1b1e
[codex:686963] 0x1afa JUMPI
[codex:686963] 0x1afb POP
[codex:686963] 0x1afc PUSH1 40
[codex:686963] 0x1afe MLOAD
[codex:686963] 0x1aff RETURNDATASIZE
[codex:686963] 0x1b00 PUSH1 1f
[codex:686963] 0x1b02 NOT
[codex:686963] 0x1b03 PUSH1 1f
[codex:686963] 0x1b05 DUP3
[codex:686963] 0x1b06 ADD
[codex:686963] 0x1b07 AND
[codex:686963] 0x1b08 DUP3
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing upgrade function calls**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963]
[codex:686963] start=0x1a70
[codex:686963] end=0x1b00
[codex:686963]
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op, f'OP_{op:02x}')
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] print(hex(i).rjust(6), name)
[codex:686963] i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 25ms:
[codex:686963] 0x1a70 OP_b5
[codex:686963] 0x1a71 OP_b9
[codex:686963] 0x1a72 BLOCKHASH
[codex:686963] 0x1a73 PUSH14 12a635614ffd914360001b611f26
[codex:686963] 0x1a82 JUMP
[codex:686963] 0x1a83 JUMPDEST
[codex:686963] 0x1a84 PUSH1 00
[codex:686963] 0x1a86 ADD
[codex:686963] 0x1a87 PUSH1 00
[codex:686963] 0x1a89 SWAP1
[codex:686963] 0x1a8a SLOAD
[codex:686963] 0x1a8b SWAP1
[codex:686963] 0x1a8c PUSH2 0100
[codex:686963] 0x1a8f EXP
[codex:686963] 0x1a90 SWAP1
[codex:686963] 0x1a91 DIV
[codex:686963] 0x1a92 PUSH1 ff
[codex:686963] 0x1a94 AND
[codex:686963] 0x1a95 ISZERO
[codex:686963] 0x1a96 PUSH2 1aa7
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing initialization and proxy checks**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963]
[codex:686963] start=0x1f20
[codex:686963] end=0x1f90
[codex:686963]
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op, f'OP_{op:02x}')
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] print(hex(i).rjust(6), name)
[codex:686963] i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 24ms:
[codex:686963] 0x1f20 SWAP1
[codex:686963] 0x1f21 POP
[codex:686963] 0x1f22 SWAP2
[codex:686963] 0x1f23 SWAP1
[codex:686963] 0x1f24 POP
[codex:686963] 0x1f25 JUMP
[codex:686963] 0x1f26 JUMPDEST
[codex:686963] 0x1f27 PUSH1 00
[codex:686963] 0x1f29 DUP2
[codex:686963] 0x1f2a SWAP1
[codex:686963] 0x1f2b POP
[codex:686963] 0x1f2c SWAP2
[codex:686963] 0x1f2d SWAP1
[codex:686963] 0x1f2e POP
[codex:686963] 0x1f2f JUMP
[codex:686963] 0x1f30 JUMPDEST
[codex:686963] 0x1f31 PUSH2 1f39
[codex:686963] 0x1f34 DUP2
[codex:686963] 0x1f35 PUSH2 1752
[codex:686963] 0x1f38 JUMP
[codex:686963]
[codex:686963] thinking
[codex:686963] **Continuing process**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963]
[codex:686963] start=0x1f78
[codex:686963] end=0x2005
[codex:686963]
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op, f'OP_{op:02x}')
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] print(hex(i).rjust(6), name)
[codex:686963] i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 26ms:
[codex:686963] 0x1f78 JUMPDEST
[codex:686963] 0x1f79 DUP1
[codex:686963] 0x1f7a PUSH2 1fa5
[codex:686963] 0x1f7d PUSH32 360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc
[codex:686963] 0x1f9e PUSH1 00
[codex:686963] 0x1fa0 SHL
[codex:686963] 0x1fa1 PUSH2 1f1c
[codex:686963] 0x1fa4 JUMP
[codex:686963] 0x1fa5 JUMPDEST
[codex:686963] 0x1fa6 PUSH1 00
[codex:686963] 0x1fa8 ADD
[codex:686963] 0x1fa9 PUSH1 00
[codex:686963] 0x1fab PUSH2 0100
[codex:686963] 0x1fae EXP
[codex:686963] 0x1faf DUP2
[codex:686963] 0x1fb0 SLOAD
[codex:686963] 0x1fb1 DUP2
[codex:686963] 0x1fb2 PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:686963] 0x1fc7 MUL
[codex:686963] 0x1fc8 NOT
[codex:686963]
[codex:686963] thinking
[codex:686963] **Mapping function selectors to internal calls**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] pattern=bytes([0x61,0x1a,0x83])
[codex:686963] idx=[i for i in range(len(code)) if code.startswith(pattern,i)]
[codex:686963] print('PUSH2 1a83 at', [hex(i) for i in idx])
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 25ms:
[codex:686963] PUSH2 1a83 at ['0x1a58']
[codex:686963]
[codex:686963] thinking
[codex:686963] **Inspecting memory region near 0x1a58**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963]
[codex:686963] start=0x1a40
[codex:686963] end=0x1a70
[codex:686963]
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op, f'OP_{op:02x}')
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] print(hex(i).rjust(6), name)
[codex:686963] i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 23ms:
[codex:686963] 0x1a40 SELFDESTRUCT
[codex:686963] 0x1a41 SELFDESTRUCT
[codex:686963] 0x1a42 SELFDESTRUCT
[codex:686963] 0x1a43 SELFDESTRUCT
[codex:686963] 0x1a44 SELFDESTRUCT
[codex:686963] 0x1a45 SELFDESTRUCT
[codex:686963] 0x1a46 SELFDESTRUCT
[codex:686963] 0x1a47 SELFDESTRUCT
[codex:686963] 0x1a48 SELFDESTRUCT
[codex:686963] 0x1a49 SELFDESTRUCT
[codex:686963] 0x1a4a SELFDESTRUCT
[codex:686963] 0x1a4b SELFDESTRUCT
[codex:686963] 0x1a4c SELFDESTRUCT
[codex:686963] 0x1a4d SELFDESTRUCT
[codex:686963] 0x1a4e SELFDESTRUCT
[codex:686963] 0x1a4f SELFDESTRUCT
[codex:686963] 0x1a50 SELFDESTRUCT
[codex:686963] 0x1a51 SELFDESTRUCT
[codex:686963] 0x1a52 AND
[codex:686963] 0x1a53 SWAP1
[codex:686963]
[codex:686963] thinking
[codex:686963] **Investigating suspicious SELFDESTRUCT opcodes**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963]
[codex:686963] start=0x1a57
[codex:686963] end=0x1ae0
[codex:686963]
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op, f'OP_{op:02x}')
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] print(hex(i).rjust(6), name)
[codex:686963] i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 29ms:
[codex:686963] 0x1a57 JUMPDEST
[codex:686963] 0x1a58 PUSH2 1a83
[codex:686963] 0x1a5b PUSH32 4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143
[codex:686963] 0x1a7c PUSH1 00
[codex:686963] 0x1a7e SHL
[codex:686963] 0x1a7f PUSH2 1f26
[codex:686963] 0x1a82 JUMP
[codex:686963] 0x1a83 JUMPDEST
[codex:686963] 0x1a84 PUSH1 00
[codex:686963] 0x1a86 ADD
[codex:686963] 0x1a87 PUSH1 00
[codex:686963] 0x1a89 SWAP1
[codex:686963] 0x1a8a SLOAD
[codex:686963] 0x1a8b SWAP1
[codex:686963] 0x1a8c PUSH2 0100
[codex:686963] 0x1a8f EXP
[codex:686963] 0x1a90 SWAP1
[codex:686963] 0x1a91 DIV
[codex:686963] 0x1a92 PUSH1 ff
[codex:686963] 0x1a94 AND
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing internal upgrade function signature**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] pattern=bytes([0x61,0x1a,0x57])
[codex:686963] idx=[i for i in range(len(code)) if code.startswith(pattern,i)]
[codex:686963] print('PUSH2 1a57 at', [hex(i) for i in idx])
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 25ms:
[codex:686963] PUSH2 1a57 at ['0x1540']
[codex:686963]
[codex:686963] thinking
[codex:686963] **Inspecting function calls near 0x1540**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963]
[codex:686963] start=0x14d0
[codex:686963] end=0x1560
[codex:686963]
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op, f'OP_{op:02x}')
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] print(hex(i).rjust(6), name)
[codex:686963] i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 24ms:
[codex:686963] 0x14d0 STOP
[codex:686963] 0x14d1 STOP
[codex:686963] 0x14d2 STOP
[codex:686963] 0x14d3 STOP
[codex:686963] 0x14d4 STOP
[codex:686963] 0x14d5 DUP2
[codex:686963] 0x14d6 MSTORE
[codex:686963] 0x14d7 PUSH1 04
[codex:686963] 0x14d9 ADD
[codex:686963] 0x14da PUSH2 14e2
[codex:686963] 0x14dd SWAP1
[codex:686963] 0x14de PUSH2 32d8
[codex:686963] 0x14e1 JUMP
[codex:686963] 0x14e2 JUMPDEST
[codex:686963] 0x14e3 PUSH1 40
[codex:686963] 0x14e5 MLOAD
[codex:686963] 0x14e6 DUP1
[codex:686963] 0x14e7 SWAP2
[codex:686963] 0x14e8 SUB
[codex:686963] 0x14e9 SWAP1
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing internal function and selector mapping**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] pattern=bytes([0x61,0x14,0xeb])
[codex:686963] idx=[i for i in range(len(code)) if code.startswith(pattern,i)]
[codex:686963] print('PUSH2 14eb at', [hex(i) for i in idx])
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 26ms:
[codex:686963] PUSH2 14eb at ['0x14ad']
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing function jump addresses**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963]
[codex:686963] start=0x1380
[codex:686963] end=0x14c0
[codex:686963]
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op, f'OP_{op:02x}')
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] print(hex(i).rjust(6), name)
[codex:686963] i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 28ms:
[codex:686963] 0x1380 STOP
[codex:686963] 0x1381 STOP
[codex:686963] 0x1382 STOP
[codex:686963] 0x1383 STOP
[codex:686963] 0x1384 DUP2
[codex:686963] 0x1385 MSTORE
[codex:686963] 0x1386 PUSH1 04
[codex:686963] 0x1388 ADD
[codex:686963] 0x1389 PUSH2 1391
[codex:686963] 0x138c SWAP1
[codex:686963] 0x138d PUSH2 3218
[codex:686963] 0x1390 JUMP
[codex:686963] 0x1391 JUMPDEST
[codex:686963] 0x1392 PUSH1 40
[codex:686963] 0x1394 MLOAD
[codex:686963] 0x1395 DUP1
[codex:686963] 0x1396 SWAP2
[codex:686963] 0x1397 SUB
[codex:686963] 0x1398 SWAP1
[codex:686963] 0x1399 REVERT
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing upgrade-related low-level calls**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] # disasm 0x1a2d-0x1a57
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963]
[codex:686963] start=0x1a2d
[codex:686963] end=0x1a57
[codex:686963]
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op, f'OP_{op:02x}')
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] print(hex(i).rjust(6), name)
[codex:686963] i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 27ms:
[codex:686963] 0x1a2d JUMPDEST
[codex:686963] 0x1a2e PUSH1 00
[codex:686963] 0x1a30 PUSH1 06
[codex:686963] 0x1a32 PUSH1 00
[codex:686963] 0x1a34 SWAP1
[codex:686963] 0x1a35 SLOAD
[codex:686963] 0x1a36 SWAP1
[codex:686963] 0x1a37 PUSH2 0100
[codex:686963] 0x1a3a EXP
[codex:686963] 0x1a3b SWAP1
[codex:686963] 0x1a3c DIV
[codex:686963] 0x1a3d PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:686963] 0x1a52 AND
[codex:686963] 0x1a53 SWAP1
[codex:686963] 0x1a54 POP
[codex:686963] 0x1a55 SWAP1
[codex:686963] 0x1a56 JUMP
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing function selectors and upgrade logic**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] pattern=bytes([0x61,0x13,0x9a])
[codex:686963] idx=[i for i in range(len(code)) if code.startswith(pattern,i)]
[codex:686963] print('PUSH2 139a at', [hex(i) for i in idx])
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 29ms:
[codex:686963] PUSH2 139a at ['0x135c']
[codex:686963]
[codex:686963] thinking
[codex:686963] **Investigating code around address 0x135c**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963]
[codex:686963] start=0x1320
[codex:686963] end=0x1370
[codex:686963]
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op, f'OP_{op:02x}')
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] print(hex(i).rjust(6), name)
[codex:686963] i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 24ms:
[codex:686963] 0x1320 OP_4c
[codex:686963] 0x1321 DUP8
[codex:686963] 0x1322 PUSH30 bb56d39773ffffffffffffffffffffffffffffffffffffffff1661134461
[codex:686963] 0x1341 NOT
[codex:686963] 0x1342 OP_d6
[codex:686963] 0x1343 JUMP
[codex:686963] 0x1344 JUMPDEST
[codex:686963] 0x1345 PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:686963] 0x135a AND
[codex:686963] 0x135b EQ
[codex:686963] 0x135c PUSH2 139a
[codex:686963] 0x135f JUMPI
[codex:686963] 0x1360 PUSH1 40
[codex:686963] 0x1362 MLOAD
[codex:686963] 0x1363 PUSH32 08c379a000000000000000000000000000000000000000000000000000000000
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing CALLER opcode presence**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] opnames={
[codex:686963] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:686963] **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:686963] **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:686963] **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:686963] }
[codex:686963] base={
[codex:686963] 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:686963] 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:686963] 0x20:'SHA3',
[codex:686963] 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:686963] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:686963] 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:686963] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:686963] }
[codex:686963]
[codex:686963] opnames.update(base)
[codex:686963]
[codex:686963] # disassemble
[codex:686963] ops=[]
[codex:686963] i=0
[codex:686963] while i < len(code):
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op,'UNKNOWN')
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] ops.append((i,name,data))
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] ops.append((i,name,None))
[codex:686963] i+=1
[codex:686963]
[codex:686963] # count CALLER/ORIGIN opcodes
[codex:686963] caller=[o for o in ops if o[1]=='CALLER']
[codex:686963] origin=[o for o in ops if o[1]=='ORIGIN']
[codex:686963] print('CALLER count', len(caller), 'offsets', [hex(o[0]) for o in caller])
[codex:686963] print('ORIGIN count', len(origin), 'offsets', [hex(o[0]) for o in origin])
[codex:686963]
[codex:686963] # count CALLVALUE for sanity
[codex:686963] cv=[o for o in ops if o[1]=='CALLVALUE']
[codex:686963] print('CALLVALUE count', len(cv))
[codex:686963]
[codex:686963] # count JUMPDEST to see size
[codex:686963] print('JUMPDEST count', len([o for o in ops if o[1]=='JUMPDEST']))
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 32ms:
[codex:686963] CALLER count 1 offsets ['0x429e']
[codex:686963] ORIGIN count 1 offsets ['0x4277']
[codex:686963] CALLVALUE count 21
[codex:686963] JUMPDEST count 889
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing upgrade function access control and selectors**
[codex:686963]
[codex:686963] I'm investigating whether the upgrade function is externally accessible and unprotected by sender checks since no CALLER opcodes appear. I’m tracing the call graph and parsing external function selectors and their ABI decoding routines to identify which function triggers upgrade and if signature checks or other protections exist. This will help clarify if there's a critical vulnerability or if upgrades require valid signatures instead of relying on msg.sender.
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] # disasm 0x26c3
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963]
[codex:686963] start=0x26c3
[codex:686963] end=0x2750
[codex:686963]
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op, f'OP_{op:02x}')
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] print(hex(i).rjust(6), name)
[codex:686963] i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 24ms:
[codex:686963] 0x26c3 JUMPDEST
[codex:686963] 0x26c4 PUSH1 00
[codex:686963] 0x26c6 DUP1
[codex:686963] 0x26c7 PUSH1 00
[codex:686963] 0x26c9 PUSH1 40
[codex:686963] 0x26cb DUP5
[codex:686963] 0x26cc DUP7
[codex:686963] 0x26cd SUB
[codex:686963] 0x26ce SLT
[codex:686963] 0x26cf ISZERO
[codex:686963] 0x26d0 PUSH2 26dc
[codex:686963] 0x26d3 JUMPI
[codex:686963] 0x26d4 PUSH2 26db
[codex:686963] 0x26d7 PUSH2 3c38
[codex:686963] 0x26da JUMP
[codex:686963] 0x26db JUMPDEST
[codex:686963] 0x26dc JUMPDEST
[codex:686963] 0x26dd PUSH1 00
[codex:686963] 0x26df DUP5
[codex:686963] 0x26e0 ADD
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing potential upgrade mechanisms**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963]
[codex:686963] start=0x2200
[codex:686963] end=0x2290
[codex:686963]
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op, f'OP_{op:02x}')
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] print(hex(i).rjust(6), name)
[codex:686963] i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 30ms:
[codex:686963] 0x2200 PUSH2 2208
[codex:686963] 0x2203 DUP5
[codex:686963] 0x2204 PUSH2 1752
[codex:686963] 0x2207 JUMP
[codex:686963] 0x2208 JUMPDEST
[codex:686963] 0x2209 PUSH2 2247
[codex:686963] 0x220c JUMPI
[codex:686963] 0x220d PUSH1 40
[codex:686963] 0x220f MLOAD
[codex:686963] 0x2210 PUSH32 08c379a000000000000000000000000000000000000000000000000000000000
[codex:686963] 0x2231 DUP2
[codex:686963] 0x2232 MSTORE
[codex:686963] 0x2233 PUSH1 04
[codex:686963] 0x2235 ADD
[codex:686963] 0x2236 PUSH2 223e
[codex:686963] 0x2239 SWAP1
[codex:686963] 0x223a PUSH2 3498
[codex:686963] 0x223d JUMP
[codex:686963] 0x223e JUMPDEST
[codex:686963] 0x223f PUSH1 40
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing delegatecall and upgrade functions**
[codex:686963]
[codex:686963] I'm investigating how the delegatecall is used internally and whether upgrade functions are externally accessible by checking selectors against known upgrade function signatures. I’m also tracing internal functions that might trigger upgrades or privileged operations, while keeping an eye on potential initializer vulnerabilities and unreachable SELFDESTRUCT opcodes to assess risks.
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] # disassemble and list SELFDESTRUCT opcodes
[codex:686963] opnames={
[codex:686963] **{i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)},
[codex:686963] **{i: f'DUP{i-0x7f}' for i in range(0x80,0x90)},
[codex:686963] **{i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)},
[codex:686963] **{i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)},
[codex:686963] }
[codex:686963] base={0xff:'SELFDESTRUCT',0x5b:'JUMPDEST'}
[codex:686963] opnames.update(base)
[codex:686963]
[codex:686963] ops=[]
[codex:686963] i=0
[codex:686963] while i<len(code):
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op, None)
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] i+=1+n
[codex:686963] continue
[codex:686963] if name:
[codex:686963] ops.append((i,name))
[codex:686963] i+=1
[codex:686963]
[codex:686963] selfd=[o for o in ops if o[1]=='SELFDESTRUCT']
[codex:686963] jd=set(o[0] for o in ops if o[1]=='JUMPDEST')
[codex:686963] print('SELFDESTRUCT count', len(selfd))
[codex:686963] for off,_ in selfd:
[codex:686963] print(hex(off), 'is_jumpdest', off in jd)
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 31ms:
[codex:686963] SELFDESTRUCT count 0
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing upgradeability and access control**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] for sig in ['3659cfe6','4f1ef286','5c60da1b','f851a440','8f283970','52d1902d']:
[codex:686963] pattern=bytes.fromhex('63'+sig)
[codex:686963] idx=[i for i in range(len(code)) if code.startswith(pattern,i)]
[codex:686963] print(sig, idx)
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 33ms:
[codex:686963] 3659cfe6 []
[codex:686963] 4f1ef286 []
[codex:686963] 5c60da1b []
[codex:686963] f851a440 []
[codex:686963] 8f283970 []
[codex:686963] 52d1902d [184, 6847]
[codex:686963]
[codex:686963] thinking
[codex:686963] **Analyzing upgrade function selectors**
[codex:686963] exec
[codex:686963] /bin/bash -lc "python - <<'PY'
[codex:686963] from binascii import unhexlify
[codex:686963] import re
[codex:686963] text=open('/tmp/codex-multi-93vz2sxq/BYTECODE_BUNDLE.txt').read()
[codex:686963] hexstr=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)[2:]
[codex:686963] code=unhexlify(hexstr)
[codex:686963]
[codex:686963] opnames={**{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)}}
[codex:686963] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:686963] opnames.update(base)
[codex:686963]
[codex:686963] start=0x0a6a
[codex:686963] end=0x0f2c
[codex:686963]
[codex:686963] i=start
[codex:686963] while i<end:
[codex:686963] op=code[i]
[codex:686963] name=opnames.get(op, f'OP_{op:02x}')
[codex:686963] if 0x60<=op<=0x7f:
[codex:686963] n=op-0x5f
[codex:686963] data=code[i+1:i+1+n]
[codex:686963] print(hex(i).rjust(6), f'{name} {data.hex()}')
[codex:686963] i+=1+n
[codex:686963] else:
[codex:686963] print(hex(i).rjust(6), name)
[codex:686963] i+=1
[codex:686963] PY" in /tmp/codex-multi-93vz2sxq succeeded in 26ms:
[codex:686963] 0xa6a JUMPDEST
[codex:686963] 0xa6b PUSH1 04
[codex:686963] 0xa6d SLOAD
[codex:686963] 0xa6e DUP5
[codex:686963] 0xa6f PUSH1 03
[codex:686963] 0xa71 SLOAD
[codex:686963] 0xa72 PUSH2 0a7b
[codex:686963] 0xa75 SWAP2
[codex:686963] 0xa76 SWAP1
[codex:686963] 0xa77 PUSH2 3746
[codex:686963] 0xa7a JUMP
[codex:686963] 0xa7b JUMPDEST
[codex:686963] 0xa7c GT
[codex:686963] 0xa7d ISZERO
[codex:686963] 0xa7e PUSH2 0abc
[codex:686963] 0xa81 JUMPI
[codex:686963] 0xa82 PUSH1 40
[codex:686963] 0xa84 MLOAD
[codex:686963] 0xa85 PUSH32 08c379a000000000000000000000000000000000000000000000000000000000
[codex:686963] 0xaa6 DUP2
[codex:686963]
[codex:686963] thinking
[codex:686963] **Concluding no exploitable findings**
[codex:686963] codex
[codex:686963] {"no_findings":true,"summary":"No concrete, exploitable value-extraction path could be proven from the provided bytecode alone.","findings":[]}
[codex:686963] tokens used
[codex:686963] 236,843
[codex:686963] {"no_findings":true,"summary":"No concrete, exploitable value-extraction path could be proven from the provided bytecode alone.","findings":[]}
{
"codex": {
"ran_at": "2026-01-03T00:46:20.295655+00:00",
"returncode": 0
},
"summary": "No concrete, exploitable value-extraction path could be proven from the provided bytecode alone.",
"raw_final": {
"summary": "No concrete, exploitable value-extraction path could be proven from the provided bytecode alone.",
"findings": [],
"no_findings": true
},
"no_findings": true,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x0114 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0x744d49cc 00000019: GT 0000001a: PUSH2 0x00a0 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0xde35f5cb 00000024: GT 00000025: PUSH2 0x0064 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0xde35f5cb 0000002f: EQ 00000030: PUSH2 0x0392 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0xdfbc6269 0000003a: EQ 0000003b: PUSH2 0x03bd 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xe0acac7f 00000045: EQ 00000046: PUSH2 0x03e8 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xed72eb24 00000050: EQ 00000051: PUSH2 0x0413 00000054: JUMPI 00000055: DUP1 00000056: PUSH4 0xf358ec61 0000005b: EQ 0000005c: PUSH2 0x043e 0000005f: JUMPI 00000060: PUSH2 0x0114 00000063: JUMP 00000064: JUMPDEST 00000065: DUP1 00000066: PUSH4 0x744d49cc 0000006b: EQ 0000006c: PUSH2 0x02ab 0000006f: JUMPI 00000070: DUP1 00000071: PUSH4 0xb2b22a85 00000076: EQ 00000077: PUSH2 0x02d6 0000007a: JUMPI 0000007b: DUP1 0000007c: PUSH4 0xb81f853c 00000081: EQ 00000082: PUSH2 0x0301 00000085: JUMPI 00000086: DUP1 00000087: PUSH4 0xc7a983b5 0000008c: EQ 0000008d: PUSH2 0x032a 00000090: JUMPI 00000091: DUP1 00000092: PUSH4 0xdde4d950 00000097: EQ 00000098: PUSH2 0x0355 0000009b: JUMPI 0000009c: PUSH2 0x0114 0000009f: JUMP 000000a0: JUMPDEST 000000a1: DUP1 000000a2: PUSH4 0x4bd2d7f9 000000a7: GT 000000a8: PUSH2 0x00e7 000000ab: JUMPI 000000ac: DUP1 000000ad: PUSH4 0x4bd2d7f9 000000b2: EQ 000000b3: PUSH2 0x01b2 000000b6: JUMPI 000000b7: DUP1 000000b8: PUSH4 0x52d1902d 000000bd: EQ 000000be: PUSH2 0x01ef 000000c1: JUMPI 000000c2: DUP1 000000c3: PUSH4 0x593777b5 000000c8: EQ 000000c9: PUSH2 0x021a 000000cc: JUMPI 000000cd: DUP1 000000ce: PUSH4 0x5b69a7d8 000000d3: EQ 000000d4: PUSH2 0x0245 000000d7: JUMPI 000000d8: DUP1 000000d9: PUSH4 0x61241110 000000de: EQ 000000df: PUSH2 0x0282 000000e2: JUMPI 000000e3: PUSH2 0x0114 000000e6: JUMP 000000e7: JUMPDEST 000000e8: DUP1 000000e9: PUSH4 0x073b1422 000000ee: EQ 000000ef: PUSH2 0x0119 000000f2: JUMPI 000000f3: DUP1 000000f4: PUSH4 0x183bdeaa 000000f9: EQ 000000fa: PUSH2 0x0135 000000fd: JUMPI 000000fe: DUP1 000000ff: PUSH4 0x2333ad8b 00000104: EQ 00000105: PUSH2 0x0160 00000108: JUMPI 00000109: DUP1 0000010a: PUSH4 0x465c4d15 0000010f: EQ 00000110: PUSH2 0x0189 00000113: JUMPI 00000114: JUMPDEST 00000115: PUSH1 0x00 00000117: DUP1 00000118: REVERT 00000119: JUMPDEST 0000011a: PUSH2 0x0133 0000011d: PUSH1 0x04 0000011f: DUP1 00000120: CALLDATASIZE 00000121: SUB 00000122: DUP2 00000123: ADD 00000124: SWAP1 00000125: PUSH2 0x012e 00000128: SWAP2 00000129: SWAP1 0000012a: PUSH2 0x2669 0000012d: JUMP 0000012e: JUMPDEST 0000012f: PUSH2 0x0467 00000132: JUMP 00000133: JUMPDEST 00000134: STOP 00000135: JUMPDEST 00000136: CALLVALUE 00000137: DUP1 00000138: ISZERO 00000139: PUSH2 0x0141 0000013c: JUMPI 0000013d: PUSH1 0x00 0000013f: DUP1 00000140: REVERT 00000141: JUMPDEST 00000142: POP 00000143: PUSH2 0x014a 00000146: PUSH2 0x05de 00000149: JUMP 0000014a: JUMPDEST 0000014b: PUSH1 0x40 0000014d: MLOAD 0000014e: PUSH2 0x0157 00000151: SWAP2 00000152: SWAP1 00000153: PUSH2 0x3513 00000156: JUMP 00000157: JUMPDEST 00000158: PUSH1 0x40 0000015a: MLOAD 0000015b: DUP1 0000015c: SWAP2 0000015d: SUB 0000015e: SWAP1 0000015f: RETURN 00000160: JUMPDEST 00000161: CALLVALUE 00000162: DUP1 00000163: ISZERO 00000164: PUSH2 0x016c 00000167: JUMPI 00000168: PUSH1 0x00 0000016a: DUP1 0000016b: REVERT 0000016c: JUMPDEST 0000016d: POP 0000016e: PUSH2 0x0187 00000171: PUSH1 0x04 00000173: DUP1 00000174: CALLDATASIZE 00000175: SUB 00000176: DUP2 00000177: ADD 00000178: SWAP1 00000179: PUSH2 0x0182 0000017c: SWAP2 0000017d: SWAP1 0000017e: PUSH2 0x2945 00000181: JUMP 00000182: JUMPDEST 00000183: PUSH2 0x05f8 00000186: JUMP 00000187: JUMPDEST 00000188: STOP 00000189: JUMPDEST 0000018a: CALLVALUE 0000018b: DUP1 0000018c: ISZERO 0000018d: PUSH2 0x0195 00000190: JUMPI 00000191: PUSH1 0x00 00000193: DUP1 00000194: REVERT 00000195: JUMPDEST 00000196: POP 00000197: PUSH2 0x01b0 0000019a: PUSH1 0x04 0000019c: DUP1 0000019d: CALLDATASIZE 0000019e: SUB 0000019f: DUP2 000001a0: ADD 000001a1: SWAP1 000001a2: PUSH2 0x01ab 000001a5: SWAP2 000001a6: SWAP1 000001a7: PUSH2 0x2814 000001aa: JUMP 000001ab: JUMPDEST 000001ac: PUSH2 0x0a6a 000001af: JUMP 000001b0: JUMPDEST 000001b1: STOP 000001b2: JUMPDEST 000001b3: CALLVALUE 000001b4: DUP1 000001b5: ISZERO 000001b6: PUSH2 0x01be 000001b9: JUMPI 000001ba: PUSH1 0x00 000001bc: DUP1 000001bd: REVERT 000001be: JUMPDEST 000001bf: POP 000001c0: PUSH2 0x01d9 000001c3: PUSH1 0x04 000001c5: DUP1 000001c6: CALLDATASIZE 000001c7: SUB 000001c8: DUP2 000001c9: ADD 000001ca: SWAP1 000001cb: PUSH2 0x01d4 000001ce: SWAP2 000001cf: SWAP1 000001d0: PUSH2 0x27e7 000001d3: JUMP 000001d4: JUMPDEST 000001d5: PUSH2 0x0f2c 000001d8: JUMP 000001d9: JUMPDEST 000001da: PUSH1 0x40 000001dc: MLOAD 000001dd: PUSH2 0x01e6 000001e0: SWAP2 000001e1: SWAP1 000001e2: PUSH2 0x30e5 000001e5: JUMP 000001e6: JUMPDEST 000001e7: PUSH1 0x40 000001e9: MLOAD 000001ea: DUP1 000001eb: SWAP2 000001ec: SUB 000001ed: SWAP1 000001ee: RETURN 000001ef: JUMPDEST 000001f0: CALLVALUE 000001f1: DUP1 000001f2: ISZERO 000001f3: PUSH2 0x01fb 000001f6: JUMPI 000001f7: PUSH1 0x00 000001f9: DUP1 000001fa: REVERT 000001fb: JUMPDEST 000001fc: POP 000001fd: PUSH2 0x0204 00000200: PUSH2 0x0f44 00000203: JUMP 00000204: JUMPDEST 00000205: PUSH1 0x40 00000207: MLOAD 00000208: PUSH2 0x0211 0000020b: SWAP2 0000020c: SWAP1 0000020d: PUSH2 0x30e5 00000210: JUMP 00000211: JUMPDEST 00000212: PUSH1 0x40 00000214: MLOAD 00000215: DUP1 00000216: SWAP2 00000217: SUB 00000218: SWAP1 00000219: RETURN 0000021a: JUMPDEST 0000021b: CALLVALUE 0000021c: DUP1 0000021d: ISZERO 0000021e: PUSH2 0x0226 00000221: JUMPI 00000222: PUSH1 0x00 00000224: DUP1 00000225: REVERT 00000226: JUMPDEST 00000227: POP 00000228: PUSH2 0x022f 0000022b: PUSH2 0x0ffd 0000022e: JUMP 0000022f: JUMPDEST 00000230: PUSH1 0x40 00000232: MLOAD 00000233: PUSH2 0x023c 00000236: SWAP2 00000237: SWAP1 00000238: PUSH2 0x34f8 0000023b: JUMP 0000023c: JUMPDEST 0000023d: PUSH1 0x40 0000023f: MLOAD 00000240: DUP1 00000241: SWAP2 00000242: SUB 00000243: SWAP1 00000244: RETURN 00000245: JUMPDEST 00000246: CALLVALUE 00000247: DUP1 00000248: ISZERO 00000249: PUSH2 0x0251 0000024c: JUMPI 0000024d: PUSH1 0x00 0000024f: DUP1 00000250: REVERT 00000251: JUMPDEST 00000252: POP 00000253: PUSH2 0x026c 00000256: PUSH1 0x04 00000258: DUP1 00000259: CALLDATASIZE 0000025a: SUB 0000025b: DUP2 0000025c: ADD 0000025d: SWAP1 0000025e: PUSH2 0x0267 00000261: SWAP2 00000262: SWAP1 00000263: PUSH2 0x2723 00000266: JUMP 00000267: JUMPDEST 00000268: PUSH2 0x1003 0000026b: JUMP 0000026c: JUMPDEST 0000026d: PUSH1 0x40 0000026f: MLOAD 00000270: PUSH2 0x0279 00000273: SWAP2 00000274: SWAP1 00000275: PUSH2 0x30ca 00000278: JUMP 00000279: JUMPDEST 0000027a: PUSH1 0x40 0000027c: MLOAD 0000027d: DUP1 0000027e: SWAP2 0000027f: SUB 00000280: SWAP1 00000281: RETURN 00000282: JUMPDEST 00000283: CALLVALUE 00000284: DUP1 00000285: ISZERO 00000286: PUSH2 0x028e 00000289: JUMPI 0000028a: PUSH1 0x00 0000028c: DUP1 0000028d: REVERT 0000028e: JUMPDEST 0000028f: POP 00000290: PUSH2 0x02a9 00000293: PUSH1 0x04 00000295: DUP1 00000296: CALLDATASIZE 00000297: SUB 00000298: DUP2 00000299: ADD 0000029a: SWAP1 0000029b: PUSH2 0x02a4 0000029e: SWAP2 0000029f: SWAP1 000002a0: PUSH2 0x28ae 000002a3: JUMP 000002a4: JUMPDEST 000002a5: PUSH2 0x1042 000002a8: JUMP 000002a9: JUMPDEST 000002aa: STOP 000002ab: JUMPDEST 000002ac: CALLVALUE 000002ad: DUP1 000002ae: ISZERO 000002af: PUSH2 0x02b7 000002b2: JUMPI 000002b3: PUSH1 0x00 000002b5: DUP1 000002b6: REVERT 000002b7: JUMPDEST 000002b8: POP 000002b9: PUSH2 0x02c0 000002bc: PUSH2 0x126a 000002bf: JUMP 000002c0: JUMPDEST 000002c1: PUSH1 0x40 000002c3: MLOAD 000002c4: PUSH2 0x02cd 000002c7: SWAP2 000002c8: SWAP1 000002c9: PUSH2 0x34f8 000002cc: JUMP 000002cd: JUMPDEST 000002ce: PUSH1 0x40 000002d0: MLOAD 000002d1: DUP1 000002d2: SWAP2 000002d3: SUB 000002d4: SWAP1 000002d5: RETURN 000002d6: JUMPDEST 000002d7: CALLVALUE 000002d8: DUP1 000002d9: ISZERO 000002da: PUSH2 0x02e2 000002dd: JUMPI 000002de: PUSH1 0x00 000002e0: DUP1 000002e1: REVERT 000002e2: JUMPDEST 000002e3: POP 000002e4: PUSH2 0x02eb 000002e7: PUSH2 0x1270 000002ea: JUMP 000002eb: JUMPDEST 000002ec: PUSH1 0x40 000002ee: MLOAD 000002ef: PUSH2 0x02f8 000002f2: SWAP2 000002f3: SWAP1 000002f4: PUSH2 0x34f8 000002f7: JUMP 000002f8: JUMPDEST 000002f9: PUSH1 0x40 000002fb: MLOAD 000002fc: DUP1 000002fd: SWAP2 000002fe: SUB 000002ff: SWAP1 00000300: RETURN 00000301: JUMPDEST 00000302: CALLVALUE 00000303: DUP1 00000304: ISZERO 00000305: PUSH2 0x030d 00000308: JUMPI 00000309: PUSH1 0x00 0000030b: DUP1 0000030c: REVERT 0000030d: JUMPDEST 0000030e: POP 0000030f: PUSH2 0x0328 00000312: PUSH1 0x04 00000314: DUP1 00000315: CALLDATASIZE 00000316: SUB 00000317: DUP2 00000318: ADD 00000319: SWAP1 0000031a: PUSH2 0x0323 0000031d: SWAP2 0000031e: SWAP1 0000031f: PUSH2 0x26c3 00000322: JUMP 00000323: JUMPDEST 00000324: PUSH2 0x1276 00000327: JUMP 00000328: JUMPDEST 00000329: STOP 0000032a: JUMPDEST 0000032b: CALLVALUE 0000032c: DUP1 0000032d: ISZERO 0000032e: PUSH2 0x0336 00000331: JUMPI 00000332: PUSH1 0x00 00000334: DUP1 00000335: REVERT 00000336: JUMPDEST 00000337: POP 00000338: PUSH2 0x033f 0000033b: PUSH2 0x154a 0000033e: JUMP 0000033f: JUMPDEST 00000340: PUSH1 0x40 00000342: MLOAD 00000343: PUSH2 0x034c 00000346: SWAP2 00000347: SWAP1 00000348: PUSH2 0x31a0 0000034b: JUMP 0000034c: JUMPDEST 0000034d: PUSH1 0x40 0000034f: MLOAD 00000350: DUP1 00000351: SWAP2 00000352: SUB 00000353: SWAP1 00000354: RETURN 00000355: JUMPDEST 00000356: CALLVALUE 00000357: DUP1 00000358: ISZERO 00000359: PUSH2 0x0361 0000035c: JUMPI 0000035d: PUSH1 0x00 0000035f: DUP1 00000360: REVERT 00000361: JUMPDEST 00000362: POP 00000363: PUSH2 0x037c 00000366: PUSH1 0x04 00000368: DUP1 00000369: CALLDATASIZE 0000036a: SUB 0000036b: DUP2 0000036c: ADD 0000036d: SWAP1 0000036e: PUSH2 0x0377 00000371: SWAP2 00000372: SWAP1 00000373: PUSH2 0x2723 00000376: JUMP 00000377: JUMPDEST 00000378: PUSH2 0x1570 0000037b: JUMP 0000037c: JUMPDEST 0000037d: PUSH1 0x40 0000037f: MLOAD 00000380: PUSH2 0x0389 00000383: SWAP2 00000384: SWAP1 00000385: PUSH2 0x30e5 00000388: JUMP 00000389: JUMPDEST 0000038a: PUSH1 0x40 0000038c: MLOAD 0000038d: DUP1 0000038e: SWAP2 0000038f: SUB 00000390: SWAP1 00000391: RETURN 00000392: JUMPDEST 00000393: CALLVALUE 00000394: DUP1 00000395: ISZERO 00000396: PUSH2 0x039e 00000399: JUMPI 0000039a: PUSH1 0x00 0000039c: DUP1 0000039d: REVERT 0000039e: JUMPDEST 0000039f: POP 000003a0: PUSH2 0x03a7 000003a3: PUSH2 0x1588 000003a6: JUMP 000003a7: JUMPDEST 000003a8: PUSH1 0x40 000003aa: MLOAD 000003ab: PUSH2 0x03b4 000003ae: SWAP2 000003af: SWAP1 000003b0: PUSH2 0x3513 000003b3: JUMP 000003b4: JUMPDEST 000003b5: PUSH1 0x40 000003b7: MLOAD 000003b8: DUP1 000003b9: SWAP2 000003ba: SUB 000003bb: SWAP1 000003bc: RETURN 000003bd: JUMPDEST 000003be: CALLVALUE 000003bf: DUP1 000003c0: ISZERO 000003c1: PUSH2 0x03c9 000003c4: JUMPI 000003c5: PUSH1 0x00 000003c7: DUP1 000003c8: REVERT 000003c9: JUMPDEST 000003ca: POP 000003cb: PUSH2 0x03d2 000003ce: PUSH2 0x15a2 000003d1: JUMP 000003d2: JUMPDEST 000003d3: PUSH1 0x40 000003d5: MLOAD 000003d6: PUSH2 0x03df 000003d9: SWAP2 000003da: SWAP1 000003db: PUSH2 0x3513 000003de: JUMP 000003df: JUMPDEST 000003e0: PUSH1 0x40 000003e2: MLOAD 000003e3: DUP1 000003e4: SWAP2 000003e5: SUB 000003e6: SWAP1 000003e7: RETURN 000003e8: JUMPDEST 000003e9: CALLVALUE 000003ea: DUP1 000003eb: ISZERO 000003ec: PUSH2 0x03f4 000003ef: JUMPI 000003f0: PUSH1 0x00 000003f2: DUP1 000003f3: REVERT 000003f4: JUMPDEST 000003f5: POP 000003f6: PUSH2 0x03fd 000003f9: PUSH2 0x15bc 000003fc: JUMP 000003fd: JUMPDEST 000003fe: PUSH1 0x40 00000400: MLOAD 00000401: PUSH2 0x040a 00000404: SWAP2 00000405: SWAP1 00000406: PUSH2 0x34f8 00000409: JUMP 0000040a: JUMPDEST 0000040b: PUSH1 0x40 0000040d: MLOAD 0000040e: DUP1 0000040f: SWAP2 00000410: SUB 00000411: SWAP1 00000412: RETURN 00000413: JUMPDEST 00000414: CALLVALUE 00000415: DUP1 00000416: ISZERO 00000417: PUSH2 0x041f 0000041a: JUMPI 0000041b: PUSH1 0x00 0000041d: DUP1 0000041e: REVERT 0000041f: JUMPDEST 00000420: POP 00000421: PUSH2 0x0428 00000424: PUSH2 0x15c2 00000427: JUMP 00000428: JUMPDEST 00000429: PUSH1 0x40 0000042b: MLOAD 0000042c: PUSH2 0x0435 0000042f: SWAP2 00000430: SWAP1 00000431: PUSH2 0x34f8 00000434: JUMP 00000435: JUMPDEST 00000436: PUSH1 0x40 00000438: MLOAD 00000439: DUP1 0000043a: SWAP2 0000043b: SUB 0000043c: SWAP1 0000043d: RETURN 0000043e: JUMPDEST 0000043f: CALLVALUE 00000440: DUP1 00000441: ISZERO 00000442: PUSH2 0x044a 00000445: JUMPI 00000446: PUSH1 0x00 00000448: DUP1 00000449: REVERT 0000044a: JUMPDEST 0000044b: POP 0000044c: PUSH2 0x0465 0000044f: PUSH1 0x04 00000451: DUP1 00000452: CALLDATASIZE 00000453: SUB 00000454: DUP2 00000455: ADD 00000456: SWAP1 00000457: PUSH2 0x0460 0000045a: SWAP2 0000045b: SWAP1 0000045c: PUSH2 0x2750 0000045f: JUMP 00000460: JUMPDEST 00000461: PUSH2 0x15cf 00000464: JUMP 00000465: JUMPDEST 00000466: STOP 00000467: JUMPDEST 00000468: CALLVALUE 00000469: PUSH1 0x01 0000046b: SLOAD 0000046c: GT 0000046d: ISZERO 0000046e: DUP1 0000046f: ISZERO 00000470: PUSH2 0x047b 00000473: JUMPI 00000474: POP 00000475: PUSH1 0x02 00000477: SLOAD 00000478: CALLVALUE 00000479: GT 0000047a: ISZERO 0000047b: JUMPDEST 0000047c: PUSH2 0x04ba 0000047f: JUMPI 00000480: PUSH1 0x40 00000482: MLOAD 00000483: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000004a4: DUP2 000004a5: MSTORE 000004a6: PUSH1 0x04 000004a8: ADD 000004a9: PUSH2 0x04b1 000004ac: SWAP1 000004ad: PUSH2 0x3418 000004b0: JUMP 000004b1: JUMPDEST 000004b2: PUSH1 0x40 000004b4: MLOAD 000004b5: DUP1 000004b6: SWAP2 000004b7: SUB 000004b8: SWAP1 000004b9: REVERT 000004ba: JUMPDEST 000004bb: PUSH1 0x00 000004bd: PUSH1 0xf8 000004bf: SHL 000004c0: DUP2 000004c1: PUSH1 0x00 000004c3: PUSH1 0x15 000004c5: DUP2 000004c6: LT 000004c7: PUSH2 0x04d3 000004ca: JUMPI 000004cb: PUSH2 0x04d2 000004ce: PUSH2 0x3bbc 000004d1: JUMP 000004d2: JUMPDEST 000004d3: JUMPDEST 000004d4: BYTE 000004d5: PUSH1 0xf8 000004d7: SHL 000004d8: PUSH31 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000004f8: NOT 000004f9: AND 000004fa: EQ 000004fb: PUSH2 0x0539 000004fe: JUMPI 000004ff: PUSH1 0x40 00000501: MLOAD 00000502: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000523: DUP2 00000524: MSTORE 00000525: PUSH1 0x04 00000527: ADD 00000528: PUSH2 0x0530 0000052b: SWAP1 0000052c: PUSH2 0x3298 0000052f: JUMP 00000530: JUMPDEST 00000531: PUSH1 0x40 00000533: MLOAD 00000534: DUP1 00000535: SWAP2 00000536: SUB 00000537: SWAP1 00000538: REVERT 00000539: JUMPDEST 0000053a: PUSH1 0x00 0000053c: DUP1 0000053d: PUSH1 0x02 0000053f: SWAP1 00000540: SLOAD 00000541: SWAP1 00000542: PUSH2 0x0100 00000545: EXP 00000546: SWAP1 00000547: DIV 00000548: PUSH8 0xffffffffffffffff 00000551: AND 00000552: SWAP1 00000553: POP 00000554: PUSH1 0x01 00000556: PUSH1 0x00 00000558: PUSH1 0x02 0000055a: DUP3 0000055b: DUP3 0000055c: DUP3 0000055d: SWAP1 0000055e: SLOAD 0000055f: SWAP1 00000560: PUSH2 0x0100 00000563: EXP 00000564: SWAP1 00000565: DIV 00000566: PUSH8 0xffffffffffffffff 0000056f: AND 00000570: PUSH2 0x0579 00000573: SWAP2 00000574: SWAP1 00000575: PUSH2 0x379c 00000578: JUMP 00000579: JUMPDEST 0000057a: SWAP3 0000057b: POP 0000057c: PUSH2 0x0100 0000057f: EXP 00000580: DUP2 00000581: SLOAD 00000582: DUP2 00000583: PUSH8 0xffffffffffffffff 0000058c: MUL 0000058d: NOT 0000058e: AND 0000058f: SWAP1 00000590: DUP4 00000591: PUSH8 0xffffffffffffffff 0000059a: AND 0000059b: MUL 0000059c: OR 0000059d: SWAP1 0000059e: SSTORE 0000059f: POP 000005a0: PUSH32 0x01bc4bb7c8ad3891d2159f29189c74d9528104fb81b05893732d1f06621e2c4f 000005c1: DUP2 000005c2: DUP4 000005c3: CALLVALUE 000005c4: PUSH1 0x40 000005c6: MLOAD 000005c7: PUSH2 0x05d2 000005ca: SWAP4 000005cb: SWAP3 000005cc: SWAP2 000005cd: SWAP1 000005ce: PUSH2 0x35d4 000005d1: JUMP 000005d2: JUMPDEST 000005d3: PUSH1 0x40 000005d5: MLOAD 000005d6: DUP1 000005d7: SWAP2 000005d8: SUB 000005d9: SWAP1 000005da: LOG1 000005db: POP 000005dc: POP 000005dd: JUMP 000005de: JUMPDEST 000005df: PUSH1 0x07 000005e1: PUSH1 0x00 000005e3: SWAP1 000005e4: SLOAD 000005e5: SWAP1 000005e6: PUSH2 0x0100 000005e9: EXP 000005ea: SWAP1 000005eb: DIV 000005ec: PUSH8 0xffffffffffffffff 000005f5: AND 000005f6: DUP2 000005f7: JUMP 000005f8: JUMPDEST 000005f9: PUSH1 0x06 000005fb: PUSH1 0x14 000005fd: SWAP1 000005fe: SLOAD 000005ff: SWAP1 00000600: PUSH2 0x0100 00000603: EXP 00000604: SWAP1 00000605: DIV 00000606: PUSH8 0xffffffffffffffff 0000060f: AND 00000610: PUSH8 0xffffffffffffffff 00000619: AND 0000061a: DUP7 0000061b: PUSH8 0xffffffffffffffff 00000624: AND 00000625: LT 00000626: ISZERO 00000627: PUSH2 0x0665 0000062a: JUMPI 0000062b: PUSH1 0x40 0000062d: MLOAD 0000062e: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 0000064f: DUP2 00000650: MSTORE 00000651: PUSH1 0x04 00000653: ADD 00000654: PUSH2 0x065c 00000657: SWAP1 00000658: PUSH2 0x3438 0000065b: JUMP 0000065c: JUMPDEST 0000065d: PUSH1 0x40 0000065f: MLOAD 00000660: DUP1 00000661: SWAP2 00000662: SUB 00000663: SWAP1 00000664: REVERT 00000665: JUMPDEST 00000666: PUSH1 0x00 00000668: PUSH1 0x40 0000066a: SWAP1 0000066b: POP 0000066c: PUSH1 0x00 0000066e: DUP2 0000066f: DUP8 00000670: DUP8 00000671: SWAP1 00000672: POP 00000673: PUSH2 0x067c 00000676: SWAP2 00000677: SWAP1 00000678: PUSH2 0x37da 0000067b: JUMP 0000067c: JUMPDEST 0000067d: SWAP1 0000067e: POP 0000067f: PUSH1 0x00 00000681: DUP2 00000682: GT 00000683: PUSH2 0x06c1 00000686: JUMPI 00000687: PUSH1 0x40 00000689: MLOAD 0000068a: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000006ab: DUP2 000006ac: MSTORE 000006ad: PUSH1 0x04 000006af: ADD 000006b0: PUSH2 0x06b8 000006b3: SWAP1 000006b4: PUSH2 0x34d8 000006b7: JUMP 000006b8: JUMPDEST 000006b9: PUSH1 0x40 000006bb: MLOAD 000006bc: DUP1 000006bd: SWAP2 000006be: SUB 000006bf: SWAP1 000006c0: REVERT 000006c1: JUMPDEST 000006c2: PUSH1 0x00 000006c4: PUSH1 0x02 000006c6: ADDRESS 000006c7: PUSH1 0x07 000006c9: PUSH1 0x00 000006cb: SWAP1 000006cc: SLOAD 000006cd: SWAP1 000006ce: PUSH2 0x0100 000006d1: EXP 000006d2: SWAP1 000006d3: DIV 000006d4: PUSH8 0xffffffffffffffff 000006dd: AND 000006de: DUP9 000006df: DUP12 000006e0: DUP12 000006e1: PUSH1 0x40 000006e3: MLOAD 000006e4: PUSH1 0x20 000006e6: ADD 000006e7: PUSH2 0x06f4 000006ea: SWAP6 000006eb: SWAP5 000006ec: SWAP4 000006ed: SWAP3 000006ee: SWAP2 000006ef: SWAP1 000006f0: PUSH2 0x2f68 000006f3: JUMP 000006f4: JUMPDEST 000006f5: PUSH1 0x40 000006f7: MLOAD 000006f8: PUSH1 0x20 000006fa: DUP2 000006fb: DUP4 000006fc: SUB 000006fd: SUB 000006fe: DUP2 000006ff: MSTORE 00000700: SWAP1 00000701: PUSH1 0x40 00000703: MSTORE 00000704: PUSH1 0x40 00000706: MLOAD 00000707: PUSH2 0x0710 0000070a: SWAP2 0000070b: SWAP1 0000070c: PUSH2 0x3013 0000070f: JUMP 00000710: JUMPDEST 00000711: PUSH1 0x20 00000713: PUSH1 0x40 00000715: MLOAD 00000716: DUP1 00000717: DUP4 00000718: SUB 00000719: DUP2 0000071a: DUP6 0000071b: GAS 0000071c: STATICCALL 0000071d: ISZERO 0000071e: DUP1 0000071f: ISZERO 00000720: PUSH2 0x072d 00000723: JUMPI 00000724: RETURNDATASIZE 00000725: PUSH1 0x00 00000727: DUP1 00000728: RETURNDATACOPY 00000729: RETURNDATASIZE 0000072a: PUSH1 0x00 0000072c: REVERT 0000072d: JUMPDEST 0000072e: POP 0000072f: POP 00000730: POP 00000731: PUSH1 0x40 00000733: MLOAD 00000734: RETURNDATASIZE 00000735: PUSH1 0x1f 00000737: NOT 00000738: PUSH1 0x1f 0000073a: DUP3 0000073b: ADD 0000073c: AND 0000073d: DUP3 0000073e: ADD 0000073f: DUP1 00000740: PUSH1 0x40 00000742: MSTORE 00000743: POP 00000744: DUP2 00000745: ADD 00000746: SWAP1 00000747: PUSH2 0x0750 0000074a: SWAP2 0000074b: SWAP1 0000074c: PUSH2 0x2696 0000074f: JUMP 00000750: JUMPDEST 00000751: SWAP1 00000752: POP 00000753: PUSH1 0x06 00000755: PUSH1 0x00 00000757: SWAP1 00000758: SLOAD 00000759: SWAP1 0000075a: PUSH2 0x0100 0000075d: EXP 0000075e: SWAP1 0000075f: DIV 00000760: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000775: AND 00000776: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000078b: AND 0000078c: PUSH4 0x1d574bc6 00000791: DUP11 00000792: DUP4 00000793: DUP9 00000794: DUP9 00000795: PUSH1 0x40 00000797: MLOAD 00000798: DUP6 00000799: PUSH4 0xffffffff 0000079e: AND 0000079f: PUSH1 0xe0 000007a1: SHL 000007a2: DUP2 000007a3: MSTORE 000007a4: PUSH1 0x04 000007a6: ADD 000007a7: PUSH2 0x07b3 000007aa: SWAP5 000007ab: SWAP4 000007ac: SWAP3 000007ad: SWAP2 000007ae: SWAP1 000007af: PUSH2 0x360b 000007b2: JUMP 000007b3: JUMPDEST 000007b4: PUSH1 0x20 000007b6: PUSH1 0x40 000007b8: MLOAD 000007b9: DUP1 000007ba: DUP4 000007bb: SUB 000007bc: DUP2 000007bd: DUP7 000007be: DUP1 000007bf: EXTCODESIZE 000007c0: ISZERO 000007c1: DUP1 000007c2: ISZERO 000007c3: PUSH2 0x07cb 000007c6: JUMPI 000007c7: PUSH1 0x00 000007c9: DUP1 000007ca: REVERT 000007cb: JUMPDEST 000007cc: POP 000007cd: GAS 000007ce: STATICCALL 000007cf: ISZERO 000007d0: DUP1 000007d1: ISZERO 000007d2: PUSH2 0x07df 000007d5: JUMPI 000007d6: RETURNDATASIZE 000007d7: PUSH1 0x00 000007d9: DUP1 000007da: RETURNDATACOPY 000007db: RETURNDATASIZE 000007dc: PUSH1 0x00 000007de: REVERT 000007df: JUMPDEST 000007e0: POP 000007e1: POP 000007e2: POP 000007e3: POP 000007e4: PUSH1 0x40 000007e6: MLOAD 000007e7: RETURNDATASIZE 000007e8: PUSH1 0x1f 000007ea: NOT 000007eb: PUSH1 0x1f 000007ed: DUP3 000007ee: ADD 000007ef: AND 000007f0: DUP3 000007f1: ADD 000007f2: DUP1 000007f3: PUSH1 0x40 000007f5: MSTORE 000007f6: POP 000007f7: DUP2 000007f8: ADD 000007f9: SWAP1 000007fa: PUSH2 0x0803 000007fd: SWAP2 000007fe: SWAP1 000007ff: PUSH2 0x263c 00000802: JUMP 00000803: JUMPDEST 00000804: PUSH2 0x0842 00000807: JUMPI 00000808: PUSH1 0x40 0000080a: MLOAD 0000080b: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 0000082c: DUP2 0000082d: MSTORE 0000082e: PUSH1 0x04 00000830: ADD 00000831: PUSH2 0x0839 00000834: SWAP1 00000835: PUSH2 0x3378 00000838: JUMP 00000839: JUMPDEST 0000083a: PUSH1 0x40 0000083c: MLOAD 0000083d: DUP1 0000083e: SWAP2 0000083f: SUB 00000840: SWAP1 00000841: REVERT 00000842: JUMPDEST 00000843: DUP6 00000844: PUSH1 0x08 00000846: PUSH1 0x00 00000848: PUSH1 0x07 0000084a: PUSH1 0x00 0000084c: SWAP1 0000084d: SLOAD 0000084e: SWAP1 0000084f: PUSH2 0x0100 00000852: EXP 00000853: SWAP1 00000854: DIV 00000855: PUSH8 0xffffffffffffffff 0000085e: AND 0000085f: PUSH8 0xffffffffffffffff 00000868: AND 00000869: PUSH8 0xffffffffffffffff 00000872: AND 00000873: DUP2 00000874: MSTORE 00000875: PUSH1 0x20 00000877: ADD 00000878: SWAP1 00000879: DUP2 0000087a: MSTORE 0000087b: PUSH1 0x20 0000087d: ADD 0000087e: PUSH1 0x00 00000880: KECCAK256 00000881: DUP2 00000882: SWAP1 00000883: SSTORE 00000884: POP 00000885: PUSH1 0x00 00000887: DUP3 00000888: PUSH8 0xffffffffffffffff 00000891: DUP2 00000892: GT 00000893: ISZERO 00000894: PUSH2 0x08a0 00000897: JUMPI 00000898: PUSH2 0x089f 0000089b: PUSH2 0x3beb 0000089e: JUMP 0000089f: JUMPDEST 000008a0: JUMPDEST 000008a1: PUSH1 0x40 000008a3: MLOAD 000008a4: SWAP1 000008a5: DUP1 000008a6: DUP3 000008a7: MSTORE 000008a8: DUP1 000008a9: PUSH1 0x20 000008ab: MUL 000008ac: PUSH1 0x20 000008ae: ADD 000008af: DUP3 000008b0: ADD 000008b1: PUSH1 0x40 000008b3: MSTORE 000008b4: DUP1 000008b5: ISZERO 000008b6: PUSH2 0x08ce 000008b9: JUMPI 000008ba: DUP2 000008bb: PUSH1 0x20 000008bd: ADD 000008be: PUSH1 0x20 000008c0: DUP3 000008c1: MUL 000008c2: DUP1 000008c3: CALLDATASIZE 000008c4: DUP4 000008c5: CALLDATACOPY 000008c6: DUP1 000008c7: DUP3 000008c8: ADD 000008c9: SWAP2 000008ca: POP 000008cb: POP 000008cc: SWAP1 000008cd: POP 000008ce: JUMPDEST 000008cf: POP 000008d0: SWAP1 000008d1: POP 000008d2: PUSH1 0x00 000008d4: JUMPDEST 000008d5: DUP4 000008d6: DUP2 000008d7: LT 000008d8: ISZERO 000008d9: PUSH2 0x09c9 000008dc: JUMPI 000008dd: PUSH1 0x00 000008df: DUP11 000008e0: DUP11 000008e1: DUP8 000008e2: DUP5 000008e3: PUSH2 0x08ec 000008e6: SWAP2 000008e7: SWAP1 000008e8: PUSH2 0x380b 000008eb: JUMP 000008ec: JUMPDEST 000008ed: SWAP1 000008ee: DUP9 000008ef: PUSH1 0x01 000008f1: DUP7 000008f2: PUSH2 0x08fb 000008f5: SWAP2 000008f6: SWAP1 000008f7: PUSH2 0x3746 000008fa: JUMP 000008fb: JUMPDEST 000008fc: PUSH2 0x0905 000008ff: SWAP2 00000900: SWAP1 00000901: PUSH2 0x380b 00000904: JUMP 00000905: JUMPDEST 00000906: SWAP3 00000907: PUSH2 0x0912 0000090a: SWAP4 0000090b: SWAP3 0000090c: SWAP2 0000090d: SWAP1 0000090e: PUSH2 0x370b 00000911: JUMP 00000912: JUMPDEST 00000913: DUP1 00000914: DUP1 00000915: PUSH1 0x1f 00000917: ADD 00000918: PUSH1 0x20 0000091a: DUP1 0000091b: SWAP2 0000091c: DIV 0000091d: MUL 0000091e: PUSH1 0x20 00000920: ADD 00000921: PUSH1 0x40 00000923: MLOAD 00000924: SWAP1 00000925: DUP2 00000926: ADD 00000927: PUSH1 0x40 00000929: MSTORE 0000092a: DUP1 0000092b: SWAP4 0000092c: SWAP3 0000092d: SWAP2 0000092e: SWAP1 0000092f: DUP2 00000930: DUP2 00000931: MSTORE 00000932: PUSH1 0x20 00000934: ADD 00000935: DUP4 00000936: DUP4 00000937: DUP1 00000938: DUP3 00000939: DUP5 0000093a: CALLDATACOPY 0000093b: PUSH1 0x00 0000093d: DUP2 0000093e: DUP5 0000093f: ADD 00000940: MSTORE 00000941: PUSH1 0x1f 00000943: NOT 00000944: PUSH1 0x1f 00000946: DUP3 00000947: ADD 00000948: AND 00000949: SWAP1 0000094a: POP 0000094b: DUP1 0000094c: DUP4 0000094d: ADD 0000094e: SWAP3 0000094f: POP 00000950: POP 00000951: POP 00000952: POP 00000953: POP 00000954: POP 00000955: POP 00000956: SWAP1 00000957: POP 00000958: PUSH1 0x00 0000095a: DUP2 0000095b: DUP1 0000095c: MLOAD 0000095d: SWAP1 0000095e: PUSH1 0x20 00000960: ADD 00000961: KECCAK256 00000962: PUSH1 0x00 00000964: SHR 00000965: SWAP1 00000966: POP 00000967: DUP1 00000968: DUP5 00000969: DUP5 0000096a: DUP2 0000096b: MLOAD 0000096c: DUP2 0000096d: LT 0000096e: PUSH2 0x097a 00000971: JUMPI 00000972: PUSH2 0x0979 00000975: PUSH2 0x3bbc 00000978: JUMP 00000979: JUMPDEST 0000097a: JUMPDEST 0000097b: PUSH1 0x20 0000097d: MUL 0000097e: PUSH1 0x20 00000980: ADD 00000981: ADD 00000982: SWAP1 00000983: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000998: AND 00000999: SWAP1 0000099a: DUP2 0000099b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000009b0: AND 000009b1: DUP2 000009b2: MSTORE 000009b3: POP 000009b4: POP 000009b5: POP 000009b6: POP 000009b7: DUP1 000009b8: DUP1 000009b9: PUSH2 0x09c1 000009bc: SWAP1 000009bd: PUSH2 0x3a5d 000009c0: JUMP 000009c1: JUMPDEST 000009c2: SWAP2 000009c3: POP 000009c4: POP 000009c5: PUSH2 0x08d4 000009c8: JUMP 000009c9: JUMPDEST 000009ca: POP 000009cb: DUP1 000009cc: PUSH1 0x05 000009ce: SWAP1 000009cf: DUP1 000009d0: MLOAD 000009d1: SWAP1 000009d2: PUSH1 0x20 000009d4: ADD 000009d5: SWAP1 000009d6: PUSH2 0x09e0 000009d9: SWAP3 000009da: SWAP2 000009db: SWAP1 000009dc: PUSH2 0x2331 000009df: JUMP 000009e0: JUMPDEST 000009e1: POP 000009e2: PUSH1 0x01 000009e4: PUSH1 0x07 000009e6: PUSH1 0x00 000009e8: DUP3 000009e9: DUP3 000009ea: DUP3 000009eb: SWAP1 000009ec: SLOAD 000009ed: SWAP1 000009ee: PUSH2 0x0100 000009f1: EXP 000009f2: SWAP1 000009f3: DIV 000009f4: PUSH8 0xffffffffffffffff 000009fd: AND 000009fe: PUSH2 0x0a07 00000a01: SWAP2 00000a02: SWAP1 00000a03: PUSH2 0x379c 00000a06: JUMP 00000a07: JUMPDEST 00000a08: SWAP3 00000a09: POP 00000a0a: PUSH2 0x0100 00000a0d: EXP 00000a0e: DUP2 00000a0f: SLOAD 00000a10: DUP2 00000a11: PUSH8 0xffffffffffffffff 00000a1a: MUL 00000a1b: NOT 00000a1c: AND 00000a1d: SWAP1 00000a1e: DUP4 00000a1f: PUSH8 0xffffffffffffffff 00000a28: AND 00000a29: MUL 00000a2a: OR 00000a2b: SWAP1 00000a2c: SSTORE 00000a2d: POP 00000a2e: DUP10 00000a2f: PUSH1 0x06 00000a31: PUSH1 0x14 00000a33: PUSH2 0x0100 00000a36: EXP 00000a37: DUP2 00000a38: SLOAD 00000a39: DUP2 00000a3a: PUSH8 0xffffffffffffffff 00000a43: MUL 00000a44: NOT 00000a45: AND 00000a46: SWAP1 00000a47: DUP4 00000a48: PUSH8 0xffffffffffffffff 00000a51: AND 00000a52: MUL 00000a53: OR 00000a54: SWAP1 00000a55: SSTORE 00000a56: POP 00000a57: PUSH1 0x00 00000a59: PUSH1 0x03 00000a5b: DUP2 00000a5c: SWAP1 00000a5d: SSTORE 00000a5e: POP 00000a5f: POP 00000a60: POP 00000a61: POP 00000a62: POP 00000a63: POP 00000a64: POP 00000a65: POP 00000a66: POP 00000a67: POP 00000a68: POP 00000a69: JUMP 00000a6a: JUMPDEST 00000a6b: PUSH1 0x04 00000a6d: SLOAD 00000a6e: DUP5 00000a6f: PUSH1 0x03 00000a71: SLOAD 00000a72: PUSH2 0x0a7b 00000a75: SWAP2 00000a76: SWAP1 00000a77: PUSH2 0x3746 00000a7a: JUMP 00000a7b: JUMPDEST 00000a7c: GT 00000a7d: ISZERO 00000a7e: PUSH2 0x0abc 00000a81: JUMPI 00000a82: PUSH1 0x40 00000a84: MLOAD 00000a85: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000aa6: DUP2 00000aa7: MSTORE 00000aa8: PUSH1 0x04 00000aaa: ADD 00000aab: PUSH2 0x0ab3 00000aae: SWAP1 00000aaf: PUSH2 0x32b8 00000ab2: JUMP 00000ab3: JUMPDEST 00000ab4: PUSH1 0x40 00000ab6: MLOAD 00000ab7: DUP1 00000ab8: SWAP2 00000ab9: SUB 00000aba: SWAP1 00000abb: REVERT 00000abc: JUMPDEST 00000abd: PUSH1 0x00 00000abf: PUSH1 0x41 00000ac1: SWAP1 00000ac2: POP 00000ac3: PUSH1 0x00 00000ac5: PUSH1 0x02 00000ac7: ADDRESS 00000ac8: PUSH1 0x07 00000aca: PUSH1 0x00 00000acc: SWAP1 00000acd: SLOAD 00000ace: SWAP1 00000acf: PUSH2 0x0100 00000ad2: EXP 00000ad3: SWAP1 00000ad4: DIV 00000ad5: PUSH8 0xffffffffffffffff 00000ade: AND 00000adf: DUP11 00000ae0: DUP11 00000ae1: DUP11 00000ae2: PUSH1 0x40 00000ae4: MLOAD 00000ae5: PUSH1 0x20 00000ae7: ADD 00000ae8: PUSH2 0x0af5 00000aeb: SWAP6 00000aec: SWAP5 00000aed: SWAP4 00000aee: SWAP3 00000aef: SWAP2 00000af0: SWAP1 00000af1: PUSH2 0x2fb4 00000af4: JUMP 00000af5: JUMPDEST 00000af6: PUSH1 0x40 00000af8: MLOAD 00000af9: PUSH1 0x20 00000afb: DUP2 00000afc: DUP4 00000afd: SUB 00000afe: SUB 00000aff: DUP2 00000b00: MSTORE 00000b01: SWAP1 00000b02: PUSH1 0x40 00000b04: MSTORE 00000b05: PUSH1 0x40 00000b07: MLOAD 00000b08: PUSH2 0x0b11 00000b0b: SWAP2 00000b0c: SWAP1 00000b0d: PUSH2 0x3013 00000b10: JUMP 00000b11: JUMPDEST 00000b12: PUSH1 0x20 00000b14: PUSH1 0x40 00000b16: MLOAD 00000b17: DUP1 00000b18: DUP4 00000b19: SUB 00000b1a: DUP2 00000b1b: DUP6 00000b1c: GAS 00000b1d: STATICCALL 00000b1e: ISZERO 00000b1f: DUP1 00000b20: ISZERO 00000b21: PUSH2 0x0b2e 00000b24: JUMPI 00000b25: RETURNDATASIZE 00000b26: PUSH1 0x00 00000b28: DUP1 00000b29: RETURNDATACOPY 00000b2a: RETURNDATASIZE 00000b2b: PUSH1 0x00 00000b2d: REVERT 00000b2e: JUMPDEST 00000b2f: POP 00000b30: POP 00000b31: POP 00000b32: PUSH1 0x40 00000b34: MLOAD 00000b35: RETURNDATASIZE 00000b36: PUSH1 0x1f 00000b38: NOT 00000b39: PUSH1 0x1f 00000b3b: DUP3 00000b3c: ADD 00000b3d: AND 00000b3e: DUP3 00000b3f: ADD 00000b40: DUP1 00000b41: PUSH1 0x40 00000b43: MSTORE 00000b44: POP 00000b45: DUP2 00000b46: ADD 00000b47: SWAP1 00000b48: PUSH2 0x0b51 00000b4b: SWAP2 00000b4c: SWAP1 00000b4d: PUSH2 0x2696 00000b50: JUMP 00000b51: JUMPDEST 00000b52: SWAP1 00000b53: POP 00000b54: PUSH1 0x00 00000b56: DUP1 00000b57: PUSH1 0x00 00000b59: DUP5 00000b5a: SWAP1 00000b5b: POP 00000b5c: PUSH1 0x00 00000b5e: JUMPDEST 00000b5f: DUP8 00000b60: DUP8 00000b61: SWAP1 00000b62: POP 00000b63: DUP3 00000b64: GT 00000b65: PUSH2 0x0d30 00000b68: JUMPI 00000b69: PUSH1 0x00 00000b6b: DUP9 00000b6c: DUP9 00000b6d: DUP9 00000b6e: DUP6 00000b6f: PUSH2 0x0b78 00000b72: SWAP2 00000b73: SWAP1 00000b74: PUSH2 0x3865 00000b77: JUMP 00000b78: JUMPDEST 00000b79: SWAP1 00000b7a: DUP6 00000b7b: SWAP3 00000b7c: PUSH2 0x0b87 00000b7f: SWAP4 00000b80: SWAP3 00000b81: SWAP2 00000b82: SWAP1 00000b83: PUSH2 0x370b 00000b86: JUMP 00000b87: JUMPDEST 00000b88: DUP1 00000b89: DUP1 00000b8a: PUSH1 0x1f 00000b8c: ADD 00000b8d: PUSH1 0x20 00000b8f: DUP1 00000b90: SWAP2 00000b91: DIV 00000b92: MUL 00000b93: PUSH1 0x20 00000b95: ADD 00000b96: PUSH1 0x40 00000b98: MLOAD 00000b99: SWAP1 00000b9a: DUP2 00000b9b: ADD 00000b9c: PUSH1 0x40 00000b9e: MSTORE 00000b9f: DUP1 00000ba0: SWAP4 00000ba1: SWAP3 00000ba2: SWAP2 00000ba3: SWAP1 00000ba4: DUP2 00000ba5: DUP2 00000ba6: MSTORE 00000ba7: PUSH1 0x20 00000ba9: ADD 00000baa: DUP4 00000bab: DUP4 00000bac: DUP1 00000bad: DUP3 00000bae: DUP5 00000baf: CALLDATACOPY 00000bb0: PUSH1 0x00 00000bb2: DUP2 00000bb3: DUP5 00000bb4: ADD 00000bb5: MSTORE 00000bb6: PUSH1 0x1f 00000bb8: NOT 00000bb9: PUSH1 0x1f 00000bbb: DUP3 00000bbc: ADD 00000bbd: AND 00000bbe: SWAP1 00000bbf: POP 00000bc0: DUP1 00000bc1: DUP4 00000bc2: ADD 00000bc3: SWAP3 00000bc4: POP 00000bc5: POP 00000bc6: POP 00000bc7: POP 00000bc8: POP 00000bc9: POP 00000bca: POP 00000bcb: SWAP1 00000bcc: POP 00000bcd: JUMPDEST 00000bce: PUSH1 0x05 00000bd0: DUP1 00000bd1: SLOAD 00000bd2: SWAP1 00000bd3: POP 00000bd4: DUP5 00000bd5: PUSH4 0xffffffff 00000bda: AND 00000bdb: LT 00000bdc: DUP1 00000bdd: ISZERO 00000bde: PUSH2 0x0bff 00000be1: JUMPI 00000be2: POP 00000be3: PUSH1 0x00 00000be5: PUSH1 0x01 00000be7: DUP6 00000be8: PUSH4 0xffffffff 00000bed: AND 00000bee: DUP13 00000bef: PUSH4 0xffffffff 00000bf4: AND 00000bf5: SWAP1 00000bf6: SHR 00000bf7: AND 00000bf8: PUSH4 0xffffffff 00000bfd: AND 00000bfe: EQ 00000bff: JUMPDEST 00000c00: ISZERO 00000c01: PUSH2 0x0c17 00000c04: JUMPI 00000c05: DUP4 00000c06: DUP1 00000c07: PUSH2 0x0c0f 00000c0a: SWAP1 00000c0b: PUSH2 0x3aa6 00000c0e: JUMP 00000c0f: JUMPDEST 00000c10: SWAP5 00000c11: POP 00000c12: POP 00000c13: PUSH2 0x0bcd 00000c16: JUMP 00000c17: JUMPDEST 00000c18: PUSH1 0x05 00000c1a: DUP1 00000c1b: SLOAD 00000c1c: SWAP1 00000c1d: POP 00000c1e: DUP5 00000c1f: PUSH4 0xffffffff 00000c24: AND 00000c25: EQ 00000c26: ISZERO 00000c27: PUSH2 0x0c30 00000c2a: JUMPI 00000c2b: POP 00000c2c: PUSH2 0x0d30 00000c2f: JUMP 00000c30: JUMPDEST 00000c31: PUSH2 0x0c3a 00000c34: DUP7 00000c35: DUP3 00000c36: PUSH2 0x1775 00000c39: JUMP 00000c3a: JUMPDEST 00000c3b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c50: AND 00000c51: PUSH1 0x05 00000c53: DUP6 00000c54: PUSH4 0xffffffff 00000c59: AND 00000c5a: DUP2 00000c5b: SLOAD 00000c5c: DUP2 00000c5d: LT 00000c5e: PUSH2 0x0c6a 00000c61: JUMPI 00000c62: PUSH2 0x0c69 00000c65: PUSH2 0x3bbc 00000c68: JUMP 00000c69: JUMPDEST 00000c6a: JUMPDEST 00000c6b: SWAP1 00000c6c: PUSH1 0x00 00000c6e: MSTORE 00000c6f: PUSH1 0x20 00000c71: PUSH1 0x00 00000c73: KECCAK256 00000c74: ADD 00000c75: PUSH1 0x00 00000c77: SWAP1 00000c78: SLOAD 00000c79: SWAP1 00000c7a: PUSH2 0x0100 00000c7d: EXP 00000c7e: SWAP1 00000c7f: DIV 00000c80: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c95: AND 00000c96: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000cab: AND 00000cac: EQ 00000cad: PUSH2 0x0ceb 00000cb0: JUMPI 00000cb1: PUSH1 0x40 00000cb3: MLOAD 00000cb4: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000cd5: DUP2 00000cd6: MSTORE 00000cd7: PUSH1 0x04 00000cd9: ADD 00000cda: PUSH2 0x0ce2 00000cdd: SWAP1 00000cde: PUSH2 0x3378 00000ce1: JUMP 00000ce2: JUMPDEST 00000ce3: PUSH1 0x40 00000ce5: MLOAD 00000ce6: DUP1 00000ce7: SWAP2 00000ce8: SUB 00000ce9: SWAP1 00000cea: REVERT 00000ceb: JUMPDEST 00000cec: DUP4 00000ced: PUSH4 0xffffffff 00000cf2: AND 00000cf3: PUSH1 0x01 00000cf5: PUSH4 0xffffffff 00000cfa: AND 00000cfb: SWAP1 00000cfc: SHL 00000cfd: DUP3 00000cfe: OR 00000cff: SWAP2 00000d00: POP 00000d01: DUP4 00000d02: DUP1 00000d03: PUSH2 0x0d0b 00000d06: SWAP1 00000d07: PUSH2 0x3aa6 00000d0a: JUMP 00000d0b: JUMPDEST 00000d0c: SWAP5 00000d0d: POP 00000d0e: POP 00000d0f: DUP5 00000d10: DUP1 00000d11: PUSH2 0x0d19 00000d14: SWAP1 00000d15: PUSH2 0x3a5d 00000d18: JUMP 00000d19: JUMPDEST 00000d1a: SWAP6 00000d1b: POP 00000d1c: POP 00000d1d: DUP7 00000d1e: DUP4 00000d1f: PUSH2 0x0d28 00000d22: SWAP2 00000d23: SWAP1 00000d24: PUSH2 0x3746 00000d27: JUMP 00000d28: JUMPDEST 00000d29: SWAP3 00000d2a: POP 00000d2b: POP 00000d2c: PUSH2 0x0b5e 00000d2f: JUMP 00000d30: JUMPDEST 00000d31: PUSH1 0x01 00000d33: PUSH1 0x02 00000d35: PUSH1 0x05 00000d37: DUP1 00000d38: SLOAD 00000d39: SWAP1 00000d3a: POP 00000d3b: PUSH2 0x0d44 00000d3e: SWAP2 00000d3f: SWAP1 00000d40: PUSH2 0x37da 00000d43: JUMP 00000d44: JUMPDEST 00000d45: PUSH2 0x0d4e 00000d48: SWAP2 00000d49: SWAP1 00000d4a: PUSH2 0x3746 00000d4d: JUMP 00000d4e: JUMPDEST 00000d4f: DUP5 00000d50: LT 00000d51: ISZERO 00000d52: PUSH2 0x0d90 00000d55: JUMPI 00000d56: PUSH1 0x40 00000d58: MLOAD 00000d59: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000d7a: DUP2 00000d7b: MSTORE 00000d7c: PUSH1 0x04 00000d7e: ADD 00000d7f: PUSH2 0x0d87 00000d82: SWAP1 00000d83: PUSH2 0x3258 00000d86: JUMP 00000d87: JUMPDEST 00000d88: PUSH1 0x40 00000d8a: MLOAD 00000d8b: DUP1 00000d8c: SWAP2 00000d8d: SUB 00000d8e: SWAP1 00000d8f: REVERT 00000d90: JUMPDEST 00000d91: DUP10 00000d92: PUSH1 0x03 00000d94: PUSH1 0x00 00000d96: DUP3 00000d97: DUP3 00000d98: SLOAD 00000d99: PUSH2 0x0da2 00000d9c: SWAP2 00000d9d: SWAP1 00000d9e: PUSH2 0x3746 00000da1: JUMP 00000da2: JUMPDEST 00000da3: SWAP3 00000da4: POP 00000da5: POP 00000da6: DUP2 00000da7: SWAP1 00000da8: SSTORE 00000da9: POP 00000daa: PUSH1 0x00 00000dac: DUP13 00000dad: PUSH8 0xffffffffffffffff 00000db6: AND 00000db7: PUSH1 0x40 00000db9: PUSH1 0x07 00000dbb: PUSH1 0x00 00000dbd: SWAP1 00000dbe: SLOAD 00000dbf: SWAP1 00000dc0: PUSH2 0x0100 00000dc3: EXP 00000dc4: SWAP1 00000dc5: DIV 00000dc6: PUSH8 0xffffffffffffffff 00000dcf: AND 00000dd0: PUSH8 0xffffffffffffffff 00000dd9: AND 00000dda: SWAP1 00000ddb: SHL 00000ddc: PUSH2 0x0de5 00000ddf: SWAP2 00000de0: SWAP1 00000de1: PUSH2 0x3746 00000de4: JUMP 00000de5: JUMPDEST 00000de6: SWAP1 00000de7: POP 00000de8: PUSH1 0x00 00000dea: DUP1 00000deb: SHL 00000dec: PUSH1 0x09 00000dee: PUSH1 0x00 00000df0: DUP4 00000df1: DUP2 00000df2: MSTORE 00000df3: PUSH1 0x20 00000df5: ADD 00000df6: SWAP1 00000df7: DUP2 00000df8: MSTORE 00000df9: PUSH1 0x20 00000dfb: ADD 00000dfc: PUSH1 0x00 00000dfe: KECCAK256 00000dff: SLOAD 00000e00: EQ 00000e01: PUSH2 0x0e3f 00000e04: JUMPI 00000e05: PUSH1 0x40 00000e07: MLOAD 00000e08: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000e29: DUP2 00000e2a: MSTORE 00000e2b: PUSH1 0x04 00000e2d: ADD 00000e2e: PUSH2 0x0e36 00000e31: SWAP1 00000e32: PUSH2 0x32f8 00000e35: JUMP 00000e36: JUMPDEST 00000e37: PUSH1 0x40 00000e39: MLOAD 00000e3a: DUP1 00000e3b: SWAP2 00000e3c: SUB 00000e3d: SWAP1 00000e3e: REVERT 00000e3f: JUMPDEST 00000e40: PUSH1 0x00 00000e42: PUSH1 0x07 00000e44: PUSH1 0x00 00000e46: SWAP1 00000e47: SLOAD 00000e48: SWAP1 00000e49: PUSH2 0x0100 00000e4c: EXP 00000e4d: SWAP1 00000e4e: DIV 00000e4f: PUSH8 0xffffffffffffffff 00000e58: AND 00000e59: DUP15 00000e5a: DUP15 00000e5b: DUP15 00000e5c: PUSH1 0x40 00000e5e: MLOAD 00000e5f: PUSH1 0x20 00000e61: ADD 00000e62: PUSH2 0x0e6e 00000e65: SWAP5 00000e66: SWAP4 00000e67: SWAP3 00000e68: SWAP2 00000e69: SWAP1 00000e6a: PUSH2 0x307c 00000e6d: JUMP 00000e6e: JUMPDEST 00000e6f: PUSH1 0x40 00000e71: MLOAD 00000e72: PUSH1 0x20 00000e74: DUP2 00000e75: DUP4 00000e76: SUB 00000e77: SUB 00000e78: DUP2 00000e79: MSTORE 00000e7a: SWAP1 00000e7b: PUSH1 0x40 00000e7d: MSTORE 00000e7e: DUP1 00000e7f: MLOAD 00000e80: SWAP1 00000e81: PUSH1 0x20 00000e83: ADD 00000e84: KECCAK256 00000e85: SWAP1 00000e86: POP 00000e87: DUP1 00000e88: PUSH1 0x09 00000e8a: PUSH1 0x00 00000e8c: DUP5 00000e8d: DUP2 00000e8e: MSTORE 00000e8f: PUSH1 0x20 00000e91: ADD 00000e92: SWAP1 00000e93: DUP2 00000e94: MSTORE 00000e95: PUSH1 0x20 00000e97: ADD 00000e98: PUSH1 0x00 00000e9a: KECCAK256 00000e9b: DUP2 00000e9c: SWAP1 00000e9d: SSTORE 00000e9e: POP 00000e9f: PUSH32 0x028315f59a3b3e104b3beec5aca23db0d4409cd0d1d749204d785cfd39a4009a 00000ec0: DUP15 00000ec1: DUP15 00000ec2: DUP15 00000ec3: PUSH1 0x07 00000ec5: PUSH1 0x00 00000ec7: SWAP1 00000ec8: SLOAD 00000ec9: SWAP1 00000eca: PUSH2 0x0100 00000ecd: EXP 00000ece: SWAP1 00000ecf: DIV 00000ed0: PUSH8 0xffffffffffffffff 00000ed9: AND 00000eda: DUP8 00000edb: PUSH1 0x40 00000edd: MLOAD 00000ede: PUSH2 0x0eeb 00000ee1: SWAP6 00000ee2: SWAP5 00000ee3: SWAP4 00000ee4: SWAP3 00000ee5: SWAP2 00000ee6: SWAP1 00000ee7: PUSH2 0x3581 00000eea: JUMP 00000eeb: JUMPDEST 00000eec: PUSH1 0x40 00000eee: MLOAD 00000eef: DUP1 00000ef0: SWAP2 00000ef1: SUB 00000ef2: SWAP1 00000ef3: LOG1 00000ef4: PUSH2 0x0f1c 00000ef7: DUP13 00000ef8: DUP15 00000ef9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f0e: AND 00000f0f: PUSH2 0x179c 00000f12: SWAP1 00000f13: SWAP2 00000f14: SWAP1 00000f15: PUSH4 0xffffffff 00000f1a: AND 00000f1b: JUMP 00000f1c: JUMPDEST 00000f1d: POP 00000f1e: POP 00000f1f: POP 00000f20: POP 00000f21: POP 00000f22: POP 00000f23: POP 00000f24: POP 00000f25: POP 00000f26: POP 00000f27: POP 00000f28: POP 00000f29: POP 00000f2a: POP 00000f2b: JUMP 00000f2c: JUMPDEST 00000f2d: PUSH1 0x08 00000f2f: PUSH1 0x20 00000f31: MSTORE 00000f32: DUP1 00000f33: PUSH1 0x00 00000f35: MSTORE 00000f36: PUSH1 0x40 00000f38: PUSH1 0x00 00000f3a: KECCAK256 00000f3b: PUSH1 0x00 00000f3d: SWAP2 00000f3e: POP 00000f3f: SWAP1 00000f40: POP 00000f41: SLOAD 00000f42: DUP2 00000f43: JUMP 00000f44: JUMPDEST 00000f45: PUSH1 0x00 00000f47: PUSH32 0x0000000000000000000000006191d13860d792487bbd89e63e4c877dbb56d397 00000f68: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f7d: AND 00000f7e: ADDRESS 00000f7f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f94: AND 00000f95: EQ 00000f96: PUSH2 0x0fd4 00000f99: JUMPI 00000f9a: PUSH1 0x40 00000f9c: MLOAD 00000f9d: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000fbe: DUP2 00000fbf: MSTORE 00000fc0: PUSH1 0x04 00000fc2: ADD 00000fc3: PUSH2 0x0fcb 00000fc6: SWAP1 00000fc7: PUSH2 0x34b8 00000fca: JUMP 00000fcb: JUMPDEST 00000fcc: PUSH1 0x40 00000fce: MLOAD 00000fcf: DUP1 00000fd0: SWAP2 00000fd1: SUB 00000fd2: SWAP1 00000fd3: REVERT 00000fd4: JUMPDEST 00000fd5: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc 00000ff6: PUSH1 0x00 00000ff8: SHL 00000ff9: SWAP1 00000ffa: POP 00000ffb: SWAP1 00000ffc: JUMP 00000ffd: JUMPDEST 00000ffe: PUSH1 0x02 00001000: SLOAD 00001001: DUP2 00001002: JUMP 00001003: JUMPDEST 00001004: PUSH1 0x05 00001006: DUP2 00001007: DUP2 00001008: SLOAD 00001009: DUP2 0000100a: LT 0000100b: PUSH2 0x1013 0000100e: JUMPI 0000100f: PUSH1 0x00 00001011: DUP1 00001012: REVERT 00001013: JUMPDEST 00001014: SWAP1 00001015: PUSH1 0x00 00001017: MSTORE 00001018: PUSH1 0x20 0000101a: PUSH1 0x00 0000101c: KECCAK256 0000101d: ADD 0000101e: PUSH1 0x00 00001020: SWAP2 00001021: POP 00001022: SLOAD 00001023: SWAP1 00001024: PUSH2 0x0100 00001027: EXP 00001028: SWAP1 00001029: DIV 0000102a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000103f: AND 00001040: DUP2 00001041: JUMP 00001042: JUMPDEST 00001043: PUSH1 0x00 00001045: PUSH1 0x08 00001047: PUSH1 0x00 00001049: DUP5 0000104a: PUSH8 0xffffffffffffffff 00001053: AND 00001054: PUSH8 0xffffffffffffffff 0000105d: AND 0000105e: DUP2 0000105f: MSTORE 00001060: PUSH1 0x20 00001062: ADD 00001063: SWAP1 00001064: DUP2 00001065: MSTORE 00001066: PUSH1 0x20 00001068: ADD 00001069: PUSH1 0x00 0000106b: KECCAK256 0000106c: SLOAD 0000106d: SWAP1 0000106e: POP 0000106f: PUSH1 0x00 00001071: PUSH1 0x02 00001073: DUP8 00001074: DUP8 00001075: DUP8 00001076: PUSH1 0x40 00001078: MLOAD 00001079: PUSH1 0x20 0000107b: ADD 0000107c: PUSH2 0x1087 0000107f: SWAP4 00001080: SWAP3 00001081: SWAP2 00001082: SWAP1 00001083: PUSH2 0x303f 00001086: JUMP 00001087: JUMPDEST 00001088: PUSH1 0x40 0000108a: MLOAD 0000108b: PUSH1 0x20 0000108d: DUP2 0000108e: DUP4 0000108f: SUB 00001090: SUB 00001091: DUP2 00001092: MSTORE 00001093: SWAP1 00001094: PUSH1 0x40 00001096: MSTORE 00001097: PUSH1 0x40 00001099: MLOAD 0000109a: PUSH2 0x10a3 0000109d: SWAP2 0000109e: SWAP1 0000109f: PUSH2 0x3013 000010a2: JUMP 000010a3: JUMPDEST 000010a4: PUSH1 0x20 000010a6: PUSH1 0x40 000010a8: MLOAD 000010a9: DUP1 000010aa: DUP4 000010ab: SUB 000010ac: DUP2 000010ad: DUP6 000010ae: GAS 000010af: STATICCALL 000010b0: ISZERO 000010b1: DUP1 000010b2: ISZERO 000010b3: PUSH2 0x10c0 000010b6: JUMPI 000010b7: RETURNDATASIZE 000010b8: PUSH1 0x00 000010ba: DUP1 000010bb: RETURNDATACOPY 000010bc: RETURNDATASIZE 000010bd: PUSH1 0x00 000010bf: REVERT 000010c0: JUMPDEST 000010c1: POP 000010c2: POP 000010c3: POP 000010c4: PUSH1 0x40 000010c6: MLOAD 000010c7: RETURNDATASIZE 000010c8: PUSH1 0x1f 000010ca: NOT 000010cb: PUSH1 0x1f 000010cd: DUP3 000010ce: ADD 000010cf: AND 000010d0: DUP3 000010d1: ADD 000010d2: DUP1 000010d3: PUSH1 0x40 000010d5: MSTORE 000010d6: POP 000010d7: DUP2 000010d8: ADD 000010d9: SWAP1 000010da: PUSH2 0x10e3 000010dd: SWAP2 000010de: SWAP1 000010df: PUSH2 0x2696 000010e2: JUMP 000010e3: JUMPDEST 000010e4: SWAP1 000010e5: POP 000010e6: PUSH2 0x10f0 000010e9: DUP4 000010ea: DUP4 000010eb: DUP4 000010ec: PUSH2 0x1890 000010ef: JUMP 000010f0: JUMPDEST 000010f1: PUSH2 0x112f 000010f4: JUMPI 000010f5: PUSH1 0x40 000010f7: MLOAD 000010f8: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001119: DUP2 0000111a: MSTORE 0000111b: PUSH1 0x04 0000111d: ADD 0000111e: PUSH2 0x1126 00001121: SWAP1 00001122: PUSH2 0x3278 00001125: JUMP 00001126: JUMPDEST 00001127: PUSH1 0x40 00001129: MLOAD 0000112a: DUP1 0000112b: SWAP2 0000112c: SUB 0000112d: SWAP1 0000112e: REVERT 0000112f: JUMPDEST 00001130: PUSH1 0x00 00001132: DUP8 00001133: PUSH8 0xffffffffffffffff 0000113c: AND 0000113d: PUSH1 0x40 0000113f: DUP7 00001140: PUSH8 0xffffffffffffffff 00001149: AND 0000114a: SWAP1 0000114b: SHL 0000114c: PUSH2 0x1155 0000114f: SWAP2 00001150: SWAP1 00001151: PUSH2 0x3746 00001154: JUMP 00001155: JUMPDEST 00001156: SWAP1 00001157: POP 00001158: PUSH1 0x00 0000115a: DUP6 0000115b: DUP10 0000115c: DUP10 0000115d: DUP10 0000115e: PUSH1 0x40 00001160: MLOAD 00001161: PUSH1 0x20 00001163: ADD 00001164: PUSH2 0x1170 00001167: SWAP5 00001168: SWAP4 00001169: SWAP3 0000116a: SWAP2 0000116b: SWAP1 0000116c: PUSH2 0x307c 0000116f: JUMP 00001170: JUMPDEST 00001171: PUSH1 0x40 00001173: MLOAD 00001174: PUSH1 0x20 00001176: DUP2 00001177: DUP4 00001178: SUB 00001179: SUB 0000117a: DUP2 0000117b: MSTORE 0000117c: SWAP1 0000117d: PUSH1 0x40 0000117f: MSTORE 00001180: DUP1 00001181: MLOAD 00001182: SWAP1 00001183: PUSH1 0x20 00001185: ADD 00001186: KECCAK256 00001187: SWAP1 00001188: POP 00001189: DUP1 0000118a: PUSH1 0x09 0000118c: PUSH1 0x00 0000118e: DUP5 0000118f: DUP2 00001190: MSTORE 00001191: PUSH1 0x20 00001193: ADD 00001194: SWAP1 00001195: DUP2 00001196: MSTORE 00001197: PUSH1 0x20 00001199: ADD 0000119a: PUSH1 0x00 0000119c: KECCAK256 0000119d: SLOAD 0000119e: EQ 0000119f: ISZERO 000011a0: PUSH2 0x11de 000011a3: JUMPI 000011a4: PUSH1 0x40 000011a6: MLOAD 000011a7: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000011c8: DUP2 000011c9: MSTORE 000011ca: PUSH1 0x04 000011cc: ADD 000011cd: PUSH2 0x11d5 000011d0: SWAP1 000011d1: PUSH2 0x32f8 000011d4: JUMP 000011d5: JUMPDEST 000011d6: PUSH1 0x40 000011d8: MLOAD 000011d9: DUP1 000011da: SWAP2 000011db: SUB 000011dc: SWAP1 000011dd: REVERT 000011de: JUMPDEST 000011df: DUP1 000011e0: PUSH1 0x09 000011e2: PUSH1 0x00 000011e4: DUP5 000011e5: DUP2 000011e6: MSTORE 000011e7: PUSH1 0x20 000011e9: ADD 000011ea: SWAP1 000011eb: DUP2 000011ec: MSTORE 000011ed: PUSH1 0x20 000011ef: ADD 000011f0: PUSH1 0x00 000011f2: KECCAK256 000011f3: DUP2 000011f4: SWAP1 000011f5: SSTORE 000011f6: POP 000011f7: PUSH32 0x028315f59a3b3e104b3beec5aca23db0d4409cd0d1d749204d785cfd39a4009a 00001218: DUP10 00001219: DUP10 0000121a: DUP10 0000121b: DUP10 0000121c: PUSH1 0x00 0000121e: PUSH1 0x40 00001220: MLOAD 00001221: PUSH2 0x122e 00001224: SWAP6 00001225: SWAP5 00001226: SWAP4 00001227: SWAP3 00001228: SWAP2 00001229: SWAP1 0000122a: PUSH2 0x352e 0000122d: JUMP 0000122e: JUMPDEST 0000122f: PUSH1 0x40 00001231: MLOAD 00001232: DUP1 00001233: SWAP2 00001234: SUB 00001235: SWAP1 00001236: LOG1 00001237: PUSH2 0x125f 0000123a: DUP8 0000123b: DUP10 0000123c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001251: AND 00001252: PUSH2 0x179c 00001255: SWAP1 00001256: SWAP2 00001257: SWAP1 00001258: PUSH4 0xffffffff 0000125d: AND 0000125e: JUMP 0000125f: JUMPDEST 00001260: POP 00001261: POP 00001262: POP 00001263: POP 00001264: POP 00001265: POP 00001266: POP 00001267: POP 00001268: POP 00001269: JUMP 0000126a: JUMPDEST 0000126b: PUSH1 0x01 0000126d: SLOAD 0000126e: DUP2 0000126f: JUMP 00001270: JUMPDEST 00001271: PUSH1 0x04 00001273: SLOAD 00001274: DUP2 00001275: JUMP 00001276: JUMPDEST 00001277: PUSH32 0x0000000000000000000000006191d13860d792487bbd89e63e4c877dbb56d397 00001298: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000012ad: AND 000012ae: ADDRESS 000012af: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000012c4: AND 000012c5: EQ 000012c6: ISZERO 000012c7: PUSH2 0x1305 000012ca: JUMPI 000012cb: PUSH1 0x40 000012cd: MLOAD 000012ce: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000012ef: DUP2 000012f0: MSTORE 000012f1: PUSH1 0x04 000012f3: ADD 000012f4: PUSH2 0x12fc 000012f7: SWAP1 000012f8: PUSH2 0x3478 000012fb: JUMP 000012fc: JUMPDEST 000012fd: PUSH1 0x40 000012ff: MLOAD 00001300: DUP1 00001301: SWAP2 00001302: SUB 00001303: SWAP1 00001304: REVERT 00001305: JUMPDEST 00001306: PUSH32 0x0000000000000000000000006191d13860d792487bbd89e63e4c877dbb56d397 00001327: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000133c: AND 0000133d: PUSH2 0x1344 00001340: PUSH2 0x19d6 00001343: JUMP 00001344: JUMPDEST 00001345: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000135a: AND 0000135b: EQ 0000135c: PUSH2 0x139a 0000135f: JUMPI 00001360: PUSH1 0x40 00001362: MLOAD 00001363: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001384: DUP2 00001385: MSTORE 00001386: PUSH1 0x04 00001388: ADD 00001389: PUSH2 0x1391 0000138c: SWAP1 0000138d: PUSH2 0x3218 00001390: JUMP 00001391: JUMPDEST 00001392: PUSH1 0x40 00001394: MLOAD 00001395: DUP1 00001396: SWAP2 00001397: SUB 00001398: SWAP1 00001399: REVERT 0000139a: JUMPDEST 0000139b: PUSH1 0x00 0000139d: PUSH1 0x02 0000139f: ADDRESS 000013a0: PUSH2 0x13a7 000013a3: PUSH2 0x19d6 000013a6: JUMP 000013a7: JUMPDEST 000013a8: DUP5 000013a9: PUSH1 0x40 000013ab: MLOAD 000013ac: PUSH1 0x20 000013ae: ADD 000013af: PUSH2 0x13ba 000013b2: SWAP4 000013b3: SWAP3 000013b4: SWAP2 000013b5: SWAP1 000013b6: PUSH2 0x2f2b 000013b9: JUMP 000013ba: JUMPDEST 000013bb: PUSH1 0x40 000013bd: MLOAD 000013be: PUSH1 0x20 000013c0: DUP2 000013c1: DUP4 000013c2: SUB 000013c3: SUB 000013c4: DUP2 000013c5: MSTORE 000013c6: SWAP1 000013c7: PUSH1 0x40 000013c9: MSTORE 000013ca: PUSH1 0x40 000013cc: MLOAD 000013cd: PUSH2 0x13d6 000013d0: SWAP2 000013d1: SWAP1 000013d2: PUSH2 0x3013 000013d5: JUMP 000013d6: JUMPDEST 000013d7: PUSH1 0x20 000013d9: PUSH1 0x40 000013db: MLOAD 000013dc: DUP1 000013dd: DUP4 000013de: SUB 000013df: DUP2 000013e0: DUP6 000013e1: GAS 000013e2: STATICCALL 000013e3: ISZERO 000013e4: DUP1 000013e5: ISZERO 000013e6: PUSH2 0x13f3 000013e9: JUMPI 000013ea: RETURNDATASIZE 000013eb: PUSH1 0x00 000013ed: DUP1 000013ee: RETURNDATACOPY 000013ef: RETURNDATASIZE 000013f0: PUSH1 0x00 000013f2: REVERT 000013f3: JUMPDEST 000013f4: POP 000013f5: POP 000013f6: POP 000013f7: PUSH1 0x40 000013f9: MLOAD 000013fa: RETURNDATASIZE 000013fb: PUSH1 0x1f 000013fd: NOT 000013fe: PUSH1 0x1f 00001400: DUP3 00001401: ADD 00001402: AND 00001403: DUP3 00001404: ADD 00001405: DUP1 00001406: PUSH1 0x40 00001408: MSTORE 00001409: POP 0000140a: DUP2 0000140b: ADD 0000140c: SWAP1 0000140d: PUSH2 0x1416 00001410: SWAP2 00001411: SWAP1 00001412: PUSH2 0x2696 00001415: JUMP 00001416: JUMPDEST 00001417: SWAP1 00001418: POP 00001419: PUSH2 0x1420 0000141c: PUSH2 0x1a2d 0000141f: JUMP 00001420: JUMPDEST 00001421: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001436: AND 00001437: PUSH4 0xa7c5b111 0000143c: DUP3 0000143d: DUP7 0000143e: DUP7 0000143f: PUSH1 0x40 00001441: MLOAD 00001442: DUP5 00001443: PUSH4 0xffffffff 00001448: AND 00001449: PUSH1 0xe0 0000144b: SHL 0000144c: DUP2 0000144d: MSTORE 0000144e: PUSH1 0x04 00001450: ADD 00001451: PUSH2 0x145c 00001454: SWAP4 00001455: SWAP3 00001456: SWAP2 00001457: SWAP1 00001458: PUSH2 0x3129 0000145b: JUMP 0000145c: JUMPDEST 0000145d: PUSH1 0x20 0000145f: PUSH1 0x40 00001461: MLOAD 00001462: DUP1 00001463: DUP4 00001464: SUB 00001465: DUP2 00001466: DUP7 00001467: DUP1 00001468: EXTCODESIZE 00001469: ISZERO 0000146a: DUP1 0000146b: ISZERO 0000146c: PUSH2 0x1474 0000146f: JUMPI 00001470: PUSH1 0x00 00001472: DUP1 00001473: REVERT 00001474: JUMPDEST 00001475: POP 00001476: GAS 00001477: STATICCALL 00001478: ISZERO 00001479: DUP1 0000147a: ISZERO 0000147b: PUSH2 0x1488 0000147e: JUMPI 0000147f: RETURNDATASIZE 00001480: PUSH1 0x00 00001482: DUP1 00001483: RETURNDATACOPY 00001484: RETURNDATASIZE 00001485: PUSH1 0x00 00001487: REVERT 00001488: JUMPDEST 00001489: POP 0000148a: POP 0000148b: POP 0000148c: POP 0000148d: PUSH1 0x40 0000148f: MLOAD 00001490: RETURNDATASIZE 00001491: PUSH1 0x1f 00001493: NOT 00001494: PUSH1 0x1f 00001496: DUP3 00001497: ADD 00001498: AND 00001499: DUP3 0000149a: ADD 0000149b: DUP1 0000149c: PUSH1 0x40 0000149e: MSTORE 0000149f: POP 000014a0: DUP2 000014a1: ADD 000014a2: SWAP1 000014a3: PUSH2 0x14ac 000014a6: SWAP2 000014a7: SWAP1 000014a8: PUSH2 0x263c 000014ab: JUMP 000014ac: JUMPDEST 000014ad: PUSH2 0x14eb 000014b0: JUMPI 000014b1: PUSH1 0x40 000014b3: MLOAD 000014b4: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000014d5: DUP2 000014d6: MSTORE 000014d7: PUSH1 0x04 000014d9: ADD 000014da: PUSH2 0x14e2 000014dd: SWAP1 000014de: PUSH2 0x32d8 000014e1: JUMP 000014e2: JUMPDEST 000014e3: PUSH1 0x40 000014e5: MLOAD 000014e6: DUP1 000014e7: SWAP2 000014e8: SUB 000014e9: SWAP1 000014ea: REVERT 000014eb: JUMPDEST 000014ec: PUSH2 0x1544 000014ef: DUP3 000014f0: PUSH1 0x00 000014f2: PUSH8 0xffffffffffffffff 000014fb: DUP2 000014fc: GT 000014fd: ISZERO 000014fe: PUSH2 0x150a 00001501: JUMPI 00001502: PUSH2 0x1509 00001505: PUSH2 0x3beb 00001508: JUMP 00001509: JUMPDEST 0000150a: JUMPDEST 0000150b: PUSH1 0x40 0000150d: MLOAD 0000150e: SWAP1 0000150f: DUP1 00001510: DUP3 00001511: MSTORE 00001512: DUP1 00001513: PUSH1 0x1f 00001515: ADD 00001516: PUSH1 0x1f 00001518: NOT 00001519: AND 0000151a: PUSH1 0x20 0000151c: ADD 0000151d: DUP3 0000151e: ADD 0000151f: PUSH1 0x40 00001521: MSTORE 00001522: DUP1 00001523: ISZERO 00001524: PUSH2 0x153c 00001527: JUMPI 00001528: DUP2 00001529: PUSH1 0x20 0000152b: ADD 0000152c: PUSH1 0x01 0000152e: DUP3 0000152f: MUL 00001530: DUP1 00001531: CALLDATASIZE 00001532: DUP4 00001533: CALLDATACOPY 00001534: DUP1 00001535: DUP3 00001536: ADD 00001537: SWAP2 00001538: POP 00001539: POP 0000153a: SWAP1 0000153b: POP 0000153c: JUMPDEST 0000153d: POP 0000153e: PUSH1 0x00 00001540: PUSH2 0x1a57 00001543: JUMP 00001544: JUMPDEST 00001545: POP 00001546: POP 00001547: POP 00001548: POP 00001549: JUMP 0000154a: JUMPDEST 0000154b: PUSH1 0x06 0000154d: PUSH1 0x00 0000154f: SWAP1 00001550: SLOAD 00001551: SWAP1 00001552: PUSH2 0x0100 00001555: EXP 00001556: SWAP1 00001557: DIV 00001558: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000156d: AND 0000156e: DUP2 0000156f: JUMP 00001570: JUMPDEST 00001571: PUSH1 0x09 00001573: PUSH1 0x20 00001575: MSTORE 00001576: DUP1 00001577: PUSH1 0x00 00001579: MSTORE 0000157a: PUSH1 0x40 0000157c: PUSH1 0x00 0000157e: KECCAK256 0000157f: PUSH1 0x00 00001581: SWAP2 00001582: POP 00001583: SWAP1 00001584: POP 00001585: SLOAD 00001586: DUP2 00001587: JUMP 00001588: JUMPDEST 00001589: PUSH1 0x00 0000158b: PUSH1 0x02 0000158d: SWAP1 0000158e: SLOAD 0000158f: SWAP1 00001590: PUSH2 0x0100 00001593: EXP 00001594: SWAP1 00001595: DIV 00001596: PUSH8 0xffffffffffffffff 0000159f: AND 000015a0: DUP2 000015a1: JUMP 000015a2: JUMPDEST 000015a3: PUSH1 0x06 000015a5: PUSH1 0x14 000015a7: SWAP1 000015a8: SLOAD 000015a9: SWAP1 000015aa: PUSH2 0x0100 000015ad: EXP 000015ae: SWAP1 000015af: DIV 000015b0: PUSH8 0xffffffffffffffff 000015b9: AND 000015ba: DUP2 000015bb: JUMP 000015bc: JUMPDEST 000015bd: PUSH1 0x03 000015bf: SLOAD 000015c0: DUP2 000015c1: JUMP 000015c2: JUMPDEST 000015c3: PUSH1 0x00 000015c5: PUSH1 0x05 000015c7: DUP1 000015c8: SLOAD 000015c9: SWAP1 000015ca: POP 000015cb: SWAP1 000015cc: POP 000015cd: SWAP1 000015ce: JUMP 000015cf: JUMPDEST 000015d0: PUSH1 0x00 000015d2: PUSH2 0x15db 000015d5: PUSH1 0x01 000015d7: PUSH2 0x1bd4 000015da: JUMP 000015db: JUMPDEST 000015dc: SWAP1 000015dd: POP 000015de: DUP1 000015df: ISZERO 000015e0: PUSH2 0x15ff 000015e3: JUMPI 000015e4: PUSH1 0x01 000015e6: PUSH1 0x00 000015e8: PUSH1 0x01 000015ea: PUSH2 0x0100 000015ed: EXP 000015ee: DUP2 000015ef: SLOAD 000015f0: DUP2 000015f1: PUSH1 0xff 000015f3: MUL 000015f4: NOT 000015f5: AND 000015f6: SWAP1 000015f7: DUP4 000015f8: ISZERO 000015f9: ISZERO 000015fa: MUL 000015fb: OR 000015fc: SWAP1 000015fd: SSTORE 000015fe: POP 000015ff: JUMPDEST 00001600: PUSH1 0x00 00001602: DUP1 00001603: PUSH1 0x02 00001605: PUSH2 0x0100 00001608: EXP 00001609: DUP2 0000160a: SLOAD 0000160b: DUP2 0000160c: PUSH8 0xffffffffffffffff 00001615: MUL 00001616: NOT 00001617: AND 00001618: SWAP1 00001619: DUP4 0000161a: PUSH8 0xffffffffffffffff 00001623: AND 00001624: MUL 00001625: OR 00001626: SWAP1 00001627: SSTORE 00001628: POP 00001629: DUP6 0000162a: PUSH1 0x01 0000162c: DUP2 0000162d: SWAP1 0000162e: SSTORE 0000162f: POP 00001630: DUP5 00001631: PUSH1 0x02 00001633: DUP2 00001634: SWAP1 00001635: SSTORE 00001636: POP 00001637: DUP4 00001638: PUSH1 0x04 0000163a: DUP2 0000163b: SWAP1 0000163c: SSTORE 0000163d: POP 0000163e: PUSH1 0x00 00001640: PUSH1 0x03 00001642: DUP2 00001643: SWAP1 00001644: SSTORE 00001645: POP 00001646: DUP3 00001647: PUSH1 0x05 00001649: SWAP1 0000164a: DUP1 0000164b: MLOAD 0000164c: SWAP1 0000164d: PUSH1 0x20 0000164f: ADD 00001650: SWAP1 00001651: PUSH2 0x165b 00001654: SWAP3 00001655: SWAP2 00001656: SWAP1 00001657: PUSH2 0x2331 0000165a: JUMP 0000165b: JUMPDEST 0000165c: POP 0000165d: DUP2 0000165e: PUSH1 0x06 00001660: PUSH1 0x00 00001662: PUSH2 0x0100 00001665: EXP 00001666: DUP2 00001667: SLOAD 00001668: DUP2 00001669: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000167e: MUL 0000167f: NOT 00001680: AND 00001681: SWAP1 00001682: DUP4 00001683: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001698: AND 00001699: MUL 0000169a: OR 0000169b: SWAP1 0000169c: SSTORE 0000169d: POP 0000169e: PUSH1 0x00 000016a0: PUSH1 0x06 000016a2: PUSH1 0x14 000016a4: PUSH2 0x0100 000016a7: EXP 000016a8: DUP2 000016a9: SLOAD 000016aa: DUP2 000016ab: PUSH8 0xffffffffffffffff 000016b4: MUL 000016b5: NOT 000016b6: AND 000016b7: SWAP1 000016b8: DUP4 000016b9: PUSH8 0xffffffffffffffff 000016c2: AND 000016c3: MUL 000016c4: OR 000016c5: SWAP1 000016c6: SSTORE 000016c7: POP 000016c8: PUSH1 0x00 000016ca: PUSH1 0x07 000016cc: PUSH1 0x00 000016ce: PUSH2 0x0100 000016d1: EXP 000016d2: DUP2 000016d3: SLOAD 000016d4: DUP2 000016d5: PUSH8 0xffffffffffffffff 000016de: MUL 000016df: NOT 000016e0: AND 000016e1: SWAP1 000016e2: DUP4 000016e3: PUSH8 0xffffffffffffffff 000016ec: AND 000016ed: MUL 000016ee: OR 000016ef: SWAP1 000016f0: SSTORE 000016f1: POP 000016f2: DUP1 000016f3: ISZERO 000016f4: PUSH2 0x174a 000016f7: JUMPI 000016f8: PUSH1 0x00 000016fa: DUP1 000016fb: PUSH1 0x01 000016fd: PUSH2 0x0100 00001700: EXP 00001701: DUP2 00001702: SLOAD 00001703: DUP2 00001704: PUSH1 0xff 00001706: MUL 00001707: NOT 00001708: AND 00001709: SWAP1 0000170a: DUP4 0000170b: ISZERO 0000170c: ISZERO 0000170d: MUL 0000170e: OR 0000170f: SWAP1 00001710: SSTORE 00001711: POP 00001712: PUSH32 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498 00001733: PUSH1 0x01 00001735: PUSH1 0x40 00001737: MLOAD 00001738: PUSH2 0x1741 0000173b: SWAP2 0000173c: SWAP1 0000173d: PUSH2 0x31bb 00001740: JUMP 00001741: JUMPDEST 00001742: PUSH1 0x40 00001744: MLOAD 00001745: DUP1 00001746: SWAP2 00001747: SUB 00001748: SWAP1 00001749: LOG1 0000174a: JUMPDEST 0000174b: POP 0000174c: POP 0000174d: POP 0000174e: POP 0000174f: POP 00001750: POP 00001751: JUMP 00001752: JUMPDEST 00001753: PUSH1 0x00 00001755: DUP1 00001756: DUP3 00001757: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000176c: AND 0000176d: EXTCODESIZE 0000176e: GT 0000176f: SWAP1 00001770: POP 00001771: SWAP2 00001772: SWAP1 00001773: POP 00001774: JUMP 00001775: JUMPDEST 00001776: PUSH1 0x00 00001778: DUP1 00001779: PUSH1 0x00 0000177b: PUSH2 0x1784 0000177e: DUP6 0000177f: DUP6 00001780: PUSH2 0x1cc4 00001783: JUMP 00001784: JUMPDEST 00001785: SWAP2 00001786: POP 00001787: SWAP2 00001788: POP 00001789: PUSH2 0x1791 0000178c: DUP2 0000178d: PUSH2 0x1d47 00001790: JUMP 00001791: JUMPDEST 00001792: DUP2 00001793: SWAP3 00001794: POP 00001795: POP 00001796: POP 00001797: SWAP3 00001798: SWAP2 00001799: POP 0000179a: POP 0000179b: JUMP 0000179c: JUMPDEST 0000179d: DUP1 0000179e: SELFBALANCE 0000179f: LT 000017a0: ISZERO 000017a1: PUSH2 0x17df 000017a4: JUMPI 000017a5: PUSH1 0x40 000017a7: MLOAD 000017a8: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000017c9: DUP2 000017ca: MSTORE 000017cb: PUSH1 0x04 000017cd: ADD 000017ce: PUSH2 0x17d6 000017d1: SWAP1 000017d2: PUSH2 0x3358 000017d5: JUMP 000017d6: JUMPDEST 000017d7: PUSH1 0x40 000017d9: MLOAD 000017da: DUP1 000017db: SWAP2 000017dc: SUB 000017dd: SWAP1 000017de: REVERT 000017df: JUMPDEST 000017e0: PUSH1 0x00 000017e2: DUP3 000017e3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000017f8: AND 000017f9: DUP3 000017fa: PUSH1 0x40 000017fc: MLOAD 000017fd: PUSH2 0x1805 00001800: SWAP1 00001801: PUSH2 0x302a 00001804: JUMP 00001805: JUMPDEST 00001806: PUSH1 0x00 00001808: PUSH1 0x40 0000180a: MLOAD 0000180b: DUP1 0000180c: DUP4 0000180d: SUB 0000180e: DUP2 0000180f: DUP6 00001810: DUP8 00001811: GAS 00001812: CALL 00001813: SWAP3 00001814: POP 00001815: POP 00001816: POP 00001817: RETURNDATASIZE 00001818: DUP1 00001819: PUSH1 0x00 0000181b: DUP2 0000181c: EQ 0000181d: PUSH2 0x1842 00001820: JUMPI 00001821: PUSH1 0x40 00001823: MLOAD 00001824: SWAP2 00001825: POP 00001826: PUSH1 0x1f 00001828: NOT 00001829: PUSH1 0x3f 0000182b: RETURNDATASIZE 0000182c: ADD 0000182d: AND 0000182e: DUP3 0000182f: ADD 00001830: PUSH1 0x40 00001832: MSTORE 00001833: RETURNDATASIZE 00001834: DUP3 00001835: MSTORE 00001836: RETURNDATASIZE 00001837: PUSH1 0x00 00001839: PUSH1 0x20 0000183b: DUP5 0000183c: ADD 0000183d: RETURNDATACOPY 0000183e: PUSH2 0x1847 00001841: JUMP 00001842: JUMPDEST 00001843: PUSH1 0x60 00001845: SWAP2 00001846: POP 00001847: JUMPDEST 00001848: POP 00001849: POP 0000184a: SWAP1 0000184b: POP 0000184c: DUP1 0000184d: PUSH2 0x188b 00001850: JUMPI 00001851: PUSH1 0x40 00001853: MLOAD 00001854: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001875: DUP2 00001876: MSTORE 00001877: PUSH1 0x04 00001879: ADD 0000187a: PUSH2 0x1882 0000187d: SWAP1 0000187e: PUSH2 0x3318 00001881: JUMP 00001882: JUMPDEST 00001883: PUSH1 0x40 00001885: MLOAD 00001886: DUP1 00001887: SWAP2 00001888: SUB 00001889: SWAP1 0000188a: REVERT 0000188b: JUMPDEST 0000188c: POP 0000188d: POP 0000188e: POP 0000188f: JUMP 00001890: JUMPDEST 00001891: PUSH1 0x00 00001893: DUP1 00001894: DUP3 00001895: SWAP1 00001896: POP 00001897: PUSH1 0x00 00001899: JUMPDEST 0000189a: DUP6 0000189b: MLOAD 0000189c: DUP2 0000189d: LT 0000189e: ISZERO 0000189f: PUSH2 0x19c8 000018a2: JUMPI 000018a3: PUSH1 0x00 000018a5: DUP7 000018a6: DUP3 000018a7: DUP2 000018a8: MLOAD 000018a9: DUP2 000018aa: LT 000018ab: PUSH2 0x18b7 000018ae: JUMPI 000018af: PUSH2 0x18b6 000018b2: PUSH2 0x3bbc 000018b5: JUMP 000018b6: JUMPDEST 000018b7: JUMPDEST 000018b8: PUSH1 0x20 000018ba: MUL 000018bb: PUSH1 0x20 000018bd: ADD 000018be: ADD 000018bf: MLOAD 000018c0: SWAP1 000018c1: POP 000018c2: DUP1 000018c3: DUP4 000018c4: GT 000018c5: PUSH2 0x1940 000018c8: JUMPI 000018c9: PUSH1 0x02 000018cb: DUP4 000018cc: DUP3 000018cd: PUSH1 0x40 000018cf: MLOAD 000018d0: PUSH1 0x20 000018d2: ADD 000018d3: PUSH2 0x18dd 000018d6: SWAP3 000018d7: SWAP2 000018d8: SWAP1 000018d9: PUSH2 0x3100 000018dc: JUMP 000018dd: JUMPDEST 000018de: PUSH1 0x40 000018e0: MLOAD 000018e1: PUSH1 0x20 000018e3: DUP2 000018e4: DUP4 000018e5: SUB 000018e6: SUB 000018e7: DUP2 000018e8: MSTORE 000018e9: SWAP1 000018ea: PUSH1 0x40 000018ec: MSTORE 000018ed: PUSH1 0x40 000018ef: MLOAD 000018f0: PUSH2 0x18f9 000018f3: SWAP2 000018f4: SWAP1 000018f5: PUSH2 0x3013 000018f8: JUMP 000018f9: JUMPDEST 000018fa: PUSH1 0x20 000018fc: PUSH1 0x40 000018fe: MLOAD 000018ff: DUP1 00001900: DUP4 00001901: SUB 00001902: DUP2 00001903: DUP6 00001904: GAS 00001905: STATICCALL 00001906: ISZERO 00001907: DUP1 00001908: ISZERO 00001909: PUSH2 0x1916 0000190c: JUMPI 0000190d: RETURNDATASIZE 0000190e: PUSH1 0x00 00001910: DUP1 00001911: RETURNDATACOPY 00001912: RETURNDATASIZE 00001913: PUSH1 0x00 00001915: REVERT 00001916: JUMPDEST 00001917: POP 00001918: POP 00001919: POP 0000191a: PUSH1 0x40 0000191c: MLOAD 0000191d: RETURNDATASIZE 0000191e: PUSH1 0x1f 00001920: NOT 00001921: PUSH1 0x1f 00001923: DUP3 00001924: ADD 00001925: AND 00001926: DUP3 00001927: ADD 00001928: DUP1 00001929: PUSH1 0x40 0000192b: MSTORE 0000192c: POP 0000192d: DUP2 0000192e: ADD 0000192f: SWAP1 00001930: PUSH2 0x1939 00001933: SWAP2 00001934: SWAP1 00001935: PUSH2 0x2696 00001938: JUMP 00001939: JUMPDEST 0000193a: SWAP3 0000193b: POP 0000193c: PUSH2 0x19b4 0000193f: JUMP 00001940: JUMPDEST 00001941: PUSH1 0x02 00001943: DUP2 00001944: DUP5 00001945: PUSH1 0x40 00001947: MLOAD 00001948: PUSH1 0x20 0000194a: ADD 0000194b: PUSH2 0x1955 0000194e: SWAP3 0000194f: SWAP2 00001950: SWAP1 00001951: PUSH2 0x3100 00001954: JUMP 00001955: JUMPDEST 00001956: PUSH1 0x40 00001958: MLOAD 00001959: PUSH1 0x20 0000195b: DUP2 0000195c: DUP4 0000195d: SUB 0000195e: SUB 0000195f: DUP2 00001960: MSTORE 00001961: SWAP1 00001962: PUSH1 0x40 00001964: MSTORE 00001965: PUSH1 0x40 00001967: MLOAD 00001968: PUSH2 0x1971 0000196b: SWAP2 0000196c: SWAP1 0000196d: PUSH2 0x3013 00001970: JUMP 00001971: JUMPDEST 00001972: PUSH1 0x20 00001974: PUSH1 0x40 00001976: MLOAD 00001977: DUP1 00001978: DUP4 00001979: SUB 0000197a: DUP2 0000197b: DUP6 0000197c: GAS 0000197d: STATICCALL 0000197e: ISZERO 0000197f: DUP1 00001980: ISZERO 00001981: PUSH2 0x198e 00001984: JUMPI 00001985: RETURNDATASIZE 00001986: PUSH1 0x00 00001988: DUP1 00001989: RETURNDATACOPY 0000198a: RETURNDATASIZE 0000198b: PUSH1 0x00 0000198d: REVERT 0000198e: JUMPDEST 0000198f: POP 00001990: POP 00001991: POP 00001992: PUSH1 0x40 00001994: MLOAD 00001995: RETURNDATASIZE 00001996: PUSH1 0x1f 00001998: NOT 00001999: PUSH1 0x1f 0000199b: DUP3 0000199c: ADD 0000199d: AND 0000199e: DUP3 0000199f: ADD 000019a0: DUP1 000019a1: PUSH1 0x40 000019a3: MSTORE 000019a4: POP 000019a5: DUP2 000019a6: ADD 000019a7: SWAP1 000019a8: PUSH2 0x19b1 000019ab: SWAP2 000019ac: SWAP1 000019ad: PUSH2 0x2696 000019b0: JUMP 000019b1: JUMPDEST 000019b2: SWAP3 000019b3: POP 000019b4: JUMPDEST 000019b5: POP 000019b6: DUP1 000019b7: DUP1 000019b8: PUSH2 0x19c0 000019bb: SWAP1 000019bc: PUSH2 0x3a5d 000019bf: JUMP 000019c0: JUMPDEST 000019c1: SWAP2 000019c2: POP 000019c3: POP 000019c4: PUSH2 0x1899 000019c7: JUMP 000019c8: JUMPDEST 000019c9: POP 000019ca: DUP4 000019cb: DUP2 000019cc: EQ 000019cd: SWAP2 000019ce: POP 000019cf: POP 000019d0: SWAP4 000019d1: SWAP3 000019d2: POP 000019d3: POP 000019d4: POP 000019d5: JUMP 000019d6: JUMPDEST 000019d7: PUSH1 0x00 000019d9: PUSH2 0x1a04 000019dc: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc 000019fd: PUSH1 0x00 000019ff: SHL 00001a00: PUSH2 0x1f1c 00001a03: JUMP 00001a04: JUMPDEST 00001a05: PUSH1 0x00 00001a07: ADD 00001a08: PUSH1 0x00 00001a0a: SWAP1 00001a0b: SLOAD 00001a0c: SWAP1 00001a0d: PUSH2 0x0100 00001a10: EXP 00001a11: SWAP1 00001a12: DIV 00001a13: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001a28: AND 00001a29: SWAP1 00001a2a: POP 00001a2b: SWAP1 00001a2c: JUMP 00001a2d: JUMPDEST 00001a2e: PUSH1 0x00 00001a30: PUSH1 0x06 00001a32: PUSH1 0x00 00001a34: SWAP1 00001a35: SLOAD 00001a36: SWAP1 00001a37: PUSH2 0x0100 00001a3a: EXP 00001a3b: SWAP1 00001a3c: DIV 00001a3d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001a52: AND 00001a53: SWAP1 00001a54: POP 00001a55: SWAP1 00001a56: JUMP 00001a57: JUMPDEST 00001a58: PUSH2 0x1a83 00001a5b: PUSH32 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143 00001a7c: PUSH1 0x00 00001a7e: SHL 00001a7f: PUSH2 0x1f26 00001a82: JUMP 00001a83: JUMPDEST 00001a84: PUSH1 0x00 00001a86: ADD 00001a87: PUSH1 0x00 00001a89: SWAP1 00001a8a: SLOAD 00001a8b: SWAP1 00001a8c: PUSH2 0x0100 00001a8f: EXP 00001a90: SWAP1 00001a91: DIV 00001a92: PUSH1 0xff 00001a94: AND 00001a95: ISZERO 00001a96: PUSH2 0x1aa7 00001a99: JUMPI 00001a9a: PUSH2 0x1aa2 00001a9d: DUP4 00001a9e: PUSH2 0x1f30 00001aa1: JUMP 00001aa2: JUMPDEST 00001aa3: PUSH2 0x1bcf 00001aa6: JUMP 00001aa7: JUMPDEST 00001aa8: DUP3 00001aa9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001abe: AND 00001abf: PUSH4 0x52d1902d 00001ac4: PUSH1 0x40 00001ac6: MLOAD 00001ac7: DUP2 00001ac8: PUSH4 0xffffffff 00001acd: AND 00001ace: PUSH1 0xe0 00001ad0: SHL 00001ad1: DUP2 00001ad2: MSTORE 00001ad3: PUSH1 0x04 00001ad5: ADD 00001ad6: PUSH1 0x20 00001ad8: PUSH1 0x40 00001ada: MLOAD 00001adb: DUP1 00001adc: DUP4 00001add: SUB 00001ade: DUP2 00001adf: DUP7 00001ae0: DUP1 00001ae1: EXTCODESIZE 00001ae2: ISZERO 00001ae3: DUP1 00001ae4: ISZERO 00001ae5: PUSH2 0x1aed 00001ae8: JUMPI 00001ae9: PUSH1 0x00 00001aeb: DUP1 00001aec: REVERT 00001aed: JUMPDEST 00001aee: POP 00001aef: GAS 00001af0: STATICCALL 00001af1: SWAP3 00001af2: POP 00001af3: POP 00001af4: POP 00001af5: DUP1 00001af6: ISZERO 00001af7: PUSH2 0x1b1e 00001afa: JUMPI 00001afb: POP 00001afc: PUSH1 0x40 00001afe: MLOAD 00001aff: RETURNDATASIZE 00001b00: PUSH1 0x1f 00001b02: NOT 00001b03: PUSH1 0x1f 00001b05: DUP3 00001b06: ADD 00001b07: AND 00001b08: DUP3 00001b09: ADD 00001b0a: DUP1 00001b0b: PUSH1 0x40 00001b0d: MSTORE 00001b0e: POP 00001b0f: DUP2 00001b10: ADD 00001b11: SWAP1 00001b12: PUSH2 0x1b1b 00001b15: SWAP2 00001b16: SWAP1 00001b17: PUSH2 0x2696 00001b1a: JUMP 00001b1b: JUMPDEST 00001b1c: PUSH1 0x01 00001b1e: JUMPDEST 00001b1f: PUSH2 0x1b5d 00001b22: JUMPI 00001b23: PUSH1 0x40 00001b25: MLOAD 00001b26: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001b47: DUP2 00001b48: MSTORE 00001b49: PUSH1 0x04 00001b4b: ADD 00001b4c: PUSH2 0x1b54 00001b4f: SWAP1 00001b50: PUSH2 0x33f8 00001b53: JUMP 00001b54: JUMPDEST 00001b55: PUSH1 0x40 00001b57: MLOAD 00001b58: DUP1 00001b59: SWAP2 00001b5a: SUB 00001b5b: SWAP1 00001b5c: REVERT 00001b5d: JUMPDEST 00001b5e: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc 00001b7f: PUSH1 0x00 00001b81: SHL 00001b82: DUP2 00001b83: EQ 00001b84: PUSH2 0x1bc2 00001b87: JUMPI 00001b88: PUSH1 0x40 00001b8a: MLOAD 00001b8b: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001bac: DUP2 00001bad: MSTORE 00001bae: PUSH1 0x04 00001bb0: ADD 00001bb1: PUSH2 0x1bb9 00001bb4: SWAP1 00001bb5: PUSH2 0x3398 00001bb8: JUMP 00001bb9: JUMPDEST 00001bba: PUSH1 0x40 00001bbc: MLOAD 00001bbd: DUP1 00001bbe: SWAP2 00001bbf: SUB 00001bc0: SWAP1 00001bc1: REVERT 00001bc2: JUMPDEST 00001bc3: POP 00001bc4: PUSH2 0x1bce 00001bc7: DUP4 00001bc8: DUP4 00001bc9: DUP4 00001bca: PUSH2 0x1fe9 00001bcd: JUMP 00001bce: JUMPDEST 00001bcf: JUMPDEST 00001bd0: POP 00001bd1: POP 00001bd2: POP 00001bd3: JUMP 00001bd4: JUMPDEST 00001bd5: PUSH1 0x00 00001bd7: DUP1 00001bd8: PUSH1 0x01 00001bda: SWAP1 00001bdb: SLOAD 00001bdc: SWAP1 00001bdd: PUSH2 0x0100 00001be0: EXP 00001be1: SWAP1 00001be2: DIV 00001be3: PUSH1 0xff 00001be5: AND 00001be6: ISZERO 00001be7: PUSH2 0x1c4b 00001bea: JUMPI 00001beb: PUSH1 0x01 00001bed: DUP3 00001bee: PUSH1 0xff 00001bf0: AND 00001bf1: EQ 00001bf2: DUP1 00001bf3: ISZERO 00001bf4: PUSH2 0x1c03 00001bf7: JUMPI 00001bf8: POP 00001bf9: PUSH2 0x1c01 00001bfc: ADDRESS 00001bfd: PUSH2 0x1752 00001c00: JUMP 00001c01: JUMPDEST 00001c02: ISZERO 00001c03: JUMPDEST 00001c04: PUSH2 0x1c42 00001c07: JUMPI 00001c08: PUSH1 0x40 00001c0a: MLOAD 00001c0b: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001c2c: DUP2 00001c2d: MSTORE 00001c2e: PUSH1 0x04 00001c30: ADD 00001c31: PUSH2 0x1c39 00001c34: SWAP1 00001c35: PUSH2 0x33b8 00001c38: JUMP 00001c39: JUMPDEST 00001c3a: PUSH1 0x40 00001c3c: MLOAD 00001c3d: DUP1 00001c3e: SWAP2 00001c3f: SUB 00001c40: SWAP1 00001c41: REVERT 00001c42: JUMPDEST 00001c43: PUSH1 0x00 00001c45: SWAP1 00001c46: POP 00001c47: PUSH2 0x1cbf 00001c4a: JUMP 00001c4b: JUMPDEST 00001c4c: DUP2 00001c4d: PUSH1 0xff 00001c4f: AND 00001c50: PUSH1 0x00 00001c52: DUP1 00001c53: SLOAD 00001c54: SWAP1 00001c55: PUSH2 0x0100 00001c58: EXP 00001c59: SWAP1 00001c5a: DIV 00001c5b: PUSH1 0xff 00001c5d: AND 00001c5e: PUSH1 0xff 00001c60: AND 00001c61: LT 00001c62: PUSH2 0x1ca0 00001c65: JUMPI 00001c66: PUSH1 0x40 00001c68: MLOAD 00001c69: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001c8a: DUP2 00001c8b: MSTORE 00001c8c: PUSH1 0x04 00001c8e: ADD 00001c8f: PUSH2 0x1c97 00001c92: SWAP1 00001c93: PUSH2 0x33b8 00001c96: JUMP 00001c97: JUMPDEST 00001c98: PUSH1 0x40 00001c9a: MLOAD 00001c9b: DUP1 00001c9c: SWAP2 00001c9d: SUB 00001c9e: SWAP1 00001c9f: REVERT 00001ca0: JUMPDEST 00001ca1: DUP2 00001ca2: PUSH1 0x00 00001ca4: DUP1 00001ca5: PUSH2 0x0100 00001ca8: EXP 00001ca9: DUP2 00001caa: SLOAD 00001cab: DUP2 00001cac: PUSH1 0xff 00001cae: MUL 00001caf: NOT 00001cb0: AND 00001cb1: SWAP1 00001cb2: DUP4 00001cb3: PUSH1 0xff 00001cb5: AND 00001cb6: MUL 00001cb7: OR 00001cb8: SWAP1 00001cb9: SSTORE 00001cba: POP 00001cbb: PUSH1 0x01 00001cbd: SWAP1 00001cbe: POP 00001cbf: JUMPDEST 00001cc0: SWAP2 00001cc1: SWAP1 00001cc2: POP 00001cc3: JUMP 00001cc4: JUMPDEST 00001cc5: PUSH1 0x00 00001cc7: DUP1 00001cc8: PUSH1 0x41 00001cca: DUP4 00001ccb: MLOAD 00001ccc: EQ 00001ccd: ISZERO 00001cce: PUSH2 0x1d06 00001cd1: JUMPI 00001cd2: PUSH1 0x00 00001cd4: DUP1 00001cd5: PUSH1 0x00 00001cd7: PUSH1 0x20 00001cd9: DUP7 00001cda: ADD 00001cdb: MLOAD 00001cdc: SWAP3 00001cdd: POP 00001cde: PUSH1 0x40 00001ce0: DUP7 00001ce1: ADD 00001ce2: MLOAD 00001ce3: SWAP2 00001ce4: POP 00001ce5: PUSH1 0x60 00001ce7: DUP7 00001ce8: ADD 00001ce9: MLOAD 00001cea: PUSH1 0x00 00001cec: BYTE 00001ced: SWAP1 00001cee: POP 00001cef: PUSH2 0x1cfa 00001cf2: DUP8 00001cf3: DUP3 00001cf4: DUP6 00001cf5: DUP6 00001cf6: PUSH2 0x2015 00001cf9: JUMP 00001cfa: JUMPDEST 00001cfb: SWAP5 00001cfc: POP 00001cfd: SWAP5 00001cfe: POP 00001cff: POP 00001d00: POP 00001d01: POP 00001d02: PUSH2 0x1d40 00001d05: JUMP 00001d06: JUMPDEST 00001d07: PUSH1 0x40 00001d09: DUP4 00001d0a: MLOAD 00001d0b: EQ 00001d0c: ISZERO 00001d0d: PUSH2 0x1d37 00001d10: JUMPI 00001d11: PUSH1 0x00 00001d13: DUP1 00001d14: PUSH1 0x20 00001d16: DUP6 00001d17: ADD 00001d18: MLOAD 00001d19: SWAP2 00001d1a: POP 00001d1b: PUSH1 0x40 00001d1d: DUP6 00001d1e: ADD 00001d1f: MLOAD 00001d20: SWAP1 00001d21: POP 00001d22: PUSH2 0x1d2c 00001d25: DUP7 00001d26: DUP4 00001d27: DUP4 00001d28: PUSH2 0x2122 00001d2b: JUMP 00001d2c: JUMPDEST 00001d2d: SWAP4 00001d2e: POP 00001d2f: SWAP4 00001d30: POP 00001d31: POP 00001d32: POP 00001d33: PUSH2 0x1d40 00001d36: JUMP 00001d37: JUMPDEST 00001d38: PUSH1 0x00 00001d3a: PUSH1 0x02 00001d3c: SWAP2 00001d3d: POP 00001d3e: SWAP2 00001d3f: POP 00001d40: JUMPDEST 00001d41: SWAP3 00001d42: POP 00001d43: SWAP3 00001d44: SWAP1 00001d45: POP 00001d46: JUMP 00001d47: JUMPDEST 00001d48: PUSH1 0x00 00001d4a: PUSH1 0x04 00001d4c: DUP2 00001d4d: GT 00001d4e: ISZERO 00001d4f: PUSH2 0x1d5b 00001d52: JUMPI 00001d53: PUSH2 0x1d5a 00001d56: PUSH2 0x3b8d 00001d59: JUMP 00001d5a: JUMPDEST 00001d5b: JUMPDEST 00001d5c: DUP2 00001d5d: PUSH1 0x04 00001d5f: DUP2 00001d60: GT 00001d61: ISZERO 00001d62: PUSH2 0x1d6e 00001d65: JUMPI 00001d66: PUSH2 0x1d6d 00001d69: PUSH2 0x3b8d 00001d6c: JUMP 00001d6d: JUMPDEST 00001d6e: JUMPDEST 00001d6f: EQ 00001d70: ISZERO 00001d71: PUSH2 0x1d79 00001d74: JUMPI 00001d75: PUSH2 0x1f19 00001d78: JUMP 00001d79: JUMPDEST 00001d7a: PUSH1 0x01 00001d7c: PUSH1 0x04 00001d7e: DUP2 00001d7f: GT 00001d80: ISZERO 00001d81: PUSH2 0x1d8d 00001d84: JUMPI 00001d85: PUSH2 0x1d8c 00001d88: PUSH2 0x3b8d 00001d8b: JUMP 00001d8c: JUMPDEST 00001d8d: JUMPDEST 00001d8e: DUP2 00001d8f: PUSH1 0x04 00001d91: DUP2 00001d92: GT 00001d93: ISZERO 00001d94: PUSH2 0x1da0 00001d97: JUMPI 00001d98: PUSH2 0x1d9f 00001d9b: PUSH2 0x3b8d 00001d9e: JUMP 00001d9f: JUMPDEST 00001da0: JUMPDEST 00001da1: EQ 00001da2: ISZERO 00001da3: PUSH2 0x1de1 00001da6: JUMPI 00001da7: PUSH1 0x40 00001da9: MLOAD 00001daa: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001dcb: DUP2 00001dcc: MSTORE 00001dcd: PUSH1 0x04 00001dcf: ADD 00001dd0: PUSH2 0x1dd8 00001dd3: SWAP1 00001dd4: PUSH2 0x31f8 00001dd7: JUMP 00001dd8: JUMPDEST 00001dd9: PUSH1 0x40 00001ddb: MLOAD 00001ddc: DUP1 00001ddd: SWAP2 00001dde: SUB 00001ddf: SWAP1 00001de0: REVERT 00001de1: JUMPDEST 00001de2: PUSH1 0x02 00001de4: PUSH1 0x04 00001de6: DUP2 00001de7: GT 00001de8: ISZERO 00001de9: PUSH2 0x1df5 00001dec: JUMPI 00001ded: PUSH2 0x1df4 00001df0: PUSH2 0x3b8d 00001df3: JUMP 00001df4: JUMPDEST 00001df5: JUMPDEST 00001df6: DUP2 00001df7: PUSH1 0x04 00001df9: DUP2 00001dfa: GT 00001dfb: ISZERO 00001dfc: PUSH2 0x1e08 00001dff: JUMPI 00001e00: PUSH2 0x1e07 00001e03: PUSH2 0x3b8d 00001e06: JUMP 00001e07: JUMPDEST 00001e08: JUMPDEST 00001e09: EQ 00001e0a: ISZERO 00001e0b: PUSH2 0x1e49 00001e0e: JUMPI 00001e0f: PUSH1 0x40 00001e11: MLOAD 00001e12: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001e33: DUP2 00001e34: MSTORE 00001e35: PUSH1 0x04 00001e37: ADD 00001e38: PUSH2 0x1e40 00001e3b: SWAP1 00001e3c: PUSH2 0x3238 00001e3f: JUMP 00001e40: JUMPDEST 00001e41: PUSH1 0x40 00001e43: MLOAD 00001e44: DUP1 00001e45: SWAP2 00001e46: SUB 00001e47: SWAP1 00001e48: REVERT 00001e49: JUMPDEST 00001e4a: PUSH1 0x03 00001e4c: PUSH1 0x04 00001e4e: DUP2 00001e4f: GT 00001e50: ISZERO 00001e51: PUSH2 0x1e5d 00001e54: JUMPI 00001e55: PUSH2 0x1e5c 00001e58: PUSH2 0x3b8d 00001e5b: JUMP 00001e5c: JUMPDEST 00001e5d: JUMPDEST 00001e5e: DUP2 00001e5f: PUSH1 0x04 00001e61: DUP2 00001e62: GT 00001e63: ISZERO 00001e64: PUSH2 0x1e70 00001e67: JUMPI 00001e68: PUSH2 0x1e6f 00001e6b: PUSH2 0x3b8d 00001e6e: JUMP 00001e6f: JUMPDEST 00001e70: JUMPDEST 00001e71: EQ 00001e72: ISZERO 00001e73: PUSH2 0x1eb1 00001e76: JUMPI 00001e77: PUSH1 0x40 00001e79: MLOAD 00001e7a: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001e9b: DUP2 00001e9c: MSTORE 00001e9d: PUSH1 0x04 00001e9f: ADD 00001ea0: PUSH2 0x1ea8 00001ea3: SWAP1 00001ea4: PUSH2 0x3338 00001ea7: JUMP 00001ea8: JUMPDEST 00001ea9: PUSH1 0x40 00001eab: MLOAD 00001eac: DUP1 00001ead: SWAP2 00001eae: SUB 00001eaf: SWAP1 00001eb0: REVERT 00001eb1: JUMPDEST 00001eb2: PUSH1 0x04 00001eb4: DUP1 00001eb5: DUP2 00001eb6: GT 00001eb7: ISZERO 00001eb8: PUSH2 0x1ec4 00001ebb: JUMPI 00001ebc: PUSH2 0x1ec3 00001ebf: PUSH2 0x3b8d 00001ec2: JUMP 00001ec3: JUMPDEST 00001ec4: JUMPDEST 00001ec5: DUP2 00001ec6: PUSH1 0x04 00001ec8: DUP2 00001ec9: GT 00001eca: ISZERO 00001ecb: PUSH2 0x1ed7 00001ece: JUMPI 00001ecf: PUSH2 0x1ed6 00001ed2: PUSH2 0x3b8d 00001ed5: JUMP 00001ed6: JUMPDEST 00001ed7: JUMPDEST 00001ed8: EQ 00001ed9: ISZERO 00001eda: PUSH2 0x1f18 00001edd: JUMPI 00001ede: PUSH1 0x40 00001ee0: MLOAD 00001ee1: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001f02: DUP2 00001f03: MSTORE 00001f04: PUSH1 0x04 00001f06: ADD 00001f07: PUSH2 0x1f0f 00001f0a: SWAP1 00001f0b: PUSH2 0x33d8 00001f0e: JUMP 00001f0f: JUMPDEST 00001f10: PUSH1 0x40 00001f12: MLOAD 00001f13: DUP1 00001f14: SWAP2 00001f15: SUB 00001f16: SWAP1 00001f17: REVERT 00001f18: JUMPDEST 00001f19: JUMPDEST 00001f1a: POP 00001f1b: JUMP 00001f1c: JUMPDEST 00001f1d: PUSH1 0x00 00001f1f: DUP2 00001f20: SWAP1 00001f21: POP 00001f22: SWAP2 00001f23: SWAP1 00001f24: POP 00001f25: JUMP 00001f26: JUMPDEST 00001f27: PUSH1 0x00 00001f29: DUP2 00001f2a: SWAP1 00001f2b: POP 00001f2c: SWAP2 00001f2d: SWAP1 00001f2e: POP 00001f2f: JUMP 00001f30: JUMPDEST 00001f31: PUSH2 0x1f39 00001f34: DUP2 00001f35: PUSH2 0x1752 00001f38: JUMP 00001f39: JUMPDEST 00001f3a: PUSH2 0x1f78 00001f3d: JUMPI 00001f3e: PUSH1 0x40 00001f40: MLOAD 00001f41: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001f62: DUP2 00001f63: MSTORE 00001f64: PUSH1 0x04 00001f66: ADD 00001f67: PUSH2 0x1f6f 00001f6a: SWAP1 00001f6b: PUSH2 0x3458 00001f6e: JUMP 00001f6f: JUMPDEST 00001f70: PUSH1 0x40 00001f72: MLOAD 00001f73: DUP1 00001f74: SWAP2 00001f75: SUB 00001f76: SWAP1 00001f77: REVERT 00001f78: JUMPDEST 00001f79: DUP1 00001f7a: PUSH2 0x1fa5 00001f7d: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc 00001f9e: PUSH1 0x00 00001fa0: SHL 00001fa1: PUSH2 0x1f1c 00001fa4: JUMP 00001fa5: JUMPDEST 00001fa6: PUSH1 0x00 00001fa8: ADD 00001fa9: PUSH1 0x00 00001fab: PUSH2 0x0100 00001fae: EXP 00001faf: DUP2 00001fb0: SLOAD 00001fb1: DUP2 00001fb2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001fc7: MUL 00001fc8: NOT 00001fc9: AND 00001fca: SWAP1 00001fcb: DUP4 00001fcc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001fe1: AND 00001fe2: MUL 00001fe3: OR 00001fe4: SWAP1 00001fe5: SSTORE 00001fe6: POP 00001fe7: POP 00001fe8: JUMP 00001fe9: JUMPDEST 00001fea: PUSH2 0x1ff2 00001fed: DUP4 00001fee: PUSH2 0x2181 00001ff1: JUMP 00001ff2: JUMPDEST 00001ff3: PUSH1 0x00 00001ff5: DUP3 00001ff6: MLOAD 00001ff7: GT 00001ff8: DUP1 00001ff9: PUSH2 0x1fff 00001ffc: JUMPI 00001ffd: POP 00001ffe: DUP1 00001fff: JUMPDEST 00002000: ISZERO 00002001: PUSH2 0x2010 00002004: JUMPI 00002005: PUSH2 0x200e 00002008: DUP4 00002009: DUP4 0000200a: PUSH2 0x21d0 0000200d: JUMP 0000200e: JUMPDEST 0000200f: POP 00002010: JUMPDEST 00002011: POP 00002012: POP 00002013: POP 00002014: JUMP 00002015: JUMPDEST 00002016: PUSH1 0x00 00002018: DUP1 00002019: PUSH32 0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0 0000203a: DUP4 0000203b: PUSH1 0x00 0000203d: SHR 0000203e: GT 0000203f: ISZERO 00002040: PUSH2 0x2050 00002043: JUMPI 00002044: PUSH1 0x00 00002046: PUSH1 0x03 00002048: SWAP2 00002049: POP 0000204a: SWAP2 0000204b: POP 0000204c: PUSH2 0x2119 0000204f: JUMP 00002050: JUMPDEST 00002051: PUSH1 0x1b 00002053: DUP6 00002054: PUSH1 0xff 00002056: AND 00002057: EQ 00002058: ISZERO 00002059: DUP1 0000205a: ISZERO 0000205b: PUSH2 0x2068 0000205e: JUMPI 0000205f: POP 00002060: PUSH1 0x1c 00002062: DUP6 00002063: PUSH1 0xff 00002065: AND 00002066: EQ 00002067: ISZERO 00002068: JUMPDEST 00002069: ISZERO 0000206a: PUSH2 0x207a 0000206d: JUMPI 0000206e: PUSH1 0x00 00002070: PUSH1 0x04 00002072: SWAP2 00002073: POP 00002074: SWAP2 00002075: POP 00002076: PUSH2 0x2119 00002079: JUMP 0000207a: JUMPDEST 0000207b: PUSH1 0x00 0000207d: PUSH1 0x01 0000207f: DUP8 00002080: DUP8 00002081: DUP8 00002082: DUP8 00002083: PUSH1 0x40 00002085: MLOAD 00002086: PUSH1 0x00 00002088: DUP2 00002089: MSTORE 0000208a: PUSH1 0x20 0000208c: ADD 0000208d: PUSH1 0x40 0000208f: MSTORE 00002090: PUSH1 0x40 00002092: MLOAD 00002093: PUSH2 0x209f 00002096: SWAP5 00002097: SWAP4 00002098: SWAP3 00002099: SWAP2 0000209a: SWAP1 0000209b: PUSH2 0x315b 0000209e: JUMP 0000209f: JUMPDEST 000020a0: PUSH1 0x20 000020a2: PUSH1 0x40 000020a4: MLOAD 000020a5: PUSH1 0x20 000020a7: DUP2 000020a8: SUB 000020a9: SWAP1 000020aa: DUP1 000020ab: DUP5 000020ac: SUB 000020ad: SWAP1 000020ae: DUP6 000020af: GAS 000020b0: STATICCALL 000020b1: ISZERO 000020b2: DUP1 000020b3: ISZERO 000020b4: PUSH2 0x20c1 000020b7: JUMPI 000020b8: RETURNDATASIZE 000020b9: PUSH1 0x00 000020bb: DUP1 000020bc: RETURNDATACOPY 000020bd: RETURNDATASIZE 000020be: PUSH1 0x00 000020c0: REVERT 000020c1: JUMPDEST 000020c2: POP 000020c3: POP 000020c4: POP 000020c5: PUSH1 0x20 000020c7: PUSH1 0x40 000020c9: MLOAD 000020ca: SUB 000020cb: MLOAD 000020cc: SWAP1 000020cd: POP 000020ce: PUSH1 0x00 000020d0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000020e5: AND 000020e6: DUP2 000020e7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000020fc: AND 000020fd: EQ 000020fe: ISZERO 000020ff: PUSH2 0x2110 00002102: JUMPI 00002103: PUSH1 0x00 00002105: PUSH1 0x01 00002107: SWAP3 00002108: POP 00002109: SWAP3 0000210a: POP 0000210b: POP 0000210c: PUSH2 0x2119 0000210f: JUMP 00002110: JUMPDEST 00002111: DUP1 00002112: PUSH1 0x00 00002114: SWAP3 00002115: POP 00002116: SWAP3 00002117: POP 00002118: POP 00002119: JUMPDEST 0000211a: SWAP5 0000211b: POP 0000211c: SWAP5 0000211d: SWAP3 0000211e: POP 0000211f: POP 00002120: POP 00002121: JUMP 00002122: JUMPDEST 00002123: PUSH1 0x00 00002125: DUP1 00002126: PUSH1 0x00 00002128: PUSH32 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00002149: PUSH1 0x00 0000214b: SHL 0000214c: DUP5 0000214d: AND 0000214e: SWAP1 0000214f: POP 00002150: PUSH1 0x00 00002152: PUSH1 0x1b 00002154: PUSH1 0xff 00002156: DUP7 00002157: PUSH1 0x00 00002159: SHR 0000215a: SWAP1 0000215b: SHR 0000215c: PUSH2 0x2165 0000215f: SWAP2 00002160: SWAP1 00002161: PUSH2 0x3746 00002164: JUMP 00002165: JUMPDEST 00002166: SWAP1 00002167: POP 00002168: PUSH2 0x2173 0000216b: DUP8 0000216c: DUP3 0000216d: DUP9 0000216e: DUP6 0000216f: PUSH2 0x2015 00002172: JUMP 00002173: JUMPDEST 00002174: SWAP4 00002175: POP 00002176: SWAP4 00002177: POP 00002178: POP 00002179: POP 0000217a: SWAP4 0000217b: POP 0000217c: SWAP4 0000217d: SWAP2 0000217e: POP 0000217f: POP 00002180: JUMP 00002181: JUMPDEST 00002182: PUSH2 0x218a 00002185: DUP2 00002186: PUSH2 0x1f30 00002189: JUMP 0000218a: JUMPDEST 0000218b: DUP1 0000218c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000021a1: AND 000021a2: PUSH32 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b 000021c3: PUSH1 0x40 000021c5: MLOAD 000021c6: PUSH1 0x40 000021c8: MLOAD 000021c9: DUP1 000021ca: SWAP2 000021cb: SUB 000021cc: SWAP1 000021cd: LOG2 000021ce: POP 000021cf: JUMP 000021d0: JUMPDEST 000021d1: PUSH1 0x60 000021d3: PUSH2 0x21f5 000021d6: DUP4 000021d7: DUP4 000021d8: PUSH1 0x40 000021da: MLOAD 000021db: DUP1 000021dc: PUSH1 0x60 000021de: ADD 000021df: PUSH1 0x40 000021e1: MSTORE 000021e2: DUP1 000021e3: PUSH1 0x27 000021e5: DUP2 000021e6: MSTORE 000021e7: PUSH1 0x20 000021e9: ADD 000021ea: PUSH2 0x4243 000021ed: PUSH1 0x27 000021ef: SWAP2 000021f0: CODECOPY 000021f1: PUSH2 0x21fd 000021f4: JUMP 000021f5: JUMPDEST 000021f6: SWAP1 000021f7: POP 000021f8: SWAP3 000021f9: SWAP2 000021fa: POP 000021fb: POP 000021fc: JUMP 000021fd: JUMPDEST 000021fe: PUSH1 0x60 00002200: PUSH2 0x2208 00002203: DUP5 00002204: PUSH2 0x1752 00002207: JUMP 00002208: JUMPDEST 00002209: PUSH2 0x2247 0000220c: JUMPI 0000220d: PUSH1 0x40 0000220f: MLOAD 00002210: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00002231: DUP2 00002232: MSTORE 00002233: PUSH1 0x04 00002235: ADD 00002236: PUSH2 0x223e 00002239: SWAP1 0000223a: PUSH2 0x3498 0000223d: JUMP 0000223e: JUMPDEST 0000223f: PUSH1 0x40 00002241: MLOAD 00002242: DUP1 00002243: SWAP2 00002244: SUB 00002245: SWAP1 00002246: REVERT 00002247: JUMPDEST 00002248: PUSH1 0x00 0000224a: DUP1 0000224b: DUP6 0000224c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002261: AND 00002262: DUP6 00002263: PUSH1 0x40 00002265: MLOAD 00002266: PUSH2 0x226f 00002269: SWAP2 0000226a: SWAP1 0000226b: PUSH2 0x3013 0000226e: JUMP 0000226f: JUMPDEST 00002270: PUSH1 0x00 00002272: PUSH1 0x40 00002274: MLOAD 00002275: DUP1 00002276: DUP4 00002277: SUB 00002278: DUP2 00002279: DUP6 0000227a: GAS 0000227b: DELEGATECALL 0000227c: SWAP2 0000227d: POP 0000227e: POP 0000227f: RETURNDATASIZE 00002280: DUP1 00002281: PUSH1 0x00 00002283: DUP2 00002284: EQ 00002285: PUSH2 0x22aa 00002288: JUMPI 00002289: PUSH1 0x40 0000228b: MLOAD 0000228c: SWAP2 0000228d: POP 0000228e: PUSH1 0x1f 00002290: NOT 00002291: PUSH1 0x3f 00002293: RETURNDATASIZE 00002294: ADD 00002295: AND 00002296: DUP3 00002297: ADD 00002298: PUSH1 0x40 0000229a: MSTORE 0000229b: RETURNDATASIZE 0000229c: DUP3 0000229d: MSTORE 0000229e: RETURNDATASIZE 0000229f: PUSH1 0x00 000022a1: PUSH1 0x20 000022a3: DUP5 000022a4: ADD 000022a5: RETURNDATACOPY 000022a6: PUSH2 0x22af 000022a9: JUMP 000022aa: JUMPDEST 000022ab: PUSH1 0x60 000022ad: SWAP2 000022ae: POP 000022af: JUMPDEST 000022b0: POP 000022b1: SWAP2 000022b2: POP 000022b3: SWAP2 000022b4: POP 000022b5: PUSH2 0x22bf 000022b8: DUP3 000022b9: DUP3 000022ba: DUP7 000022bb: PUSH2 0x22ca 000022be: JUMP 000022bf: JUMPDEST 000022c0: SWAP3 000022c1: POP 000022c2: POP 000022c3: POP 000022c4: SWAP4 000022c5: SWAP3 000022c6: POP 000022c7: POP 000022c8: POP 000022c9: JUMP 000022ca: JUMPDEST 000022cb: PUSH1 0x60 000022cd: DUP4 000022ce: ISZERO 000022cf: PUSH2 0x22da 000022d2: JUMPI 000022d3: DUP3 000022d4: SWAP1 000022d5: POP 000022d6: PUSH2 0x232a 000022d9: JUMP 000022da: JUMPDEST 000022db: PUSH1 0x00 000022dd: DUP4 000022de: MLOAD 000022df: GT 000022e0: ISZERO 000022e1: PUSH2 0x22ed 000022e4: JUMPI 000022e5: DUP3 000022e6: MLOAD 000022e7: DUP1 000022e8: DUP5 000022e9: PUSH1 0x20 000022eb: ADD 000022ec: REVERT 000022ed: JUMPDEST 000022ee: DUP2 000022ef: PUSH1 0x40 000022f1: MLOAD 000022f2: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00002313: DUP2 00002314: MSTORE 00002315: PUSH1 0x04 00002317: ADD 00002318: PUSH2 0x2321 0000231b: SWAP2 0000231c: SWAP1 0000231d: PUSH2 0x31d6 00002320: JUMP 00002321: JUMPDEST 00002322: PUSH1 0x40 00002324: MLOAD 00002325: DUP1 00002326: SWAP2 00002327: SUB 00002328: SWAP1 00002329: REVERT 0000232a: JUMPDEST 0000232b: SWAP4 0000232c: SWAP3 0000232d: POP 0000232e: POP 0000232f: POP 00002330: JUMP 00002331: JUMPDEST 00002332: DUP3 00002333: DUP1 00002334: SLOAD 00002335: DUP3 00002336: DUP3 00002337: SSTORE 00002338: SWAP1 00002339: PUSH1 0x00 0000233b: MSTORE 0000233c: PUSH1 0x20 0000233e: PUSH1 0x00 00002340: KECCAK256 00002341: SWAP1 00002342: DUP2 00002343: ADD 00002344: SWAP3 00002345: DUP3 00002346: ISZERO 00002347: PUSH2 0x23aa 0000234a: JUMPI 0000234b: SWAP2 0000234c: PUSH1 0x20 0000234e: MUL 0000234f: DUP3 00002350: ADD 00002351: JUMPDEST 00002352: DUP3 00002353: DUP2 00002354: GT 00002355: ISZERO 00002356: PUSH2 0x23a9 00002359: JUMPI 0000235a: DUP3 0000235b: MLOAD 0000235c: DUP3 0000235d: PUSH1 0x00 0000235f: PUSH2 0x0100 00002362: EXP 00002363: DUP2 00002364: SLOAD 00002365: DUP2 00002366: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000237b: MUL 0000237c: NOT 0000237d: AND 0000237e: SWAP1 0000237f: DUP4 00002380: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002395: AND 00002396: MUL 00002397: OR 00002398: SWAP1 00002399: SSTORE 0000239a: POP 0000239b: SWAP2 0000239c: PUSH1 0x20 0000239e: ADD 0000239f: SWAP2 000023a0: SWAP1 000023a1: PUSH1 0x01 000023a3: ADD 000023a4: SWAP1 000023a5: PUSH2 0x2351 000023a8: JUMP 000023a9: JUMPDEST 000023aa: JUMPDEST 000023ab: POP 000023ac: SWAP1 000023ad: POP 000023ae: PUSH2 0x23b7 000023b1: SWAP2 000023b2: SWAP1 000023b3: PUSH2 0x23bb 000023b6: JUMP 000023b7: JUMPDEST 000023b8: POP 000023b9: SWAP1 000023ba: JUMP 000023bb: JUMPDEST 000023bc: JUMPDEST 000023bd: DUP1 000023be: DUP3 000023bf: GT 000023c0: ISZERO 000023c1: PUSH2 0x23d4 000023c4: JUMPI 000023c5: PUSH1 0x00 000023c7: DUP2 000023c8: PUSH1 0x00 000023ca: SWAP1 000023cb: SSTORE 000023cc: POP 000023cd: PUSH1 0x01 000023cf: ADD 000023d0: PUSH2 0x23bc 000023d3: JUMP 000023d4: JUMPDEST 000023d5: POP 000023d6: SWAP1 000023d7: JUMP 000023d8: JUMPDEST 000023d9: PUSH1 0x00 000023db: PUSH2 0x23eb 000023de: PUSH2 0x23e6 000023e1: DUP5 000023e2: PUSH2 0x3670 000023e5: JUMP 000023e6: JUMPDEST 000023e7: PUSH2 0x364b 000023ea: JUMP 000023eb: JUMPDEST 000023ec: SWAP1 000023ed: POP 000023ee: DUP1 000023ef: DUP4 000023f0: DUP3 000023f1: MSTORE 000023f2: PUSH1 0x20 000023f4: DUP3 000023f5: ADD 000023f6: SWAP1 000023f7: POP 000023f8: DUP3 000023f9: DUP6 000023fa: PUSH1 0x20 000023fc: DUP7 000023fd: MUL 000023fe: DUP3 000023ff: ADD 00002400: GT 00002401: ISZERO 00002402: PUSH2 0x240e 00002405: JUMPI 00002406: PUSH2 0x240d 00002409: PUSH2 0x3c2e 0000240c: JUMP 0000240d: JUMPDEST 0000240e: JUMPDEST 0000240f: PUSH1 0x00 00002411: JUMPDEST 00002412: DUP6 00002413: DUP2 00002414: LT 00002415: ISZERO 00002416: PUSH2 0x243e 00002419: JUMPI 0000241a: DUP2 0000241b: PUSH2 0x2424 0000241e: DUP9 0000241f: DUP3 00002420: PUSH2 0x24b8 00002423: JUMP 00002424: JUMPDEST 00002425: DUP5 00002426: MSTORE 00002427: PUSH1 0x20 00002429: DUP5 0000242a: ADD 0000242b: SWAP4 0000242c: POP 0000242d: PUSH1 0x20 0000242f: DUP4 00002430: ADD 00002431: SWAP3 00002432: POP 00002433: POP 00002434: PUSH1 0x01 00002436: DUP2 00002437: ADD 00002438: SWAP1 00002439: POP 0000243a: PUSH2 0x2411 0000243d: JUMP 0000243e: JUMPDEST 0000243f: POP 00002440: POP 00002441: POP 00002442: SWAP4 00002443: SWAP3 00002444: POP 00002445: POP 00002446: POP 00002447: JUMP 00002448: JUMPDEST 00002449: PUSH1 0x00 0000244b: PUSH2 0x245b 0000244e: PUSH2 0x2456 00002451: DUP5 00002452: PUSH2 0x369c 00002455: JUMP 00002456: JUMPDEST 00002457: PUSH2 0x364b 0000245a: JUMP 0000245b: JUMPDEST 0000245c: SWAP1 0000245d: POP 0000245e: DUP1 0000245f: DUP4 00002460: DUP3 00002461: MSTORE 00002462: PUSH1 0x20 00002464: DUP3 00002465: ADD 00002466: SWAP1 00002467: POP 00002468: DUP3 00002469: DUP6 0000246a: PUSH1 0x20 0000246c: DUP7 0000246d: MUL 0000246e: DUP3 0000246f: ADD 00002470: GT 00002471: ISZERO 00002472: PUSH2 0x247e 00002475: JUMPI 00002476: PUSH2 0x247d 00002479: PUSH2 0x3c2e 0000247c: JUMP 0000247d: JUMPDEST 0000247e: JUMPDEST 0000247f: PUSH1 0x00 00002481: JUMPDEST 00002482: DUP6 00002483: DUP2 00002484: LT 00002485: ISZERO 00002486: PUSH2 0x24ae 00002489: JUMPI 0000248a: DUP2 0000248b: PUSH2 0x2494 0000248e: DUP9 0000248f: DUP3 00002490: PUSH2 0x2568 00002493: JUMP 00002494: JUMPDEST 00002495: DUP5 00002496: MSTORE 00002497: PUSH1 0x20 00002499: DUP5 0000249a: ADD 0000249b: SWAP4 0000249c: POP 0000249d: PUSH1 0x20 0000249f: DUP4 000024a0: ADD 000024a1: SWAP3 000024a2: POP 000024a3: POP 000024a4: PUSH1 0x01 000024a6: DUP2 000024a7: ADD 000024a8: SWAP1 000024a9: POP 000024aa: PUSH2 0x2481 000024ad: JUMP 000024ae: JUMPDEST 000024af: POP 000024b0: POP 000024b1: POP 000024b2: SWAP4 000024b3: SWAP3 000024b4: POP 000024b5: POP 000024b6: POP 000024b7: JUMP 000024b8: JUMPDEST 000024b9: PUSH1 0x00 000024bb: DUP2 000024bc: CALLDATALOAD 000024bd: SWAP1 000024be: POP 000024bf: PUSH2 0x24c7 000024c2: DUP2 000024c3: PUSH2 0x4173 000024c6: JUMP 000024c7: JUMPDEST 000024c8: SWAP3 000024c9: SWAP2 000024ca: POP 000024cb: POP 000024cc: JUMP 000024cd: JUMPDEST 000024ce: PUSH1 0x00 000024d0: DUP2 000024d1: CALLDATALOAD 000024d2: SWAP1 000024d3: POP 000024d4: PUSH2 0x24dc 000024d7: DUP2 000024d8: PUSH2 0x418a 000024db: JUMP 000024dc: JUMPDEST 000024dd: SWAP3 000024de: SWAP2 000024df: POP 000024e0: POP 000024e1: JUMP 000024e2: JUMPDEST 000024e3: PUSH1 0x00 000024e5: DUP3 000024e6: PUSH1 0x1f 000024e8: DUP4 000024e9: ADD 000024ea: SLT 000024eb: PUSH2 0x24f7 000024ee: JUMPI 000024ef: PUSH2 0x24f6 000024f2: PUSH2 0x3c1f 000024f5: JUMP 000024f6: JUMPDEST 000024f7: JUMPDEST 000024f8: DUP2 000024f9: CALLDATALOAD 000024fa: PUSH2 0x2507 000024fd: DUP5 000024fe: DUP3 000024ff: PUSH1 0x20 00002501: DUP7 00002502: ADD 00002503: PUSH2 0x23d8 00002506: JUMP 00002507: JUMPDEST 00002508: SWAP2 00002509: POP 0000250a: POP 0000250b: SWAP3 0000250c: SWAP2 0000250d: POP 0000250e: POP 0000250f: JUMP 00002510: JUMPDEST 00002511: PUSH1 0x00 00002513: DUP3 00002514: PUSH1 0x1f 00002516: DUP4 00002517: ADD 00002518: SLT 00002519: PUSH2 0x2525 0000251c: JUMPI 0000251d: PUSH2 0x2524 00002520: PUSH2 0x3c1f 00002523: JUMP 00002524: JUMPDEST 00002525: JUMPDEST 00002526: DUP2 00002527: CALLDATALOAD 00002528: PUSH2 0x2535 0000252b: DUP5 0000252c: DUP3 0000252d: PUSH1 0x20 0000252f: DUP7 00002530: ADD 00002531: PUSH2 0x2448 00002534: JUMP 00002535: JUMPDEST 00002536: SWAP2 00002537: POP 00002538: POP 00002539: SWAP3 0000253a: SWAP2 0000253b: POP 0000253c: POP 0000253d: JUMP 0000253e: JUMPDEST 0000253f: PUSH1 0x00 00002541: DUP2 00002542: MLOAD 00002543: SWAP1 00002544: POP 00002545: PUSH2 0x254d 00002548: DUP2 00002549: PUSH2 0x41a1 0000254c: JUMP 0000254d: JUMPDEST 0000254e: SWAP3 0000254f: SWAP2 00002550: POP 00002551: POP 00002552: JUMP 00002553: JUMPDEST 00002554: PUSH1 0x00 00002556: DUP2 00002557: CALLDATALOAD 00002558: SWAP1 00002559: POP 0000255a: PUSH2 0x2562 0000255d: DUP2 0000255e: PUSH2 0x41b8 00002561: JUMP 00002562: JUMPDEST 00002563: SWAP3 00002564: SWAP2 00002565: POP 00002566: POP 00002567: JUMP 00002568: JUMPDEST 00002569: PUSH1 0x00 0000256b: DUP2 0000256c: CALLDATALOAD 0000256d: SWAP1 0000256e: POP 0000256f: PUSH2 0x2577 00002572: DUP2 00002573: PUSH2 0x41cf 00002576: JUMP 00002577: JUMPDEST 00002578: SWAP3 00002579: SWAP2 0000257a: POP 0000257b: POP 0000257c: JUMP 0000257d: JUMPDEST 0000257e: PUSH1 0x00 00002580: DUP2 00002581: MLOAD 00002582: SWAP1 00002583: POP 00002584: PUSH2 0x258c 00002587: DUP2 00002588: PUSH2 0x41cf 0000258b: JUMP 0000258c: JUMPDEST 0000258d: SWAP3 0000258e: SWAP2 0000258f: POP 00002590: POP 00002591: JUMP 00002592: JUMPDEST 00002593: PUSH1 0x00 00002595: DUP1 00002596: DUP4 00002597: PUSH1 0x1f 00002599: DUP5 0000259a: ADD 0000259b: SLT 0000259c: PUSH2 0x25a8 0000259f: JUMPI 000025a0: PUSH2 0x25a7 000025a3: PUSH2 0x3c1f 000025a6: JUMP 000025a7: JUMPDEST 000025a8: JUMPDEST 000025a9: DUP3 000025aa: CALLDATALOAD 000025ab: SWAP1 000025ac: POP 000025ad: PUSH8 0xffffffffffffffff 000025b6: DUP2 000025b7: GT 000025b8: ISZERO 000025b9: PUSH2 0x25c5 000025bc: JUMPI 000025bd: PUSH2 0x25c4 000025c0: PUSH2 0x3c1a 000025c3: JUMP 000025c4: JUMPDEST 000025c5: JUMPDEST 000025c6: PUSH1 0x20 000025c8: DUP4 000025c9: ADD 000025ca: SWAP2 000025cb: POP 000025cc: DUP4 000025cd: PUSH1 0x01 000025cf: DUP3 000025d0: MUL 000025d1: DUP4 000025d2: ADD 000025d3: GT 000025d4: ISZERO 000025d5: PUSH2 0x25e1 000025d8: JUMPI 000025d9: PUSH2 0x25e0 000025dc: PUSH2 0x3c2e 000025df: JUMP 000025e0: JUMPDEST 000025e1: JUMPDEST 000025e2: SWAP3 000025e3: POP 000025e4: SWAP3 000025e5: SWAP1 000025e6: POP 000025e7: JUMP 000025e8: JUMPDEST 000025e9: PUSH1 0x00 000025eb: DUP2 000025ec: CALLDATALOAD 000025ed: SWAP1 000025ee: POP 000025ef: PUSH2 0x25f7 000025f2: DUP2 000025f3: PUSH2 0x41e6 000025f6: JUMP 000025f7: JUMPDEST 000025f8: SWAP3 000025f9: SWAP2 000025fa: POP 000025fb: POP 000025fc: JUMP 000025fd: JUMPDEST 000025fe: PUSH1 0x00 00002600: DUP2 00002601: CALLDATALOAD 00002602: SWAP1 00002603: POP 00002604: PUSH2 0x260c 00002607: DUP2 00002608: PUSH2 0x41fd 0000260b: JUMP 0000260c: JUMPDEST 0000260d: SWAP3 0000260e: SWAP2 0000260f: POP 00002610: POP 00002611: JUMP 00002612: JUMPDEST 00002613: PUSH1 0x00 00002615: DUP2 00002616: CALLDATALOAD 00002617: SWAP1 00002618: POP 00002619: PUSH2 0x2621 0000261c: DUP2 0000261d: PUSH2 0x4214 00002620: JUMP 00002621: JUMPDEST 00002622: SWAP3 00002623: SWAP2 00002624: POP 00002625: POP 00002626: JUMP 00002627: JUMPDEST 00002628: PUSH1 0x00 0000262a: DUP2 0000262b: CALLDATALOAD 0000262c: SWAP1 0000262d: POP 0000262e: PUSH2 0x2636 00002631: DUP2 00002632: PUSH2 0x422b 00002635: JUMP 00002636: JUMPDEST 00002637: SWAP3 00002638: SWAP2 00002639: POP 0000263a: POP 0000263b: JUMP 0000263c: JUMPDEST 0000263d: PUSH1 0x00 0000263f: PUSH1 0x20 00002641: DUP3 00002642: DUP5 00002643: SUB 00002644: SLT 00002645: ISZERO 00002646: PUSH2 0x2652 00002649: JUMPI 0000264a: PUSH2 0x2651 0000264d: PUSH2 0x3c38 00002650: JUMP 00002651: JUMPDEST 00002652: JUMPDEST 00002653: PUSH1 0x00 00002655: PUSH2 0x2660 00002658: DUP5 00002659: DUP3 0000265a: DUP6 0000265b: ADD 0000265c: PUSH2 0x253e 0000265f: JUMP 00002660: JUMPDEST 00002661: SWAP2 00002662: POP 00002663: POP 00002664: SWAP3 00002665: SWAP2 00002666: POP 00002667: POP 00002668: JUMP 00002669: JUMPDEST 0000266a: PUSH1 0x00 0000266c: PUSH1 0x20 0000266e: DUP3 0000266f: DUP5 00002670: SUB 00002671: SLT 00002672: ISZERO 00002673: PUSH2 0x267f 00002676: JUMPI 00002677: PUSH2 0x267e 0000267a: PUSH2 0x3c38 0000267d: JUMP 0000267e: JUMPDEST 0000267f: JUMPDEST 00002680: PUSH1 0x00 00002682: PUSH2 0x268d 00002685: DUP5 00002686: DUP3 00002687: DUP6 00002688: ADD 00002689: PUSH2 0x2553 0000268c: JUMP 0000268d: JUMPDEST 0000268e: SWAP2 0000268f: POP 00002690: POP 00002691: SWAP3 00002692: SWAP2 00002693: POP 00002694: POP 00002695: JUMP 00002696: JUMPDEST 00002697: PUSH1 0x00 00002699: PUSH1 0x20 0000269b: DUP3 0000269c: DUP5 0000269d: SUB 0000269e: SLT 0000269f: ISZERO 000026a0: PUSH2 0x26ac 000026a3: JUMPI 000026a4: PUSH2 0x26ab 000026a7: PUSH2 0x3c38 000026aa: JUMP 000026ab: JUMPDEST 000026ac: JUMPDEST 000026ad: PUSH1 0x00 000026af: PUSH2 0x26ba 000026b2: DUP5 000026b3: DUP3 000026b4: DUP6 000026b5: ADD 000026b6: PUSH2 0x257d 000026b9: JUMP 000026ba: JUMPDEST 000026bb: SWAP2 000026bc: POP 000026bd: POP 000026be: SWAP3 000026bf: SWAP2 000026c0: POP 000026c1: POP 000026c2: JUMP 000026c3: JUMPDEST 000026c4: PUSH1 0x00 000026c6: DUP1 000026c7: PUSH1 0x00 000026c9: PUSH1 0x40 000026cb: DUP5 000026cc: DUP7 000026cd: SUB 000026ce: SLT 000026cf: ISZERO 000026d0: PUSH2 0x26dc 000026d3: JUMPI 000026d4: PUSH2 0x26db 000026d7: PUSH2 0x3c38 000026da: JUMP 000026db: JUMPDEST 000026dc: JUMPDEST 000026dd: PUSH1 0x00 000026df: DUP5 000026e0: ADD 000026e1: CALLDATALOAD 000026e2: PUSH8 0xffffffffffffffff 000026eb: DUP2 000026ec: GT 000026ed: ISZERO 000026ee: PUSH2 0x26fa 000026f1: JUMPI 000026f2: PUSH2 0x26f9 000026f5: PUSH2 0x3c33 000026f8: JUMP 000026f9: JUMPDEST 000026fa: JUMPDEST 000026fb: PUSH2 0x2706 000026fe: DUP7 000026ff: DUP3 00002700: DUP8 00002701: ADD 00002702: PUSH2 0x2592 00002705: JUMP 00002706: JUMPDEST 00002707: SWAP4 00002708: POP 00002709: SWAP4 0000270a: POP 0000270b: POP 0000270c: PUSH1 0x20 0000270e: PUSH2 0x2719 00002711: DUP7 00002712: DUP3 00002713: DUP8 00002714: ADD 00002715: PUSH2 0x24b8 00002718: JUMP 00002719: JUMPDEST 0000271a: SWAP2 0000271b: POP 0000271c: POP 0000271d: SWAP3 0000271e: POP 0000271f: SWAP3 00002720: POP 00002721: SWAP3 00002722: JUMP 00002723: JUMPDEST 00002724: PUSH1 0x00 00002726: PUSH1 0x20 00002728: DUP3 00002729: DUP5 0000272a: SUB 0000272b: SLT 0000272c: ISZERO 0000272d: PUSH2 0x2739 00002730: JUMPI 00002731: PUSH2 0x2738 00002734: PUSH2 0x3c38 00002737: JUMP 00002738: JUMPDEST 00002739: JUMPDEST 0000273a: PUSH1 0x00 0000273c: PUSH2 0x2747 0000273f: DUP5 00002740: DUP3 00002741: DUP6 00002742: ADD 00002743: PUSH2 0x25fd 00002746: JUMP 00002747: JUMPDEST 00002748: SWAP2 00002749: POP 0000274a: POP 0000274b: SWAP3 0000274c: SWAP2 0000274d: POP 0000274e: POP 0000274f: JUMP 00002750: JUMPDEST 00002751: PUSH1 0x00 00002753: DUP1 00002754: PUSH1 0x00 00002756: DUP1 00002757: PUSH1 0x00 00002759: PUSH1 0xa0 0000275b: DUP7 0000275c: DUP9 0000275d: SUB 0000275e: SLT 0000275f: ISZERO 00002760: PUSH2 0x276c 00002763: JUMPI 00002764: PUSH2 0x276b 00002767: PUSH2 0x3c38 0000276a: JUMP 0000276b: JUMPDEST 0000276c: JUMPDEST 0000276d: PUSH1 0x00 0000276f: PUSH2 0x277a 00002772: DUP9 00002773: DUP3 00002774: DUP10 00002775: ADD 00002776: PUSH2 0x25fd 00002779: JUMP 0000277a: JUMPDEST 0000277b: SWAP6 0000277c: POP 0000277d: POP 0000277e: PUSH1 0x20 00002780: PUSH2 0x278b 00002783: DUP9 00002784: DUP3 00002785: DUP10 00002786: ADD 00002787: PUSH2 0x25fd 0000278a: JUMP 0000278b: JUMPDEST 0000278c: SWAP5 0000278d: POP 0000278e: POP 0000278f: PUSH1 0x40 00002791: PUSH2 0x279c 00002794: DUP9 00002795: DUP3 00002796: DUP10 00002797: ADD 00002798: PUSH2 0x25fd 0000279b: JUMP 0000279c: JUMPDEST 0000279d: SWAP4 0000279e: POP 0000279f: POP 000027a0: PUSH1 0x60 000027a2: DUP7 000027a3: ADD 000027a4: CALLDATALOAD 000027a5: PUSH8 0xffffffffffffffff 000027ae: DUP2 000027af: GT 000027b0: ISZERO 000027b1: PUSH2 0x27bd 000027b4: JUMPI 000027b5: PUSH2 0x27bc 000027b8: PUSH2 0x3c33 000027bb: JUMP 000027bc: JUMPDEST 000027bd: JUMPDEST 000027be: PUSH2 0x27c9 000027c1: DUP9 000027c2: DUP3 000027c3: DUP10 000027c4: ADD 000027c5: PUSH2 0x24e2 000027c8: JUMP 000027c9: JUMPDEST 000027ca: SWAP3 000027cb: POP 000027cc: POP 000027cd: PUSH1 0x80 000027cf: PUSH2 0x27da 000027d2: DUP9 000027d3: DUP3 000027d4: DUP10 000027d5: ADD 000027d6: PUSH2 0x25e8 000027d9: JUMP 000027da: JUMPDEST 000027db: SWAP2 000027dc: POP 000027dd: POP 000027de: SWAP3 000027df: SWAP6 000027e0: POP 000027e1: SWAP3 000027e2: SWAP6 000027e3: SWAP1 000027e4: SWAP4 000027e5: POP 000027e6: JUMP 000027e7: JUMPDEST 000027e8: PUSH1 0x00 000027ea: PUSH1 0x20 000027ec: DUP3 000027ed: DUP5 000027ee: SUB 000027ef: SLT 000027f0: ISZERO 000027f1: PUSH2 0x27fd 000027f4: JUMPI 000027f5: PUSH2 0x27fc 000027f8: PUSH2 0x3c38 000027fb: JUMP 000027fc: JUMPDEST 000027fd: JUMPDEST 000027fe: PUSH1 0x00 00002800: PUSH2 0x280b 00002803: DUP5 00002804: DUP3 00002805: DUP6 00002806: ADD 00002807: PUSH2 0x2627 0000280a: JUMP 0000280b: JUMPDEST 0000280c: SWAP2 0000280d: POP 0000280e: POP 0000280f: SWAP3 00002810: SWAP2 00002811: POP 00002812: POP 00002813: JUMP 00002814: JUMPDEST 00002815: PUSH1 0x00 00002817: DUP1 00002818: PUSH1 0x00 0000281a: DUP1 0000281b: PUSH1 0x00 0000281d: DUP1 0000281e: PUSH1 0xa0 00002820: DUP8 00002821: DUP10 00002822: SUB 00002823: SLT 00002824: ISZERO 00002825: PUSH2 0x2831 00002828: JUMPI 00002829: PUSH2 0x2830 0000282c: PUSH2 0x3c38 0000282f: JUMP 00002830: JUMPDEST 00002831: JUMPDEST 00002832: PUSH1 0x00 00002834: PUSH2 0x283f 00002837: DUP10 00002838: DUP3 00002839: DUP11 0000283a: ADD 0000283b: PUSH2 0x2627 0000283e: JUMP 0000283f: JUMPDEST 00002840: SWAP7 00002841: POP 00002842: POP 00002843: PUSH1 0x20 00002845: PUSH2 0x2850 00002848: DUP10 00002849: DUP3 0000284a: DUP11 0000284b: ADD 0000284c: PUSH2 0x24cd 0000284f: JUMP 00002850: JUMPDEST 00002851: SWAP6 00002852: POP 00002853: POP 00002854: PUSH1 0x40 00002856: PUSH2 0x2861 00002859: DUP10 0000285a: DUP3 0000285b: DUP11 0000285c: ADD 0000285d: PUSH2 0x25fd 00002860: JUMP 00002861: JUMPDEST 00002862: SWAP5 00002863: POP 00002864: POP 00002865: PUSH1 0x60 00002867: PUSH2 0x2872 0000286a: DUP10 0000286b: DUP3 0000286c: DUP11 0000286d: ADD 0000286e: PUSH2 0x2612 00002871: JUMP 00002872: JUMPDEST 00002873: SWAP4 00002874: POP 00002875: POP 00002876: PUSH1 0x80 00002878: DUP8 00002879: ADD 0000287a: CALLDATALOAD 0000287b: PUSH8 0xffffffffffffffff 00002884: DUP2 00002885: GT 00002886: ISZERO 00002887: PUSH2 0x2893 0000288a: JUMPI 0000288b: PUSH2 0x2892 0000288e: PUSH2 0x3c33 00002891: JUMP 00002892: JUMPDEST 00002893: JUMPDEST 00002894: PUSH2 0x289f 00002897: DUP10 00002898: DUP3 00002899: DUP11 0000289a: ADD 0000289b: PUSH2 0x2592 0000289e: JUMP 0000289f: JUMPDEST 000028a0: SWAP3 000028a1: POP 000028a2: SWAP3 000028a3: POP 000028a4: POP 000028a5: SWAP3 000028a6: SWAP6 000028a7: POP 000028a8: SWAP3 000028a9: SWAP6 000028aa: POP 000028ab: SWAP3 000028ac: SWAP6 000028ad: JUMP 000028ae: JUMPDEST 000028af: PUSH1 0x00 000028b1: DUP1 000028b2: PUSH1 0x00 000028b4: DUP1 000028b5: PUSH1 0x00 000028b7: PUSH1 0xa0 000028b9: DUP7 000028ba: DUP9 000028bb: SUB 000028bc: SLT 000028bd: ISZERO 000028be: PUSH2 0x28ca 000028c1: JUMPI 000028c2: PUSH2 0x28c9 000028c5: PUSH2 0x3c38 000028c8: JUMP 000028c9: JUMPDEST 000028ca: JUMPDEST 000028cb: PUSH1 0x00 000028cd: PUSH2 0x28d8 000028d0: DUP9 000028d1: DUP3 000028d2: DUP10 000028d3: ADD 000028d4: PUSH2 0x2627 000028d7: JUMP 000028d8: JUMPDEST 000028d9: SWAP6 000028da: POP 000028db: POP 000028dc: PUSH1 0x20 000028de: PUSH2 0x28e9 000028e1: DUP9 000028e2: DUP3 000028e3: DUP10 000028e4: ADD 000028e5: PUSH2 0x24cd 000028e8: JUMP 000028e9: JUMPDEST 000028ea: SWAP5 000028eb: POP 000028ec: POP 000028ed: PUSH1 0x40 000028ef: PUSH2 0x28fa 000028f2: DUP9 000028f3: DUP3 000028f4: DUP10 000028f5: ADD 000028f6: PUSH2 0x25fd 000028f9: JUMP 000028fa: JUMPDEST 000028fb: SWAP4 000028fc: POP 000028fd: POP 000028fe: PUSH1 0x60 00002900: PUSH2 0x290b 00002903: DUP9 00002904: DUP3 00002905: DUP10 00002906: ADD 00002907: PUSH2 0x2627 0000290a: JUMP 0000290b: JUMPDEST 0000290c: SWAP3 0000290d: POP 0000290e: POP 0000290f: PUSH1 0x80 00002911: DUP7 00002912: ADD 00002913: CALLDATALOAD 00002914: PUSH8 0xffffffffffffffff 0000291d: DUP2 0000291e: GT 0000291f: ISZERO 00002920: PUSH2 0x292c 00002923: JUMPI 00002924: PUSH2 0x292b 00002927: PUSH2 0x3c33 0000292a: JUMP 0000292b: JUMPDEST 0000292c: JUMPDEST 0000292d: PUSH2 0x2938 00002930: DUP9 00002931: DUP3 00002932: DUP10 00002933: ADD 00002934: PUSH2 0x2510 00002937: JUMP 00002938: JUMPDEST 00002939: SWAP2 0000293a: POP 0000293b: POP 0000293c: SWAP3 0000293d: SWAP6 0000293e: POP 0000293f: SWAP3 00002940: SWAP6 00002941: SWAP1 00002942: SWAP4 00002943: POP 00002944: JUMP 00002945: JUMPDEST 00002946: PUSH1 0x00 00002948: DUP1 00002949: PUSH1 0x00 0000294b: DUP1 0000294c: PUSH1 0x00 0000294e: DUP1 0000294f: PUSH1 0x80 00002951: DUP8 00002952: DUP10 00002953: SUB 00002954: SLT 00002955: ISZERO 00002956: PUSH2 0x2962 00002959: JUMPI 0000295a: PUSH2 0x2961 0000295d: PUSH2 0x3c38 00002960: JUMP 00002961: JUMPDEST 00002962: JUMPDEST 00002963: PUSH1 0x00 00002965: PUSH2 0x2970 00002968: DUP10 00002969: DUP3 0000296a: DUP11 0000296b: ADD 0000296c: PUSH2 0x2627 0000296f: JUMP 00002970: JUMPDEST 00002971: SWAP7 00002972: POP 00002973: POP 00002974: PUSH1 0x20 00002976: DUP8 00002977: ADD 00002978: CALLDATALOAD 00002979: PUSH8 0xffffffffffffffff 00002982: DUP2 00002983: GT 00002984: ISZERO 00002985: PUSH2 0x2991 00002988: JUMPI 00002989: PUSH2 0x2990 0000298c: PUSH2 0x3c33 0000298f: JUMP 00002990: JUMPDEST 00002991: JUMPDEST 00002992: PUSH2 0x299d 00002995: DUP10 00002996: DUP3 00002997: DUP11 00002998: ADD 00002999: PUSH2 0x2592 0000299c: JUMP 0000299d: JUMPDEST 0000299e: SWAP6 0000299f: POP 000029a0: SWAP6 000029a1: POP 000029a2: POP 000029a3: PUSH1 0x40 000029a5: PUSH2 0x29b0 000029a8: DUP10 000029a9: DUP3 000029aa: DUP11 000029ab: ADD 000029ac: PUSH2 0x2568 000029af: JUMP 000029b0: JUMPDEST 000029b1: SWAP4 000029b2: POP 000029b3: POP 000029b4: PUSH1 0x60 000029b6: DUP8 000029b7: ADD 000029b8: CALLDATALOAD 000029b9: PUSH8 0xffffffffffffffff 000029c2: DUP2 000029c3: GT 000029c4: ISZERO 000029c5: PUSH2 0x29d1 000029c8: JUMPI 000029c9: PUSH2 0x29d0 000029cc: PUSH2 0x3c33 000029cf: JUMP 000029d0: JUMPDEST 000029d1: JUMPDEST 000029d2: PUSH2 0x29dd 000029d5: DUP10 000029d6: DUP3 000029d7: DUP11 000029d8: ADD 000029d9: PUSH2 0x2592 000029dc: JUMP 000029dd: JUMPDEST 000029de: SWAP3 000029df: POP 000029e0: SWAP3 000029e1: POP 000029e2: POP 000029e3: SWAP3 000029e4: SWAP6 000029e5: POP 000029e6: SWAP3 000029e7: SWAP6 000029e8: POP 000029e9: SWAP3 000029ea: SWAP6 000029eb: JUMP 000029ec: JUMPDEST 000029ed: PUSH2 0x29f5 000029f0: DUP2 000029f1: PUSH2 0x396c 000029f4: JUMP 000029f5: JUMPDEST 000029f6: DUP3 000029f7: MSTORE 000029f8: POP 000029f9: POP 000029fa: JUMP 000029fb: JUMPDEST 000029fc: PUSH2 0x2a0c 000029ff: PUSH2 0x2a07 00002a02: DUP3 00002a03: PUSH2 0x38ab 00002a06: JUMP 00002a07: JUMPDEST 00002a08: PUSH2 0x3ae5 00002a0b: JUMP 00002a0c: JUMPDEST 00002a0d: DUP3 00002a0e: MSTORE 00002a0f: POP 00002a10: POP 00002a11: JUMP 00002a12: JUMPDEST 00002a13: PUSH2 0x2a1b 00002a16: DUP2 00002a17: PUSH2 0x3899 00002a1a: JUMP 00002a1b: JUMPDEST 00002a1c: DUP3 00002a1d: MSTORE 00002a1e: POP 00002a1f: POP 00002a20: JUMP 00002a21: JUMPDEST 00002a22: PUSH2 0x2a32 00002a25: PUSH2 0x2a2d 00002a28: DUP3 00002a29: PUSH2 0x3899 00002a2c: JUMP 00002a2d: JUMPDEST 00002a2e: PUSH2 0x3ad3 00002a31: JUMP 00002a32: JUMPDEST 00002a33: DUP3 00002a34: MSTORE 00002a35: POP 00002a36: POP 00002a37: JUMP 00002a38: JUMPDEST 00002a39: PUSH2 0x2a41 00002a3c: DUP2 00002a3d: PUSH2 0x38c9 00002a40: JUMP 00002a41: JUMPDEST 00002a42: DUP3 00002a43: MSTORE 00002a44: POP 00002a45: POP 00002a46: JUMP 00002a47: JUMPDEST 00002a48: PUSH2 0x2a50 00002a4b: DUP2 00002a4c: PUSH2 0x38f5 00002a4f: JUMP 00002a50: JUMPDEST 00002a51: DUP3 00002a52: MSTORE 00002a53: POP 00002a54: POP 00002a55: JUMP 00002a56: JUMPDEST 00002a57: PUSH2 0x2a67 00002a5a: PUSH2 0x2a62 00002a5d: DUP3 00002a5e: PUSH2 0x38f5 00002a61: JUMP 00002a62: JUMPDEST 00002a63: PUSH2 0x3af7 00002a66: JUMP 00002a67: JUMPDEST 00002a68: DUP3 00002a69: MSTORE 00002a6a: POP 00002a6b: POP 00002a6c: JUMP 00002a6d: JUMPDEST 00002a6e: PUSH1 0x00 00002a70: PUSH2 0x2a79 00002a73: DUP4 00002a74: DUP6 00002a75: PUSH2 0x36de 00002a78: JUMP 00002a79: JUMPDEST 00002a7a: SWAP4 00002a7b: POP 00002a7c: PUSH2 0x2a86 00002a7f: DUP4 00002a80: DUP6 00002a81: DUP5 00002a82: PUSH2 0x39ea 00002a85: JUMP 00002a86: JUMPDEST 00002a87: PUSH2 0x2a8f 00002a8a: DUP4 00002a8b: PUSH2 0x3c3d 00002a8e: JUMP 00002a8f: JUMPDEST 00002a90: DUP5 00002a91: ADD 00002a92: SWAP1 00002a93: POP 00002a94: SWAP4 00002a95: SWAP3 00002a96: POP 00002a97: POP 00002a98: POP 00002a99: JUMP 00002a9a: JUMPDEST 00002a9b: PUSH1 0x00 00002a9d: PUSH2 0x2aa6 00002aa0: DUP4 00002aa1: DUP6 00002aa2: PUSH2 0x36ef 00002aa5: JUMP 00002aa6: JUMPDEST 00002aa7: SWAP4 00002aa8: POP 00002aa9: PUSH2 0x2ab3 00002aac: DUP4 00002aad: DUP6 00002aae: DUP5 00002aaf: PUSH2 0x39ea 00002ab2: JUMP 00002ab3: JUMPDEST 00002ab4: DUP3 00002ab5: DUP5 00002ab6: ADD 00002ab7: SWAP1 00002ab8: POP 00002ab9: SWAP4 00002aba: SWAP3 00002abb: POP 00002abc: POP 00002abd: POP 00002abe: JUMP 00002abf: JUMPDEST 00002ac0: PUSH1 0x00 00002ac2: PUSH2 0x2aca 00002ac5: DUP3 00002ac6: PUSH2 0x36c8 00002ac9: JUMP 00002aca: JUMPDEST 00002acb: PUSH2 0x2ad4 00002ace: DUP2 00002acf: DUP6 00002ad0: PUSH2 0x36ef 00002ad3: JUMP 00002ad4: JUMPDEST 00002ad5: SWAP4 00002ad6: POP 00002ad7: PUSH2 0x2ae4 00002ada: DUP2 00002adb: DUP6 00002adc: PUSH1 0x20 00002ade: DUP7 00002adf: ADD 00002ae0: PUSH2 0x39f9 00002ae3: JUMP 00002ae4: JUMPDEST 00002ae5: DUP1 00002ae6: DUP5 00002ae7: ADD 00002ae8: SWAP2 00002ae9: POP 00002aea: POP 00002aeb: SWAP3 00002aec: SWAP2 00002aed: POP 00002aee: POP 00002aef: JUMP 00002af0: JUMPDEST 00002af1: PUSH2 0x2af9 00002af4: DUP2 00002af5: PUSH2 0x397e 00002af8: JUMP 00002af9: JUMPDEST 00002afa: DUP3 00002afb: MSTORE 00002afc: POP 00002afd: POP 00002afe: JUMP 00002aff: JUMPDEST 00002b00: PUSH2 0x2b08 00002b03: DUP2 00002b04: PUSH2 0x39a2 00002b07: JUMP 00002b08: JUMPDEST 00002b09: DUP3 00002b0a: MSTORE 00002b0b: POP 00002b0c: POP 00002b0d: JUMP 00002b0e: JUMPDEST 00002b0f: PUSH2 0x2b17 00002b12: DUP2 00002b13: PUSH2 0x39b4 00002b16: JUMP 00002b17: JUMPDEST 00002b18: DUP3 00002b19: MSTORE 00002b1a: POP 00002b1b: POP 00002b1c: JUMP 00002b1d: JUMPDEST 00002b1e: PUSH1 0x00 00002b20: PUSH2 0x2b28 00002b23: DUP3 00002b24: PUSH2 0x36d3 00002b27: JUMP 00002b28: JUMPDEST 00002b29: PUSH2 0x2b32 00002b2c: DUP2 00002b2d: DUP6 00002b2e: PUSH2 0x36fa 00002b31: JUMP 00002b32: JUMPDEST 00002b33: SWAP4 00002b34: POP 00002b35: PUSH2 0x2b42 00002b38: DUP2 00002b39: DUP6 00002b3a: PUSH1 0x20 00002b3c: DUP7 00002b3d: ADD 00002b3e: PUSH2 0x39f9 00002b41: JUMP 00002b42: JUMPDEST 00002b43: PUSH2 0x2b4b 00002b46: DUP2 00002b47: PUSH2 0x3c3d 00002b4a: JUMP 00002b4b: JUMPDEST 00002b4c: DUP5 00002b4d: ADD 00002b4e: SWAP2 00002b4f: POP 00002b50: POP 00002b51: SWAP3 00002b52: SWAP2 00002b53: POP 00002b54: POP 00002b55: JUMP 00002b56: JUMPDEST 00002b57: PUSH1 0x00 00002b59: PUSH2 0x2b63 00002b5c: PUSH1 0x18 00002b5e: DUP4 00002b5f: PUSH2 0x36fa 00002b62: JUMP 00002b63: JUMPDEST 00002b64: SWAP2 00002b65: POP 00002b66: PUSH2 0x2b6e 00002b69: DUP3 00002b6a: PUSH2 0x3c68 00002b6d: JUMP 00002b6e: JUMPDEST 00002b6f: PUSH1 0x20 00002b71: DUP3 00002b72: ADD 00002b73: SWAP1 00002b74: POP 00002b75: SWAP2 00002b76: SWAP1 00002b77: POP 00002b78: JUMP 00002b79: JUMPDEST 00002b7a: PUSH1 0x00 00002b7c: PUSH2 0x2b86 00002b7f: PUSH1 0x1c 00002b81: DUP4 00002b82: PUSH2 0x36fa 00002b85: JUMP 00002b86: JUMPDEST 00002b87: SWAP2 00002b88: POP 00002b89: PUSH2 0x2b91 00002b8c: DUP3 00002b8d: PUSH2 0x3c91 00002b90: JUMP 00002b91: JUMPDEST 00002b92: PUSH1 0x20 00002b94: DUP3 00002b95: ADD 00002b96: SWAP1 00002b97: POP 00002b98: SWAP2 00002b99: SWAP1 00002b9a: POP 00002b9b: JUMP 00002b9c: JUMPDEST 00002b9d: PUSH1 0x00 00002b9f: PUSH2 0x2ba9 00002ba2: PUSH1 0x1f 00002ba4: DUP4 00002ba5: PUSH2 0x36fa 00002ba8: JUMP 00002ba9: JUMPDEST 00002baa: SWAP2 00002bab: POP 00002bac: PUSH2 0x2bb4 00002baf: DUP3 00002bb0: PUSH2 0x3cba 00002bb3: JUMP 00002bb4: JUMPDEST 00002bb5: PUSH1 0x20 00002bb7: DUP3 00002bb8: ADD 00002bb9: SWAP1 00002bba: POP 00002bbb: SWAP2 00002bbc: SWAP1 00002bbd: POP 00002bbe: JUMP 00002bbf: JUMPDEST 00002bc0: PUSH1 0x00 00002bc2: PUSH2 0x2bcc 00002bc5: PUSH1 0x15 00002bc7: DUP4 00002bc8: PUSH2 0x36fa 00002bcb: JUMP 00002bcc: JUMPDEST 00002bcd: SWAP2 00002bce: POP 00002bcf: PUSH2 0x2bd7 00002bd2: DUP3 00002bd3: PUSH2 0x3ce3 00002bd6: JUMP 00002bd7: JUMPDEST 00002bd8: PUSH1 0x20 00002bda: DUP3 00002bdb: ADD 00002bdc: SWAP1 00002bdd: POP 00002bde: SWAP2 00002bdf: SWAP1 00002be0: POP 00002be1: JUMP 00002be2: JUMPDEST 00002be3: PUSH1 0x00 00002be5: PUSH2 0x2bef 00002be8: PUSH1 0x16 00002bea: DUP4 00002beb: PUSH2 0x36fa 00002bee: JUMP 00002bef: JUMPDEST 00002bf0: SWAP2 00002bf1: POP 00002bf2: PUSH2 0x2bfa 00002bf5: DUP3 00002bf6: PUSH2 0x3d0c 00002bf9: JUMP 00002bfa: JUMPDEST 00002bfb: PUSH1 0x20 00002bfd: DUP3 00002bfe: ADD 00002bff: SWAP1 00002c00: POP 00002c01: SWAP2 00002c02: SWAP1 00002c03: POP 00002c04: JUMP 00002c05: JUMPDEST 00002c06: PUSH1 0x00 00002c08: PUSH2 0x2c12 00002c0b: PUSH1 0x13 00002c0d: DUP4 00002c0e: PUSH2 0x36fa 00002c11: JUMP 00002c12: JUMPDEST 00002c13: SWAP2 00002c14: POP 00002c15: PUSH2 0x2c1d 00002c18: DUP3 00002c19: PUSH2 0x3d35 00002c1c: JUMP 00002c1d: JUMPDEST 00002c1e: PUSH1 0x20 00002c20: DUP3 00002c21: ADD 00002c22: SWAP1 00002c23: POP 00002c24: SWAP2 00002c25: SWAP1 00002c26: POP 00002c27: JUMP 00002c28: JUMPDEST 00002c29: PUSH1 0x00 00002c2b: PUSH2 0x2c35 00002c2e: PUSH1 0x19 00002c30: DUP4 00002c31: PUSH2 0x36fa 00002c34: JUMP 00002c35: JUMPDEST 00002c36: SWAP2 00002c37: POP 00002c38: PUSH2 0x2c40 00002c3b: DUP3 00002c3c: PUSH2 0x3d5e 00002c3f: JUMP 00002c40: JUMPDEST 00002c41: PUSH1 0x20 00002c43: DUP3 00002c44: ADD 00002c45: SWAP1 00002c46: POP 00002c47: SWAP2 00002c48: SWAP1 00002c49: POP 00002c4a: JUMP 00002c4b: JUMPDEST 00002c4c: PUSH1 0x00 00002c4e: PUSH2 0x2c58 00002c51: PUSH1 0x11 00002c53: DUP4 00002c54: PUSH2 0x36fa 00002c57: JUMP 00002c58: JUMPDEST 00002c59: SWAP2 00002c5a: POP 00002c5b: PUSH2 0x2c63 00002c5e: DUP3 00002c5f: PUSH2 0x3d87 00002c62: JUMP 00002c63: JUMPDEST 00002c64: PUSH1 0x20 00002c66: DUP3 00002c67: ADD 00002c68: SWAP1 00002c69: POP 00002c6a: SWAP2 00002c6b: SWAP1 00002c6c: POP 00002c6d: JUMP 00002c6e: JUMPDEST 00002c6f: PUSH1 0x00 00002c71: PUSH2 0x2c7b 00002c74: PUSH1 0x1c 00002c76: DUP4 00002c77: PUSH2 0x36fa 00002c7a: JUMP 00002c7b: JUMPDEST 00002c7c: SWAP2 00002c7d: POP 00002c7e: PUSH2 0x2c86 00002c81: DUP3 00002c82: PUSH2 0x3db0 00002c85: JUMP 00002c86: JUMPDEST 00002c87: PUSH1 0x20 00002c89: DUP3 00002c8a: ADD 00002c8b: SWAP1 00002c8c: POP 00002c8d: SWAP2 00002c8e: SWAP1 00002c8f: POP 00002c90: JUMP 00002c91: JUMPDEST 00002c92: PUSH1 0x00 00002c94: PUSH2 0x2c9e 00002c97: PUSH1 0x3a 00002c99: DUP4 00002c9a: PUSH2 0x36fa 00002c9d: JUMP 00002c9e: JUMPDEST 00002c9f: SWAP2 00002ca0: POP 00002ca1: PUSH2 0x2ca9 00002ca4: DUP3 00002ca5: PUSH2 0x3dd9 00002ca8: JUMP 00002ca9: JUMPDEST 00002caa: PUSH1 0x40 00002cac: DUP3 00002cad: ADD 00002cae: SWAP1 00002caf: POP 00002cb0: SWAP2 00002cb1: SWAP1 00002cb2: POP 00002cb3: JUMP 00002cb4: JUMPDEST 00002cb5: PUSH1 0x00 00002cb7: PUSH2 0x2cc1 00002cba: PUSH1 0x22 00002cbc: DUP4 00002cbd: PUSH2 0x36fa 00002cc0: JUMP 00002cc1: JUMPDEST 00002cc2: SWAP2 00002cc3: POP 00002cc4: PUSH2 0x2ccc 00002cc7: DUP3 00002cc8: PUSH2 0x3e28 00002ccb: JUMP 00002ccc: JUMPDEST 00002ccd: PUSH1 0x40 00002ccf: DUP3 00002cd0: ADD 00002cd1: SWAP1 00002cd2: POP 00002cd3: SWAP2 00002cd4: SWAP1 00002cd5: POP 00002cd6: JUMP 00002cd7: JUMPDEST 00002cd8: PUSH1 0x00 00002cda: PUSH2 0x2ce4 00002cdd: PUSH1 0x1d 00002cdf: DUP4 00002ce0: PUSH2 0x36fa 00002ce3: JUMP 00002ce4: JUMPDEST 00002ce5: SWAP2 00002ce6: POP 00002ce7: PUSH2 0x2cef 00002cea: DUP3 00002ceb: PUSH2 0x3e77 00002cee: JUMP 00002cef: JUMPDEST 00002cf0: PUSH1 0x20 00002cf2: DUP3 00002cf3: ADD 00002cf4: SWAP1 00002cf5: POP 00002cf6: SWAP2 00002cf7: SWAP1 00002cf8: POP 00002cf9: JUMP 00002cfa: JUMPDEST 00002cfb: PUSH1 0x00 00002cfd: PUSH2 0x2d07 00002d00: PUSH1 0x1a 00002d02: DUP4 00002d03: PUSH2 0x36fa 00002d06: JUMP 00002d07: JUMPDEST 00002d08: SWAP2 00002d09: POP 00002d0a: PUSH2 0x2d12 00002d0d: DUP3 00002d0e: PUSH2 0x3ea0 00002d11: JUMP 00002d12: JUMPDEST 00002d13: PUSH1 0x20 00002d15: DUP3 00002d16: ADD 00002d17: SWAP1 00002d18: POP 00002d19: SWAP2 00002d1a: SWAP1 00002d1b: POP 00002d1c: JUMP 00002d1d: JUMPDEST 00002d1e: PUSH1 0x00 00002d20: PUSH2 0x2d2a 00002d23: PUSH1 0x29 00002d25: DUP4 00002d26: PUSH2 0x36fa 00002d29: JUMP 00002d2a: JUMPDEST 00002d2b: SWAP2 00002d2c: POP 00002d2d: PUSH2 0x2d35 00002d30: DUP3 00002d31: PUSH2 0x3ec9 00002d34: JUMP 00002d35: JUMPDEST 00002d36: PUSH1 0x40 00002d38: DUP3 00002d39: ADD 00002d3a: SWAP1 00002d3b: POP 00002d3c: SWAP2 00002d3d: SWAP1 00002d3e: POP 00002d3f: JUMP 00002d40: JUMPDEST 00002d41: PUSH1 0x00 00002d43: PUSH2 0x2d4d 00002d46: PUSH1 0x2e 00002d48: DUP4 00002d49: PUSH2 0x36fa 00002d4c: JUMP 00002d4d: JUMPDEST 00002d4e: SWAP2 00002d4f: POP 00002d50: PUSH2 0x2d58 00002d53: DUP3 00002d54: PUSH2 0x3f18 00002d57: JUMP 00002d58: JUMPDEST 00002d59: PUSH1 0x40 00002d5b: DUP3 00002d5c: ADD 00002d5d: SWAP1 00002d5e: POP 00002d5f: SWAP2 00002d60: SWAP1 00002d61: POP 00002d62: JUMP 00002d63: JUMPDEST 00002d64: PUSH1 0x00 00002d66: PUSH2 0x2d70 00002d69: PUSH1 0x22 00002d6b: DUP4 00002d6c: PUSH2 0x36fa 00002d6f: JUMP 00002d70: JUMPDEST 00002d71: SWAP2 00002d72: POP 00002d73: PUSH2 0x2d7b 00002d76: DUP3 00002d77: PUSH2 0x3f67 00002d7a: JUMP 00002d7b: JUMPDEST 00002d7c: PUSH1 0x40 00002d7e: DUP3 00002d7f: ADD 00002d80: SWAP1 00002d81: POP 00002d82: SWAP2 00002d83: SWAP1 00002d84: POP 00002d85: JUMP 00002d86: JUMPDEST 00002d87: PUSH1 0x00 00002d89: PUSH2 0x2d93 00002d8c: PUSH1 0x2e 00002d8e: DUP4 00002d8f: PUSH2 0x36fa 00002d92: JUMP 00002d93: JUMPDEST 00002d94: SWAP2 00002d95: POP 00002d96: PUSH2 0x2d9e 00002d99: DUP3 00002d9a: PUSH2 0x3fb6 00002d9d: JUMP 00002d9e: JUMPDEST 00002d9f: PUSH1 0x40 00002da1: DUP3 00002da2: ADD 00002da3: SWAP1 00002da4: POP 00002da5: SWAP2 00002da6: SWAP1 00002da7: POP 00002da8: JUMP 00002da9: JUMPDEST 00002daa: PUSH1 0x00 00002dac: PUSH2 0x2db6 00002daf: PUSH1 0x16 00002db1: DUP4 00002db2: PUSH2 0x36fa 00002db5: JUMP 00002db6: JUMPDEST 00002db7: SWAP2 00002db8: POP 00002db9: PUSH2 0x2dc1 00002dbc: DUP3 00002dbd: PUSH2 0x4005 00002dc0: JUMP 00002dc1: JUMPDEST 00002dc2: PUSH1 0x20 00002dc4: DUP3 00002dc5: ADD 00002dc6: SWAP1 00002dc7: POP 00002dc8: SWAP2 00002dc9: SWAP1 00002dca: POP 00002dcb: JUMP 00002dcc: JUMPDEST 00002dcd: PUSH1 0x00 00002dcf: PUSH2 0x2dd9 00002dd2: PUSH1 0x1f 00002dd4: DUP4 00002dd5: PUSH2 0x36fa 00002dd8: JUMP 00002dd9: JUMPDEST 00002dda: SWAP2 00002ddb: POP 00002ddc: PUSH2 0x2de4 00002ddf: DUP3 00002de0: PUSH2 0x402e 00002de3: JUMP 00002de4: JUMPDEST 00002de5: PUSH1 0x20 00002de7: DUP3 00002de8: ADD 00002de9: SWAP1 00002dea: POP 00002deb: SWAP2 00002dec: SWAP1 00002ded: POP 00002dee: JUMP 00002def: JUMPDEST 00002df0: PUSH1 0x00 00002df2: PUSH2 0x2dfc 00002df5: PUSH1 0x2d 00002df7: DUP4 00002df8: PUSH2 0x36fa 00002dfb: JUMP 00002dfc: JUMPDEST 00002dfd: SWAP2 00002dfe: POP 00002dff: PUSH2 0x2e07 00002e02: DUP3 00002e03: PUSH2 0x4057 00002e06: JUMP 00002e07: JUMPDEST 00002e08: PUSH1 0x40 00002e0a: DUP3 00002e0b: ADD 00002e0c: SWAP1 00002e0d: POP 00002e0e: SWAP2 00002e0f: SWAP1 00002e10: POP 00002e11: JUMP 00002e12: JUMPDEST 00002e13: PUSH1 0x00 00002e15: PUSH2 0x2e1f 00002e18: PUSH1 0x1c 00002e1a: DUP4 00002e1b: PUSH2 0x36fa 00002e1e: JUMP 00002e1f: JUMPDEST 00002e20: SWAP2 00002e21: POP 00002e22: PUSH2 0x2e2a 00002e25: DUP3 00002e26: PUSH2 0x40a6 00002e29: JUMP 00002e2a: JUMPDEST 00002e2b: PUSH1 0x20 00002e2d: DUP3 00002e2e: ADD 00002e2f: SWAP1 00002e30: POP 00002e31: SWAP2 00002e32: SWAP1 00002e33: POP 00002e34: JUMP 00002e35: JUMPDEST 00002e36: PUSH1 0x00 00002e38: PUSH2 0x2e42 00002e3b: PUSH1 0x26 00002e3d: DUP4 00002e3e: PUSH2 0x36fa 00002e41: JUMP 00002e42: JUMPDEST 00002e43: SWAP2 00002e44: POP 00002e45: PUSH2 0x2e4d 00002e48: DUP3 00002e49: PUSH2 0x40cf 00002e4c: JUMP 00002e4d: JUMPDEST 00002e4e: PUSH1 0x40 00002e50: DUP3 00002e51: ADD 00002e52: SWAP1 00002e53: POP 00002e54: SWAP2 00002e55: SWAP1 00002e56: POP 00002e57: JUMP 00002e58: JUMPDEST 00002e59: PUSH1 0x00 00002e5b: PUSH2 0x2e65 00002e5e: PUSH1 0x00 00002e60: DUP4 00002e61: PUSH2 0x36ef 00002e64: JUMP 00002e65: JUMPDEST 00002e66: SWAP2 00002e67: POP 00002e68: PUSH2 0x2e70 00002e6b: DUP3 00002e6c: PUSH2 0x411e 00002e6f: JUMP 00002e70: JUMPDEST 00002e71: PUSH1 0x00 00002e73: DUP3 00002e74: ADD 00002e75: SWAP1 00002e76: POP 00002e77: SWAP2 00002e78: SWAP1 00002e79: POP 00002e7a: JUMP 00002e7b: JUMPDEST 00002e7c: PUSH1 0x00 00002e7e: PUSH2 0x2e88 00002e81: PUSH1 0x20 00002e83: DUP4 00002e84: PUSH2 0x36fa 00002e87: JUMP 00002e88: JUMPDEST 00002e89: SWAP2 00002e8a: POP 00002e8b: PUSH2 0x2e93 00002e8e: DUP3 00002e8f: PUSH2 0x4121 00002e92: JUMP 00002e93: JUMPDEST 00002e94: PUSH1 0x20 00002e96: DUP3 00002e97: ADD 00002e98: SWAP1 00002e99: POP 00002e9a: SWAP2 00002e9b: SWAP1 00002e9c: POP 00002e9d: JUMP 00002e9e: JUMPDEST 00002e9f: PUSH1 0x00 00002ea1: PUSH2 0x2eab 00002ea4: PUSH1 0x0a 00002ea6: DUP4 00002ea7: PUSH2 0x36fa 00002eaa: JUMP 00002eab: JUMPDEST 00002eac: SWAP2 00002ead: POP 00002eae: PUSH2 0x2eb6 00002eb1: DUP3 00002eb2: PUSH2 0x414a 00002eb5: JUMP 00002eb6: JUMPDEST 00002eb7: PUSH1 0x20 00002eb9: DUP3 00002eba: ADD 00002ebb: SWAP1 00002ebc: POP 00002ebd: SWAP2 00002ebe: SWAP1 00002ebf: POP 00002ec0: JUMP 00002ec1: JUMPDEST 00002ec2: PUSH2 0x2eca 00002ec5: DUP2 00002ec6: PUSH2 0x3931 00002ec9: JUMP 00002eca: JUMPDEST 00002ecb: DUP3 00002ecc: MSTORE 00002ecd: POP 00002ece: POP 00002ecf: JUMP 00002ed0: JUMPDEST 00002ed1: PUSH2 0x2ee1 00002ed4: PUSH2 0x2edc 00002ed7: DUP3 00002ed8: PUSH2 0x3931 00002edb: JUMP 00002edc: JUMPDEST 00002edd: PUSH2 0x3b13 00002ee0: JUMP 00002ee1: JUMPDEST 00002ee2: DUP3 00002ee3: MSTORE 00002ee4: POP 00002ee5: POP 00002ee6: JUMP 00002ee7: JUMPDEST 00002ee8: PUSH2 0x2ef0 00002eeb: DUP2 00002eec: PUSH2 0x393b 00002eef: JUMP 00002ef0: JUMPDEST 00002ef1: DUP3 00002ef2: MSTORE 00002ef3: POP 00002ef4: POP 00002ef5: JUMP 00002ef6: JUMPDEST 00002ef7: PUSH2 0x2eff 00002efa: DUP2 00002efb: PUSH2 0x394b 00002efe: JUMP 00002eff: JUMPDEST 00002f00: DUP3 00002f01: MSTORE 00002f02: POP 00002f03: POP 00002f04: JUMP 00002f05: JUMPDEST 00002f06: PUSH2 0x2f16 00002f09: PUSH2 0x2f11 00002f0c: DUP3 00002f0d: PUSH2 0x394b 00002f10: JUMP 00002f11: JUMPDEST 00002f12: PUSH2 0x3b1d 00002f15: JUMP 00002f16: JUMPDEST 00002f17: DUP3 00002f18: MSTORE 00002f19: POP 00002f1a: POP 00002f1b: JUMP 00002f1c: JUMPDEST 00002f1d: PUSH2 0x2f25 00002f20: DUP2 00002f21: PUSH2 0x395f 00002f24: JUMP 00002f25: JUMPDEST 00002f26: DUP3 00002f27: MSTORE 00002f28: POP 00002f29: POP 00002f2a: JUMP 00002f2b: JUMPDEST 00002f2c: PUSH1 0x00 00002f2e: PUSH2 0x2f37 00002f31: DUP3 00002f32: DUP7 00002f33: PUSH2 0x2a21 00002f36: JUMP 00002f37: JUMPDEST 00002f38: PUSH1 0x14 00002f3a: DUP3 00002f3b: ADD 00002f3c: SWAP2 00002f3d: POP 00002f3e: PUSH2 0x2f47 00002f41: DUP3 00002f42: DUP6 00002f43: PUSH2 0x2a21 00002f46: JUMP 00002f47: JUMPDEST 00002f48: PUSH1 0x14 00002f4a: DUP3 00002f4b: ADD 00002f4c: SWAP2 00002f4d: POP 00002f4e: PUSH2 0x2f57 00002f51: DUP3 00002f52: DUP5 00002f53: PUSH2 0x2a21 00002f56: JUMP 00002f57: JUMPDEST 00002f58: PUSH1 0x14 00002f5a: DUP3 00002f5b: ADD 00002f5c: SWAP2 00002f5d: POP 00002f5e: DUP2 00002f5f: SWAP1 00002f60: POP 00002f61: SWAP5 00002f62: SWAP4 00002f63: POP 00002f64: POP 00002f65: POP 00002f66: POP 00002f67: JUMP 00002f68: JUMPDEST 00002f69: PUSH1 0x00 00002f6b: PUSH2 0x2f74 00002f6e: DUP3 00002f6f: DUP9 00002f70: PUSH2 0x2a21 00002f73: JUMP 00002f74: JUMPDEST 00002f75: PUSH1 0x14 00002f77: DUP3 00002f78: ADD 00002f79: SWAP2 00002f7a: POP 00002f7b: PUSH2 0x2f84 00002f7e: DUP3 00002f7f: DUP8 00002f80: PUSH2 0x2f05 00002f83: JUMP 00002f84: JUMPDEST 00002f85: PUSH1 0x08 00002f87: DUP3 00002f88: ADD 00002f89: SWAP2 00002f8a: POP 00002f8b: PUSH2 0x2f94 00002f8e: DUP3 00002f8f: DUP7 00002f90: PUSH2 0x2a56 00002f93: JUMP 00002f94: JUMPDEST 00002f95: PUSH1 0x20 00002f97: DUP3 00002f98: ADD 00002f99: SWAP2 00002f9a: POP 00002f9b: PUSH2 0x2fa5 00002f9e: DUP3 00002f9f: DUP5 00002fa0: DUP7 00002fa1: PUSH2 0x2a9a 00002fa4: JUMP 00002fa5: JUMPDEST 00002fa6: SWAP2 00002fa7: POP 00002fa8: DUP2 00002fa9: SWAP1 00002faa: POP 00002fab: SWAP7 00002fac: SWAP6 00002fad: POP 00002fae: POP 00002faf: POP 00002fb0: POP 00002fb1: POP 00002fb2: POP 00002fb3: JUMP 00002fb4: JUMPDEST 00002fb5: PUSH1 0x00 00002fb7: PUSH2 0x2fc0 00002fba: DUP3 00002fbb: DUP9 00002fbc: PUSH2 0x2a21 00002fbf: JUMP 00002fc0: JUMPDEST 00002fc1: PUSH1 0x14 00002fc3: DUP3 00002fc4: ADD 00002fc5: SWAP2 00002fc6: POP 00002fc7: PUSH2 0x2fd0 00002fca: DUP3 00002fcb: DUP8 00002fcc: PUSH2 0x2f05 00002fcf: JUMP 00002fd0: JUMPDEST 00002fd1: PUSH1 0x08 00002fd3: DUP3 00002fd4: ADD 00002fd5: SWAP2 00002fd6: POP 00002fd7: PUSH2 0x2fe0 00002fda: DUP3 00002fdb: DUP7 00002fdc: PUSH2 0x2f05 00002fdf: JUMP 00002fe0: JUMPDEST 00002fe1: PUSH1 0x08 00002fe3: DUP3 00002fe4: ADD 00002fe5: SWAP2 00002fe6: POP 00002fe7: PUSH2 0x2ff0 00002fea: DUP3 00002feb: DUP6 00002fec: PUSH2 0x29fb 00002fef: JUMP 00002ff0: JUMPDEST 00002ff1: PUSH1 0x14 00002ff3: DUP3 00002ff4: ADD 00002ff5: SWAP2 00002ff6: POP 00002ff7: PUSH2 0x3000 00002ffa: DUP3 00002ffb: DUP5 00002ffc: PUSH2 0x2ed0 00002fff: JUMP 00003000: JUMPDEST 00003001: PUSH1 0x20 00003003: DUP3 00003004: ADD 00003005: SWAP2 00003006: POP 00003007: DUP2 00003008: SWAP1 00003009: POP 0000300a: SWAP7 0000300b: SWAP6 0000300c: POP 0000300d: POP 0000300e: POP 0000300f: POP 00003010: POP 00003011: POP 00003012: JUMP 00003013: JUMPDEST 00003014: PUSH1 0x00 00003016: PUSH2 0x301f 00003019: DUP3 0000301a: DUP5 0000301b: PUSH2 0x2abf 0000301e: JUMP 0000301f: JUMPDEST 00003020: SWAP2 00003021: POP 00003022: DUP2 00003023: SWAP1 00003024: POP 00003025: SWAP3 00003026: SWAP2 00003027: POP 00003028: POP 00003029: JUMP 0000302a: JUMPDEST 0000302b: PUSH1 0x00 0000302d: PUSH2 0x3035 00003030: DUP3 00003031: PUSH2 0x2e58 00003034: JUMP 00003035: JUMPDEST 00003036: SWAP2 00003037: POP 00003038: DUP2 00003039: SWAP1 0000303a: POP 0000303b: SWAP2 0000303c: SWAP1 0000303d: POP 0000303e: JUMP 0000303f: JUMPDEST 00003040: PUSH1 0x00 00003042: PUSH2 0x304b 00003045: DUP3 00003046: DUP7 00003047: PUSH2 0x2f05 0000304a: JUMP 0000304b: JUMPDEST 0000304c: PUSH1 0x08 0000304e: DUP3 0000304f: ADD 00003050: SWAP2 00003051: POP 00003052: PUSH2 0x305b 00003055: DUP3 00003056: DUP6 00003057: PUSH2 0x29fb 0000305a: JUMP 0000305b: JUMPDEST 0000305c: PUSH1 0x14 0000305e: DUP3 0000305f: ADD 00003060: SWAP2 00003061: POP 00003062: PUSH2 0x306b 00003065: DUP3 00003066: DUP5 00003067: PUSH2 0x2ed0 0000306a: JUMP 0000306b: JUMPDEST 0000306c: PUSH1 0x20 0000306e: DUP3 0000306f: ADD 00003070: SWAP2 00003071: POP 00003072: DUP2 00003073: SWAP1 00003074: POP 00003075: SWAP5 00003076: SWAP4 00003077: POP 00003078: POP 00003079: POP 0000307a: POP 0000307b: JUMP 0000307c: JUMPDEST 0000307d: PUSH1 0x00 0000307f: PUSH2 0x3088 00003082: DUP3 00003083: DUP8 00003084: PUSH2 0x2f05 00003087: JUMP 00003088: JUMPDEST 00003089: PUSH1 0x08 0000308b: DUP3 0000308c: ADD 0000308d: SWAP2 0000308e: POP 0000308f: PUSH2 0x3098 00003092: DUP3 00003093: DUP7 00003094: PUSH2 0x2f05 00003097: JUMP 00003098: JUMPDEST 00003099: PUSH1 0x08 0000309b: DUP3 0000309c: ADD 0000309d: SWAP2 0000309e: POP 0000309f: PUSH2 0x30a8 000030a2: DUP3 000030a3: DUP6 000030a4: PUSH2 0x29fb 000030a7: JUMP 000030a8: JUMPDEST 000030a9: PUSH1 0x14 000030ab: DUP3 000030ac: ADD 000030ad: SWAP2 000030ae: POP 000030af: PUSH2 0x30b8 000030b2: DUP3 000030b3: DUP5 000030b4: PUSH2 0x2ed0 000030b7: JUMP 000030b8: JUMPDEST 000030b9: PUSH1 0x20 000030bb: DUP3 000030bc: ADD 000030bd: SWAP2 000030be: POP 000030bf: DUP2 000030c0: SWAP1 000030c1: POP 000030c2: SWAP6 000030c3: SWAP5 000030c4: POP 000030c5: POP 000030c6: POP 000030c7: POP 000030c8: POP 000030c9: JUMP 000030ca: JUMPDEST 000030cb: PUSH1 0x00 000030cd: PUSH1 0x20 000030cf: DUP3 000030d0: ADD 000030d1: SWAP1 000030d2: POP 000030d3: PUSH2 0x30df 000030d6: PUSH1 0x00 000030d8: DUP4 000030d9: ADD 000030da: DUP5 000030db: PUSH2 0x2a12 000030de: JUMP 000030df: JUMPDEST 000030e0: SWAP3 000030e1: SWAP2 000030e2: POP 000030e3: POP 000030e4: JUMP 000030e5: JUMPDEST 000030e6: PUSH1 0x00 000030e8: PUSH1 0x20 000030ea: DUP3 000030eb: ADD 000030ec: SWAP1 000030ed: POP 000030ee: PUSH2 0x30fa 000030f1: PUSH1 0x00 000030f3: DUP4 000030f4: ADD 000030f5: DUP5 000030f6: PUSH2 0x2a47 000030f9: JUMP 000030fa: JUMPDEST 000030fb: SWAP3 000030fc: SWAP2 000030fd: POP 000030fe: POP 000030ff: JUMP 00003100: JUMPDEST 00003101: PUSH1 0x00 00003103: PUSH1 0x40 00003105: DUP3 00003106: ADD 00003107: SWAP1 00003108: POP 00003109: PUSH2 0x3115 0000310c: PUSH1 0x00 0000310e: DUP4 0000310f: ADD 00003110: DUP6 00003111: PUSH2 0x2a47 00003114: JUMP 00003115: JUMPDEST 00003116: PUSH2 0x3122 00003119: PUSH1 0x20 0000311b: DUP4 0000311c: ADD 0000311d: DUP5 0000311e: PUSH2 0x2a47 00003121: JUMP 00003122: JUMPDEST 00003123: SWAP4 00003124: SWAP3 00003125: POP 00003126: POP 00003127: POP 00003128: JUMP 00003129: JUMPDEST 0000312a: PUSH1 0x00 0000312c: PUSH1 0x40 0000312e: DUP3 0000312f: ADD 00003130: SWAP1 00003131: POP 00003132: PUSH2 0x313e 00003135: PUSH1 0x00 00003137: DUP4 00003138: ADD 00003139: DUP7 0000313a: PUSH2 0x2a47 0000313d: JUMP 0000313e: JUMPDEST 0000313f: DUP2 00003140: DUP2 00003141: SUB 00003142: PUSH1 0x20 00003144: DUP4 00003145: ADD 00003146: MSTORE 00003147: PUSH2 0x3151 0000314a: DUP2 0000314b: DUP5 0000314c: DUP7 0000314d: PUSH2 0x2a6d 00003150: JUMP 00003151: JUMPDEST 00003152: SWAP1 00003153: POP 00003154: SWAP5 00003155: SWAP4 00003156: POP 00003157: POP 00003158: POP 00003159: POP 0000315a: JUMP 0000315b: JUMPDEST 0000315c: PUSH1 0x00 0000315e: PUSH1 0x80 00003160: DUP3 00003161: ADD 00003162: SWAP1 00003163: POP 00003164: PUSH2 0x3170 00003167: PUSH1 0x00 00003169: DUP4 0000316a: ADD 0000316b: DUP8 0000316c: PUSH2 0x2a47 0000316f: JUMP 00003170: JUMPDEST 00003171: PUSH2 0x317d 00003174: PUSH1 0x20 00003176: DUP4 00003177: ADD 00003178: DUP7 00003179: PUSH2 0x2f1c 0000317c: JUMP 0000317d: JUMPDEST 0000317e: PUSH2 0x318a 00003181: PUSH1 0x40 00003183: DUP4 00003184: ADD 00003185: DUP6 00003186: PUSH2 0x2a47 00003189: JUMP 0000318a: JUMPDEST 0000318b: PUSH2 0x3197 0000318e: PUSH1 0x60 00003190: DUP4 00003191: ADD 00003192: DUP5 00003193: PUSH2 0x2a47 00003196: JUMP 00003197: JUMPDEST 00003198: SWAP6 00003199: SWAP5 0000319a: POP 0000319b: POP 0000319c: POP 0000319d: POP 0000319e: POP 0000319f: JUMP 000031a0: JUMPDEST 000031a1: PUSH1 0x00 000031a3: PUSH1 0x20 000031a5: DUP3 000031a6: ADD 000031a7: SWAP1 000031a8: POP 000031a9: PUSH2 0x31b5 000031ac: PUSH1 0x00 000031ae: DUP4 000031af: ADD 000031b0: DUP5 000031b1: PUSH2 0x2af0 000031b4: JUMP 000031b5: JUMPDEST 000031b6: SWAP3 000031b7: SWAP2 000031b8: POP 000031b9: POP 000031ba: JUMP 000031bb: JUMPDEST 000031bc: PUSH1 0x00 000031be: PUSH1 0x20 000031c0: DUP3 000031c1: ADD 000031c2: SWAP1 000031c3: POP 000031c4: PUSH2 0x31d0 000031c7: PUSH1 0x00 000031c9: DUP4 000031ca: ADD 000031cb: DUP5 000031cc: PUSH2 0x2b0e 000031cf: JUMP 000031d0: JUMPDEST 000031d1: SWAP3 000031d2: SWAP2 000031d3: POP 000031d4: POP 000031d5: JUMP 000031d6: JUMPDEST 000031d7: PUSH1 0x00 000031d9: PUSH1 0x20 000031db: DUP3 000031dc: ADD 000031dd: SWAP1 000031de: POP 000031df: DUP2 000031e0: DUP2 000031e1: SUB 000031e2: PUSH1 0x00 000031e4: DUP4 000031e5: ADD 000031e6: MSTORE 000031e7: PUSH2 0x31f0 000031ea: DUP2 000031eb: DUP5 000031ec: PUSH2 0x2b1d 000031ef: JUMP 000031f0: JUMPDEST 000031f1: SWAP1 000031f2: POP 000031f3: SWAP3 000031f4: SWAP2 000031f5: POP 000031f6: POP 000031f7: JUMP 000031f8: JUMPDEST 000031f9: PUSH1 0x00 000031fb: PUSH1 0x20 000031fd: DUP3 000031fe: ADD 000031ff: SWAP1 00003200: POP 00003201: DUP2 00003202: DUP2 00003203: SUB 00003204: PUSH1 0x00 00003206: DUP4 00003207: ADD 00003208: MSTORE 00003209: PUSH2 0x3211 0000320c: DUP2 0000320d: PUSH2 0x2b56 00003210: JUMP 00003211: JUMPDEST 00003212: SWAP1 00003213: POP 00003214: SWAP2 00003215: SWAP1 00003216: POP 00003217: JUMP 00003218: JUMPDEST 00003219: PUSH1 0x00 0000321b: PUSH1 0x20 0000321d: DUP3 0000321e: ADD 0000321f: SWAP1 00003220: POP 00003221: DUP2 00003222: DUP2 00003223: SUB 00003224: PUSH1 0x00 00003226: DUP4 00003227: ADD 00003228: MSTORE 00003229: PUSH2 0x3231 0000322c: DUP2 0000322d: PUSH2 0x2b79 00003230: JUMP 00003231: JUMPDEST 00003232: SWAP1 00003233: POP 00003234: SWAP2 00003235: SWAP1 00003236: POP 00003237: JUMP 00003238: JUMPDEST 00003239: PUSH1 0x00 0000323b: PUSH1 0x20 0000323d: DUP3 0000323e: ADD 0000323f: SWAP1 00003240: POP 00003241: DUP2 00003242: DUP2 00003243: SUB 00003244: PUSH1 0x00 00003246: DUP4 00003247: ADD 00003248: MSTORE 00003249: PUSH2 0x3251 0000324c: DUP2 0000324d: PUSH2 0x2b9c 00003250: JUMP 00003251: JUMPDEST 00003252: SWAP1 00003253: POP 00003254: SWAP2 00003255: SWAP1 00003256: POP 00003257: JUMP 00003258: JUMPDEST 00003259: PUSH1 0x00 0000325b: PUSH1 0x20 0000325d: DUP3 0000325e: ADD 0000325f: SWAP1 00003260: POP 00003261: DUP2 00003262: DUP2 00003263: SUB 00003264: PUSH1 0x00 00003266: DUP4 00003267: ADD 00003268: MSTORE 00003269: PUSH2 0x3271 0000326c: DUP2 0000326d: PUSH2 0x2bbf 00003270: JUMP 00003271: JUMPDEST 00003272: SWAP1 00003273: POP 00003274: SWAP2 00003275: SWAP1 00003276: POP 00003277: JUMP 00003278: JUMPDEST 00003279: PUSH1 0x00 0000327b: PUSH1 0x20 0000327d: DUP3 0000327e: ADD 0000327f: SWAP1 00003280: POP 00003281: DUP2 00003282: DUP2 00003283: SUB 00003284: PUSH1 0x00 00003286: DUP4 00003287: ADD 00003288: MSTORE 00003289: PUSH2 0x3291 0000328c: DUP2 0000328d: PUSH2 0x2be2 00003290: JUMP 00003291: JUMPDEST 00003292: SWAP1 00003293: POP 00003294: SWAP2 00003295: SWAP1 00003296: POP 00003297: JUMP 00003298: JUMPDEST 00003299: PUSH1 0x00 0000329b: PUSH1 0x20 0000329d: DUP3 0000329e: ADD 0000329f: SWAP1 000032a0: POP 000032a1: DUP2 000032a2: DUP2 000032a3: SUB 000032a4: PUSH1 0x00 000032a6: DUP4 000032a7: ADD 000032a8: MSTORE 000032a9: PUSH2 0x32b1 000032ac: DUP2 000032ad: PUSH2 0x2c05 000032b0: JUMP 000032b1: JUMPDEST 000032b2: SWAP1 000032b3: POP 000032b4: SWAP2 000032b5: SWAP1 000032b6: POP 000032b7: JUMP 000032b8: JUMPDEST 000032b9: PUSH1 0x00 000032bb: PUSH1 0x20 000032bd: DUP3 000032be: ADD 000032bf: SWAP1 000032c0: POP 000032c1: DUP2 000032c2: DUP2 000032c3: SUB 000032c4: PUSH1 0x00 000032c6: DUP4 000032c7: ADD 000032c8: MSTORE 000032c9: PUSH2 0x32d1 000032cc: DUP2 000032cd: PUSH2 0x2c28 000032d0: JUMP 000032d1: JUMPDEST 000032d2: SWAP1 000032d3: POP 000032d4: SWAP2 000032d5: SWAP1 000032d6: POP 000032d7: JUMP 000032d8: JUMPDEST 000032d9: PUSH1 0x00 000032db: PUSH1 0x20 000032dd: DUP3 000032de: ADD 000032df: SWAP1 000032e0: POP 000032e1: DUP2 000032e2: DUP2 000032e3: SUB 000032e4: PUSH1 0x00 000032e6: DUP4 000032e7: ADD 000032e8: MSTORE 000032e9: PUSH2 0x32f1 000032ec: DUP2 000032ed: PUSH2 0x2c4b 000032f0: JUMP 000032f1: JUMPDEST 000032f2: SWAP1 000032f3: POP 000032f4: SWAP2 000032f5: SWAP1 000032f6: POP 000032f7: JUMP 000032f8: JUMPDEST 000032f9: PUSH1 0x00 000032fb: PUSH1 0x20 000032fd: DUP3 000032fe: ADD 000032ff: SWAP1 00003300: POP 00003301: DUP2 00003302: DUP2 00003303: SUB 00003304: PUSH1 0x00 00003306: DUP4 00003307: ADD 00003308: MSTORE 00003309: PUSH2 0x3311 0000330c: DUP2 0000330d: PUSH2 0x2c6e 00003310: JUMP 00003311: JUMPDEST 00003312: SWAP1 00003313: POP 00003314: SWAP2 00003315: SWAP1 00003316: POP 00003317: JUMP 00003318: JUMPDEST 00003319: PUSH1 0x00 0000331b: PUSH1 0x20 0000331d: DUP3 0000331e: ADD 0000331f: SWAP1 00003320: POP 00003321: DUP2 00003322: DUP2 00003323: SUB 00003324: PUSH1 0x00 00003326: DUP4 00003327: ADD 00003328: MSTORE 00003329: PUSH2 0x3331 0000332c: DUP2 0000332d: PUSH2 0x2c91 00003330: JUMP 00003331: JUMPDEST 00003332: SWAP1 00003333: POP 00003334: SWAP2 00003335: SWAP1 00003336: POP 00003337: JUMP 00003338: JUMPDEST 00003339: PUSH1 0x00 0000333b: PUSH1 0x20 0000333d: DUP3 0000333e: ADD 0000333f: SWAP1 00003340: POP 00003341: DUP2 00003342: DUP2 00003343: SUB 00003344: PUSH1 0x00 00003346: DUP4 00003347: ADD 00003348: MSTORE 00003349: PUSH2 0x3351 0000334c: DUP2 0000334d: PUSH2 0x2cb4 00003350: JUMP 00003351: JUMPDEST 00003352: SWAP1 00003353: POP 00003354: SWAP2 00003355: SWAP1 00003356: POP 00003357: JUMP 00003358: JUMPDEST 00003359: PUSH1 0x00 0000335b: PUSH1 0x20 0000335d: DUP3 0000335e: ADD 0000335f: SWAP1 00003360: POP 00003361: DUP2 00003362: DUP2 00003363: SUB 00003364: PUSH1 0x00 00003366: DUP4 00003367: ADD 00003368: MSTORE 00003369: PUSH2 0x3371 0000336c: DUP2 0000336d: PUSH2 0x2cd7 00003370: JUMP 00003371: JUMPDEST 00003372: SWAP1 00003373: POP 00003374: SWAP2 00003375: SWAP1 00003376: POP 00003377: JUMP 00003378: JUMPDEST 00003379: PUSH1 0x00 0000337b: PUSH1 0x20 0000337d: DUP3 0000337e: ADD 0000337f: SWAP1 00003380: POP 00003381: DUP2 00003382: DUP2 00003383: SUB 00003384: PUSH1 0x00 00003386: DUP4 00003387: ADD 00003388: MSTORE 00003389: PUSH2 0x3391 0000338c: DUP2 0000338d: PUSH2 0x2cfa 00003390: JUMP 00003391: JUMPDEST 00003392: SWAP1 00003393: POP 00003394: SWAP2 00003395: SWAP1 00003396: POP 00003397: JUMP 00003398: JUMPDEST 00003399: PUSH1 0x00 0000339b: PUSH1 0x20 0000339d: DUP3 0000339e: ADD 0000339f: SWAP1 000033a0: POP 000033a1: DUP2 000033a2: DUP2 000033a3: SUB 000033a4: PUSH1 0x00 000033a6: DUP4 000033a7: ADD 000033a8: MSTORE 000033a9: PUSH2 0x33b1 000033ac: DUP2 000033ad: PUSH2 0x2d1d 000033b0: JUMP 000033b1: JUMPDEST 000033b2: SWAP1 000033b3: POP 000033b4: SWAP2 000033b5: SWAP1 000033b6: POP 000033b7: JUMP 000033b8: JUMPDEST 000033b9: PUSH1 0x00 000033bb: PUSH1 0x20 000033bd: DUP3 000033be: ADD 000033bf: SWAP1 000033c0: POP 000033c1: DUP2 000033c2: DUP2 000033c3: SUB 000033c4: PUSH1 0x00 000033c6: DUP4 000033c7: ADD 000033c8: MSTORE 000033c9: PUSH2 0x33d1 000033cc: DUP2 000033cd: PUSH2 0x2d40 000033d0: JUMP 000033d1: JUMPDEST 000033d2: SWAP1 000033d3: POP 000033d4: SWAP2 000033d5: SWAP1 000033d6: POP 000033d7: JUMP 000033d8: JUMPDEST 000033d9: PUSH1 0x00 000033db: PUSH1 0x20 000033dd: DUP3 000033de: ADD 000033df: SWAP1 000033e0: POP 000033e1: DUP2 000033e2: DUP2 000033e3: SUB 000033e4: PUSH1 0x00 000033e6: DUP4 000033e7: ADD 000033e8: MSTORE 000033e9: PUSH2 0x33f1 000033ec: DUP2 000033ed: PUSH2 0x2d63 000033f0: JUMP 000033f1: JUMPDEST 000033f2: SWAP1 000033f3: POP 000033f4: SWAP2 000033f5: SWAP1 000033f6: POP 000033f7: JUMP 000033f8: JUMPDEST 000033f9: PUSH1 0x00 000033fb: PUSH1 0x20 000033fd: DUP3 000033fe: ADD 000033ff: SWAP1 00003400: POP 00003401: DUP2 00003402: DUP2 00003403: SUB 00003404: PUSH1 0x00 00003406: DUP4 00003407: ADD 00003408: MSTORE 00003409: PUSH2 0x3411 0000340c: DUP2 0000340d: PUSH2 0x2d86 00003410: JUMP 00003411: JUMPDEST 00003412: SWAP1 00003413: POP 00003414: SWAP2 00003415: SWAP1 00003416: POP 00003417: JUMP 00003418: JUMPDEST 00003419: PUSH1 0x00 0000341b: PUSH1 0x20 0000341d: DUP3 0000341e: ADD 0000341f: SWAP1 00003420: POP 00003421: DUP2 00003422: DUP2 00003423: SUB 00003424: PUSH1 0x00 00003426: DUP4 00003427: ADD 00003428: MSTORE 00003429: PUSH2 0x3431 0000342c: DUP2 0000342d: PUSH2 0x2da9 00003430: JUMP 00003431: JUMPDEST 00003432: SWAP1 00003433: POP 00003434: SWAP2 00003435: SWAP1 00003436: POP 00003437: JUMP 00003438: JUMPDEST 00003439: PUSH1 0x00 0000343b: PUSH1 0x20 0000343d: DUP3 0000343e: ADD 0000343f: SWAP1 00003440: POP 00003441: DUP2 00003442: DUP2 00003443: SUB 00003444: PUSH1 0x00 00003446: DUP4 00003447: ADD 00003448: MSTORE 00003449: PUSH2 0x3451 0000344c: DUP2 0000344d: PUSH2 0x2dcc 00003450: JUMP 00003451: JUMPDEST 00003452: SWAP1 00003453: POP 00003454: SWAP2 00003455: SWAP1 00003456: POP 00003457: JUMP 00003458: JUMPDEST 00003459: PUSH1 0x00 0000345b: PUSH1 0x20 0000345d: DUP3 0000345e: ADD 0000345f: SWAP1 00003460: POP 00003461: DUP2 00003462: DUP2 00003463: SUB 00003464: PUSH1 0x00 00003466: DUP4 00003467: ADD 00003468: MSTORE 00003469: PUSH2 0x3471 0000346c: DUP2 0000346d: PUSH2 0x2def 00003470: JUMP 00003471: JUMPDEST 00003472: SWAP1 00003473: POP 00003474: SWAP2 00003475: SWAP1 00003476: POP 00003477: JUMP 00003478: JUMPDEST 00003479: PUSH1 0x00 0000347b: PUSH1 0x20 0000347d: DUP3 0000347e: ADD 0000347f: SWAP1 00003480: POP 00003481: DUP2 00003482: DUP2 00003483: SUB 00003484: PUSH1 0x00 00003486: DUP4 00003487: ADD 00003488: MSTORE 00003489: PUSH2 0x3491 0000348c: DUP2 0000348d: PUSH2 0x2e12 00003490: JUMP 00003491: JUMPDEST 00003492: SWAP1 00003493: POP 00003494: SWAP2 00003495: SWAP1 00003496: POP 00003497: JUMP 00003498: JUMPDEST 00003499: PUSH1 0x00 0000349b: PUSH1 0x20 0000349d: DUP3 0000349e: ADD 0000349f: SWAP1 000034a0: POP 000034a1: DUP2 000034a2: DUP2 000034a3: SUB 000034a4: PUSH1 0x00 000034a6: DUP4 000034a7: ADD 000034a8: MSTORE 000034a9: PUSH2 0x34b1 000034ac: DUP2 000034ad: PUSH2 0x2e35 000034b0: JUMP 000034b1: JUMPDEST 000034b2: SWAP1 000034b3: POP 000034b4: SWAP2 000034b5: SWAP1 000034b6: POP 000034b7: JUMP 000034b8: JUMPDEST 000034b9: PUSH1 0x00 000034bb: PUSH1 0x20 000034bd: DUP3 000034be: ADD 000034bf: SWAP1 000034c0: POP 000034c1: DUP2 000034c2: DUP2 000034c3: SUB 000034c4: PUSH1 0x00 000034c6: DUP4 000034c7: ADD 000034c8: MSTORE 000034c9: PUSH2 0x34d1 000034cc: DUP2 000034cd: PUSH2 0x2e7b 000034d0: JUMP 000034d1: JUMPDEST 000034d2: SWAP1 000034d3: POP 000034d4: SWAP2 000034d5: SWAP1 000034d6: POP 000034d7: JUMP 000034d8: JUMPDEST 000034d9: PUSH1 0x00 000034db: PUSH1 0x20 000034dd: DUP3 000034de: ADD 000034df: SWAP1 000034e0: POP 000034e1: DUP2 000034e2: DUP2 000034e3: SUB 000034e4: PUSH1 0x00 000034e6: DUP4 000034e7: ADD 000034e8: MSTORE 000034e9: PUSH2 0x34f1 000034ec: DUP2 000034ed: PUSH2 0x2e9e 000034f0: JUMP 000034f1: JUMPDEST 000034f2: SWAP1 000034f3: POP 000034f4: SWAP2 000034f5: SWAP1 000034f6: POP 000034f7: JUMP 000034f8: JUMPDEST 000034f9: PUSH1 0x00 000034fb: PUSH1 0x20 000034fd: DUP3 000034fe: ADD 000034ff: SWAP1 00003500: POP 00003501: PUSH2 0x350d 00003504: PUSH1 0x00 00003506: DUP4 00003507: ADD 00003508: DUP5 00003509: PUSH2 0x2ec1 0000350c: JUMP 0000350d: JUMPDEST 0000350e: SWAP3 0000350f: SWAP2 00003510: POP 00003511: POP 00003512: JUMP 00003513: JUMPDEST 00003514: PUSH1 0x00 00003516: PUSH1 0x20 00003518: DUP3 00003519: ADD 0000351a: SWAP1 0000351b: POP 0000351c: PUSH2 0x3528 0000351f: PUSH1 0x00 00003521: DUP4 00003522: ADD 00003523: DUP5 00003524: PUSH2 0x2ef6 00003527: JUMP 00003528: JUMPDEST 00003529: SWAP3 0000352a: SWAP2 0000352b: POP 0000352c: POP 0000352d: JUMP 0000352e: JUMPDEST 0000352f: PUSH1 0x00 00003531: PUSH1 0xa0 00003533: DUP3 00003534: ADD 00003535: SWAP1 00003536: POP 00003537: PUSH2 0x3543 0000353a: PUSH1 0x00 0000353c: DUP4 0000353d: ADD 0000353e: DUP9 0000353f: PUSH2 0x2ef6 00003542: JUMP 00003543: JUMPDEST 00003544: PUSH2 0x3550 00003547: PUSH1 0x20 00003549: DUP4 0000354a: ADD 0000354b: DUP8 0000354c: PUSH2 0x29ec 0000354f: JUMP 00003550: JUMPDEST 00003551: PUSH2 0x355d 00003554: PUSH1 0x40 00003556: DUP4 00003557: ADD 00003558: DUP7 00003559: PUSH2 0x2ec1 0000355c: JUMP 0000355d: JUMPDEST 0000355e: PUSH2 0x356a 00003561: PUSH1 0x60 00003563: DUP4 00003564: ADD 00003565: DUP6 00003566: PUSH2 0x2ef6 00003569: JUMP 0000356a: JUMPDEST 0000356b: PUSH2 0x3577 0000356e: PUSH1 0x80 00003570: DUP4 00003571: ADD 00003572: DUP5 00003573: PUSH2 0x2aff 00003576: JUMP 00003577: JUMPDEST 00003578: SWAP7 00003579: SWAP6 0000357a: POP 0000357b: POP 0000357c: POP 0000357d: POP 0000357e: POP 0000357f: POP 00003580: JUMP 00003581: JUMPDEST 00003582: PUSH1 0x00 00003584: PUSH1 0xa0 00003586: DUP3 00003587: ADD 00003588: SWAP1 00003589: POP 0000358a: PUSH2 0x3596 0000358d: PUSH1 0x00 0000358f: DUP4 00003590: ADD 00003591: DUP9 00003592: PUSH2 0x2ef6 00003595: JUMP 00003596: JUMPDEST 00003597: PUSH2 0x35a3 0000359a: PUSH1 0x20 0000359c: DUP4 0000359d: ADD 0000359e: DUP8 0000359f: PUSH2 0x29ec 000035a2: JUMP 000035a3: JUMPDEST 000035a4: PUSH2 0x35b0 000035a7: PUSH1 0x40 000035a9: DUP4 000035aa: ADD 000035ab: DUP7 000035ac: PUSH2 0x2ec1 000035af: JUMP 000035b0: JUMPDEST 000035b1: PUSH2 0x35bd 000035b4: PUSH1 0x60 000035b6: DUP4 000035b7: ADD 000035b8: DUP6 000035b9: PUSH2 0x2ef6 000035bc: JUMP 000035bd: JUMPDEST 000035be: PUSH2 0x35ca 000035c1: PUSH1 0x80 000035c3: DUP4 000035c4: ADD 000035c5: DUP5 000035c6: PUSH2 0x2ee7 000035c9: JUMP 000035ca: JUMPDEST 000035cb: SWAP7 000035cc: SWAP6 000035cd: POP 000035ce: POP 000035cf: POP 000035d0: POP 000035d1: POP 000035d2: POP 000035d3: JUMP 000035d4: JUMPDEST 000035d5: PUSH1 0x00 000035d7: PUSH1 0x60 000035d9: DUP3 000035da: ADD 000035db: SWAP1 000035dc: POP 000035dd: PUSH2 0x35e9 000035e0: PUSH1 0x00 000035e2: DUP4 000035e3: ADD 000035e4: DUP7 000035e5: PUSH2 0x2ef6 000035e8: JUMP 000035e9: JUMPDEST 000035ea: PUSH2 0x35f6 000035ed: PUSH1 0x20 000035ef: DUP4 000035f0: ADD 000035f1: DUP6 000035f2: PUSH2 0x2a38 000035f5: JUMP 000035f6: JUMPDEST 000035f7: PUSH2 0x3603 000035fa: PUSH1 0x40 000035fc: DUP4 000035fd: ADD 000035fe: DUP5 000035ff: PUSH2 0x2ec1 00003602: JUMP 00003603: JUMPDEST 00003604: SWAP5 00003605: SWAP4 00003606: POP 00003607: POP 00003608: POP 00003609: POP 0000360a: JUMP 0000360b: JUMPDEST 0000360c: PUSH1 0x00 0000360e: PUSH1 0x60 00003610: DUP3 00003611: ADD 00003612: SWAP1 00003613: POP 00003614: PUSH2 0x3620 00003617: PUSH1 0x00 00003619: DUP4 0000361a: ADD 0000361b: DUP8 0000361c: PUSH2 0x2ef6 0000361f: JUMP 00003620: JUMPDEST 00003621: PUSH2 0x362d 00003624: PUSH1 0x20 00003626: DUP4 00003627: ADD 00003628: DUP7 00003629: PUSH2 0x2a47 0000362c: JUMP 0000362d: JUMPDEST 0000362e: DUP2 0000362f: DUP2 00003630: SUB 00003631: PUSH1 0x40 00003633: DUP4 00003634: ADD 00003635: MSTORE 00003636: PUSH2 0x3640 00003639: DUP2 0000363a: DUP5 0000363b: DUP7 0000363c: PUSH2 0x2a6d 0000363f: JUMP 00003640: JUMPDEST 00003641: SWAP1 00003642: POP 00003643: SWAP6 00003644: SWAP5 00003645: POP 00003646: POP 00003647: POP 00003648: POP 00003649: POP 0000364a: JUMP 0000364b: JUMPDEST 0000364c: PUSH1 0x00 0000364e: PUSH2 0x3655 00003651: PUSH2 0x3666 00003654: JUMP 00003655: JUMPDEST 00003656: SWAP1 00003657: POP 00003658: PUSH2 0x3661 0000365b: DUP3 0000365c: DUP3 0000365d: PUSH2 0x3a2c 00003660: JUMP 00003661: JUMPDEST 00003662: SWAP2 00003663: SWAP1 00003664: POP 00003665: JUMP 00003666: JUMPDEST 00003667: PUSH1 0x00 00003669: PUSH1 0x40 0000366b: MLOAD 0000366c: SWAP1 0000366d: POP 0000366e: SWAP1 0000366f: JUMP 00003670: JUMPDEST 00003671: PUSH1 0x00 00003673: PUSH8 0xffffffffffffffff 0000367c: DUP3 0000367d: GT 0000367e: ISZERO 0000367f: PUSH2 0x368b 00003682: JUMPI 00003683: PUSH2 0x368a 00003686: PUSH2 0x3beb 00003689: JUMP 0000368a: JUMPDEST 0000368b: JUMPDEST 0000368c: PUSH1 0x20 0000368e: DUP3 0000368f: MUL 00003690: SWAP1 00003691: POP 00003692: PUSH1 0x20 00003694: DUP2 00003695: ADD 00003696: SWAP1 00003697: POP 00003698: SWAP2 00003699: SWAP1 0000369a: POP 0000369b: JUMP 0000369c: JUMPDEST 0000369d: PUSH1 0x00 0000369f: PUSH8 0xffffffffffffffff 000036a8: DUP3 000036a9: GT 000036aa: ISZERO 000036ab: PUSH2 0x36b7 000036ae: JUMPI 000036af: PUSH2 0x36b6 000036b2: PUSH2 0x3beb 000036b5: JUMP 000036b6: JUMPDEST 000036b7: JUMPDEST 000036b8: PUSH1 0x20 000036ba: DUP3 000036bb: MUL 000036bc: SWAP1 000036bd: POP 000036be: PUSH1 0x20 000036c0: DUP2 000036c1: ADD 000036c2: SWAP1 000036c3: POP 000036c4: SWAP2 000036c5: SWAP1 000036c6: POP 000036c7: JUMP 000036c8: JUMPDEST 000036c9: PUSH1 0x00 000036cb: DUP2 000036cc: MLOAD 000036cd: SWAP1 000036ce: POP 000036cf: SWAP2 000036d0: SWAP1 000036d1: POP 000036d2: JUMP 000036d3: JUMPDEST 000036d4: PUSH1 0x00 000036d6: DUP2 000036d7: MLOAD 000036d8: SWAP1 000036d9: POP 000036da: SWAP2 000036db: SWAP1 000036dc: POP 000036dd: JUMP 000036de: JUMPDEST 000036df: PUSH1 0x00 000036e1: DUP3 000036e2: DUP3 000036e3: MSTORE 000036e4: PUSH1 0x20 000036e6: DUP3 000036e7: ADD 000036e8: SWAP1 000036e9: POP 000036ea: SWAP3 000036eb: SWAP2 000036ec: POP 000036ed: POP 000036ee: JUMP 000036ef: JUMPDEST 000036f0: PUSH1 0x00 000036f2: DUP2 000036f3: SWAP1 000036f4: POP 000036f5: SWAP3 000036f6: SWAP2 000036f7: POP 000036f8: POP 000036f9: JUMP 000036fa: JUMPDEST 000036fb: PUSH1 0x00 000036fd: DUP3 000036fe: DUP3 000036ff: MSTORE 00003700: PUSH1 0x20 00003702: DUP3 00003703: ADD 00003704: SWAP1 00003705: POP 00003706: SWAP3 00003707: SWAP2 00003708: POP 00003709: POP 0000370a: JUMP 0000370b: JUMPDEST 0000370c: PUSH1 0x00 0000370e: DUP1 0000370f: DUP6 00003710: DUP6 00003711: GT 00003712: ISZERO 00003713: PUSH2 0x371f 00003716: JUMPI 00003717: PUSH2 0x371e 0000371a: PUSH2 0x3c29 0000371d: JUMP 0000371e: JUMPDEST 0000371f: JUMPDEST 00003720: DUP4 00003721: DUP7 00003722: GT 00003723: ISZERO 00003724: PUSH2 0x3730 00003727: JUMPI 00003728: PUSH2 0x372f 0000372b: PUSH2 0x3c24 0000372e: JUMP 0000372f: JUMPDEST 00003730: JUMPDEST 00003731: PUSH1 0x01 00003733: DUP6 00003734: MUL 00003735: DUP4 00003736: ADD 00003737: SWAP2 00003738: POP 00003739: DUP5 0000373a: DUP7 0000373b: SUB 0000373c: SWAP1 0000373d: POP 0000373e: SWAP5 0000373f: POP 00003740: SWAP5 00003741: SWAP3 00003742: POP 00003743: POP 00003744: POP 00003745: JUMP 00003746: JUMPDEST 00003747: PUSH1 0x00 00003749: PUSH2 0x3751 0000374c: DUP3 0000374d: PUSH2 0x3931 00003750: JUMP 00003751: JUMPDEST 00003752: SWAP2 00003753: POP 00003754: PUSH2 0x375c 00003757: DUP4 00003758: PUSH2 0x3931 0000375b: JUMP 0000375c: JUMPDEST 0000375d: SWAP3 0000375e: POP 0000375f: DUP3 00003760: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00003781: SUB 00003782: DUP3 00003783: GT 00003784: ISZERO 00003785: PUSH2 0x3791 00003788: JUMPI 00003789: PUSH2 0x3790 0000378c: PUSH2 0x3b2f 0000378f: JUMP 00003790: JUMPDEST 00003791: JUMPDEST 00003792: DUP3 00003793: DUP3 00003794: ADD 00003795: SWAP1 00003796: POP 00003797: SWAP3 00003798: SWAP2 00003799: POP 0000379a: POP 0000379b: JUMP 0000379c: JUMPDEST 0000379d: PUSH1 0x00 0000379f: PUSH2 0x37a7 000037a2: DUP3 000037a3: PUSH2 0x394b 000037a6: JUMP 000037a7: JUMPDEST 000037a8: SWAP2 000037a9: POP 000037aa: PUSH2 0x37b2 000037ad: DUP4 000037ae: PUSH2 0x394b 000037b1: JUMP 000037b2: JUMPDEST 000037b3: SWAP3 000037b4: POP 000037b5: DUP3 000037b6: PUSH8 0xffffffffffffffff 000037bf: SUB 000037c0: DUP3 000037c1: GT 000037c2: ISZERO 000037c3: PUSH2 0x37cf 000037c6: JUMPI 000037c7: PUSH2 0x37ce 000037ca: PUSH2 0x3b2f 000037cd: JUMP 000037ce: JUMPDEST 000037cf: JUMPDEST 000037d0: DUP3 000037d1: DUP3 000037d2: ADD 000037d3: SWAP1 000037d4: POP 000037d5: SWAP3 000037d6: SWAP2 000037d7: POP 000037d8: POP 000037d9: JUMP 000037da: JUMPDEST 000037db: PUSH1 0x00 000037dd: PUSH2 0x37e5 000037e0: DUP3 000037e1: PUSH2 0x3931 000037e4: JUMP 000037e5: JUMPDEST 000037e6: SWAP2 000037e7: POP 000037e8: PUSH2 0x37f0 000037eb: DUP4 000037ec: PUSH2 0x3931 000037ef: JUMP 000037f0: JUMPDEST 000037f1: SWAP3 000037f2: POP 000037f3: DUP3 000037f4: PUSH2 0x3800 000037f7: JUMPI 000037f8: PUSH2 0x37ff 000037fb: PUSH2 0x3b5e 000037fe: JUMP 000037ff: JUMPDEST 00003800: JUMPDEST 00003801: DUP3 00003802: DUP3 00003803: DIV 00003804: SWAP1 00003805: POP 00003806: SWAP3 00003807: SWAP2 00003808: POP 00003809: POP 0000380a: JUMP 0000380b: JUMPDEST 0000380c: PUSH1 0x00 0000380e: PUSH2 0x3816 00003811: DUP3 00003812: PUSH2 0x3931 00003815: JUMP 00003816: JUMPDEST 00003817: SWAP2 00003818: POP 00003819: PUSH2 0x3821 0000381c: DUP4 0000381d: PUSH2 0x3931 00003820: JUMP 00003821: JUMPDEST 00003822: SWAP3 00003823: POP 00003824: DUP2 00003825: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00003846: DIV 00003847: DUP4 00003848: GT 00003849: DUP3 0000384a: ISZERO 0000384b: ISZERO 0000384c: AND 0000384d: ISZERO 0000384e: PUSH2 0x385a 00003851: JUMPI 00003852: PUSH2 0x3859 00003855: PUSH2 0x3b2f 00003858: JUMP 00003859: JUMPDEST 0000385a: JUMPDEST 0000385b: DUP3 0000385c: DUP3 0000385d: MUL 0000385e: SWAP1 0000385f: POP 00003860: SWAP3 00003861: SWAP2 00003862: POP 00003863: POP 00003864: JUMP 00003865: JUMPDEST 00003866: PUSH1 0x00 00003868: PUSH2 0x3870 0000386b: DUP3 0000386c: PUSH2 0x3931 0000386f: JUMP 00003870: JUMPDEST 00003871: SWAP2 00003872: POP 00003873: PUSH2 0x387b 00003876: DUP4 00003877: PUSH2 0x3931 0000387a: JUMP 0000387b: JUMPDEST 0000387c: SWAP3 0000387d: POP 0000387e: DUP3 0000387f: DUP3 00003880: LT 00003881: ISZERO 00003882: PUSH2 0x388e 00003885: JUMPI 00003886: PUSH2 0x388d 00003889: PUSH2 0x3b2f 0000388c: JUMP 0000388d: JUMPDEST 0000388e: JUMPDEST 0000388f: DUP3 00003890: DUP3 00003891: SUB 00003892: SWAP1 00003893: POP 00003894: SWAP3 00003895: SWAP2 00003896: POP 00003897: POP 00003898: JUMP 00003899: JUMPDEST 0000389a: PUSH1 0x00 0000389c: PUSH2 0x38a4 0000389f: DUP3 000038a0: PUSH2 0x3911 000038a3: JUMP 000038a4: JUMPDEST 000038a5: SWAP1 000038a6: POP 000038a7: SWAP2 000038a8: SWAP1 000038a9: POP 000038aa: JUMP 000038ab: JUMPDEST 000038ac: PUSH1 0x00 000038ae: PUSH2 0x38b6 000038b1: DUP3 000038b2: PUSH2 0x3911 000038b5: JUMP 000038b6: JUMPDEST 000038b7: SWAP1 000038b8: POP 000038b9: SWAP2 000038ba: SWAP1 000038bb: POP 000038bc: JUMP 000038bd: JUMPDEST 000038be: PUSH1 0x00 000038c0: DUP2 000038c1: ISZERO 000038c2: ISZERO 000038c3: SWAP1 000038c4: POP 000038c5: SWAP2 000038c6: SWAP1 000038c7: POP 000038c8: JUMP 000038c9: JUMPDEST 000038ca: PUSH1 0x00 000038cc: PUSH32 0xffffffffffffffffffffffffffffffffffffffffff0000000000000000000000 000038ed: DUP3 000038ee: AND 000038ef: SWAP1 000038f0: POP 000038f1: SWAP2 000038f2: SWAP1 000038f3: POP 000038f4: JUMP 000038f5: JUMPDEST 000038f6: PUSH1 0x00 000038f8: DUP2 000038f9: SWAP1 000038fa: POP 000038fb: SWAP2 000038fc: SWAP1 000038fd: POP 000038fe: JUMP 000038ff: JUMPDEST 00003900: PUSH1 0x00 00003902: PUSH2 0x390a 00003905: DUP3 00003906: PUSH2 0x3899 00003909: JUMP 0000390a: JUMPDEST 0000390b: SWAP1 0000390c: POP 0000390d: SWAP2 0000390e: SWAP1 0000390f: POP 00003910: JUMP 00003911: JUMPDEST 00003912: PUSH1 0x00 00003914: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003929: DUP3 0000392a: AND 0000392b: SWAP1 0000392c: POP 0000392d: SWAP2 0000392e: SWAP1 0000392f: POP 00003930: JUMP 00003931: JUMPDEST 00003932: PUSH1 0x00 00003934: DUP2 00003935: SWAP1 00003936: POP 00003937: SWAP2 00003938: SWAP1 00003939: POP 0000393a: JUMP 0000393b: JUMPDEST 0000393c: PUSH1 0x00 0000393e: PUSH4 0xffffffff 00003943: DUP3 00003944: AND 00003945: SWAP1 00003946: POP 00003947: SWAP2 00003948: SWAP1 00003949: POP 0000394a: JUMP 0000394b: JUMPDEST 0000394c: PUSH1 0x00 0000394e: PUSH8 0xffffffffffffffff 00003957: DUP3 00003958: AND 00003959: SWAP1 0000395a: POP 0000395b: SWAP2 0000395c: SWAP1 0000395d: POP 0000395e: JUMP 0000395f: JUMPDEST 00003960: PUSH1 0x00 00003962: PUSH1 0xff 00003964: DUP3 00003965: AND 00003966: SWAP1 00003967: POP 00003968: SWAP2 00003969: SWAP1 0000396a: POP 0000396b: JUMP 0000396c: JUMPDEST 0000396d: PUSH1 0x00 0000396f: PUSH2 0x3977 00003972: DUP3 00003973: PUSH2 0x39c6 00003976: JUMP 00003977: JUMPDEST 00003978: SWAP1 00003979: POP 0000397a: SWAP2 0000397b: SWAP1 0000397c: POP 0000397d: JUMP 0000397e: JUMPDEST 0000397f: PUSH1 0x00 00003981: PUSH2 0x3989 00003984: DUP3 00003985: PUSH2 0x3990 00003988: JUMP 00003989: JUMPDEST 0000398a: SWAP1 0000398b: POP 0000398c: SWAP2 0000398d: SWAP1 0000398e: POP 0000398f: JUMP 00003990: JUMPDEST 00003991: PUSH1 0x00 00003993: PUSH2 0x399b 00003996: DUP3 00003997: PUSH2 0x3911 0000399a: JUMP 0000399b: JUMPDEST 0000399c: SWAP1 0000399d: POP 0000399e: SWAP2 0000399f: SWAP1 000039a0: POP 000039a1: JUMP 000039a2: JUMPDEST 000039a3: PUSH1 0x00 000039a5: PUSH2 0x39ad 000039a8: DUP3 000039a9: PUSH2 0x393b 000039ac: JUMP 000039ad: JUMPDEST 000039ae: SWAP1 000039af: POP 000039b0: SWAP2 000039b1: SWAP1 000039b2: POP 000039b3: JUMP 000039b4: JUMPDEST 000039b5: PUSH1 0x00 000039b7: PUSH2 0x39bf 000039ba: DUP3 000039bb: PUSH2 0x395f 000039be: JUMP 000039bf: JUMPDEST 000039c0: SWAP1 000039c1: POP 000039c2: SWAP2 000039c3: SWAP1 000039c4: POP 000039c5: JUMP 000039c6: JUMPDEST 000039c7: PUSH1 0x00 000039c9: PUSH2 0x39d1 000039cc: DUP3 000039cd: PUSH2 0x39d8 000039d0: JUMP 000039d1: JUMPDEST 000039d2: SWAP1 000039d3: POP 000039d4: SWAP2 000039d5: SWAP1 000039d6: POP 000039d7: JUMP 000039d8: JUMPDEST 000039d9: PUSH1 0x00 000039db: PUSH2 0x39e3 000039de: DUP3 000039df: PUSH2 0x3911 000039e2: JUMP 000039e3: JUMPDEST 000039e4: SWAP1 000039e5: POP 000039e6: SWAP2 000039e7: SWAP1 000039e8: POP 000039e9: JUMP 000039ea: JUMPDEST 000039eb: DUP3 000039ec: DUP2 000039ed: DUP4 000039ee: CALLDATACOPY 000039ef: PUSH1 0x00 000039f1: DUP4 000039f2: DUP4 000039f3: ADD 000039f4: MSTORE 000039f5: POP 000039f6: POP 000039f7: POP 000039f8: JUMP 000039f9: JUMPDEST 000039fa: PUSH1 0x00 000039fc: JUMPDEST 000039fd: DUP4 000039fe: DUP2 000039ff: LT 00003a00: ISZERO 00003a01: PUSH2 0x3a17 00003a04: JUMPI 00003a05: DUP1 00003a06: DUP3 00003a07: ADD 00003a08: MLOAD 00003a09: DUP2 00003a0a: DUP5 00003a0b: ADD 00003a0c: MSTORE 00003a0d: PUSH1 0x20 00003a0f: DUP2 00003a10: ADD 00003a11: SWAP1 00003a12: POP 00003a13: PUSH2 0x39fc 00003a16: JUMP 00003a17: JUMPDEST 00003a18: DUP4 00003a19: DUP2 00003a1a: GT 00003a1b: ISZERO 00003a1c: PUSH2 0x3a26 00003a1f: JUMPI 00003a20: PUSH1 0x00 00003a22: DUP5 00003a23: DUP5 00003a24: ADD 00003a25: MSTORE 00003a26: JUMPDEST 00003a27: POP 00003a28: POP 00003a29: POP 00003a2a: POP 00003a2b: JUMP 00003a2c: JUMPDEST 00003a2d: PUSH2 0x3a35 00003a30: DUP3 00003a31: PUSH2 0x3c3d 00003a34: JUMP 00003a35: JUMPDEST 00003a36: DUP2 00003a37: ADD 00003a38: DUP2 00003a39: DUP2 00003a3a: LT 00003a3b: PUSH8 0xffffffffffffffff 00003a44: DUP3 00003a45: GT 00003a46: OR 00003a47: ISZERO 00003a48: PUSH2 0x3a54 00003a4b: JUMPI 00003a4c: PUSH2 0x3a53 00003a4f: PUSH2 0x3beb 00003a52: JUMP 00003a53: JUMPDEST 00003a54: JUMPDEST 00003a55: DUP1 00003a56: PUSH1 0x40 00003a58: MSTORE 00003a59: POP 00003a5a: POP 00003a5b: POP 00003a5c: JUMP 00003a5d: JUMPDEST 00003a5e: PUSH1 0x00 00003a60: PUSH2 0x3a68 00003a63: DUP3 00003a64: PUSH2 0x3931 00003a67: JUMP 00003a68: JUMPDEST 00003a69: SWAP2 00003a6a: POP 00003a6b: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00003a8c: DUP3 00003a8d: EQ 00003a8e: ISZERO 00003a8f: PUSH2 0x3a9b 00003a92: JUMPI 00003a93: PUSH2 0x3a9a 00003a96: PUSH2 0x3b2f 00003a99: JUMP 00003a9a: JUMPDEST 00003a9b: JUMPDEST 00003a9c: PUSH1 0x01 00003a9e: DUP3 00003a9f: ADD 00003aa0: SWAP1 00003aa1: POP 00003aa2: SWAP2 00003aa3: SWAP1 00003aa4: POP 00003aa5: JUMP 00003aa6: JUMPDEST 00003aa7: PUSH1 0x00 00003aa9: PUSH2 0x3ab1 00003aac: DUP3 00003aad: PUSH2 0x393b 00003ab0: JUMP 00003ab1: JUMPDEST 00003ab2: SWAP2 00003ab3: POP 00003ab4: PUSH4 0xffffffff 00003ab9: DUP3 00003aba: EQ 00003abb: ISZERO 00003abc: PUSH2 0x3ac8 00003abf: JUMPI 00003ac0: PUSH2 0x3ac7 00003ac3: PUSH2 0x3b2f 00003ac6: JUMP 00003ac7: JUMPDEST 00003ac8: JUMPDEST 00003ac9: PUSH1 0x01 00003acb: DUP3 00003acc: ADD 00003acd: SWAP1 00003ace: POP 00003acf: SWAP2 00003ad0: SWAP1 00003ad1: POP 00003ad2: JUMP 00003ad3: JUMPDEST 00003ad4: PUSH1 0x00 00003ad6: PUSH2 0x3ade 00003ad9: DUP3 00003ada: PUSH2 0x3b01 00003add: JUMP 00003ade: JUMPDEST 00003adf: SWAP1 00003ae0: POP 00003ae1: SWAP2 00003ae2: SWAP1 00003ae3: POP 00003ae4: JUMP 00003ae5: JUMPDEST 00003ae6: PUSH1 0x00 00003ae8: PUSH2 0x3af0 00003aeb: DUP3 00003aec: PUSH2 0x3b01 00003aef: JUMP 00003af0: JUMPDEST 00003af1: SWAP1 00003af2: POP 00003af3: SWAP2 00003af4: SWAP1 00003af5: POP 00003af6: JUMP 00003af7: JUMPDEST 00003af8: PUSH1 0x00 00003afa: DUP2 00003afb: SWAP1 00003afc: POP 00003afd: SWAP2 00003afe: SWAP1 00003aff: POP 00003b00: JUMP 00003b01: JUMPDEST 00003b02: PUSH1 0x00 00003b04: PUSH2 0x3b0c 00003b07: DUP3 00003b08: PUSH2 0x3c5b 00003b0b: JUMP 00003b0c: JUMPDEST 00003b0d: SWAP1 00003b0e: POP 00003b0f: SWAP2 00003b10: SWAP1 00003b11: POP 00003b12: JUMP 00003b13: JUMPDEST 00003b14: PUSH1 0x00 00003b16: DUP2 00003b17: SWAP1 00003b18: POP 00003b19: SWAP2 00003b1a: SWAP1 00003b1b: POP 00003b1c: JUMP 00003b1d: JUMPDEST 00003b1e: PUSH1 0x00 00003b20: PUSH2 0x3b28 00003b23: DUP3 00003b24: PUSH2 0x3c4e 00003b27: JUMP 00003b28: JUMPDEST 00003b29: SWAP1 00003b2a: POP 00003b2b: SWAP2 00003b2c: SWAP1 00003b2d: POP 00003b2e: JUMP 00003b2f: JUMPDEST 00003b30: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00003b51: PUSH1 0x00 00003b53: MSTORE 00003b54: PUSH1 0x11 00003b56: PUSH1 0x04 00003b58: MSTORE 00003b59: PUSH1 0x24 00003b5b: PUSH1 0x00 00003b5d: REVERT 00003b5e: JUMPDEST 00003b5f: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00003b80: PUSH1 0x00 00003b82: MSTORE 00003b83: PUSH1 0x12 00003b85: PUSH1 0x04 00003b87: MSTORE 00003b88: PUSH1 0x24 00003b8a: PUSH1 0x00 00003b8c: REVERT 00003b8d: JUMPDEST 00003b8e: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00003baf: PUSH1 0x00 00003bb1: MSTORE 00003bb2: PUSH1 0x21 00003bb4: PUSH1 0x04 00003bb6: MSTORE 00003bb7: PUSH1 0x24 00003bb9: PUSH1 0x00 00003bbb: REVERT 00003bbc: JUMPDEST 00003bbd: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00003bde: PUSH1 0x00 00003be0: MSTORE 00003be1: PUSH1 0x32 00003be3: PUSH1 0x04 00003be5: MSTORE 00003be6: PUSH1 0x24 00003be8: PUSH1 0x00 00003bea: REVERT 00003beb: JUMPDEST 00003bec: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00003c0d: PUSH1 0x00 00003c0f: MSTORE 00003c10: PUSH1 0x41 00003c12: PUSH1 0x04 00003c14: MSTORE 00003c15: PUSH1 0x24 00003c17: PUSH1 0x00 00003c19: REVERT 00003c1a: JUMPDEST 00003c1b: PUSH1 0x00 00003c1d: DUP1 00003c1e: REVERT 00003c1f: JUMPDEST 00003c20: PUSH1 0x00 00003c22: DUP1 00003c23: REVERT 00003c24: JUMPDEST 00003c25: PUSH1 0x00 00003c27: DUP1 00003c28: REVERT 00003c29: JUMPDEST 00003c2a: PUSH1 0x00 00003c2c: DUP1 00003c2d: REVERT 00003c2e: JUMPDEST 00003c2f: PUSH1 0x00 00003c31: DUP1 00003c32: REVERT 00003c33: JUMPDEST 00003c34: PUSH1 0x00 00003c36: DUP1 00003c37: REVERT 00003c38: JUMPDEST 00003c39: PUSH1 0x00 00003c3b: DUP1 00003c3c: REVERT 00003c3d: JUMPDEST 00003c3e: PUSH1 0x00 00003c40: PUSH1 0x1f 00003c42: NOT 00003c43: PUSH1 0x1f 00003c45: DUP4 00003c46: ADD 00003c47: AND 00003c48: SWAP1 00003c49: POP 00003c4a: SWAP2 00003c4b: SWAP1 00003c4c: POP 00003c4d: JUMP 00003c4e: JUMPDEST 00003c4f: PUSH1 0x00 00003c51: DUP2 00003c52: PUSH1 0xc0 00003c54: SHL 00003c55: SWAP1 00003c56: POP 00003c57: SWAP2 00003c58: SWAP1 00003c59: POP 00003c5a: JUMP 00003c5b: JUMPDEST 00003c5c: PUSH1 0x00 00003c5e: DUP2 00003c5f: PUSH1 0x60 00003c61: SHL 00003c62: SWAP1 00003c63: POP 00003c64: SWAP2 00003c65: SWAP1 00003c66: POP 00003c67: JUMP 00003c68: JUMPDEST 00003c69: PUSH32 0x45434453413a20696e76616c6964207369676e61747572650000000000000000 00003c8a: PUSH1 0x00 00003c8c: DUP3 00003c8d: ADD 00003c8e: MSTORE 00003c8f: POP 00003c90: JUMP 00003c91: JUMPDEST 00003c92: PUSH32 0x6d757374206265207468726f756768206163746976652070726f787900000000 00003cb3: PUSH1 0x00 00003cb5: DUP3 00003cb6: ADD 00003cb7: MSTORE 00003cb8: POP 00003cb9: JUMP 00003cba: JUMPDEST 00003cbb: PUSH32 0x45434453413a20696e76616c6964207369676e6174757265206c656e67746800 00003cdc: PUSH1 0x00 00003cde: DUP3 00003cdf: ADD 00003ce0: MSTORE 00003ce1: POP 00003ce2: JUMP 00003ce3: JUMPDEST 00003ce4: PUSH32 0x4e6f7420656e6f756768207369676e6174757265730000000000000000000000 00003d05: PUSH1 0x00 00003d07: DUP3 00003d08: ADD 00003d09: MSTORE 00003d0a: POP 00003d0b: JUMP 00003d0c: JUMPDEST 00003d0d: PUSH32 0x556e61626c6520746f207665726966792070726f6f6600000000000000000000 00003d2e: PUSH1 0x00 00003d30: DUP3 00003d31: ADD 00003d32: MSTORE 00003d33: POP 00003d34: JUMP 00003d35: JUMPDEST 00003d36: PUSH32 0x496e76616c69642064657374696e6174696f6e00000000000000000000000000 00003d57: PUSH1 0x00 00003d59: DUP3 00003d5a: ADD 00003d5b: MSTORE 00003d5c: POP 00003d5d: JUMP 00003d5e: JUMPDEST 00003d5f: PUSH32 0x556e61626c6520746f20776974686472617720616d6f756e7400000000000000 00003d80: PUSH1 0x00 00003d82: DUP3 00003d83: ADD 00003d84: MSTORE 00003d85: POP 00003d86: JUMP 00003d87: JUMPDEST 00003d88: PUSH32 0x496e76616c6964207369676e6174757265000000000000000000000000000000 00003da9: PUSH1 0x00 00003dab: DUP3 00003dac: ADD 00003dad: MSTORE 00003dae: POP 00003daf: JUMP 00003db0: JUMPDEST 00003db1: PUSH32 0x5769746864726177616c20616c72656164792070726f63657373656400000000 00003dd2: PUSH1 0x00 00003dd4: DUP3 00003dd5: ADD 00003dd6: MSTORE 00003dd7: POP 00003dd8: JUMP 00003dd9: JUMPDEST 00003dda: PUSH32 0x416464726573733a20756e61626c6520746f2073656e642076616c75652c2072 00003dfb: PUSH1 0x00 00003dfd: DUP3 00003dfe: ADD 00003dff: MSTORE 00003e00: PUSH32 0x6563697069656e74206d61792068617665207265766572746564000000000000 00003e21: PUSH1 0x20 00003e23: DUP3 00003e24: ADD 00003e25: MSTORE 00003e26: POP 00003e27: JUMP 00003e28: JUMPDEST 00003e29: PUSH32 0x45434453413a20696e76616c6964207369676e6174757265202773272076616c 00003e4a: PUSH1 0x00 00003e4c: DUP3 00003e4d: ADD 00003e4e: MSTORE 00003e4f: PUSH32 0x7565000000000000000000000000000000000000000000000000000000000000 00003e70: PUSH1 0x20 00003e72: DUP3 00003e73: ADD 00003e74: MSTORE 00003e75: POP 00003e76: JUMP 00003e77: JUMPDEST 00003e78: PUSH32 0x416464726573733a20696e73756666696369656e742062616c616e6365000000 00003e99: PUSH1 0x00 00003e9b: DUP3 00003e9c: ADD 00003e9d: MSTORE 00003e9e: POP 00003e9f: JUMP 00003ea0: JUMPDEST 00003ea1: PUSH32 0x436f756c64206e6f7420766572696679207369676e6174757265000000000000 00003ec2: PUSH1 0x00 00003ec4: DUP3 00003ec5: ADD 00003ec6: MSTORE 00003ec7: POP 00003ec8: JUMP 00003ec9: JUMPDEST 00003eca: PUSH32 0x45524331393637557067726164653a20756e737570706f727465642070726f78 00003eeb: PUSH1 0x00 00003eed: DUP3 00003eee: ADD 00003eef: MSTORE 00003ef0: PUSH32 0x6961626c65555549440000000000000000000000000000000000000000000000 00003f11: PUSH1 0x20 00003f13: DUP3 00003f14: ADD 00003f15: MSTORE 00003f16: POP 00003f17: JUMP 00003f18: JUMPDEST 00003f19: PUSH32 0x496e697469616c697a61626c653a20636f6e747261637420697320616c726561 00003f3a: PUSH1 0x00 00003f3c: DUP3 00003f3d: ADD 00003f3e: MSTORE 00003f3f: PUSH32 0x647920696e697469616c697a6564000000000000000000000000000000000000 00003f60: PUSH1 0x20 00003f62: DUP3 00003f63: ADD 00003f64: MSTORE 00003f65: POP 00003f66: JUMP 00003f67: JUMPDEST 00003f68: PUSH32 0x45434453413a20696e76616c6964207369676e6174757265202776272076616c 00003f89: PUSH1 0x00 00003f8b: DUP3 00003f8c: ADD 00003f8d: MSTORE 00003f8e: PUSH32 0x7565000000000000000000000000000000000000000000000000000000000000 00003faf: PUSH1 0x20 00003fb1: DUP3 00003fb2: ADD 00003fb3: MSTORE 00003fb4: POP 00003fb5: JUMP 00003fb6: JUMPDEST 00003fb7: PUSH32 0x45524331393637557067726164653a206e657720696d706c656d656e74617469 00003fd8: PUSH1 0x00 00003fda: DUP3 00003fdb: ADD 00003fdc: MSTORE 00003fdd: PUSH32 0x6f6e206973206e6f742055555053000000000000000000000000000000000000 00003ffe: PUSH1 0x20 00004000: DUP3 00004001: ADD 00004002: MSTORE 00004003: POP 00004004: JUMP 00004005: JUMPDEST 00004006: PUSH32 0x496e76616c6964206465706f73697420616d6f756e7400000000000000000000 00004027: PUSH1 0x00 00004029: DUP3 0000402a: ADD 0000402b: MSTORE 0000402c: POP 0000402d: JUMP 0000402e: JUMPDEST 0000402f: PUSH32 0x496e76616c6964206e6f6e636520666f72206f7261636c652075706461746500 00004050: PUSH1 0x00 00004052: DUP3 00004053: ADD 00004054: MSTORE 00004055: POP 00004056: JUMP 00004057: JUMPDEST 00004058: PUSH32 0x455243313936373a206e657720696d706c656d656e746174696f6e206973206e 00004079: PUSH1 0x00 0000407b: DUP3 0000407c: ADD 0000407d: MSTORE 0000407e: PUSH32 0x6f74206120636f6e747261637400000000000000000000000000000000000000 0000409f: PUSH1 0x20 000040a1: DUP3 000040a2: ADD 000040a3: MSTORE 000040a4: POP 000040a5: JUMP 000040a6: JUMPDEST 000040a7: PUSH32 0x6d757374206265207468726f7567682064656c656761746563616c6c00000000 000040c8: PUSH1 0x00 000040ca: DUP3 000040cb: ADD 000040cc: MSTORE 000040cd: POP 000040ce: JUMP 000040cf: JUMPDEST 000040d0: PUSH32 0x416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f 000040f1: PUSH1 0x00 000040f3: DUP3 000040f4: ADD 000040f5: MSTORE 000040f6: PUSH32 0x6e74726163740000000000000000000000000000000000000000000000000000 00004117: PUSH1 0x20 00004119: DUP3 0000411a: ADD 0000411b: MSTORE 0000411c: POP 0000411d: JUMP 0000411e: JUMPDEST 0000411f: POP 00004120: JUMP 00004121: JUMPDEST 00004122: PUSH32 0x6d757374206e6f74206265207468726f7567682064656c656761746563616c6c 00004143: PUSH1 0x00 00004145: DUP3 00004146: ADD 00004147: MSTORE 00004148: POP 00004149: JUMP 0000414a: JUMPDEST 0000414b: PUSH32 0x4e6f206f7261636c657300000000000000000000000000000000000000000000 0000416c: PUSH1 0x00 0000416e: DUP3 0000416f: ADD 00004170: MSTORE 00004171: POP 00004172: JUMP 00004173: JUMPDEST 00004174: PUSH2 0x417c 00004177: DUP2 00004178: PUSH2 0x3899 0000417b: JUMP 0000417c: JUMPDEST 0000417d: DUP2 0000417e: EQ 0000417f: PUSH2 0x4187 00004182: JUMPI 00004183: PUSH1 0x00 00004185: DUP1 00004186: REVERT 00004187: JUMPDEST 00004188: POP 00004189: JUMP 0000418a: JUMPDEST 0000418b: PUSH2 0x4193 0000418e: DUP2 0000418f: PUSH2 0x38ab 00004192: JUMP 00004193: JUMPDEST 00004194: DUP2 00004195: EQ 00004196: PUSH2 0x419e 00004199: JUMPI 0000419a: PUSH1 0x00 0000419c: DUP1 0000419d: REVERT 0000419e: JUMPDEST 0000419f: POP 000041a0: JUMP 000041a1: JUMPDEST 000041a2: PUSH2 0x41aa 000041a5: DUP2 000041a6: PUSH2 0x38bd 000041a9: JUMP 000041aa: JUMPDEST 000041ab: DUP2 000041ac: EQ 000041ad: PUSH2 0x41b5 000041b0: JUMPI 000041b1: PUSH1 0x00 000041b3: DUP1 000041b4: REVERT 000041b5: JUMPDEST 000041b6: POP 000041b7: JUMP 000041b8: JUMPDEST 000041b9: PUSH2 0x41c1 000041bc: DUP2 000041bd: PUSH2 0x38c9 000041c0: JUMP 000041c1: JUMPDEST 000041c2: DUP2 000041c3: EQ 000041c4: PUSH2 0x41cc 000041c7: JUMPI 000041c8: PUSH1 0x00 000041ca: DUP1 000041cb: REVERT 000041cc: JUMPDEST 000041cd: POP 000041ce: JUMP 000041cf: JUMPDEST 000041d0: PUSH2 0x41d8 000041d3: DUP2 000041d4: PUSH2 0x38f5 000041d7: JUMP 000041d8: JUMPDEST 000041d9: DUP2 000041da: EQ 000041db: PUSH2 0x41e3 000041de: JUMPI 000041df: PUSH1 0x00 000041e1: DUP1 000041e2: REVERT 000041e3: JUMPDEST 000041e4: POP 000041e5: JUMP 000041e6: JUMPDEST 000041e7: PUSH2 0x41ef 000041ea: DUP2 000041eb: PUSH2 0x38ff 000041ee: JUMP 000041ef: JUMPDEST 000041f0: DUP2 000041f1: EQ 000041f2: PUSH2 0x41fa 000041f5: JUMPI 000041f6: PUSH1 0x00 000041f8: DUP1 000041f9: REVERT 000041fa: JUMPDEST 000041fb: POP 000041fc: JUMP 000041fd: JUMPDEST 000041fe: PUSH2 0x4206 00004201: DUP2 00004202: PUSH2 0x3931 00004205: JUMP 00004206: JUMPDEST 00004207: DUP2 00004208: EQ 00004209: PUSH2 0x4211 0000420c: JUMPI 0000420d: PUSH1 0x00 0000420f: DUP1 00004210: REVERT 00004211: JUMPDEST 00004212: POP 00004213: JUMP 00004214: JUMPDEST 00004215: PUSH2 0x421d 00004218: DUP2 00004219: PUSH2 0x393b 0000421c: JUMP 0000421d: JUMPDEST 0000421e: DUP2 0000421f: EQ 00004220: PUSH2 0x4228 00004223: JUMPI 00004224: PUSH1 0x00 00004226: DUP1 00004227: REVERT 00004228: JUMPDEST 00004229: POP 0000422a: JUMP 0000422b: JUMPDEST 0000422c: PUSH2 0x4234 0000422f: DUP2 00004230: PUSH2 0x394b 00004233: JUMP 00004234: JUMPDEST 00004235: DUP2 00004236: EQ 00004237: PUSH2 0x423f 0000423a: JUMPI 0000423b: PUSH1 0x00 0000423d: DUP1 0000423e: REVERT 0000423f: JUMPDEST 00004240: POP 00004241: JUMP 00004242: INVALID 00004243: COINBASE 00004244: PUSH5 0x6472657373 0000424a: GASPRICE 0000424b: KECCAK256 0000424c: PUSH13 0x6f772d6c6576656c2064656c65 0000425a: PUSH8 0x6174652063616c6c 00004263: KECCAK256 00004264: PUSH7 0x61696c6564a264 0000426c: PUSH10 0x70667358221220569a15 00004277: ORIGIN 00004278: PUSH27 0x2ccc3fc8b285be7a0c08fd860cd6f57e1a4d060ae04c2037f8fb63 00004294: PUSH5 0x736f6c6343 0000429a: STOP 0000429b: ADDMOD 0000429c: MOD 0000429d: STOP 0000429e: CALLER
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | upgradeability | detector | Untrusted DELEGATECALL target reachable | 55 | no | no |
viewtrace_id: 0x25072f8515fcd5e77a76fc24a79f05dc28c353307892a2aa606c168214e1eec6
validation_json{
"sink": "DELEGATECALL",
"errors": 0,
"status": "unknown",
"attempts": 192,
"trace_id": "0x25072f8515fcd5e77a76fc24a79f05dc28c353307892a2aa606c168214e1eec6",
"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": "0xde35f5cb",
"selector": "0xde35f5cb",
"calldata_variants": [
"0xde35f5cb",
"0xde35f5cb0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdfbc6269",
"selector": "0xdfbc6269",
"calldata_variants": [
"0xdfbc6269",
"0xdfbc62690000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe0acac7f",
"selector": "0xe0acac7f",
"calldata_variants": [
"0xe0acac7f",
"0xe0acac7f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xed72eb24",
"selector": "0xed72eb24",
"calldata_variants": [
"0xed72eb24",
"0xed72eb240000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf358ec61",
"selector": "0xf358ec61",
"calldata_variants": [
"0xf358ec61",
"0xf358ec610000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x744d49cc",
"selector": "0x744d49cc",
"calldata_variants": [
"0x744d49cc",
"0x744d49cc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xb2b22a85",
"selector": "0xb2b22a85",
"calldata_variants": [
"0xb2b22a85",
"0xb2b22a850000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xb81f853c",
"selector": "0xb81f853c",
"calldata_variants": [
"0xb81f853c",
"0xb81f853c0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 8827,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
}
],
"guards_detected": [
{
"pc": 17015,
"type": "tx_origin_used"
}
],
"delegatecall_count": 1,
"untrusted_delegatecall_count": 1
}
|
| 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": "0xde35f5cb",
"selector": "0xde35f5cb",
"calldata_variants": [
"0xde35f5cb",
"0xde35f5cb0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdfbc6269",
"selector": "0xdfbc6269",
"calldata_variants": [
"0xdfbc6269",
"0xdfbc62690000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe0acac7f",
"selector": "0xe0acac7f",
"calldata_variants": [
"0xe0acac7f",
"0xe0acac7f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xed72eb24",
"selector": "0xed72eb24",
"calldata_variants": [
"0xed72eb24",
"0xed72eb240000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf358ec61",
"selector": "0xf358ec61",
"calldata_variants": [
"0xf358ec61",
"0xf358ec610000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x744d49cc",
"selector": "0x744d49cc",
"calldata_variants": [
"0x744d49cc",
"0x744d49cc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xb2b22a85",
"selector": "0xb2b22a85",
"calldata_variants": [
"0xb2b22a85",
"0xb2b22a850000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xb81f853c",
"selector": "0xb81f853c",
"calldata_variants": [
"0xb81f853c",
"0xb81f853c0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"guards_detected": [
{
"pc": 17015,
"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
}
|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0xe6d97f0698a99d156e99c14d6c4cf6804209e9d66594f2b9763e14a6426e1975
call_targets:
0x6191d13860d792487bbd89e63e4c877dbb56d397
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xe6d97f0698a99d156e99c14d6c4cf6804209e9d66594f2b9763e14a6426e1975",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x6191d13860d792487bbd89e63e4c877dbb56d397"
],
"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": "0xde35f5cb",
"selector": "0xde35f5cb",
"calldata_variants": [
"0xde35f5cb",
"0xde35f5cb0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdfbc6269",
"selector": "0xdfbc6269",
"calldata_variants": [
"0xdfbc6269",
"0xdfbc62690000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe0acac7f",
"selector": "0xe0acac7f",
"calldata_variants": [
"0xe0acac7f",
"0xe0acac7f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xed72eb24",
"selector": "0xed72eb24",
"calldata_variants": [
"0xed72eb24",
"0xed72eb240000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf358ec61",
"selector": "0xf358ec61",
"calldata_variants": [
"0xf358ec61",
"0xf358ec610000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x744d49cc",
"selector": "0x744d49cc",
"calldata_variants": [
"0x744d49cc",
"0x744d49cc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xb2b22a85",
"selector": "0xb2b22a85",
"calldata_variants": [
"0xb2b22a85",
"0xb2b22a850000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xb81f853c",
"selector": "0xb81f853c",
"calldata_variants": [
"0xb81f853c",
"0xb81f853c0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 6162,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 1,
"guards_detected": [
{
"pc": 17015,
"type": "tx_origin_used"
}
],
"untrusted_call_count": 1
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0xe6d97f0698a99d156e99c14d6c4cf6804209e9d66594f2b9763e14a6426e1975
call_targets:
0x6191d13860d792487bbd89e63e4c877dbb56d397
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xe6d97f0698a99d156e99c14d6c4cf6804209e9d66594f2b9763e14a6426e1975",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x6191d13860d792487bbd89e63e4c877dbb56d397"
],
"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": "0xde35f5cb",
"selector": "0xde35f5cb",
"calldata_variants": [
"0xde35f5cb",
"0xde35f5cb0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdfbc6269",
"selector": "0xdfbc6269",
"calldata_variants": [
"0xdfbc6269",
"0xdfbc62690000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe0acac7f",
"selector": "0xe0acac7f",
"calldata_variants": [
"0xe0acac7f",
"0xe0acac7f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xed72eb24",
"selector": "0xed72eb24",
"calldata_variants": [
"0xed72eb24",
"0xed72eb240000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf358ec61",
"selector": "0xf358ec61",
"calldata_variants": [
"0xf358ec61",
"0xf358ec610000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x744d49cc",
"selector": "0x744d49cc",
"calldata_variants": [
"0x744d49cc",
"0x744d49cc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xb2b22a85",
"selector": "0xb2b22a85",
"calldata_variants": [
"0xb2b22a85",
"0xb2b22a850000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xb81f853c",
"selector": "0xb81f853c",
"calldata_variants": [
"0xb81f853c",
"0xb81f853c0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 6162,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 1,
"guards_detected": [
{
"pc": 17015,
"type": "tx_origin_used"
}
]
}
|