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

Analysis Run

f9510eb6-1b48-47e8-b07f-db6f72c8035f

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

What survived the funnel

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

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

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
31491 report.consolidate complete 1 / 1 3 months ago
77572 artifact.fetch complete 1 / 3 1 week ago
77573 tool.cast_disasm complete 1 / 3 1 week ago
77574 analysis.bundle complete 1 / 3 1 week ago
77575 capability.graph complete 1 / 3 1 week ago
77576 detector.run complete 1 / 3 1 week ago
77577 validation.fork complete 1 / 3 1 week ago

Artifact

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

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 1
Findings
0
No findings?
yes
Summary
Reviewed runtime bytecode; external call and delegatecall sites appear gated by role checks and I cannot derive a concrete, unprotected profit extraction path from bytecode alone.
View stderr
[codex:1189574] OpenAI Codex v0.77.0 (research preview)
[codex:1189574] --------
[codex:1189574] workdir: /tmp/codex-multi-afh6is7w
[codex:1189574] model: gpt-5.2-codex
[codex:1189574] provider: openai
[codex:1189574] approval: never
[codex:1189574] sandbox: read-only
[codex:1189574] reasoning effort: xhigh
[codex:1189574] reasoning summaries: auto
[codex:1189574] session id: 019b865a-8e4a-7cb2-b378-a567f0d4c336
[codex:1189574] --------
[codex:1189574] user
[codex:1189574] 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:1189574] 
[codex:1189574] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:1189574] 
[codex:1189574] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:1189574] - Gas inefficiency, code quality, or best practices
[codex:1189574] - Theoretical vulnerabilities without a clear extraction path
[codex:1189574] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:1189574] - Issues requiring social engineering or off-chain coordination
[codex:1189574] 
[codex:1189574] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:1189574] - CALL/DELEGATECALL with controllable destination or calldata
[codex:1189574] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:1189574] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:1189574] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:1189574] - External calls before state updates (reentrancy)
[codex:1189574] - SELFDESTRUCT with controllable beneficiary
[codex:1189574] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:1189574] 
[codex:1189574] For each finding, you MUST explain:
[codex:1189574] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:1189574] 2. The concrete sequence of transactions to extract value
[codex:1189574] 3. Why you believe this is exploitable (not just suspicious)
[codex:1189574] 
[codex:1189574] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:1189574] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:1189574] 
[codex:1189574] Output MUST be valid JSON matching the provided schema.
[codex:1189574] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:1189574] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:1189574] mcp startup: no servers
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Reading BYTECODE_BUNDLE.txt**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc ls in /tmp/codex-multi-afh6is7w succeeded in 5ms:
[codex:1189574] BYTECODE_BUNDLE.txt
[codex:1189574] codex-output-schema.json
[codex:1189574] exec
[codex:1189574] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-afh6is7w succeeded in 5ms:
[codex:1189574] Runtime bytecode bundle for best-effort auditing.
[codex:1189574] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:1189574] 
[codex:1189574] FILE: runtime_bytecode.hex
[codex:1189574] 0x6080604052600436106102605760003560e01c806376420e1d11610144578063cc855ccc116100b6578063e1f21c671161007a578063e1f21c671461071b578063e48603391461073b578063e7e31e7a1461075b578063f0225a3c1461077b578063f1880b241461079b578063f60d7e9c146107bb57600080fd5b8063cc855ccc1461067b578063d48bfca71461069b578063d547741f146106bb578063de590125146106db578063deb9a3a2146106fb57600080fd5b80639169d833116101085780639169d833146105e457806391d148541461060457806396a59af414610624578063a217fddf14610429578063c41d5a0614610646578063ca15c8731461065b57600080fd5b806376420e1d146105355780637ffbe24114610557578063884fedba146105775780638ce5877c1461058c5780639010d07c146105ac57600080fd5b8063223e5479116101dd57806339ebf823116101a157806339ebf8231461047e5780635d7e641e1461049e5780635fa7b584146104c057806363a31bd4146104e057806369efe471146105005780636ff97f1d1461052057600080fd5b8063223e5479146103d9578063248a9ca3146103f95780632a0acc6a146104295780632f2ff15d1461043e57806336568abe1461045e57600080fd5b8063175c4ef811610224578063175c4ef814610335578063193458ce146103575780631af1e2fb146103775780631b2df850146103975780631cff79cd146103b957600080fd5b8063018fbe571461026c57806301ffc9a7146102a15780630c2997ca146102d157806312eeff7e146102f3578063175188e81461031557600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5061028e6000805160206127d383398151915281565b6040519081526020015b60405180910390f35b3480156102ad57600080fd5b506102c16102bc366004612336565b6107db565b6040519015158152602001610298565b3480156102dd57600080fd5b506102e6610806565b6040516102989190612360565b3480156102ff57600080fd5b5061031361030e3660046123eb565b6108e2565b005b34801561032157600080fd5b5061031361033036600461243a565b610bb1565b34801561034157600080fd5b5061028e6000805160206127b383398151915281565b34801561036357600080fd5b50610313610372366004612455565b610c43565b34801561038357600080fd5b5061031361039236600461243a565b610cfe565b3480156103a357600080fd5b5061028e60008051602061279383398151915281565b3480156103c557600080fd5b506103136103d436600461247f565b610d88565b3480156103e557600080fd5b506103136103f436600461243a565b610e35565b34801561040557600080fd5b5061028e610414366004612504565b60009081526020819052604090206001015490565b34801561043557600080fd5b5061028e600081565b34801561044a57600080fd5b5061031361045936600461251d565b610ebe565b34801561046a57600080fd5b5061031361047936600461251d565b610f55565b34801561048a57600080fd5b506102c161049936600461243a565b610f88565b3480156104aa57600080fd5b506104b3610f95565b6040516102989190612549565b3480156104cc57600080fd5b506103136104db36600461243a565b610fa6565b3480156104ec57600080fd5b506102c16104fb36600461243a565b611030565b34801561050c57600080fd5b5061028e61051b36600461243a565b61103d565b34801561052c57600080fd5b506104b3611051565b34801561054157600080fd5b5061028e6000805160206127f383398151915281565b34801561056357600080fd5b506102c161057236600461243a565b61105d565b34801561058357600080fd5b506104b361106a565b34801561059857600080fd5b506103136105a736600461243a565b611076565b3480156105b857600080fd5b506105cc6105c736600461258a565b611100565b6040516001600160a01b039091168152602001610298565b3480156105f057600080fd5b506103136105ff366004612504565b611118565b34801561061057600080fd5b506102c161061f36600461251d565b611225565b34801561063057600080fd5b5061063961124e565b60405161029891906125ac565b34801561065257600080fd5b506104b3611323565b34801561066757600080fd5b5061028e610676366004612504565b61132f565b34801561068757600080fd5b50610313610696366004612455565b611346565b3480156106a757600080fd5b506103136106b636600461243a565b61140e565b3480156106c757600080fd5b506103136106d636600461251d565b611497565b3480156106e757600080fd5b506103136106f63660046123eb565b6114c2565b34801561070757600080fd5b50610313610716366004612602565b61179c565b34801561072757600080fd5b50610313610736366004612672565b61188a565b34801561074757600080fd5b506102c161075636600461243a565b6118fc565b34801561076757600080fd5b5061031361077636600461243a565b611909565b34801561078757600080fd5b5061028e61079636600461243a565b611992565b3480156107a757600080fd5b506103136107b636600461243a565b61199f565b3480156107c757600080fd5b506103136107d636600461243a565b6119a8565b60006001600160e01b03198216635a05180f60e01b1480610800575061080082611a31565b92915050565b60606000610814600e611a66565b905060008167ffffffffffffffff811115610831576108316126af565b60405190808252806020026020018201604052801561087657816020015b604080518082019091526000808252602082015281526020019060019003908161084f5790505b50905060005b828110156108db57600080610892600e84611a71565b915091506040518060400160405280836001600160a01b03168152602001828152508484815181106108c6576108c66126c5565b6020908102919091010152505060010161087c565b5092915050565b6108fa6000805160206127d383398151915233611225565b610917576040516303a81c9760e61b815260040160405180910390fd5b61092084611a8f565b61092b600783611ac2565b6109585760405163a787604b60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b1790529051600091829182916001600160a01b038916916109af91906126db565b600060405180830381855afa9150503d80600081146109ea576040519150601f19603f3d011682016040523d82523d6000602084013e6109ef565b606091505b5091509150818015610a02575080516020145b15610a1e5780806020019051810190610a1b919061270a565b92505b838015610a3857506002546001600160a01b038881169116145b15610a4a57610a474784612739565b92505b85831015610a7557604051634787a10360e11b8152600481018490526024810187905260440161094f565b838015610a8f57506002546001600160a01b038881169116145b15610b425785471015610b06576001600160a01b038716632e1a7d4d610ab5478961274c565b6040518263ffffffff1660e01b8152600401610ad391815260200190565b600060405180830381600087803b158015610aed57600080fd5b505af1158015610b01573d6000803e3d6000fd5b505050505b6040516001600160a01b0386169087156108fc029088906000818181858888f19350505050158015610b3c573d6000803e3d6000fd5b50610b56565b610b566001600160a01b0388168688611ae4565b604080516001600160a01b03898116825260208201899052871681830152851515606082015290517ff5a218c3f2e48fb71969f47c462c49a00473152fa2170938abd781982c93fca69181900360800190a150505050505050565b610bc960008051602061279383398151915233611225565b610be65760405163605919ad60e11b815260040160405180910390fd5b610bf1600382611ac2565b15610c4057610c01600382611b43565b506040516001600160a01b03821681527f09a1db4b80c32706328728508c941a6b954f31eb5affd32f236c1fd405f8fea4906020015b60405180910390a15b50565b610c5b60008051602061279383398151915233611225565b610c785760405163605919ad60e11b815260040160405180910390fd5b610c8182611a8f565b6000610c8e600e84611b58565b915050808203610c9d57505050565b81600003610cb657610cb0600e84611b70565b50610cc4565b610cc2600e8484611b85565b505b6040518281527f46d7618326b02f1816d1bc53039cbd2b3a77a2cd560dafcc20471097fd9e85e4906020015b60405180910390a1505b5050565b610d1660008051602061279383398151915233611225565b610d335760405163605919ad60e11b815260040160405180910390fd5b610d3e600782611ac2565b15610c4057610d4e600782611b43565b506040516001600160a01b03821681527f3eecdc5b7fe6b9eeb35a1f4d3f16910d39a0dd7587ffe9e76cf56b29b6e4e1f190602001610c37565b610da06000805160206127b383398151915233611225565b610dbd5760405163897e65bd60e01b815260040160405180910390fd5b610dc8600384611ac2565b610df057604051636c33797360e11b81526001600160a01b038416600482015260240161094f565b610e308383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ba392505050565b505050565b610e4d60008051602061279383398151915233611225565b610e6a5760405163605919ad60e11b815260040160405180910390fd5b610e75600382611ac2565b610c4057610e84600382611bc6565b506040516001600160a01b03821681527f3f008fd510eae7a9e7bee13513d7b83bef8003d488b5a3d0b0da4de71d6846f190602001610c37565b818015801590610edc57506000805160206127938339815191528114155b8015610ef657506000805160206127d38339815191528114155b8015610f1057506000805160206127b38339815191528114155b8015610f2a57506000805160206127f38339815191528114155b15610f4b5760405163125a2bb760e01b81526004810182905260240161094f565b610e308383611bdb565b6001600160a01b0381163314610f7e5760405163334bd91960e11b815260040160405180910390fd5b610e308282611c00565b6000610800600383611ac2565b6060610fa16003611c35565b905090565b610fbe60008051602061279383398151915233611225565b610fdb5760405163605919ad60e11b815260040160405180910390fd5b610fe6600582611ac2565b15610c4057610ff6600582611b43565b506040516001600160a01b03821681527f4c910b69fe65a61f7531b9c5042b2329ca7179c77290aa7e2eb3afa3c8511fd390602001610c37565b6000610800600c83611ac2565b600061104a600983611b58565b9392505050565b6060610fa16005611c35565b6000610800600783611ac2565b6060610fa16007611c35565b61108e60008051602061279383398151915233611225565b6110ab5760405163605919ad60e11b815260040160405180910390fd5b6110b6600c82611ac2565b15610c40576110c6600c82611b43565b506040516001600160a01b03821681527fab8cff50266d80b9c9d9703af934ca455b9218286bf4fcaa05653a564c499e4b90602001610c37565b600082815260016020526040812061104a9083611c42565b6111306000805160206127b383398151915233611225565b61114d5760405163897e65bd60e01b815260040160405180910390fd5b8047101561117757604051634787a10360e11b81524760048201526024810182905260440161094f565b600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156111c757600080fd5b505af11580156111db573d6000803e3d6000fd5b5050600254604080516001600160a01b039092168252602082018690527f2c58f4d3d48c3b93bf8f7fd23f32658ccb97894f02022d2189ffa9903d37bfb89450019150610c379050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600061125c6009611a66565b905060008167ffffffffffffffff811115611279576112796126af565b6040519080825280602002602001820160405280156112be57816020015b60408051808201909152600080825260208201528152602001906001900390816112975790505b50905060005b828110156108db576000806112da600984611a71565b915091506040518060400160405280836001600160a01b031681526020018281525084848151811061130e5761130e6126c5565b602090810291909101015250506001016112c4565b6060610fa1600c611c35565b600081815260016020526040812061080090611c4e565b61135e60008051602061279383398151915233611225565b61137b5760405163605919ad60e11b815260040160405180910390fd5b61138482611a8f565b6000611391600984611b58565b9150508082036113a057505050565b816000036113b9576113b3600984611b70565b506113c7565b6113c560098484611b85565b505b604080516001600160a01b0385168152602081018390529081018390527f5a257baf8d7726a03c0e1fb5ddaa5b77d339332901e52d15169d56442a381c1290606001610cf0565b61142660008051602061279383398151915233611225565b6114435760405163605919ad60e11b815260040160405180910390fd5b61144e600582611ac2565b610c405761145d600582611bc6565b506040516001600160a01b03821681527f784c8f4dbf0ffedd6e72c76501c545a70f8b203b30a26ce542bf92ba87c248a490602001610c37565b6000828152602081905260409020600101546114b281611c58565b6114bc8383611c00565b50505050565b6114da6000805160206127f383398151915233611225565b6114f757604051631966c8a560e01b815260040160405180910390fd5b61150084611a8f565b61150b600783611ac2565b6115335760405163a787604b60e01b81526001600160a01b038316600482015260240161094f565b6000611540600986611b58565b9150508381101561156e5760405163086e219760e11b8152600481018290526024810185905260440161094f565b600061157b601187611b58565b9150600090508061158d600e89611b58565b909250905061159c8184612739565b421180156115a75750815b6115ce57604051630722e4a160e51b8152600481018490526024810182905260440161094f565b6040516370a0823160e01b815230600482015288906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061270a565b90508881101561166857604051634787a10360e11b815260048101829052602481018a905260440161094f565b86801561168257506002546001600160a01b038b81169116145b1561171d57604051632e1a7d4d60e01b8152600481018a90526001600160a01b038b1690632e1a7d4d90602401600060405180830381600087803b1580156116c957600080fd5b505af11580156116dd573d6000803e3d6000fd5b50506040516001600160a01b038b1692508b156108fc0291508b906000818181858888f19350505050158015611717573d6000803e3d6000fd5b50611731565b6117316001600160a01b038b16898b611ae4565b61173d60118b42611b85565b50604080516001600160a01b038c81168252602082018c90528a1681830152881515606082015290517ff5a218c3f2e48fb71969f47c462c49a00473152fa2170938abd781982c93fca69181900360800190a150505050505050505050565b6000838152602081905260409020600101546117b781611c58565b8380158015906117d557506000805160206127938339815191528114155b80156117ef57506000805160206127d38339815191528114155b801561180957506000805160206127b38339815191528114155b801561182357506000805160206127f38339815191528114155b156118445760405163125a2bb760e01b81526004810182905260240161094f565b60005b838110156118825761187a86868684818110611865576118656126c5565b9050602002016020810190610459919061243a565b600101611847565b505050505050565b3330146118ac5760405163472511eb60e11b815233600482015260240161094f565b6118b583611a8f565b6118c0600c83611ac2565b6118e8576040516327bca0f560e21b81526001600160a01b038316600482015260240161094f565b610e306001600160a01b0384168383611c62565b6000610800600583611ac2565b61192160008051602061279383398151915233611225565b61193e5760405163605919ad60e11b815260040160405180910390fd5b611949600c82611ac2565b610c4057611958600c82611bc6565b506040516001600160a01b03821681527f3139419c41cdd7abca84fa19dd21118cd285d3e2ce1a9444e8161ce9fa62fdcd90602001610c37565b600061104a600e83611b58565b610c4081611a8f565b6119c060008051602061279383398151915233611225565b6119dd5760405163605919ad60e11b815260040160405180910390fd5b6119e8600782611ac2565b610c40576119f7600782611bc6565b506040516001600160a01b03821681527fb161bb911e584e40711ead7275aaf23b4dfeb38befa1e269b835db83e0d112a790602001610c37565b60006001600160e01b03198216637965db0b60e01b148061080057506301ffc9a760e01b6001600160e01b0319831614610800565b600061080082611cf2565b6000808080611a808686611cfd565b909450925050505b9250929050565b611a9a600582611ac2565b610c4057604051635f8b555b60e11b81526001600160a01b038216600482015260240161094f565b6001600160a01b0381166000908152600183016020526040812054151561104a565b6040516001600160a01b03838116602483015260448201839052610e3091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050611d28565b600061104a836001600160a01b038416611d8b565b6000808080611a80866001600160a01b038716611e7e565b600061104a836001600160a01b038416611eb8565b6000611b9b846001600160a01b03851684611ed5565b949350505050565b80516000808260208501865af43d6000803e808015611bc1573d6000f35b3d6000fd5b600061104a836001600160a01b038416611ef2565b600082815260208190526040902060010154611bf681611c58565b6114bc8383611f41565b600080611c0d8484611f6e565b9050801561104a576000848152600160205260409020611c2d9084611b43565b509392505050565b6060600061104a83611fd9565b600061104a8383612035565b6000610800825490565b610c40813361205f565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052611cb38482612098565b6114bc576040516001600160a01b03848116602483015260006044830152611ce891869182169063095ea7b390606401611b11565b6114bc8482611d28565b600061080082611c4e565b60008080611d0b8585611c42565b600081815260029690960160205260409095205494959350505050565b6000611d3d6001600160a01b03841683612140565b90508051600014158015611d62575080806020019051810190611d60919061275f565b155b15610e3057604051635274afe760e01b81526001600160a01b038416600482015260240161094f565b60008181526001830160205260408120548015611e74576000611daf60018361274c565b8554909150600090611dc39060019061274c565b9050808214611e28576000866000018281548110611de357611de36126c5565b9060005260206000200154905080876000018481548110611e0657611e066126c5565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611e3957611e3961277c565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610800565b6000915050610800565b6000818152600283016020526040812054819080611ead57611ea0858561214e565b925060009150611a889050565b600192509050611a88565b6000818152600283016020526040812081905561104a838361215a565b60008281526002840160205260408120829055611b9b8484612166565b6000818152600183016020526040812054611f3957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610800565b506000610800565b600080611f4e8484612172565b9050801561104a576000848152600160205260409020611c2d9084611bc6565b6000611f7a8383611225565b15611f39576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610800565b60608160000180548060200260200160405190810160405280929190818152602001828054801561202957602002820191906000526020600020905b815481526020019060010190808311612015575b50505050509050919050565b600082600001828154811061204c5761204c6126c5565b9060005260206000200154905092915050565b6120698282611225565b610cfa5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161094f565b6000806000846001600160a01b0316846040516120b591906126db565b6000604051808303816000865af19150503d80600081146120f2576040519150601f19603f3d011682016040523d82523d6000602084013e6120f7565b606091505b5091509150818015612121575080511580612121575080806020019051810190612121919061275f565b801561213757506000856001600160a01b03163b115b95945050505050565b606061104a838360006121fc565b600061104a8383612299565b600061104a8383611d8b565b600061104a8383611ef2565b600061217e8383611225565b611f39576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556121b43390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610800565b6060814710156122215760405163cd78605960e01b815230600482015260240161094f565b600080856001600160a01b0316848660405161223d91906126db565b60006040518083038185875af1925050503d806000811461227a576040519150601f19603f3d011682016040523d82523d6000602084013e61227f565b606091505b509150915061228f8683836122b1565b9695505050505050565b6000818152600183016020526040812054151561104a565b6060826122c6576122c18261230d565b61104a565b81511580156122dd57506001600160a01b0384163b155b1561230657604051639996b31560e01b81526001600160a01b038516600482015260240161094f565b508061104a565b80511561231d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60006020828403121561234857600080fd5b81356001600160e01b03198116811461104a57600080fd5b602080825282518282018190526000918401906040840190835b818110156123b6576123a083855180516001600160a01b03168252602090810151910152565b602093909301926040929092019160010161237a565b509095945050505050565b80356001600160a01b03811681146123d857600080fd5b919050565b8015158114610c4057600080fd5b6000806000806080858703121561240157600080fd5b61240a856123c1565b93506020850135925061241f604086016123c1565b9150606085013561242f816123dd565b939692955090935050565b60006020828403121561244c57600080fd5b61104a826123c1565b6000806040838503121561246857600080fd5b612471836123c1565b946020939093013593505050565b60008060006040848603121561249457600080fd5b61249d846123c1565b9250602084013567ffffffffffffffff8111156124b957600080fd5b8401601f810186136124ca57600080fd5b803567ffffffffffffffff8111156124e157600080fd5b8660208284010111156124f357600080fd5b939660209190910195509293505050565b60006020828403121561251657600080fd5b5035919050565b6000806040838503121561253057600080fd5b82359150612540602084016123c1565b90509250929050565b602080825282518282018190526000918401906040840190835b818110156123b65783516001600160a01b0316835260209384019390920191600101612563565b6000806040838503121561259d57600080fd5b50508035926020909101359150565b602080825282518282018190526000918401906040840190835b818110156123b6576125ec83855180516001600160a01b03168252602090810151910152565b60209390930192604092909201916001016125c6565b60008060006040848603121561261757600080fd5b83359250602084013567ffffffffffffffff81111561263557600080fd5b8401601f8101861361264657600080fd5b803567ffffffffffffffff81111561265d57600080fd5b8660208260051b84010111156124f357600080fd5b60008060006060848603121561268757600080fd5b612690846123c1565b925061269e602085016123c1565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000825160005b818110156126fc57602081860181015185830152016126e2565b506000920191825250919050565b60006020828403121561271c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561080057610800612723565b8181038181111561080057610800612723565b60006020828403121561277157600080fd5b815161104a816123dd565b634e487b7160e01b600052603160045260246000fdfeaf290d8680820aad922855f39b306097b20e28774d6c1ad35a20325630c3a02c872340a532bdd7bb02bea115c1b0f1ba87eac982f5b79b51ac189ffaac1b6fce4c6ad1028fbb14d0f715be3e35174bec324cf5f999ea391ca4c4ca4c447f2d159143236d81225394f3bd65b44e6e29fdf4d7ba0773d9bb3f5cc15eb80ba37777a2646970667358221220cf155cc2499566f150a0b714545d5587a7dd1ce052ffa03ea1115dffc2665a0e64736f6c634300081a0033
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Analyzing bytecode for exploit paths**
[codex:1189574] 
[codex:1189574] I'm focusing on parsing the bytecode to identify function selectors and patterns that could reveal exploitable paths like unprotected transfers, selfdestruct, or delegatecalls. I plan to write or use a Python script to disassemble the hex code and locate opcodes such as CALL, DELEGATECALL, and SELFDESTRUCT along with their offsets to check for vulnerabilities and confirm if there's a concrete profit path.
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] import re
[codex:1189574] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:1189574] # Wait: file contains header lines; need to parse runtime_bytecode.hex line? We'll parse after 'FILE: runtime_bytecode.hex' maybe next line.
[codex:1189574] import sys
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines()
[codex:1189574] hexline=None
[codex:1189574] for line in text:
[codex:1189574]     if line.startswith('0x'):
[codex:1189574]         hexline=line.strip()
[codex:1189574]         break
[codex:1189574] if not hexline:
[codex:1189574]     print('no hex line');sys.exit()
[codex:1189574] hexdata=hexline[2:]
[codex:1189574] code=unhexlify(hexdata)
[codex:1189574] # disassemble simple
[codex:1189574] opcodes=[
[codex:1189574] 'STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND',
[codex:1189574] ]+['INVALID']*(0x10-0x0c)
[codex:1189574] # build map
[codex:1189574] opmap={i:opcodes[i] if i<len(opcodes) else None for i in range(0x10)}
[codex:1189574] # fill rest
[codex:1189574] names={
[codex:1189574] 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',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 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:1189574] 0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80):
[codex:1189574]     names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90):
[codex:1189574]     names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0):
[codex:1189574]     names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5):
[codex:1189574]     names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100):
[codex:1189574]     names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574] # iterate
[codex:1189574] ops=[]
[codex:1189574] i=0
[codex:1189574] while i<len(code):
[codex:1189574]     op=code[i]
[codex:1189574]     name=names.get(op,f'0x{op:02x}')
[codex:1189574]     if 0x60<=op<=0x7f:
[codex:1189574]         n=op-0x5f
[codex:1189574]         data=code[i+1:i+1+n]
[codex:1189574]         ops.append((i,name,data))
[codex:1189574]         i+=1+n
[codex:1189574]     else:
[codex:1189574]         ops.append((i,name,None))
[codex:1189574]         i+=1
[codex:1189574] # find calls
[codex:1189574] for off,name,data in ops:
[codex:1189574]     if name in ('CALL','DELEGATECALL','CALLCODE','SELFDESTRUCT','CREATE','CREATE2','STATICCALL'):
[codex:1189574]         print(hex(off),name)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 34ms:
[codex:1189574] 0x9bb STATICCALL
[codex:1189574] 0xaf0 CALL
[codex:1189574] 0xb26 CALL
[codex:1189574] 0x11ca CALL
[codex:1189574] 0x1606 STATICCALL
[codex:1189574] 0x16cc CALL
[codex:1189574] 0x1701 CALL
[codex:1189574] 0x1bb0 DELEGATECALL
[codex:1189574] 0x20c3 CALL
[codex:1189574] 0x224a CALL
[codex:1189574] 0x27c1 CALL
[codex:1189574] 0x27c7 CREATE2
[codex:1189574] 0x27ce STATICCALL
[codex:1189574] 0x27e5 CREATE2
[codex:1189574] 0x2832 SELFDESTRUCT
[codex:1189574] 0x2838 SELFDESTRUCT
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Investigating delegatecall and selfdestruct risks**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines()
[codex:1189574] hexline=None
[codex:1189574] for line in text:
[codex:1189574]     if line.startswith('0x'):
[codex:1189574]         hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # simple disasm to list
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 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:1189574] 0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80):
[codex:1189574]     names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90):
[codex:1189574]     names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0):
[codex:1189574]     names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5):
[codex:1189574]     names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100):
[codex:1189574]     names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574] 
[codex:1189574] def disasm(start,end):
[codex:1189574]     i=start
[codex:1189574]     while i<end:
[codex:1189574]         op=code[i]
[codex:1189574]         name=names.get(op,f'0x{op:02x}')
[codex:1189574]         if 0x60<=op<=0x7f:
[codex:1189574]             n=op-0x5f
[codex:1189574]             data=code[i+1:i+1+n]
[codex:1189574]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574]             i+=1+n
[codex:1189574]         else:
[codex:1189574]             print(f'{i:04x}: {name}')
[codex:1189574]             i+=1
[codex:1189574] 
[codex:1189574] # offsets of interest
[codex:1189574] for off in [0x9bb,0xaf0,0xb26,0x11ca,0x1606,0x16cc,0x1701,0x1bb0,0x20c3,0x224a,0x27c1,0x27c7,0x27ce,0x27e5,0x2832,0x2838]:
[codex:1189574]     print('\\n-- around',hex(off))
[codex:1189574]     disasm(off-20, off+40)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w exited 1 in 31ms:
[codex:1189574] 
[codex:1189574] -- around 0x9bb
[codex:1189574] 09a7: MULMOD
[codex:1189574] 09a8: 0xaf
[codex:1189574] 09a9: SWAP2
[codex:1189574] 09aa: SWAP1
[codex:1189574] 09ab: PUSH2 0x26db
[codex:1189574] 09ae: JUMP
[codex:1189574] 09af: JUMPDEST
[codex:1189574] 09b0: PUSH1 0x00
[codex:1189574] 09b2: PUSH1 0x40
[codex:1189574] 09b4: MLOAD
[codex:1189574] 09b5: DUP1
[codex:1189574] 09b6: DUP4
[codex:1189574] 09b7: SUB
[codex:1189574] 09b8: DUP2
[codex:1189574] 09b9: DUP6
[codex:1189574] 09ba: GAS
[codex:1189574] 09bb: STATICCALL
[codex:1189574] 09bc: SWAP2
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Identifying code versus metadata boundaries**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines()
[codex:1189574] hexline=None
[codex:1189574] for line in text:
[codex:1189574]     if line.startswith('0x'):
[codex:1189574]         hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # find metadata prefix a2646970667358 or a265627a7a...
[codex:1189574] pattern=b\"a264697066735822\"
[codex:1189574] idx=code.find(pattern)
[codex:1189574] print('metadata idx',idx)
[codex:1189574] # find preceding 0xfe
[codex:1189574] if idx"'!=-1:
[codex:1189574]     # find last 0xfe before idx
[codex:1189574]     fe=code.rfind(b"'"\\xfe\",0,idx)
[codex:1189574]     print('fe idx',fe)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 17ms:
[codex:1189574] metadata idx -1
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Reevaluating pattern search in bytecode**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines()
[codex:1189574] hexline=None
[codex:1189574] for line in text:
[codex:1189574]     if line.startswith('0x'):
[codex:1189574]         hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] pattern=bytes.fromhex('a264697066735822')
[codex:1189574] idx=code.find(pattern)
[codex:1189574] print('metadata idx',idx)
[codex:1189574] if idx"'!=-1:
[codex:1189574]     fe=code.rfind(b"'"\\xfe\",0,idx)
[codex:1189574]     print('fe idx',fe)
[codex:1189574]     print('code length',fe)
[codex:1189574]     # show bytes around fe
[codex:1189574]     print('around fe',code[fe-5:fe+5].hex())
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 17ms:
[codex:1189574] metadata idx 10259
[codex:1189574] fe idx 10130
[codex:1189574] code length 10130
[codex:1189574] around fe 60246000fdfeaf290d86
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Analyzing code boundaries and delegatecall context**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines()
[codex:1189574] hexline=None
[codex:1189574] for line in text:
[codex:1189574]     if line.startswith('0x'):
[codex:1189574]         hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm function
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80):
[codex:1189574]     names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90):
[codex:1189574]     names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0):
[codex:1189574]     names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5):
[codex:1189574]     names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100):
[codex:1189574]     names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574] 
[codex:1189574] def disasm(start,end):
[codex:1189574]     i=start
[codex:1189574]     while i<end:
[codex:1189574]         op=code[i]
[codex:1189574]         name=names.get(op,f'0x{op:02x}')
[codex:1189574]         if 0x60<=op<=0x7f:
[codex:1189574]             n=op-0x5f
[codex:1189574]             data=code[i+1:i+1+n]
[codex:1189574]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574]             i+=1+n
[codex:1189574]         else:
[codex:1189574]             print(f'{i:04x}: {name}')
[codex:1189574]             i+=1
[codex:1189574] 
[codex:1189574] # disasm around delegatecall
[codex:1189574] start=0x1b60
[codex:1189574] end=0x1c30
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 21ms:
[codex:1189574] disasm 0x1b60 0x1c30
[codex:1189574] 1b60: DUP1
[codex:1189574] 1b61: DUP7
[codex:1189574] 1b62: PUSH1 0x01
[codex:1189574] 1b64: PUSH1 0x01
[codex:1189574] 1b66: PUSH1 0xa0
[codex:1189574] 1b68: SHL
[codex:1189574] 1b69: SUB
[codex:1189574] 1b6a: DUP8
[codex:1189574] 1b6b: AND
[codex:1189574] 1b6c: PUSH2 0x1e7e
[codex:1189574] 1b6f: JUMP
[codex:1189574] 1b70: JUMPDEST
[codex:1189574] 1b71: PUSH1 0x00
[codex:1189574] 1b73: PUSH2 0x104a
[codex:1189574] 1b76: DUP4
[codex:1189574] 1b77: PUSH1 0x01
[codex:1189574] 1b79: PUSH1 0x01
[codex:1189574] 1b7b: PUSH1 0xa0
[codex:1189574] 1b7d: SHL
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Analyzing delegatecall usage**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574]     if line.startswith('0x'):
[codex:1189574]         hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] pattern=bytes.fromhex('611ba3')
[codex:1189574] idxs=[i for i in range(len(code)) if code.startswith(pattern,i)]
[codex:1189574] print('PUSH2 0x1ba3 occurrences',idxs)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 20ms:
[codex:1189574] PUSH2 0x1ba3 occurrences [3624]
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Analyzing disassembly around offset 0xE28**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574]     if line.startswith('0x'):
[codex:1189574]         hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0xE00-0xE80
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80):
[codex:1189574]     names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90):
[codex:1189574]     names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0):
[codex:1189574]     names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5):
[codex:1189574]     names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100):
[codex:1189574]     names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574] 
[codex:1189574] def disasm(start,end):
[codex:1189574]     i=start
[codex:1189574]     while i<end:
[codex:1189574]         op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574]         if 0x60<=op<=0x7f:
[codex:1189574]             n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574]             i+=1+n
[codex:1189574]         else:
[codex:1189574]             print(f'{i:04x}: {name}')
[codex:1189574]             i+=1
[codex:1189574] 
[codex:1189574] start=0xDD0; end=0xE80
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 19ms:
[codex:1189574] disasm 0xdd0 0xe80
[codex:1189574] 0dd0: PUSH4 0x6c337973
[codex:1189574] 0dd5: PUSH1 0xe1
[codex:1189574] 0dd7: SHL
[codex:1189574] 0dd8: DUP2
[codex:1189574] 0dd9: MSTORE
[codex:1189574] 0dda: PUSH1 0x01
[codex:1189574] 0ddc: PUSH1 0x01
[codex:1189574] 0dde: PUSH1 0xa0
[codex:1189574] 0de0: SHL
[codex:1189574] 0de1: SUB
[codex:1189574] 0de2: DUP5
[codex:1189574] 0de3: AND
[codex:1189574] 0de4: PUSH1 0x04
[codex:1189574] 0de6: DUP3
[codex:1189574] 0de7: ADD
[codex:1189574] 0de8: MSTORE
[codex:1189574] 0de9: PUSH1 0x24
[codex:1189574] 0deb: ADD
[codex:1189574] 0dec: PUSH2 0x094f
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Analyzing delegatecall usage in bytecode**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574]     if line.startswith('0x'):
[codex:1189574]         hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] pattern=bytes.fromhex('610df0')
[codex:1189574] idxs=[i for i in range(len(code)) if code.startswith(pattern,i)]
[codex:1189574] print(idxs)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 23ms:
[codex:1189574] [3529]
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Inspecting function entry points around offset 0xd90**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574]     if line.startswith('0x'):
[codex:1189574]         hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0xd80
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80):
[codex:1189574]     names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90):
[codex:1189574]     names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0):
[codex:1189574]     names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5):
[codex:1189574]     names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100):
[codex:1189574]     names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574] 
[codex:1189574] def disasm(start,end):
[codex:1189574]     i=start
[codex:1189574]     while i<end:
[codex:1189574]         op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574]         if 0x60<=op<=0x7f:
[codex:1189574]             n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574]             i+=1+n
[codex:1189574]         else:
[codex:1189574]             print(f'{i:04x}: {name}')
[codex:1189574]             i+=1
[codex:1189574] 
[codex:1189574] start=0xd80; end=0xde0
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 18ms:
[codex:1189574] disasm 0xd80 0xde0
[codex:1189574] 0d80: SWAP1
[codex:1189574] 0d81: PUSH1 0x20
[codex:1189574] 0d83: ADD
[codex:1189574] 0d84: PUSH2 0x0c37
[codex:1189574] 0d87: JUMP
[codex:1189574] 0d88: JUMPDEST
[codex:1189574] 0d89: PUSH2 0x0da0
[codex:1189574] 0d8c: PUSH1 0x00
[codex:1189574] 0d8e: DUP1
[codex:1189574] 0d8f: MLOAD
[codex:1189574] 0d90: PUSH1 0x20
[codex:1189574] 0d92: PUSH2 0x27b3
[codex:1189574] 0d95: DUP4
[codex:1189574] 0d96: CODECOPY
[codex:1189574] 0d97: DUP2
[codex:1189574] 0d98: MLOAD
[codex:1189574] 0d99: SWAP2
[codex:1189574] 0d9a: MSTORE
[codex:1189574] 0d9b: CALLER
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Analyzing low-level contract dispatch and delegatecall setup**
[codex:1189574] 
[codex:1189574] I'm examining EVM bytecode to understand a function that uses CODECOPY to load a constant role identifier from metadata, likely for an AccessControl role check, followed by a delegatecall where calldata parameters are dynamically copied into memory. I want to parse the function selector dispatch table by scanning the bytecode for PUSH4 selector patterns paired with conditional jumps to map selectors to entry points, probably automating this with a Python script.
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574]     if line.startswith('0x'):
[codex:1189574]         hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disassemble into list of (offset, op, data)
[codex:1189574] ops=[]
[codex:1189574] # name mapping for convenience
[codex:1189574] def opname(op):
[codex:1189574]     if 0x60<=op<=0x7f: return f'PUSH{op-0x5f}'
[codex:1189574]     if 0x80<=op<=0x8f: return f'DUP{op-0x7f}'
[codex:1189574]     if 0x90<=op<=0x9f: return f'SWAP{op-0x8f}'
[codex:1189574]     if op==0x14: return 'EQ'
[codex:1189574]     if op==0x57: return 'JUMPI'
[codex:1189574]     if op==0x5b: return 'JUMPDEST'
[codex:1189574]     return None
[codex:1189574] 
[codex:1189574] i=0
[codex:1189574] while i<len(code):
[codex:1189574]     op=code[i]
[codex:1189574]     if 0x60<=op<=0x7f:
[codex:1189574]         n=op-0x5f
[codex:1189574]         data=code[i+1:i+1+n]
[codex:1189574]         ops.append((i,op,data))
[codex:1189574]         i+=1+n
[codex:1189574]     else:
[codex:1189574]         ops.append((i,op,None))
[codex:1189574]         i+=1
[codex:1189574] 
[codex:1189574] # find pattern: DUP1 PUSH4 sel EQ PUSH2 dest JUMPI (or PUSH4 sel EQ PUSH2 dest JUMPI)
[codex:1189574] # We'll scan for PUSH4 then EQ then PUSH2 then JUMPI within next 5 ops
[codex:1189574] sel_map=[]
[codex:1189574] for idx,(off,op,data) in enumerate(ops):
[codex:1189574]     if op==0x63: # PUSH4
[codex:1189574]         sel=int.from_bytes(data,'big')
[codex:1189574]         # look ahead 1..6 for EQ then PUSH2 then JUMPI
[codex:1189574]         # find EQ index
[codex:1189574]         for j in range(1,7):
[codex:1189574]             if idx+j>=len(ops): break
[codex:1189574]             if ops[idx+j][1]==0x14: # EQ
[codex:1189574]                 # find PUSH2 after that
[codex:1189574]                 for k in range(1,5):
[codex:1189574]                     if idx+j+k>=len(ops): break
[codex:1189574]                     if ops[idx+j+k][1]==0x61: # PUSH2
[codex:1189574]                         dest=int.from_bytes(ops[idx+j+k][2],'big')
[codex:1189574]                         # next non-push? ensure a JUMPI soon
[codex:1189574]                         for m in range(1,5):
[codex:1189574]                             if idx+j+k+m>=len(ops): break
[codex:1189574]                             if ops[idx+j+k+m][1]==0x57:
[codex:1189574]                                 sel_map.append((sel, dest, off))
[codex:1189574]                                 break
[codex:1189574]                         break
[codex:1189574]                 break
[codex:1189574] 
[codex:1189574] # deduplicate by selector
[codex:1189574] seen={}
[codex:1189574] for sel,dest,off in sel_map:
[codex:1189574]     if sel not in seen:
[codex:1189574]         seen[sel]=dest
[codex:1189574] 
[codex:1189574] print('selectors',len(seen))
[codex:1189574] for sel,dest in sorted(seen.items(), key=lambda x:x[0]):
[codex:1189574]     print(f'0x{sel:08x} -> 0x{dest:04x}')
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 22ms:
[codex:1189574] selectors 45
[codex:1189574] 0x018fbe57 -> 0x026c
[codex:1189574] 0x01ffc9a7 -> 0x02a1
[codex:1189574] 0x0c2997ca -> 0x02d1
[codex:1189574] 0x12eeff7e -> 0x02f3
[codex:1189574] 0x175188e8 -> 0x0315
[codex:1189574] 0x175c4ef8 -> 0x0335
[codex:1189574] 0x193458ce -> 0x0357
[codex:1189574] 0x1af1e2fb -> 0x0377
[codex:1189574] 0x1b2df850 -> 0x0397
[codex:1189574] 0x1cff79cd -> 0x03b9
[codex:1189574] 0x223e5479 -> 0x03d9
[codex:1189574] 0x248a9ca3 -> 0x03f9
[codex:1189574] 0x2a0acc6a -> 0x0429
[codex:1189574] 0x2f2ff15d -> 0x043e
[codex:1189574] 0x36568abe -> 0x045e
[codex:1189574] 0x39ebf823 -> 0x047e
[codex:1189574] 0x5a05180f -> 0x0800
[codex:1189574] 0x5d7e641e -> 0x049e
[codex:1189574] 0x5fa7b584 -> 0x04c0
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Analyzing entry points for delegatecall linkage**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574]     if line.startswith('0x'):
[codex:1189574]         hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm function to show 100 bytes from entry
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80):
[codex:1189574]     names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90):
[codex:1189574]     names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0):
[codex:1189574]     names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5):
[codex:1189574]     names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100):
[codex:1189574]     names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574] 
[codex:1189574] def disasm(start,end):
[codex:1189574]     i=start
[codex:1189574]     while i<end:
[codex:1189574]         op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574]         if 0x60<=op<=0x7f:
[codex:1189574]             n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574]             i+=1+n
[codex:1189574]         else:
[codex:1189574]             print(f'{i:04x}: {name}')
[codex:1189574]             i+=1
[codex:1189574] 
[codex:1189574] # examine entries around 0x03b9,0x043e,0x045e etc
[codex:1189574] for entry in [0x03b9,0x043e,0x045e,0x047e,0x049e,0x04c0,0x04e0,0x0500,0x0520,0x0535,0x0577,0x05ac,0x05e4,0x0604,0x0624,0x0646,0x065b,0x067b,0x069b,0x06bb,0x06db,0x06fb,0x071b,0x073b,0x075b,0x077b,0x079b,0x07bb]:
[codex:1189574]     print('\\nentry',hex(entry))
[codex:1189574]     disasm(entry, entry+60)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 23ms:
[codex:1189574] 
[codex:1189574] entry 0x3b9
[codex:1189574] 03b9: JUMPDEST
[codex:1189574] 03ba: CALLVALUE
[codex:1189574] 03bb: DUP1
[codex:1189574] 03bc: ISZERO
[codex:1189574] 03bd: PUSH2 0x03c5
[codex:1189574] 03c0: JUMPI
[codex:1189574] 03c1: PUSH1 0x00
[codex:1189574] 03c3: DUP1
[codex:1189574] 03c4: REVERT
[codex:1189574] 03c5: JUMPDEST
[codex:1189574] 03c6: POP
[codex:1189574] 03c7: PUSH2 0x0313
[codex:1189574] 03ca: PUSH2 0x03d4
[codex:1189574] 03cd: CALLDATASIZE
[codex:1189574] 03ce: PUSH1 0x04
[codex:1189574] 03d0: PUSH2 0x247f
[codex:1189574] 03d3: JUMP
[codex:1189574] 03d4: JUMPDEST
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Analyzing function selector and delegatecall path**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574]     if line.startswith('0x'):
[codex:1189574]         hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0x247f
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80):
[codex:1189574]     names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90):
[codex:1189574]     names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0):
[codex:1189574]     names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5):
[codex:1189574]     names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100):
[codex:1189574]     names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574] 
[codex:1189574] def disasm(start,end):
[codex:1189574]     i=start
[codex:1189574]     while i<end:
[codex:1189574]         op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574]         if 0x60<=op<=0x7f:
[codex:1189574]             n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574]             i+=1+n
[codex:1189574]         else:
[codex:1189574]             print(f'{i:04x}: {name}')
[codex:1189574]             i+=1
[codex:1189574] 
[codex:1189574] start=0x2460; end=0x24c0
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 19ms:
[codex:1189574] disasm 0x2460 0x24c0
[codex:1189574] 2460: PUSH2 0x2468
[codex:1189574] 2463: JUMPI
[codex:1189574] 2464: PUSH1 0x00
[codex:1189574] 2466: DUP1
[codex:1189574] 2467: REVERT
[codex:1189574] 2468: JUMPDEST
[codex:1189574] 2469: PUSH2 0x2471
[codex:1189574] 246c: DUP4
[codex:1189574] 246d: PUSH2 0x23c1
[codex:1189574] 2470: JUMP
[codex:1189574] 2471: JUMPDEST
[codex:1189574] 2472: SWAP5
[codex:1189574] 2473: PUSH1 0x20
[codex:1189574] 2475: SWAP4
[codex:1189574] 2476: SWAP1
[codex:1189574] 2477: SWAP4
[codex:1189574] 2478: ADD
[codex:1189574] 2479: CALLDATALOAD
[codex:1189574] 247a: SWAP4
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574]     if line.startswith('0x'):
[codex:1189574]         hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0x24b9-0x2520
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80): names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90): names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0): names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5): names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100): names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574] 
[codex:1189574] def disasm(start,end):
[codex:1189574]     i=start
[codex:1189574]     while i<end:
[codex:1189574]         op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574]         if 0x60<=op<=0x7f:
[codex:1189574]             n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574]             i+=1+n
[codex:1189574]         else:
[codex:1189574]             print(f'{i:04x}: {name}')
[codex:1189574]             i+=1
[codex:1189574] 
[codex:1189574] start=0x24b0; end=0x2520
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 17ms:
[codex:1189574] disasm 0x24b0 0x2520
[codex:1189574] 24b0: ISZERO
[codex:1189574] 24b1: PUSH2 0x24b9
[codex:1189574] 24b4: JUMPI
[codex:1189574] 24b5: PUSH1 0x00
[codex:1189574] 24b7: DUP1
[codex:1189574] 24b8: REVERT
[codex:1189574] 24b9: JUMPDEST
[codex:1189574] 24ba: DUP5
[codex:1189574] 24bb: ADD
[codex:1189574] 24bc: PUSH1 0x1f
[codex:1189574] 24be: DUP2
[codex:1189574] 24bf: ADD
[codex:1189574] 24c0: DUP7
[codex:1189574] 24c1: SGT
[codex:1189574] 24c2: PUSH2 0x24ca
[codex:1189574] 24c5: JUMPI
[codex:1189574] 24c6: PUSH1 0x00
[codex:1189574] 24c8: DUP1
[codex:1189574] 24c9: REVERT
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Analyzing potential delegatecall security**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574]     if line.startswith('0x'):
[codex:1189574]         hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0x1a80-0x1b00
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80): names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90): names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0): names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5): names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100): names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574] 
[codex:1189574] def disasm(start,end):
[codex:1189574]     i=start
[codex:1189574]     while i<end:
[codex:1189574]         op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574]         if 0x60<=op<=0x7f:
[codex:1189574]             n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574]             i+=1+n
[codex:1189574]         else:
[codex:1189574]             print(f'{i:04x}: {name}')
[codex:1189574]             i+=1
[codex:1189574] 
[codex:1189574] start=0x1a60; end=0x1ae8
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 17ms:
[codex:1189574] disasm 0x1a60 0x1ae8
[codex:1189574] 1a60: AND
[codex:1189574] 1a61: EQ
[codex:1189574] 1a62: PUSH2 0x0800
[codex:1189574] 1a65: JUMP
[codex:1189574] 1a66: JUMPDEST
[codex:1189574] 1a67: PUSH1 0x00
[codex:1189574] 1a69: PUSH2 0x0800
[codex:1189574] 1a6c: DUP3
[codex:1189574] 1a6d: PUSH2 0x1cf2
[codex:1189574] 1a70: JUMP
[codex:1189574] 1a71: JUMPDEST
[codex:1189574] 1a72: PUSH1 0x00
[codex:1189574] 1a74: DUP1
[codex:1189574] 1a75: DUP1
[codex:1189574] 1a76: DUP1
[codex:1189574] 1a77: PUSH2 0x1a80
[codex:1189574] 1a7a: DUP7
[codex:1189574] 1a7b: DUP7
[codex:1189574] 1a7c: PUSH2 0x1cfd
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Analyzing storage slot computation**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574]     if line.startswith('0x'):
[codex:1189574]         hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0x1030-0x1050
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80): names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90): names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0): names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5): names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100): names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574] 
[codex:1189574] def disasm(start,end):
[codex:1189574]     i=start
[codex:1189574]     while i<end:
[codex:1189574]         op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574]         if 0x60<=op<=0x7f:
[codex:1189574]             n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574]             i+=1+n
[codex:1189574]         else:
[codex:1189574]             print(f'{i:04x}: {name}')
[codex:1189574]             i+=1
[codex:1189574] 
[codex:1189574] start=0x1020; end=0x1060
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 17ms:
[codex:1189574] disasm 0x1020 0x1060
[codex:1189574] 1020: 0x2e
[codex:1189574] 1021: 0xb3
[codex:1189574] 1022: 0xaf
[codex:1189574] 1023: LOG4
[codex:1189574] 1024: 0xc8
[codex:1189574] 1025: MLOAD
[codex:1189574] 1026: 0x1f
[codex:1189574] 1027: 0xd3
[codex:1189574] 1028: SWAP1
[codex:1189574] 1029: PUSH1 0x20
[codex:1189574] 102b: ADD
[codex:1189574] 102c: PUSH2 0x0c37
[codex:1189574] 102f: JUMP
[codex:1189574] 1030: JUMPDEST
[codex:1189574] 1031: PUSH1 0x00
[codex:1189574] 1033: PUSH2 0x0800
[codex:1189574] 1036: PUSH1 0x0c
[codex:1189574] 1038: DUP4
[codex:1189574] 1039: PUSH2 0x1ac2
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Analyzing internal function returns**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574]     if line.startswith('0x'):
[codex:1189574]         hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0x1200-0x1235
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80): names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90): names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0): names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5): names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100): names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574] 
[codex:1189574] def disasm(start,end):
[codex:1189574]     i=start
[codex:1189574]     while i<end:
[codex:1189574]         op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574]         if 0x60<=op<=0x7f:
[codex:1189574]             n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574]             i+=1+n
[codex:1189574]         else:
[codex:1189574]             print(f'{i:04x}: {name}')
[codex:1189574]             i+=1
[codex:1189574] 
[codex:1189574] start=0x1210; end=0x1235
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 18ms:
[codex:1189574] disasm 0x1210 0x1235
[codex:1189574] 1210: 0x2d
[codex:1189574] 1211: 0x21
[codex:1189574] 1212: DUP10
[codex:1189574] 1213: SELFDESTRUCT
[codex:1189574] 1214: 0xa9
[codex:1189574] 1215: SWAP1
[codex:1189574] 1216: RETURNDATASIZE
[codex:1189574] 1217: CALLDATACOPY
[codex:1189574] 1218: 0xbf
[codex:1189574] 1219: 0xb8
[codex:1189574] 121a: SWAP5
[codex:1189574] 121b: POP
[codex:1189574] 121c: ADD
[codex:1189574] 121d: SWAP2
[codex:1189574] 121e: POP
[codex:1189574] 121f: PUSH2 0x0c37
[codex:1189574] 1222: SWAP1
[codex:1189574] 1223: POP
[codex:1189574] 1224: JUMP
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Noticing corrupted disassembly and adjusting**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574]     if line.startswith('0x'):
[codex:1189574]         hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0x1225-0x1260
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80): names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90): names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0): names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5): names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100): names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574] 
[codex:1189574] def disasm(start,end):
[codex:1189574]     i=start
[codex:1189574]     while i<end:
[codex:1189574]         op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574]         if 0x60<=op<=0x7f:
[codex:1189574]             n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574]             i+=1+n
[codex:1189574]         else:
[codex:1189574]             print(f'{i:04x}: {name}')
[codex:1189574]             i+=1
[codex:1189574] 
[codex:1189574] start=0x1225; end=0x1280
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 21ms:
[codex:1189574] disasm 0x1225 0x1280
[codex:1189574] 1225: JUMPDEST
[codex:1189574] 1226: PUSH1 0x00
[codex:1189574] 1228: SWAP2
[codex:1189574] 1229: DUP3
[codex:1189574] 122a: MSTORE
[codex:1189574] 122b: PUSH1 0x20
[codex:1189574] 122d: DUP3
[codex:1189574] 122e: DUP2
[codex:1189574] 122f: MSTORE
[codex:1189574] 1230: PUSH1 0x40
[codex:1189574] 1232: DUP1
[codex:1189574] 1233: DUP5
[codex:1189574] 1234: SHA3
[codex:1189574] 1235: PUSH1 0x01
[codex:1189574] 1237: PUSH1 0x01
[codex:1189574] 1239: PUSH1 0xa0
[codex:1189574] 123b: SHL
[codex:1189574] 123c: SUB
[codex:1189574] 123d: SWAP4
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Examining role-based access and call usage**
[codex:1189574] 
[codex:1189574] I'm analyzing the contract's role check logic, confirming it uses `hasRole(role, account)` before delegate calls, which suggests proper gating. I’m also investigating various CALL instructions to see if any send ETH or tokens without proper authorization, focusing on stack patterns and opcodes near these calls to identify potential vulnerabilities or misuses.
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574]     if line.startswith('0x'):
[codex:1189574]         hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0x10f0-0x1200
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80): names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90): names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0): names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5): names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100): names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574] 
[codex:1189574] def disasm(start,end):
[codex:1189574]     i=start
[codex:1189574]     while i<end:
[codex:1189574]         op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574]         if 0x60<=op<=0x7f:
[codex:1189574]             n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574]             i+=1+n
[codex:1189574]         else:
[codex:1189574]             print(f'{i:04x}: {name}')
[codex:1189574]             i+=1
[codex:1189574] 
[codex:1189574] start=0x10e0; end=0x1210
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 23ms:
[codex:1189574] disasm 0x10e0 0x1210
[codex:1189574] 10e0: 0xc9
[codex:1189574] 10e1: 0xd9
[codex:1189574] 10e2: PUSH17 0x3af934ca455b9218286bf4fcaa05653a56
[codex:1189574] 10f4: 0x4c
[codex:1189574] 10f5: 0x49
[codex:1189574] 10f6: SWAP15
[codex:1189574] 10f7: 0x4b
[codex:1189574] 10f8: SWAP1
[codex:1189574] 10f9: PUSH1 0x20
[codex:1189574] 10fb: ADD
[codex:1189574] 10fc: PUSH2 0x0c37
[codex:1189574] 10ff: JUMP
[codex:1189574] 1100: JUMPDEST
[codex:1189574] 1101: PUSH1 0x00
[codex:1189574] 1103: DUP3
[codex:1189574] 1104: DUP2
[codex:1189574] 1105: MSTORE
[codex:1189574] 1106: PUSH1 0x01
[codex:1189574] 1108: PUSH1 0x20
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Analyzing EVM stack and call sequence**
[codex:1189574] 
[codex:1189574] I'm unpacking the EVM bytecode around a function that checks roles, validates an amount against the contract balance, and then calls a deposit function (likely WETH.deposit) with some ETH value. I'll simulate the stack behavior symbolically from the role check through the CALL to figure out which stack values are used as calldata and call value, planning to build a simple Python-based EVM stack tracer to clarify this complex flow.
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574]     if line.startswith('0x'):
[codex:1189574]         hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # simple symbolic execution for region 0x114d-0x11ca
[codex:1189574] start=0x114d; end=0x11cb
[codex:1189574] # define op names
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',
[codex:1189574] 0xf1:'CALL',0xf4:'DELEGATECALL',0xfa:'STATICCALL',0xfd:'REVERT',0xf3:'RETURN'
[codex:1189574] }
[codex:1189574] 
[codex:1189574] # precompute instruction list for region
[codex:1189574] ops=[]
[codex:1189574] i=start
[codex:1189574] while i<end:
[codex:1189574]     op=code[i]
[codex:1189574]     if 0x60<=op<=0x7f:
[codex:1189574]         n=op-0x5f
[codex:1189574]         data=code[i+1:i+1+n]
[codex:1189574]         ops.append((i,op,data))
[codex:1189574]         i+=1+n
[codex:1189574]     else:
[codex:1189574]         ops.append((i,op,None))
[codex:1189574]         i+=1
[codex:1189574] 
[codex:1189574] # symbolic stack
[codex:1189574] stack=['RET','AMOUNT']  # assume top is AMOUNT? Actually stack end is top. We'll use list with last as top.
[codex:1189574] 
[codex:1189574] def pop():
[codex:1189574]     return stack.pop() if stack else 'POP_EMPTY'
[codex:1189574] 
[codex:1189574] def push(x):
[codex:1189574]     stack.append(x)
[codex:1189574] 
[codex:1189574] def binop(op,a,b):
[codex:1189574]     return f'({a} {op} {b})'
[codex:1189574] 
[codex:1189574] for off,op,data in ops:
[codex:1189574]     name=names.get(op,f'OP{op:02x}')
[codex:1189574]     if 0x60<=op<=0x7f:
[codex:1189574]         val=int.from_bytes(data,'big')
[codex:1189574]         push(hex(val))
[codex:1189574]     elif op==0x80: # DUP1 etc handled below
[codex:1189574]         pass
[codex:1189574]     if 0x80<=op<=0x8f:
[codex:1189574]         n=op-0x7f
[codex:1189574]         if len(stack)>=n:
[codex:1189574]             push(stack[-n])
[codex:1189574]         else:
[codex:1189574]             push('DUP?')
[codex:1189574]     elif 0x90<=op<=0x9f:
[codex:1189574]         n=op-0x8f
[codex:1189574]         if len(stack)>n:
[codex:1189574]             stack[-1],stack[-1-n]=stack[-1-n],stack[-1]
[codex:1189574]     elif op==0x50: # POP
[codex:1189574]         pop()
[codex:1189574]     elif op==0x47: # SELFBALANCE
[codex:1189574]         push('SELFBALANCE')
[codex:1189574]     elif op==0x54: # SLOAD
[codex:1189574]         slot=pop(); push(f'SLOAD[{slot}]')
[codex:1189574]     elif op==0x5a: # GAS
[codex:1189574]         push('GAS')
[codex:1189574]     elif op==0x14: # EQ
[codex:1189574]         b=pop(); a=pop(); push(binop('==',a,b))
[codex:1189574]     elif op==0x10: # LT
[codex:1189574]         b=pop(); a=pop(); push(binop('<',a,b))
[codex:1189574]     elif op==0x11: # GT
[codex:1189574]         b=pop(); a=pop(); push(binop('>',a,b))
[codex:1189574]     elif op==0x15: # ISZERO
[codex:1189574]         a=pop(); push(f'ISZERO({a})')
[codex:1189574]     elif op==0x16: # AND
[codex:1189574]         b=pop(); a=pop(); push(binop('&',a,b))
[codex:1189574]     elif op==0x01: # ADD
[codex:1189574]         b=pop(); a=pop(); push(binop('+',a,b))
[codex:1189574]     elif op==0x02: # MUL
[codex:1189574]         b=pop(); a=pop(); push(binop('*',a,b))
[codex:1189574]     elif op==0x04: # DIV
[codex:1189574]         b=pop(); a=pop(); push(binop('/',a,b))
[codex:1189574]     elif op==0x1b: # SHL
[codex:1189574]         b=pop(); a=pop(); push(binop('<<',a,b))
[codex:1189574]     elif op==0x1c: # SHR
[codex:1189574]         b=pop(); a=pop(); push(binop('>>',a,b))
[codex:1189574]     elif op==0x1a: # BYTE
[codex:1189574]         b=pop(); a=pop(); push(f'BYTE({a},{b})')
[codex:1189574]     elif op==0x57: # JUMPI
[codex:1189574]         dest=pop(); cond=pop();
[codex:1189574]         # ignore control flow
[codex:1189574]     elif op==0x56: # JUMP
[codex:1189574]         dest=pop();
[codex:1189574]     elif op==0x35: # CALLDATALOAD
[codex:1189574]         offset=pop(); push(f'CALLDATALOAD[{offset}]')
[codex:1189574]     elif op==0x52: # MSTORE
[codex:1189574]         val=pop(); off=pop();
[codex:1189574]     elif op==0x51: # MLOAD
[codex:1189574]         off=pop(); push(f'MLOAD[{off}]')
[codex:1189574]     elif op==0xf1: # CALL
[codex:1189574]         # stack: gas, to, value, in, insize, out, outsize
[codex:1189574]         outsize=pop(); out=pop(); insize=pop(); _in=pop(); value=pop(); to=pop(); gas=pop();
[codex:1189574]         print('CALL at',hex(off),'gas',gas,'to',to,'value',value,'in',_in,'insize',insize)
[codex:1189574]         push('CALL_RESULT')
[codex:1189574]     elif op in (0xfd,0xf3):
[codex:1189574]         break
[codex:1189574]     # ignore others
[codex:1189574] 
[codex:1189574] # print stack end
[codex:1189574] print('stack end',stack)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 20ms:
[codex:1189574] stack end ['RET', 'AMOUNT', '(MLOAD[0x40] + 0x44)', 'SLOAD[0x2]', '(0x100 / 0x0)', '(0x1 & (0x1 << 0xa0))', '(0x1 & (0x1 << 0xa0))', '0xd0e30db0', '(0x1 & (0x1 << 0xa0))', '(MLOAD[0x40] + 0x4)', '0x0', 'MLOAD[0x40]', 'MLOAD[0x40]', '(MLOAD[0x40] + 0x4)', 'MLOAD[0x40]', '(MLOAD[0x40] + 0x4)', '0xd0e30db0', 'ISZERO(0xd0e30db0)', '0x0', '0x0']
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Analyzing missing CALL in simulation**
[codex:1189574] 
[codex:1189574] I'm seeing that the symbolic simulation missed the CALL opcode at 0x11ca due to incomplete stack modeling and skipped opcodes like EXTCODESIZE that cause misalignment. Since we don't branch on conditions but just pop stack inputs, the simulation flows sequentially but misses important control flow. To fix this, I'll try a simpler approach by manually inspecting disassembly near CALL instructions, focusing especially on whether ETH value is transferred and if calls are restricted, starting around 0xa60-0xb40.
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574]     if line.startswith('0x'):
[codex:1189574]         hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0xa50-0xb40
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80): names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90): names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0): names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5): names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100): names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574] 
[codex:1189574] def disasm(start,end):
[codex:1189574]     i=start
[codex:1189574]     while i<end:
[codex:1189574]         op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574]         if 0x60<=op<=0x7f:
[codex:1189574]             n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574]             i+=1+n
[codex:1189574]         else:
[codex:1189574]             print(f'{i:04x}: {name}')
[codex:1189574]             i+=1
[codex:1189574] 
[codex:1189574] start=0xa40; end=0xb60
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 20ms:
[codex:1189574] disasm 0xa40 0xb60
[codex:1189574] 0a40: SELFBALANCE
[codex:1189574] 0a41: SELFBALANCE
[codex:1189574] 0a42: DUP5
[codex:1189574] 0a43: PUSH2 0x2739
[codex:1189574] 0a46: JUMP
[codex:1189574] 0a47: JUMPDEST
[codex:1189574] 0a48: SWAP3
[codex:1189574] 0a49: POP
[codex:1189574] 0a4a: JUMPDEST
[codex:1189574] 0a4b: DUP6
[codex:1189574] 0a4c: DUP4
[codex:1189574] 0a4d: LT
[codex:1189574] 0a4e: ISZERO
[codex:1189574] 0a4f: PUSH2 0x0a75
[codex:1189574] 0a52: JUMPI
[codex:1189574] 0a53: PUSH1 0x40
[codex:1189574] 0a55: MLOAD
[codex:1189574] 0a56: PUSH4 0x4787a103
[codex:1189574] 0a5b: PUSH1 0xe1
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Analyzing WETH withdrawal logic**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574]     if line.startswith('0x'):
[codex:1189574]         hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0x08e2
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80): names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90): names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0): names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5): names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100): names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574] 
[codex:1189574] def disasm(start,end):
[codex:1189574]     i=start
[codex:1189574]     while i<end:
[codex:1189574]         op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574]         if 0x60<=op<=0x7f:
[codex:1189574]             n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574]             i+=1+n
[codex:1189574]         else:
[codex:1189574]             print(f'{i:04x}: {name}')
[codex:1189574]             i+=1
[codex:1189574] 
[codex:1189574] start=0x08c0; end=0x0905
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 17ms:
[codex:1189574] disasm 0x8c0 0x905
[codex:1189574] 08c0: ADDMOD
[codex:1189574] 08c1: 0xc6
[codex:1189574] 08c2: PUSH2 0x26c5
[codex:1189574] 08c5: JUMP
[codex:1189574] 08c6: JUMPDEST
[codex:1189574] 08c7: PUSH1 0x20
[codex:1189574] 08c9: SWAP1
[codex:1189574] 08ca: DUP2
[codex:1189574] 08cb: MUL
[codex:1189574] 08cc: SWAP2
[codex:1189574] 08cd: SWAP1
[codex:1189574] 08ce: SWAP2
[codex:1189574] 08cf: ADD
[codex:1189574] 08d0: ADD
[codex:1189574] 08d1: MSTORE
[codex:1189574] 08d2: POP
[codex:1189574] 08d3: POP
[codex:1189574] 08d4: PUSH1 0x01
[codex:1189574] 08d6: ADD
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Analyzing role-restricted and delegatecall functions**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574]     if line.startswith('0x'):
[codex:1189574]         hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0x1ff0-0x2110 and 0x2210-0x2290
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80): names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90): names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0): names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5): names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100): names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574] 
[codex:1189574] def disasm(start,end):
[codex:1189574]     i=start
[codex:1189574]     while i<end:
[codex:1189574]         op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574]         if 0x60<=op<=0x7f:
[codex:1189574]             n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574]             i+=1+n
[codex:1189574]         else:
[codex:1189574]             print(f'{i:04x}: {name}')
[codex:1189574]             i+=1
[codex:1189574] 
[codex:1189574] print('--- around 0x1ff0')
[codex:1189574] disasm(0x1ff0,0x2120)
[codex:1189574] print('\\n--- around 0x2210')
[codex:1189574] disasm(0x2210,0x2290)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 20ms:
[codex:1189574] --- around 0x1ff0
[codex:1189574] 1ff0: BLOCKHASH
[codex:1189574] 1ff1: MSTORE
[codex:1189574] 1ff2: DUP1
[codex:1189574] 1ff3: SWAP3
[codex:1189574] 1ff4: SWAP2
[codex:1189574] 1ff5: SWAP1
[codex:1189574] 1ff6: DUP2
[codex:1189574] 1ff7: DUP2
[codex:1189574] 1ff8: MSTORE
[codex:1189574] 1ff9: PUSH1 0x20
[codex:1189574] 1ffb: ADD
[codex:1189574] 1ffc: DUP3
[codex:1189574] 1ffd: DUP1
[codex:1189574] 1ffe: SLOAD
[codex:1189574] 1fff: DUP1
[codex:1189574] 2000: ISZERO
[codex:1189574] 2001: PUSH2 0x2029
[codex:1189574] 2004: JUMPI
[codex:1189574] 2005: PUSH1 0x20
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Analyzing internal calls and access control**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read()
[codex:1189574] if '360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc' in text:
[codex:1189574]     print('found EIP1967')
[codex:1189574] else:
[codex:1189574]     print('no EIP1967')
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 17ms:
[codex:1189574] no EIP1967
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Analyzing potential unprotected withdrawals**
[codex:1189574] 
[codex:1189574] I'm examining the contract’s bytecode to find any functions that might allow unprotected ETH or token withdrawals, focusing on role checks near CALL instructions and trying to map calls to their corresponding function entries. I’m considering symbolic stack analysis to confirm if any CALL transfers value without permission, aiming to ensure there is no clear exploit path before concluding no findings.
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574]     if line.startswith('0x'):
[codex:1189574]         hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0x14c0-0x1760 (to include calls at 0x16cc and 0x1701)
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80): names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90): names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0): names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5): names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100): names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574] 
[codex:1189574] def disasm(start,end):
[codex:1189574]     i=start
[codex:1189574]     while i<end:
[codex:1189574]         op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574]         if 0x60<=op<=0x7f:
[codex:1189574]             n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574]             i+=1+n
[codex:1189574]         else:
[codex:1189574]             print(f'{i:04x}: {name}')
[codex:1189574]             i+=1
[codex:1189574] 
[codex:1189574] start=0x14b0; end=0x1740
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 19ms:
[codex:1189574] disasm 0x14b0 0x1740
[codex:1189574] 14b0: PC
[codex:1189574] 14b1: JUMP
[codex:1189574] 14b2: JUMPDEST
[codex:1189574] 14b3: PUSH2 0x14bc
[codex:1189574] 14b6: DUP4
[codex:1189574] 14b7: DUP4
[codex:1189574] 14b8: PUSH2 0x1c00
[codex:1189574] 14bb: JUMP
[codex:1189574] 14bc: JUMPDEST
[codex:1189574] 14bd: POP
[codex:1189574] 14be: POP
[codex:1189574] 14bf: POP
[codex:1189574] 14c0: POP
[codex:1189574] 14c1: JUMP
[codex:1189574] 14c2: JUMPDEST
[codex:1189574] 14c3: PUSH2 0x14da
[codex:1189574] 14c6: PUSH1 0x00
[codex:1189574] 14c8: DUP1
[codex:1189574] 14c9: MLOAD
[codex:1189574] 
[codex:1189574] thinking
[codex:1189574] **Concluding no exploitable findings**
[codex:1189574] 
[codex:1189574] I’m finalizing a JSON response stating no concrete exploit paths are found since all ETH transfers and delegatecalls are protected by role checks; I’m summarizing that the bytecode review shows no unguarded profit extraction possibilities.
[codex:1189574] codex
[codex:1189574] {"no_findings":true,"summary":"Reviewed runtime bytecode; external call and delegatecall sites appear gated by role checks and I cannot derive a concrete, unprotected profit extraction path from bytecode alone.","findings":[]}
[codex:1189574] tokens used
[codex:1189574] 114,836
[codex:1189574] {"no_findings":true,"summary":"Reviewed runtime bytecode; external call and delegatecall sites appear gated by role checks and I cannot derive a concrete, unprotected profit extraction path from bytecode alone.","findings":[]}
Metadata
{
    "codex": {
        "ran_at": "2026-01-04T00:24:12.809582+00:00",
        "returncode": 0
    },
    "summary": "Reviewed runtime bytecode; external call and delegatecall sites appear gated by role checks and I cannot derive a concrete, unprotected profit extraction path from bytecode alone.",
    "raw_final": {
        "summary": "Reviewed runtime bytecode; external call and delegatecall sites appear gated by role checks and I cannot derive a concrete, unprotected profit extraction path from bytecode alone.",
        "findings": [],
        "no_findings": true
    },
    "no_findings": true,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
1
Selfdestruct
2
CREATE2
2
CALL-family (heavy)
11
EXT*/BALANCE
5
Total opcodes
6703
Flags
delegatecall_present selfdestruct_present create_opcodes_present heavy_ext_balance_usage
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: PUSH1 0x04
00000007: CALLDATASIZE
00000008: LT
00000009: PUSH2 0x0260
0000000c: JUMPI
0000000d: PUSH1 0x00
0000000f: CALLDATALOAD
00000010: PUSH1 0xe0
00000012: SHR
00000013: DUP1
00000014: PUSH4 0x76420e1d
00000019: GT
0000001a: PUSH2 0x0144
0000001d: JUMPI
0000001e: DUP1
0000001f: PUSH4 0xcc855ccc
00000024: GT
00000025: PUSH2 0x00b6
00000028: JUMPI
00000029: DUP1
0000002a: PUSH4 0xe1f21c67
0000002f: GT
00000030: PUSH2 0x007a
00000033: JUMPI
00000034: DUP1
00000035: PUSH4 0xe1f21c67
0000003a: EQ
0000003b: PUSH2 0x071b
0000003e: JUMPI
0000003f: DUP1
00000040: PUSH4 0xe4860339
00000045: EQ
00000046: PUSH2 0x073b
00000049: JUMPI
0000004a: DUP1
0000004b: PUSH4 0xe7e31e7a
00000050: EQ
00000051: PUSH2 0x075b
00000054: JUMPI
00000055: DUP1
00000056: PUSH4 0xf0225a3c
0000005b: EQ
0000005c: PUSH2 0x077b
0000005f: JUMPI
00000060: DUP1
00000061: PUSH4 0xf1880b24
00000066: EQ
00000067: PUSH2 0x079b
0000006a: JUMPI
0000006b: DUP1
0000006c: PUSH4 0xf60d7e9c
00000071: EQ
00000072: PUSH2 0x07bb
00000075: JUMPI
00000076: PUSH1 0x00
00000078: DUP1
00000079: REVERT
0000007a: JUMPDEST
0000007b: DUP1
0000007c: PUSH4 0xcc855ccc
00000081: EQ
00000082: PUSH2 0x067b
00000085: JUMPI
00000086: DUP1
00000087: PUSH4 0xd48bfca7
0000008c: EQ
0000008d: PUSH2 0x069b
00000090: JUMPI
00000091: DUP1
00000092: PUSH4 0xd547741f
00000097: EQ
00000098: PUSH2 0x06bb
0000009b: JUMPI
0000009c: DUP1
0000009d: PUSH4 0xde590125
000000a2: EQ
000000a3: PUSH2 0x06db
000000a6: JUMPI
000000a7: DUP1
000000a8: PUSH4 0xdeb9a3a2
000000ad: EQ
000000ae: PUSH2 0x06fb
000000b1: JUMPI
000000b2: PUSH1 0x00
000000b4: DUP1
000000b5: REVERT
000000b6: JUMPDEST
000000b7: DUP1
000000b8: PUSH4 0x9169d833
000000bd: GT
000000be: PUSH2 0x0108
000000c1: JUMPI
000000c2: DUP1
000000c3: PUSH4 0x9169d833
000000c8: EQ
000000c9: PUSH2 0x05e4
000000cc: JUMPI
000000cd: DUP1
000000ce: PUSH4 0x91d14854
000000d3: EQ
000000d4: PUSH2 0x0604
000000d7: JUMPI
000000d8: DUP1
000000d9: PUSH4 0x96a59af4
000000de: EQ
000000df: PUSH2 0x0624
000000e2: JUMPI
000000e3: DUP1
000000e4: PUSH4 0xa217fddf
000000e9: EQ
000000ea: PUSH2 0x0429
000000ed: JUMPI
000000ee: DUP1
000000ef: PUSH4 0xc41d5a06
000000f4: EQ
000000f5: PUSH2 0x0646
000000f8: JUMPI
000000f9: DUP1
000000fa: PUSH4 0xca15c873
000000ff: EQ
00000100: PUSH2 0x065b
00000103: JUMPI
00000104: PUSH1 0x00
00000106: DUP1
00000107: REVERT
00000108: JUMPDEST
00000109: DUP1
0000010a: PUSH4 0x76420e1d
0000010f: EQ
00000110: PUSH2 0x0535
00000113: JUMPI
00000114: DUP1
00000115: PUSH4 0x7ffbe241
0000011a: EQ
0000011b: PUSH2 0x0557
0000011e: JUMPI
0000011f: DUP1
00000120: PUSH4 0x884fedba
00000125: EQ
00000126: PUSH2 0x0577
00000129: JUMPI
0000012a: DUP1
0000012b: PUSH4 0x8ce5877c
00000130: EQ
00000131: PUSH2 0x058c
00000134: JUMPI
00000135: DUP1
00000136: PUSH4 0x9010d07c
0000013b: EQ
0000013c: PUSH2 0x05ac
0000013f: JUMPI
00000140: PUSH1 0x00
00000142: DUP1
00000143: REVERT
00000144: JUMPDEST
00000145: DUP1
00000146: PUSH4 0x223e5479
0000014b: GT
0000014c: PUSH2 0x01dd
0000014f: JUMPI
00000150: DUP1
00000151: PUSH4 0x39ebf823
00000156: GT
00000157: PUSH2 0x01a1
0000015a: JUMPI
0000015b: DUP1
0000015c: PUSH4 0x39ebf823
00000161: EQ
00000162: PUSH2 0x047e
00000165: JUMPI
00000166: DUP1
00000167: PUSH4 0x5d7e641e
0000016c: EQ
0000016d: PUSH2 0x049e
00000170: JUMPI
00000171: DUP1
00000172: PUSH4 0x5fa7b584
00000177: EQ
00000178: PUSH2 0x04c0
0000017b: JUMPI
0000017c: DUP1
0000017d: PUSH4 0x63a31bd4
00000182: EQ
00000183: PUSH2 0x04e0
00000186: JUMPI
00000187: DUP1
00000188: PUSH4 0x69efe471
0000018d: EQ
0000018e: PUSH2 0x0500
00000191: JUMPI
00000192: DUP1
00000193: PUSH4 0x6ff97f1d
00000198: EQ
00000199: PUSH2 0x0520
0000019c: JUMPI
0000019d: PUSH1 0x00
0000019f: DUP1
000001a0: REVERT
000001a1: JUMPDEST
000001a2: DUP1
000001a3: PUSH4 0x223e5479
000001a8: EQ
000001a9: PUSH2 0x03d9
000001ac: JUMPI
000001ad: DUP1
000001ae: PUSH4 0x248a9ca3
000001b3: EQ
000001b4: PUSH2 0x03f9
000001b7: JUMPI
000001b8: DUP1
000001b9: PUSH4 0x2a0acc6a
000001be: EQ
000001bf: PUSH2 0x0429
000001c2: JUMPI
000001c3: DUP1
000001c4: PUSH4 0x2f2ff15d
000001c9: EQ
000001ca: PUSH2 0x043e
000001cd: JUMPI
000001ce: DUP1
000001cf: PUSH4 0x36568abe
000001d4: EQ
000001d5: PUSH2 0x045e
000001d8: JUMPI
000001d9: PUSH1 0x00
000001db: DUP1
000001dc: REVERT
000001dd: JUMPDEST
000001de: DUP1
000001df: PUSH4 0x175c4ef8
000001e4: GT
000001e5: PUSH2 0x0224
000001e8: JUMPI
000001e9: DUP1
000001ea: PUSH4 0x175c4ef8
000001ef: EQ
000001f0: PUSH2 0x0335
000001f3: JUMPI
000001f4: DUP1
000001f5: PUSH4 0x193458ce
000001fa: EQ
000001fb: PUSH2 0x0357
000001fe: JUMPI
000001ff: DUP1
00000200: PUSH4 0x1af1e2fb
00000205: EQ
00000206: PUSH2 0x0377
00000209: JUMPI
0000020a: DUP1
0000020b: PUSH4 0x1b2df850
00000210: EQ
00000211: PUSH2 0x0397
00000214: JUMPI
00000215: DUP1
00000216: PUSH4 0x1cff79cd
0000021b: EQ
0000021c: PUSH2 0x03b9
0000021f: JUMPI
00000220: PUSH1 0x00
00000222: DUP1
00000223: REVERT
00000224: JUMPDEST
00000225: DUP1
00000226: PUSH4 0x018fbe57
0000022b: EQ
0000022c: PUSH2 0x026c
0000022f: JUMPI
00000230: DUP1
00000231: PUSH4 0x01ffc9a7
00000236: EQ
00000237: PUSH2 0x02a1
0000023a: JUMPI
0000023b: DUP1
0000023c: PUSH4 0x0c2997ca
00000241: EQ
00000242: PUSH2 0x02d1
00000245: JUMPI
00000246: DUP1
00000247: PUSH4 0x12eeff7e
0000024c: EQ
0000024d: PUSH2 0x02f3
00000250: JUMPI
00000251: DUP1
00000252: PUSH4 0x175188e8
00000257: EQ
00000258: PUSH2 0x0315
0000025b: JUMPI
0000025c: PUSH1 0x00
0000025e: DUP1
0000025f: REVERT
00000260: JUMPDEST
00000261: CALLDATASIZE
00000262: PUSH2 0x0267
00000265: JUMPI
00000266: STOP
00000267: JUMPDEST
00000268: PUSH1 0x00
0000026a: DUP1
0000026b: REVERT
0000026c: JUMPDEST
0000026d: CALLVALUE
0000026e: DUP1
0000026f: ISZERO
00000270: PUSH2 0x0278
00000273: JUMPI
00000274: PUSH1 0x00
00000276: DUP1
00000277: REVERT
00000278: JUMPDEST
00000279: POP
0000027a: PUSH2 0x028e
0000027d: PUSH1 0x00
0000027f: DUP1
00000280: MLOAD
00000281: PUSH1 0x20
00000283: PUSH2 0x27d3
00000286: DUP4
00000287: CODECOPY
00000288: DUP2
00000289: MLOAD
0000028a: SWAP2
0000028b: MSTORE
0000028c: DUP2
0000028d: JUMP
0000028e: JUMPDEST
0000028f: PUSH1 0x40
00000291: MLOAD
00000292: SWAP1
00000293: DUP2
00000294: MSTORE
00000295: PUSH1 0x20
00000297: ADD
00000298: JUMPDEST
00000299: PUSH1 0x40
0000029b: MLOAD
0000029c: DUP1
0000029d: SWAP2
0000029e: SUB
0000029f: SWAP1
000002a0: RETURN
000002a1: JUMPDEST
000002a2: CALLVALUE
000002a3: DUP1
000002a4: ISZERO
000002a5: PUSH2 0x02ad
000002a8: JUMPI
000002a9: PUSH1 0x00
000002ab: DUP1
000002ac: REVERT
000002ad: JUMPDEST
000002ae: POP
000002af: PUSH2 0x02c1
000002b2: PUSH2 0x02bc
000002b5: CALLDATASIZE
000002b6: PUSH1 0x04
000002b8: PUSH2 0x2336
000002bb: JUMP
000002bc: JUMPDEST
000002bd: PUSH2 0x07db
000002c0: JUMP
000002c1: JUMPDEST
000002c2: PUSH1 0x40
000002c4: MLOAD
000002c5: SWAP1
000002c6: ISZERO
000002c7: ISZERO
000002c8: DUP2
000002c9: MSTORE
000002ca: PUSH1 0x20
000002cc: ADD
000002cd: PUSH2 0x0298
000002d0: JUMP
000002d1: JUMPDEST
000002d2: CALLVALUE
000002d3: DUP1
000002d4: ISZERO
000002d5: PUSH2 0x02dd
000002d8: JUMPI
000002d9: PUSH1 0x00
000002db: DUP1
000002dc: REVERT
000002dd: JUMPDEST
000002de: POP
000002df: PUSH2 0x02e6
000002e2: PUSH2 0x0806
000002e5: JUMP
000002e6: JUMPDEST
000002e7: PUSH1 0x40
000002e9: MLOAD
000002ea: PUSH2 0x0298
000002ed: SWAP2
000002ee: SWAP1
000002ef: PUSH2 0x2360
000002f2: JUMP
000002f3: JUMPDEST
000002f4: CALLVALUE
000002f5: DUP1
000002f6: ISZERO
000002f7: PUSH2 0x02ff
000002fa: JUMPI
000002fb: PUSH1 0x00
000002fd: DUP1
000002fe: REVERT
000002ff: JUMPDEST
00000300: POP
00000301: PUSH2 0x0313
00000304: PUSH2 0x030e
00000307: CALLDATASIZE
00000308: PUSH1 0x04
0000030a: PUSH2 0x23eb
0000030d: JUMP
0000030e: JUMPDEST
0000030f: PUSH2 0x08e2
00000312: JUMP
00000313: JUMPDEST
00000314: STOP
00000315: JUMPDEST
00000316: CALLVALUE
00000317: DUP1
00000318: ISZERO
00000319: PUSH2 0x0321
0000031c: JUMPI
0000031d: PUSH1 0x00
0000031f: DUP1
00000320: REVERT
00000321: JUMPDEST
00000322: POP
00000323: PUSH2 0x0313
00000326: PUSH2 0x0330
00000329: CALLDATASIZE
0000032a: PUSH1 0x04
0000032c: PUSH2 0x243a
0000032f: JUMP
00000330: JUMPDEST
00000331: PUSH2 0x0bb1
00000334: JUMP
00000335: JUMPDEST
00000336: CALLVALUE
00000337: DUP1
00000338: ISZERO
00000339: PUSH2 0x0341
0000033c: JUMPI
0000033d: PUSH1 0x00
0000033f: DUP1
00000340: REVERT
00000341: JUMPDEST
00000342: POP
00000343: PUSH2 0x028e
00000346: PUSH1 0x00
00000348: DUP1
00000349: MLOAD
0000034a: PUSH1 0x20
0000034c: PUSH2 0x27b3
0000034f: DUP4
00000350: CODECOPY
00000351: DUP2
00000352: MLOAD
00000353: SWAP2
00000354: MSTORE
00000355: DUP2
00000356: JUMP
00000357: JUMPDEST
00000358: CALLVALUE
00000359: DUP1
0000035a: ISZERO
0000035b: PUSH2 0x0363
0000035e: JUMPI
0000035f: PUSH1 0x00
00000361: DUP1
00000362: REVERT
00000363: JUMPDEST
00000364: POP
00000365: PUSH2 0x0313
00000368: PUSH2 0x0372
0000036b: CALLDATASIZE
0000036c: PUSH1 0x04
0000036e: PUSH2 0x2455
00000371: JUMP
00000372: JUMPDEST
00000373: PUSH2 0x0c43
00000376: JUMP
00000377: JUMPDEST
00000378: CALLVALUE
00000379: DUP1
0000037a: ISZERO
0000037b: PUSH2 0x0383
0000037e: JUMPI
0000037f: PUSH1 0x00
00000381: DUP1
00000382: REVERT
00000383: JUMPDEST
00000384: POP
00000385: PUSH2 0x0313
00000388: PUSH2 0x0392
0000038b: CALLDATASIZE
0000038c: PUSH1 0x04
0000038e: PUSH2 0x243a
00000391: JUMP
00000392: JUMPDEST
00000393: PUSH2 0x0cfe
00000396: JUMP
00000397: JUMPDEST
00000398: CALLVALUE
00000399: DUP1
0000039a: ISZERO
0000039b: PUSH2 0x03a3
0000039e: JUMPI
0000039f: PUSH1 0x00
000003a1: DUP1
000003a2: REVERT
000003a3: JUMPDEST
000003a4: POP
000003a5: PUSH2 0x028e
000003a8: PUSH1 0x00
000003aa: DUP1
000003ab: MLOAD
000003ac: PUSH1 0x20
000003ae: PUSH2 0x2793
000003b1: DUP4
000003b2: CODECOPY
000003b3: DUP2
000003b4: MLOAD
000003b5: SWAP2
000003b6: MSTORE
000003b7: DUP2
000003b8: JUMP
000003b9: JUMPDEST
000003ba: CALLVALUE
000003bb: DUP1
000003bc: ISZERO
000003bd: PUSH2 0x03c5
000003c0: JUMPI
000003c1: PUSH1 0x00
000003c3: DUP1
000003c4: REVERT
000003c5: JUMPDEST
000003c6: POP
000003c7: PUSH2 0x0313
000003ca: PUSH2 0x03d4
000003cd: CALLDATASIZE
000003ce: PUSH1 0x04
000003d0: PUSH2 0x247f
000003d3: JUMP
000003d4: JUMPDEST
000003d5: PUSH2 0x0d88
000003d8: JUMP
000003d9: JUMPDEST
000003da: CALLVALUE
000003db: DUP1
000003dc: ISZERO
000003dd: PUSH2 0x03e5
000003e0: JUMPI
000003e1: PUSH1 0x00
000003e3: DUP1
000003e4: REVERT
000003e5: JUMPDEST
000003e6: POP
000003e7: PUSH2 0x0313
000003ea: PUSH2 0x03f4
000003ed: CALLDATASIZE
000003ee: PUSH1 0x04
000003f0: PUSH2 0x243a
000003f3: JUMP
000003f4: JUMPDEST
000003f5: PUSH2 0x0e35
000003f8: JUMP
000003f9: JUMPDEST
000003fa: CALLVALUE
000003fb: DUP1
000003fc: ISZERO
000003fd: PUSH2 0x0405
00000400: JUMPI
00000401: PUSH1 0x00
00000403: DUP1
00000404: REVERT
00000405: JUMPDEST
00000406: POP
00000407: PUSH2 0x028e
0000040a: PUSH2 0x0414
0000040d: CALLDATASIZE
0000040e: PUSH1 0x04
00000410: PUSH2 0x2504
00000413: JUMP
00000414: JUMPDEST
00000415: PUSH1 0x00
00000417: SWAP1
00000418: DUP2
00000419: MSTORE
0000041a: PUSH1 0x20
0000041c: DUP2
0000041d: SWAP1
0000041e: MSTORE
0000041f: PUSH1 0x40
00000421: SWAP1
00000422: KECCAK256
00000423: PUSH1 0x01
00000425: ADD
00000426: SLOAD
00000427: SWAP1
00000428: JUMP
00000429: JUMPDEST
0000042a: CALLVALUE
0000042b: DUP1
0000042c: ISZERO
0000042d: PUSH2 0x0435
00000430: JUMPI
00000431: PUSH1 0x00
00000433: DUP1
00000434: REVERT
00000435: JUMPDEST
00000436: POP
00000437: PUSH2 0x028e
0000043a: PUSH1 0x00
0000043c: DUP2
0000043d: JUMP
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 0x0313
0000044f: PUSH2 0x0459
00000452: CALLDATASIZE
00000453: PUSH1 0x04
00000455: PUSH2 0x251d
00000458: JUMP
00000459: JUMPDEST
0000045a: PUSH2 0x0ebe
0000045d: JUMP
0000045e: JUMPDEST
0000045f: CALLVALUE
00000460: DUP1
00000461: ISZERO
00000462: PUSH2 0x046a
00000465: JUMPI
00000466: PUSH1 0x00
00000468: DUP1
00000469: REVERT
0000046a: JUMPDEST
0000046b: POP
0000046c: PUSH2 0x0313
0000046f: PUSH2 0x0479
00000472: CALLDATASIZE
00000473: PUSH1 0x04
00000475: PUSH2 0x251d
00000478: JUMP
00000479: JUMPDEST
0000047a: PUSH2 0x0f55
0000047d: JUMP
0000047e: JUMPDEST
0000047f: CALLVALUE
00000480: DUP1
00000481: ISZERO
00000482: PUSH2 0x048a
00000485: JUMPI
00000486: PUSH1 0x00
00000488: DUP1
00000489: REVERT
0000048a: JUMPDEST
0000048b: POP
0000048c: PUSH2 0x02c1
0000048f: PUSH2 0x0499
00000492: CALLDATASIZE
00000493: PUSH1 0x04
00000495: PUSH2 0x243a
00000498: JUMP
00000499: JUMPDEST
0000049a: PUSH2 0x0f88
0000049d: JUMP
0000049e: JUMPDEST
0000049f: CALLVALUE
000004a0: DUP1
000004a1: ISZERO
000004a2: PUSH2 0x04aa
000004a5: JUMPI
000004a6: PUSH1 0x00
000004a8: DUP1
000004a9: REVERT
000004aa: JUMPDEST
000004ab: POP
000004ac: PUSH2 0x04b3
000004af: PUSH2 0x0f95
000004b2: JUMP
000004b3: JUMPDEST
000004b4: PUSH1 0x40
000004b6: MLOAD
000004b7: PUSH2 0x0298
000004ba: SWAP2
000004bb: SWAP1
000004bc: PUSH2 0x2549
000004bf: JUMP
000004c0: JUMPDEST
000004c1: CALLVALUE
000004c2: DUP1
000004c3: ISZERO
000004c4: PUSH2 0x04cc
000004c7: JUMPI
000004c8: PUSH1 0x00
000004ca: DUP1
000004cb: REVERT
000004cc: JUMPDEST
000004cd: POP
000004ce: PUSH2 0x0313
000004d1: PUSH2 0x04db
000004d4: CALLDATASIZE
000004d5: PUSH1 0x04
000004d7: PUSH2 0x243a
000004da: JUMP
000004db: JUMPDEST
000004dc: PUSH2 0x0fa6
000004df: JUMP
000004e0: JUMPDEST
000004e1: CALLVALUE
000004e2: DUP1
000004e3: ISZERO
000004e4: PUSH2 0x04ec
000004e7: JUMPI
000004e8: PUSH1 0x00
000004ea: DUP1
000004eb: REVERT
000004ec: JUMPDEST
000004ed: POP
000004ee: PUSH2 0x02c1
000004f1: PUSH2 0x04fb
000004f4: CALLDATASIZE
000004f5: PUSH1 0x04
000004f7: PUSH2 0x243a
000004fa: JUMP
000004fb: JUMPDEST
000004fc: PUSH2 0x1030
000004ff: JUMP
00000500: JUMPDEST
00000501: CALLVALUE
00000502: DUP1
00000503: ISZERO
00000504: PUSH2 0x050c
00000507: JUMPI
00000508: PUSH1 0x00
0000050a: DUP1
0000050b: REVERT
0000050c: JUMPDEST
0000050d: POP
0000050e: PUSH2 0x028e
00000511: PUSH2 0x051b
00000514: CALLDATASIZE
00000515: PUSH1 0x04
00000517: PUSH2 0x243a
0000051a: JUMP
0000051b: JUMPDEST
0000051c: PUSH2 0x103d
0000051f: JUMP
00000520: JUMPDEST
00000521: CALLVALUE
00000522: DUP1
00000523: ISZERO
00000524: PUSH2 0x052c
00000527: JUMPI
00000528: PUSH1 0x00
0000052a: DUP1
0000052b: REVERT
0000052c: JUMPDEST
0000052d: POP
0000052e: PUSH2 0x04b3
00000531: PUSH2 0x1051
00000534: JUMP
00000535: JUMPDEST
00000536: CALLVALUE
00000537: DUP1
00000538: ISZERO
00000539: PUSH2 0x0541
0000053c: JUMPI
0000053d: PUSH1 0x00
0000053f: DUP1
00000540: REVERT
00000541: JUMPDEST
00000542: POP
00000543: PUSH2 0x028e
00000546: PUSH1 0x00
00000548: DUP1
00000549: MLOAD
0000054a: PUSH1 0x20
0000054c: PUSH2 0x27f3
0000054f: DUP4
00000550: CODECOPY
00000551: DUP2
00000552: MLOAD
00000553: SWAP2
00000554: MSTORE
00000555: DUP2
00000556: JUMP
00000557: JUMPDEST
00000558: CALLVALUE
00000559: DUP1
0000055a: ISZERO
0000055b: PUSH2 0x0563
0000055e: JUMPI
0000055f: PUSH1 0x00
00000561: DUP1
00000562: REVERT
00000563: JUMPDEST
00000564: POP
00000565: PUSH2 0x02c1
00000568: PUSH2 0x0572
0000056b: CALLDATASIZE
0000056c: PUSH1 0x04
0000056e: PUSH2 0x243a
00000571: JUMP
00000572: JUMPDEST
00000573: PUSH2 0x105d
00000576: JUMP
00000577: JUMPDEST
00000578: CALLVALUE
00000579: DUP1
0000057a: ISZERO
0000057b: PUSH2 0x0583
0000057e: JUMPI
0000057f: PUSH1 0x00
00000581: DUP1
00000582: REVERT
00000583: JUMPDEST
00000584: POP
00000585: PUSH2 0x04b3
00000588: PUSH2 0x106a
0000058b: JUMP
0000058c: JUMPDEST
0000058d: CALLVALUE
0000058e: DUP1
0000058f: ISZERO
00000590: PUSH2 0x0598
00000593: JUMPI
00000594: PUSH1 0x00
00000596: DUP1
00000597: REVERT
00000598: JUMPDEST
00000599: POP
0000059a: PUSH2 0x0313
0000059d: PUSH2 0x05a7
000005a0: CALLDATASIZE
000005a1: PUSH1 0x04
000005a3: PUSH2 0x243a
000005a6: JUMP
000005a7: JUMPDEST
000005a8: PUSH2 0x1076
000005ab: JUMP
000005ac: JUMPDEST
000005ad: CALLVALUE
000005ae: DUP1
000005af: ISZERO
000005b0: PUSH2 0x05b8
000005b3: JUMPI
000005b4: PUSH1 0x00
000005b6: DUP1
000005b7: REVERT
000005b8: JUMPDEST
000005b9: POP
000005ba: PUSH2 0x05cc
000005bd: PUSH2 0x05c7
000005c0: CALLDATASIZE
000005c1: PUSH1 0x04
000005c3: PUSH2 0x258a
000005c6: JUMP
000005c7: JUMPDEST
000005c8: PUSH2 0x1100
000005cb: JUMP
000005cc: JUMPDEST
000005cd: PUSH1 0x40
000005cf: MLOAD
000005d0: PUSH1 0x01
000005d2: PUSH1 0x01
000005d4: PUSH1 0xa0
000005d6: SHL
000005d7: SUB
000005d8: SWAP1
000005d9: SWAP2
000005da: AND
000005db: DUP2
000005dc: MSTORE
000005dd: PUSH1 0x20
000005df: ADD
000005e0: PUSH2 0x0298
000005e3: JUMP
000005e4: JUMPDEST
000005e5: CALLVALUE
000005e6: DUP1
000005e7: ISZERO
000005e8: PUSH2 0x05f0
000005eb: JUMPI
000005ec: PUSH1 0x00
000005ee: DUP1
000005ef: REVERT
000005f0: JUMPDEST
000005f1: POP
000005f2: PUSH2 0x0313
000005f5: PUSH2 0x05ff
000005f8: CALLDATASIZE
000005f9: PUSH1 0x04
000005fb: PUSH2 0x2504
000005fe: JUMP
000005ff: JUMPDEST
00000600: PUSH2 0x1118
00000603: JUMP
00000604: JUMPDEST
00000605: CALLVALUE
00000606: DUP1
00000607: ISZERO
00000608: PUSH2 0x0610
0000060b: JUMPI
0000060c: PUSH1 0x00
0000060e: DUP1
0000060f: REVERT
00000610: JUMPDEST
00000611: POP
00000612: PUSH2 0x02c1
00000615: PUSH2 0x061f
00000618: CALLDATASIZE
00000619: PUSH1 0x04
0000061b: PUSH2 0x251d
0000061e: JUMP
0000061f: JUMPDEST
00000620: PUSH2 0x1225
00000623: JUMP
00000624: JUMPDEST
00000625: CALLVALUE
00000626: DUP1
00000627: ISZERO
00000628: PUSH2 0x0630
0000062b: JUMPI
0000062c: PUSH1 0x00
0000062e: DUP1
0000062f: REVERT
00000630: JUMPDEST
00000631: POP
00000632: PUSH2 0x0639
00000635: PUSH2 0x124e
00000638: JUMP
00000639: JUMPDEST
0000063a: PUSH1 0x40
0000063c: MLOAD
0000063d: PUSH2 0x0298
00000640: SWAP2
00000641: SWAP1
00000642: PUSH2 0x25ac
00000645: JUMP
00000646: JUMPDEST
00000647: CALLVALUE
00000648: DUP1
00000649: ISZERO
0000064a: PUSH2 0x0652
0000064d: JUMPI
0000064e: PUSH1 0x00
00000650: DUP1
00000651: REVERT
00000652: JUMPDEST
00000653: POP
00000654: PUSH2 0x04b3
00000657: PUSH2 0x1323
0000065a: JUMP
0000065b: JUMPDEST
0000065c: CALLVALUE
0000065d: DUP1
0000065e: ISZERO
0000065f: PUSH2 0x0667
00000662: JUMPI
00000663: PUSH1 0x00
00000665: DUP1
00000666: REVERT
00000667: JUMPDEST
00000668: POP
00000669: PUSH2 0x028e
0000066c: PUSH2 0x0676
0000066f: CALLDATASIZE
00000670: PUSH1 0x04
00000672: PUSH2 0x2504
00000675: JUMP
00000676: JUMPDEST
00000677: PUSH2 0x132f
0000067a: JUMP
0000067b: JUMPDEST
0000067c: CALLVALUE
0000067d: DUP1
0000067e: ISZERO
0000067f: PUSH2 0x0687
00000682: JUMPI
00000683: PUSH1 0x00
00000685: DUP1
00000686: REVERT
00000687: JUMPDEST
00000688: POP
00000689: PUSH2 0x0313
0000068c: PUSH2 0x0696
0000068f: CALLDATASIZE
00000690: PUSH1 0x04
00000692: PUSH2 0x2455
00000695: JUMP
00000696: JUMPDEST
00000697: PUSH2 0x1346
0000069a: JUMP
0000069b: JUMPDEST
0000069c: CALLVALUE
0000069d: DUP1
0000069e: ISZERO
0000069f: PUSH2 0x06a7
000006a2: JUMPI
000006a3: PUSH1 0x00
000006a5: DUP1
000006a6: REVERT
000006a7: JUMPDEST
000006a8: POP
000006a9: PUSH2 0x0313
000006ac: PUSH2 0x06b6
000006af: CALLDATASIZE
000006b0: PUSH1 0x04
000006b2: PUSH2 0x243a
000006b5: JUMP
000006b6: JUMPDEST
000006b7: PUSH2 0x140e
000006ba: JUMP
000006bb: JUMPDEST
000006bc: CALLVALUE
000006bd: DUP1
000006be: ISZERO
000006bf: PUSH2 0x06c7
000006c2: JUMPI
000006c3: PUSH1 0x00
000006c5: DUP1
000006c6: REVERT
000006c7: JUMPDEST
000006c8: POP
000006c9: PUSH2 0x0313
000006cc: PUSH2 0x06d6
000006cf: CALLDATASIZE
000006d0: PUSH1 0x04
000006d2: PUSH2 0x251d
000006d5: JUMP
000006d6: JUMPDEST
000006d7: PUSH2 0x1497
000006da: JUMP
000006db: JUMPDEST
000006dc: CALLVALUE
000006dd: DUP1
000006de: ISZERO
000006df: PUSH2 0x06e7
000006e2: JUMPI
000006e3: PUSH1 0x00
000006e5: DUP1
000006e6: REVERT
000006e7: JUMPDEST
000006e8: POP
000006e9: PUSH2 0x0313
000006ec: PUSH2 0x06f6
000006ef: CALLDATASIZE
000006f0: PUSH1 0x04
000006f2: PUSH2 0x23eb
000006f5: JUMP
000006f6: JUMPDEST
000006f7: PUSH2 0x14c2
000006fa: JUMP
000006fb: JUMPDEST
000006fc: CALLVALUE
000006fd: DUP1
000006fe: ISZERO
000006ff: PUSH2 0x0707
00000702: JUMPI
00000703: PUSH1 0x00
00000705: DUP1
00000706: REVERT
00000707: JUMPDEST
00000708: POP
00000709: PUSH2 0x0313
0000070c: PUSH2 0x0716
0000070f: CALLDATASIZE
00000710: PUSH1 0x04
00000712: PUSH2 0x2602
00000715: JUMP
00000716: JUMPDEST
00000717: PUSH2 0x179c
0000071a: JUMP
0000071b: JUMPDEST
0000071c: CALLVALUE
0000071d: DUP1
0000071e: ISZERO
0000071f: PUSH2 0x0727
00000722: JUMPI
00000723: PUSH1 0x00
00000725: DUP1
00000726: REVERT
00000727: JUMPDEST
00000728: POP
00000729: PUSH2 0x0313
0000072c: PUSH2 0x0736
0000072f: CALLDATASIZE
00000730: PUSH1 0x04
00000732: PUSH2 0x2672
00000735: JUMP
00000736: JUMPDEST
00000737: PUSH2 0x188a
0000073a: JUMP
0000073b: JUMPDEST
0000073c: CALLVALUE
0000073d: DUP1
0000073e: ISZERO
0000073f: PUSH2 0x0747
00000742: JUMPI
00000743: PUSH1 0x00
00000745: DUP1
00000746: REVERT
00000747: JUMPDEST
00000748: POP
00000749: PUSH2 0x02c1
0000074c: PUSH2 0x0756
0000074f: CALLDATASIZE
00000750: PUSH1 0x04
00000752: PUSH2 0x243a
00000755: JUMP
00000756: JUMPDEST
00000757: PUSH2 0x18fc
0000075a: JUMP
0000075b: JUMPDEST
0000075c: CALLVALUE
0000075d: DUP1
0000075e: ISZERO
0000075f: PUSH2 0x0767
00000762: JUMPI
00000763: PUSH1 0x00
00000765: DUP1
00000766: REVERT
00000767: JUMPDEST
00000768: POP
00000769: PUSH2 0x0313
0000076c: PUSH2 0x0776
0000076f: CALLDATASIZE
00000770: PUSH1 0x04
00000772: PUSH2 0x243a
00000775: JUMP
00000776: JUMPDEST
00000777: PUSH2 0x1909
0000077a: JUMP
0000077b: JUMPDEST
0000077c: CALLVALUE
0000077d: DUP1
0000077e: ISZERO
0000077f: PUSH2 0x0787
00000782: JUMPI
00000783: PUSH1 0x00
00000785: DUP1
00000786: REVERT
00000787: JUMPDEST
00000788: POP
00000789: PUSH2 0x028e
0000078c: PUSH2 0x0796
0000078f: CALLDATASIZE
00000790: PUSH1 0x04
00000792: PUSH2 0x243a
00000795: JUMP
00000796: JUMPDEST
00000797: PUSH2 0x1992
0000079a: JUMP
0000079b: JUMPDEST
0000079c: CALLVALUE
0000079d: DUP1
0000079e: ISZERO
0000079f: PUSH2 0x07a7
000007a2: JUMPI
000007a3: PUSH1 0x00
000007a5: DUP1
000007a6: REVERT
000007a7: JUMPDEST
000007a8: POP
000007a9: PUSH2 0x0313
000007ac: PUSH2 0x07b6
000007af: CALLDATASIZE
000007b0: PUSH1 0x04
000007b2: PUSH2 0x243a
000007b5: JUMP
000007b6: JUMPDEST
000007b7: PUSH2 0x199f
000007ba: JUMP
000007bb: JUMPDEST
000007bc: CALLVALUE
000007bd: DUP1
000007be: ISZERO
000007bf: PUSH2 0x07c7
000007c2: JUMPI
000007c3: PUSH1 0x00
000007c5: DUP1
000007c6: REVERT
000007c7: JUMPDEST
000007c8: POP
000007c9: PUSH2 0x0313
000007cc: PUSH2 0x07d6
000007cf: CALLDATASIZE
000007d0: PUSH1 0x04
000007d2: PUSH2 0x243a
000007d5: JUMP
000007d6: JUMPDEST
000007d7: PUSH2 0x19a8
000007da: JUMP
000007db: JUMPDEST
000007dc: PUSH1 0x00
000007de: PUSH1 0x01
000007e0: PUSH1 0x01
000007e2: PUSH1 0xe0
000007e4: SHL
000007e5: SUB
000007e6: NOT
000007e7: DUP3
000007e8: AND
000007e9: PUSH4 0x5a05180f
000007ee: PUSH1 0xe0
000007f0: SHL
000007f1: EQ
000007f2: DUP1
000007f3: PUSH2 0x0800
000007f6: JUMPI
000007f7: POP
000007f8: PUSH2 0x0800
000007fb: DUP3
000007fc: PUSH2 0x1a31
000007ff: JUMP
00000800: JUMPDEST
00000801: SWAP3
00000802: SWAP2
00000803: POP
00000804: POP
00000805: JUMP
00000806: JUMPDEST
00000807: PUSH1 0x60
00000809: PUSH1 0x00
0000080b: PUSH2 0x0814
0000080e: PUSH1 0x0e
00000810: PUSH2 0x1a66
00000813: JUMP
00000814: JUMPDEST
00000815: SWAP1
00000816: POP
00000817: PUSH1 0x00
00000819: DUP2
0000081a: PUSH8 0xffffffffffffffff
00000823: DUP2
00000824: GT
00000825: ISZERO
00000826: PUSH2 0x0831
00000829: JUMPI
0000082a: PUSH2 0x0831
0000082d: PUSH2 0x26af
00000830: JUMP
00000831: JUMPDEST
00000832: PUSH1 0x40
00000834: MLOAD
00000835: SWAP1
00000836: DUP1
00000837: DUP3
00000838: MSTORE
00000839: DUP1
0000083a: PUSH1 0x20
0000083c: MUL
0000083d: PUSH1 0x20
0000083f: ADD
00000840: DUP3
00000841: ADD
00000842: PUSH1 0x40
00000844: MSTORE
00000845: DUP1
00000846: ISZERO
00000847: PUSH2 0x0876
0000084a: JUMPI
0000084b: DUP2
0000084c: PUSH1 0x20
0000084e: ADD
0000084f: JUMPDEST
00000850: PUSH1 0x40
00000852: DUP1
00000853: MLOAD
00000854: DUP1
00000855: DUP3
00000856: ADD
00000857: SWAP1
00000858: SWAP2
00000859: MSTORE
0000085a: PUSH1 0x00
0000085c: DUP1
0000085d: DUP3
0000085e: MSTORE
0000085f: PUSH1 0x20
00000861: DUP3
00000862: ADD
00000863: MSTORE
00000864: DUP2
00000865: MSTORE
00000866: PUSH1 0x20
00000868: ADD
00000869: SWAP1
0000086a: PUSH1 0x01
0000086c: SWAP1
0000086d: SUB
0000086e: SWAP1
0000086f: DUP2
00000870: PUSH2 0x084f
00000873: JUMPI
00000874: SWAP1
00000875: POP
00000876: JUMPDEST
00000877: POP
00000878: SWAP1
00000879: POP
0000087a: PUSH1 0x00
0000087c: JUMPDEST
0000087d: DUP3
0000087e: DUP2
0000087f: LT
00000880: ISZERO
00000881: PUSH2 0x08db
00000884: JUMPI
00000885: PUSH1 0x00
00000887: DUP1
00000888: PUSH2 0x0892
0000088b: PUSH1 0x0e
0000088d: DUP5
0000088e: PUSH2 0x1a71
00000891: JUMP
00000892: JUMPDEST
00000893: SWAP2
00000894: POP
00000895: SWAP2
00000896: POP
00000897: PUSH1 0x40
00000899: MLOAD
0000089a: DUP1
0000089b: PUSH1 0x40
0000089d: ADD
0000089e: PUSH1 0x40
000008a0: MSTORE
000008a1: DUP1
000008a2: DUP4
000008a3: PUSH1 0x01
000008a5: PUSH1 0x01
000008a7: PUSH1 0xa0
000008a9: SHL
000008aa: SUB
000008ab: AND
000008ac: DUP2
000008ad: MSTORE
000008ae: PUSH1 0x20
000008b0: ADD
000008b1: DUP3
000008b2: DUP2
000008b3: MSTORE
000008b4: POP
000008b5: DUP5
000008b6: DUP5
000008b7: DUP2
000008b8: MLOAD
000008b9: DUP2
000008ba: LT
000008bb: PUSH2 0x08c6
000008be: JUMPI
000008bf: PUSH2 0x08c6
000008c2: PUSH2 0x26c5
000008c5: JUMP
000008c6: JUMPDEST
000008c7: PUSH1 0x20
000008c9: SWAP1
000008ca: DUP2
000008cb: MUL
000008cc: SWAP2
000008cd: SWAP1
000008ce: SWAP2
000008cf: ADD
000008d0: ADD
000008d1: MSTORE
000008d2: POP
000008d3: POP
000008d4: PUSH1 0x01
000008d6: ADD
000008d7: PUSH2 0x087c
000008da: JUMP
000008db: JUMPDEST
000008dc: POP
000008dd: SWAP3
000008de: SWAP2
000008df: POP
000008e0: POP
000008e1: JUMP
000008e2: JUMPDEST
000008e3: PUSH2 0x08fa
000008e6: PUSH1 0x00
000008e8: DUP1
000008e9: MLOAD
000008ea: PUSH1 0x20
000008ec: PUSH2 0x27d3
000008ef: DUP4
000008f0: CODECOPY
000008f1: DUP2
000008f2: MLOAD
000008f3: SWAP2
000008f4: MSTORE
000008f5: CALLER
000008f6: PUSH2 0x1225
000008f9: JUMP
000008fa: JUMPDEST
000008fb: PUSH2 0x0917
000008fe: JUMPI
000008ff: PUSH1 0x40
00000901: MLOAD
00000902: PUSH4 0x03a81c97
00000907: PUSH1 0xe6
00000909: SHL
0000090a: DUP2
0000090b: MSTORE
0000090c: PUSH1 0x04
0000090e: ADD
0000090f: PUSH1 0x40
00000911: MLOAD
00000912: DUP1
00000913: SWAP2
00000914: SUB
00000915: SWAP1
00000916: REVERT
00000917: JUMPDEST
00000918: PUSH2 0x0920
0000091b: DUP5
0000091c: PUSH2 0x1a8f
0000091f: JUMP
00000920: JUMPDEST
00000921: PUSH2 0x092b
00000924: PUSH1 0x07
00000926: DUP4
00000927: PUSH2 0x1ac2
0000092a: JUMP
0000092b: JUMPDEST
0000092c: PUSH2 0x0958
0000092f: JUMPI
00000930: PUSH1 0x40
00000932: MLOAD
00000933: PUSH4 0xa787604b
00000938: PUSH1 0xe0
0000093a: SHL
0000093b: DUP2
0000093c: MSTORE
0000093d: PUSH1 0x01
0000093f: PUSH1 0x01
00000941: PUSH1 0xa0
00000943: SHL
00000944: SUB
00000945: DUP4
00000946: AND
00000947: PUSH1 0x04
00000949: DUP3
0000094a: ADD
0000094b: MSTORE
0000094c: PUSH1 0x24
0000094e: ADD
0000094f: JUMPDEST
00000950: PUSH1 0x40
00000952: MLOAD
00000953: DUP1
00000954: SWAP2
00000955: SUB
00000956: SWAP1
00000957: REVERT
00000958: JUMPDEST
00000959: PUSH1 0x40
0000095b: DUP1
0000095c: MLOAD
0000095d: ADDRESS
0000095e: PUSH1 0x24
00000960: DUP1
00000961: DUP4
00000962: ADD
00000963: SWAP2
00000964: SWAP1
00000965: SWAP2
00000966: MSTORE
00000967: DUP3
00000968: MLOAD
00000969: DUP1
0000096a: DUP4
0000096b: SUB
0000096c: SWAP1
0000096d: SWAP2
0000096e: ADD
0000096f: DUP2
00000970: MSTORE
00000971: PUSH1 0x44
00000973: SWAP1
00000974: SWAP2
00000975: ADD
00000976: DUP3
00000977: MSTORE
00000978: PUSH1 0x20
0000097a: DUP2
0000097b: ADD
0000097c: DUP1
0000097d: MLOAD
0000097e: PUSH1 0x01
00000980: PUSH1 0x01
00000982: PUSH1 0xe0
00000984: SHL
00000985: SUB
00000986: AND
00000987: PUSH4 0x70a08231
0000098c: PUSH1 0xe0
0000098e: SHL
0000098f: OR
00000990: SWAP1
00000991: MSTORE
00000992: SWAP1
00000993: MLOAD
00000994: PUSH1 0x00
00000996: SWAP2
00000997: DUP3
00000998: SWAP2
00000999: DUP3
0000099a: SWAP2
0000099b: PUSH1 0x01
0000099d: PUSH1 0x01
0000099f: PUSH1 0xa0
000009a1: SHL
000009a2: SUB
000009a3: DUP10
000009a4: AND
000009a5: SWAP2
000009a6: PUSH2 0x09af
000009a9: SWAP2
000009aa: SWAP1
000009ab: PUSH2 0x26db
000009ae: JUMP
000009af: JUMPDEST
000009b0: PUSH1 0x00
000009b2: PUSH1 0x40
000009b4: MLOAD
000009b5: DUP1
000009b6: DUP4
000009b7: SUB
000009b8: DUP2
000009b9: DUP6
000009ba: GAS
000009bb: STATICCALL
000009bc: SWAP2
000009bd: POP
000009be: POP
000009bf: RETURNDATASIZE
000009c0: DUP1
000009c1: PUSH1 0x00
000009c3: DUP2
000009c4: EQ
000009c5: PUSH2 0x09ea
000009c8: JUMPI
000009c9: PUSH1 0x40
000009cb: MLOAD
000009cc: SWAP2
000009cd: POP
000009ce: PUSH1 0x1f
000009d0: NOT
000009d1: PUSH1 0x3f
000009d3: RETURNDATASIZE
000009d4: ADD
000009d5: AND
000009d6: DUP3
000009d7: ADD
000009d8: PUSH1 0x40
000009da: MSTORE
000009db: RETURNDATASIZE
000009dc: DUP3
000009dd: MSTORE
000009de: RETURNDATASIZE
000009df: PUSH1 0x00
000009e1: PUSH1 0x20
000009e3: DUP5
000009e4: ADD
000009e5: RETURNDATACOPY
000009e6: PUSH2 0x09ef
000009e9: JUMP
000009ea: JUMPDEST
000009eb: PUSH1 0x60
000009ed: SWAP2
000009ee: POP
000009ef: JUMPDEST
000009f0: POP
000009f1: SWAP2
000009f2: POP
000009f3: SWAP2
000009f4: POP
000009f5: DUP2
000009f6: DUP1
000009f7: ISZERO
000009f8: PUSH2 0x0a02
000009fb: JUMPI
000009fc: POP
000009fd: DUP1
000009fe: MLOAD
000009ff: PUSH1 0x20
00000a01: EQ
00000a02: JUMPDEST
00000a03: ISZERO
00000a04: PUSH2 0x0a1e
00000a07: JUMPI
00000a08: DUP1
00000a09: DUP1
00000a0a: PUSH1 0x20
00000a0c: ADD
00000a0d: SWAP1
00000a0e: MLOAD
00000a0f: DUP2
00000a10: ADD
00000a11: SWAP1
00000a12: PUSH2 0x0a1b
00000a15: SWAP2
00000a16: SWAP1
00000a17: PUSH2 0x270a
00000a1a: JUMP
00000a1b: JUMPDEST
00000a1c: SWAP3
00000a1d: POP
00000a1e: JUMPDEST
00000a1f: DUP4
00000a20: DUP1
00000a21: ISZERO
00000a22: PUSH2 0x0a38
00000a25: JUMPI
00000a26: POP
00000a27: PUSH1 0x02
00000a29: SLOAD
00000a2a: PUSH1 0x01
00000a2c: PUSH1 0x01
00000a2e: PUSH1 0xa0
00000a30: SHL
00000a31: SUB
00000a32: DUP9
00000a33: DUP2
00000a34: AND
00000a35: SWAP2
00000a36: AND
00000a37: EQ
00000a38: JUMPDEST
00000a39: ISZERO
00000a3a: PUSH2 0x0a4a
00000a3d: JUMPI
00000a3e: PUSH2 0x0a47
00000a41: SELFBALANCE
00000a42: DUP5
00000a43: PUSH2 0x2739
00000a46: JUMP
00000a47: JUMPDEST
00000a48: SWAP3
00000a49: POP
00000a4a: JUMPDEST
00000a4b: DUP6
00000a4c: DUP4
00000a4d: LT
00000a4e: ISZERO
00000a4f: PUSH2 0x0a75
00000a52: JUMPI
00000a53: PUSH1 0x40
00000a55: MLOAD
00000a56: PUSH4 0x4787a103
00000a5b: PUSH1 0xe1
00000a5d: SHL
00000a5e: DUP2
00000a5f: MSTORE
00000a60: PUSH1 0x04
00000a62: DUP2
00000a63: ADD
00000a64: DUP5
00000a65: SWAP1
00000a66: MSTORE
00000a67: PUSH1 0x24
00000a69: DUP2
00000a6a: ADD
00000a6b: DUP8
00000a6c: SWAP1
00000a6d: MSTORE
00000a6e: PUSH1 0x44
00000a70: ADD
00000a71: PUSH2 0x094f
00000a74: JUMP
00000a75: JUMPDEST
00000a76: DUP4
00000a77: DUP1
00000a78: ISZERO
00000a79: PUSH2 0x0a8f
00000a7c: JUMPI
00000a7d: POP
00000a7e: PUSH1 0x02
00000a80: SLOAD
00000a81: PUSH1 0x01
00000a83: PUSH1 0x01
00000a85: PUSH1 0xa0
00000a87: SHL
00000a88: SUB
00000a89: DUP9
00000a8a: DUP2
00000a8b: AND
00000a8c: SWAP2
00000a8d: AND
00000a8e: EQ
00000a8f: JUMPDEST
00000a90: ISZERO
00000a91: PUSH2 0x0b42
00000a94: JUMPI
00000a95: DUP6
00000a96: SELFBALANCE
00000a97: LT
00000a98: ISZERO
00000a99: PUSH2 0x0b06
00000a9c: JUMPI
00000a9d: PUSH1 0x01
00000a9f: PUSH1 0x01
00000aa1: PUSH1 0xa0
00000aa3: SHL
00000aa4: SUB
00000aa5: DUP8
00000aa6: AND
00000aa7: PUSH4 0x2e1a7d4d
00000aac: PUSH2 0x0ab5
00000aaf: SELFBALANCE
00000ab0: DUP10
00000ab1: PUSH2 0x274c
00000ab4: JUMP
00000ab5: JUMPDEST
00000ab6: PUSH1 0x40
00000ab8: MLOAD
00000ab9: DUP3
00000aba: PUSH4 0xffffffff
00000abf: AND
00000ac0: PUSH1 0xe0
00000ac2: SHL
00000ac3: DUP2
00000ac4: MSTORE
00000ac5: PUSH1 0x04
00000ac7: ADD
00000ac8: PUSH2 0x0ad3
00000acb: SWAP2
00000acc: DUP2
00000acd: MSTORE
00000ace: PUSH1 0x20
00000ad0: ADD
00000ad1: SWAP1
00000ad2: JUMP
00000ad3: JUMPDEST
00000ad4: PUSH1 0x00
00000ad6: PUSH1 0x40
00000ad8: MLOAD
00000ad9: DUP1
00000ada: DUP4
00000adb: SUB
00000adc: DUP2
00000add: PUSH1 0x00
00000adf: DUP8
00000ae0: DUP1
00000ae1: EXTCODESIZE
00000ae2: ISZERO
00000ae3: DUP1
00000ae4: ISZERO
00000ae5: PUSH2 0x0aed
00000ae8: JUMPI
00000ae9: PUSH1 0x00
00000aeb: DUP1
00000aec: REVERT
00000aed: JUMPDEST
00000aee: POP
00000aef: GAS
00000af0: CALL
00000af1: ISZERO
00000af2: DUP1
00000af3: ISZERO
00000af4: PUSH2 0x0b01
00000af7: JUMPI
00000af8: RETURNDATASIZE
00000af9: PUSH1 0x00
00000afb: DUP1
00000afc: RETURNDATACOPY
00000afd: RETURNDATASIZE
00000afe: PUSH1 0x00
00000b00: REVERT
00000b01: JUMPDEST
00000b02: POP
00000b03: POP
00000b04: POP
00000b05: POP
00000b06: JUMPDEST
00000b07: PUSH1 0x40
00000b09: MLOAD
00000b0a: PUSH1 0x01
00000b0c: PUSH1 0x01
00000b0e: PUSH1 0xa0
00000b10: SHL
00000b11: SUB
00000b12: DUP7
00000b13: AND
00000b14: SWAP1
00000b15: DUP8
00000b16: ISZERO
00000b17: PUSH2 0x08fc
00000b1a: MUL
00000b1b: SWAP1
00000b1c: DUP9
00000b1d: SWAP1
00000b1e: PUSH1 0x00
00000b20: DUP2
00000b21: DUP2
00000b22: DUP2
00000b23: DUP6
00000b24: DUP9
00000b25: DUP9
00000b26: CALL
00000b27: SWAP4
00000b28: POP
00000b29: POP
00000b2a: POP
00000b2b: POP
00000b2c: ISZERO
00000b2d: DUP1
00000b2e: ISZERO
00000b2f: PUSH2 0x0b3c
00000b32: JUMPI
00000b33: RETURNDATASIZE
00000b34: PUSH1 0x00
00000b36: DUP1
00000b37: RETURNDATACOPY
00000b38: RETURNDATASIZE
00000b39: PUSH1 0x00
00000b3b: REVERT
00000b3c: JUMPDEST
00000b3d: POP
00000b3e: PUSH2 0x0b56
00000b41: JUMP
00000b42: JUMPDEST
00000b43: PUSH2 0x0b56
00000b46: PUSH1 0x01
00000b48: PUSH1 0x01
00000b4a: PUSH1 0xa0
00000b4c: SHL
00000b4d: SUB
00000b4e: DUP9
00000b4f: AND
00000b50: DUP7
00000b51: DUP9
00000b52: PUSH2 0x1ae4
00000b55: JUMP
00000b56: JUMPDEST
00000b57: PUSH1 0x40
00000b59: DUP1
00000b5a: MLOAD
00000b5b: PUSH1 0x01
00000b5d: PUSH1 0x01
00000b5f: PUSH1 0xa0
00000b61: SHL
00000b62: SUB
00000b63: DUP10
00000b64: DUP2
00000b65: AND
00000b66: DUP3
00000b67: MSTORE
00000b68: PUSH1 0x20
00000b6a: DUP3
00000b6b: ADD
00000b6c: DUP10
00000b6d: SWAP1
00000b6e: MSTORE
00000b6f: DUP8
00000b70: AND
00000b71: DUP2
00000b72: DUP4
00000b73: ADD
00000b74: MSTORE
00000b75: DUP6
00000b76: ISZERO
00000b77: ISZERO
00000b78: PUSH1 0x60
00000b7a: DUP3
00000b7b: ADD
00000b7c: MSTORE
00000b7d: SWAP1
00000b7e: MLOAD
00000b7f: PUSH32 0xf5a218c3f2e48fb71969f47c462c49a00473152fa2170938abd781982c93fca6
00000ba0: SWAP2
00000ba1: DUP2
00000ba2: SWAP1
00000ba3: SUB
00000ba4: PUSH1 0x80
00000ba6: ADD
00000ba7: SWAP1
00000ba8: LOG1
00000ba9: POP
00000baa: POP
00000bab: POP
00000bac: POP
00000bad: POP
00000bae: POP
00000baf: POP
00000bb0: JUMP
00000bb1: JUMPDEST
00000bb2: PUSH2 0x0bc9
00000bb5: PUSH1 0x00
00000bb7: DUP1
00000bb8: MLOAD
00000bb9: PUSH1 0x20
00000bbb: PUSH2 0x2793
00000bbe: DUP4
00000bbf: CODECOPY
00000bc0: DUP2
00000bc1: MLOAD
00000bc2: SWAP2
00000bc3: MSTORE
00000bc4: CALLER
00000bc5: PUSH2 0x1225
00000bc8: JUMP
00000bc9: JUMPDEST
00000bca: PUSH2 0x0be6
00000bcd: JUMPI
00000bce: PUSH1 0x40
00000bd0: MLOAD
00000bd1: PUSH4 0x605919ad
00000bd6: PUSH1 0xe1
00000bd8: SHL
00000bd9: DUP2
00000bda: MSTORE
00000bdb: PUSH1 0x04
00000bdd: ADD
00000bde: PUSH1 0x40
00000be0: MLOAD
00000be1: DUP1
00000be2: SWAP2
00000be3: SUB
00000be4: SWAP1
00000be5: REVERT
00000be6: JUMPDEST
00000be7: PUSH2 0x0bf1
00000bea: PUSH1 0x03
00000bec: DUP3
00000bed: PUSH2 0x1ac2
00000bf0: JUMP
00000bf1: JUMPDEST
00000bf2: ISZERO
00000bf3: PUSH2 0x0c40
00000bf6: JUMPI
00000bf7: PUSH2 0x0c01
00000bfa: PUSH1 0x03
00000bfc: DUP3
00000bfd: PUSH2 0x1b43
00000c00: JUMP
00000c01: JUMPDEST
00000c02: POP
00000c03: PUSH1 0x40
00000c05: MLOAD
00000c06: PUSH1 0x01
00000c08: PUSH1 0x01
00000c0a: PUSH1 0xa0
00000c0c: SHL
00000c0d: SUB
00000c0e: DUP3
00000c0f: AND
00000c10: DUP2
00000c11: MSTORE
00000c12: PUSH32 0x09a1db4b80c32706328728508c941a6b954f31eb5affd32f236c1fd405f8fea4
00000c33: SWAP1
00000c34: PUSH1 0x20
00000c36: ADD
00000c37: JUMPDEST
00000c38: PUSH1 0x40
00000c3a: MLOAD
00000c3b: DUP1
00000c3c: SWAP2
00000c3d: SUB
00000c3e: SWAP1
00000c3f: LOG1
00000c40: JUMPDEST
00000c41: POP
00000c42: JUMP
00000c43: JUMPDEST
00000c44: PUSH2 0x0c5b
00000c47: PUSH1 0x00
00000c49: DUP1
00000c4a: MLOAD
00000c4b: PUSH1 0x20
00000c4d: PUSH2 0x2793
00000c50: DUP4
00000c51: CODECOPY
00000c52: DUP2
00000c53: MLOAD
00000c54: SWAP2
00000c55: MSTORE
00000c56: CALLER
00000c57: PUSH2 0x1225
00000c5a: JUMP
00000c5b: JUMPDEST
00000c5c: PUSH2 0x0c78
00000c5f: JUMPI
00000c60: PUSH1 0x40
00000c62: MLOAD
00000c63: PUSH4 0x605919ad
00000c68: PUSH1 0xe1
00000c6a: SHL
00000c6b: DUP2
00000c6c: MSTORE
00000c6d: PUSH1 0x04
00000c6f: ADD
00000c70: PUSH1 0x40
00000c72: MLOAD
00000c73: DUP1
00000c74: SWAP2
00000c75: SUB
00000c76: SWAP1
00000c77: REVERT
00000c78: JUMPDEST
00000c79: PUSH2 0x0c81
00000c7c: DUP3
00000c7d: PUSH2 0x1a8f
00000c80: JUMP
00000c81: JUMPDEST
00000c82: PUSH1 0x00
00000c84: PUSH2 0x0c8e
00000c87: PUSH1 0x0e
00000c89: DUP5
00000c8a: PUSH2 0x1b58
00000c8d: JUMP
00000c8e: JUMPDEST
00000c8f: SWAP2
00000c90: POP
00000c91: POP
00000c92: DUP1
00000c93: DUP3
00000c94: SUB
00000c95: PUSH2 0x0c9d
00000c98: JUMPI
00000c99: POP
00000c9a: POP
00000c9b: POP
00000c9c: JUMP
00000c9d: JUMPDEST
00000c9e: DUP2
00000c9f: PUSH1 0x00
00000ca1: SUB
00000ca2: PUSH2 0x0cb6
00000ca5: JUMPI
00000ca6: PUSH2 0x0cb0
00000ca9: PUSH1 0x0e
00000cab: DUP5
00000cac: PUSH2 0x1b70
00000caf: JUMP
00000cb0: JUMPDEST
00000cb1: POP
00000cb2: PUSH2 0x0cc4
00000cb5: JUMP
00000cb6: JUMPDEST
00000cb7: PUSH2 0x0cc2
00000cba: PUSH1 0x0e
00000cbc: DUP5
00000cbd: DUP5
00000cbe: PUSH2 0x1b85
00000cc1: JUMP
00000cc2: JUMPDEST
00000cc3: POP
00000cc4: JUMPDEST
00000cc5: PUSH1 0x40
00000cc7: MLOAD
00000cc8: DUP3
00000cc9: DUP2
00000cca: MSTORE
00000ccb: PUSH32 0x46d7618326b02f1816d1bc53039cbd2b3a77a2cd560dafcc20471097fd9e85e4
00000cec: SWAP1
00000ced: PUSH1 0x20
00000cef: ADD
00000cf0: JUMPDEST
00000cf1: PUSH1 0x40
00000cf3: MLOAD
00000cf4: DUP1
00000cf5: SWAP2
00000cf6: SUB
00000cf7: SWAP1
00000cf8: LOG1
00000cf9: POP
00000cfa: JUMPDEST
00000cfb: POP
00000cfc: POP
00000cfd: JUMP
00000cfe: JUMPDEST
00000cff: PUSH2 0x0d16
00000d02: PUSH1 0x00
00000d04: DUP1
00000d05: MLOAD
00000d06: PUSH1 0x20
00000d08: PUSH2 0x2793
00000d0b: DUP4
00000d0c: CODECOPY
00000d0d: DUP2
00000d0e: MLOAD
00000d0f: SWAP2
00000d10: MSTORE
00000d11: CALLER
00000d12: PUSH2 0x1225
00000d15: JUMP
00000d16: JUMPDEST
00000d17: PUSH2 0x0d33
00000d1a: JUMPI
00000d1b: PUSH1 0x40
00000d1d: MLOAD
00000d1e: PUSH4 0x605919ad
00000d23: PUSH1 0xe1
00000d25: SHL
00000d26: DUP2
00000d27: MSTORE
00000d28: PUSH1 0x04
00000d2a: ADD
00000d2b: PUSH1 0x40
00000d2d: MLOAD
00000d2e: DUP1
00000d2f: SWAP2
00000d30: SUB
00000d31: SWAP1
00000d32: REVERT
00000d33: JUMPDEST
00000d34: PUSH2 0x0d3e
00000d37: PUSH1 0x07
00000d39: DUP3
00000d3a: PUSH2 0x1ac2
00000d3d: JUMP
00000d3e: JUMPDEST
00000d3f: ISZERO
00000d40: PUSH2 0x0c40
00000d43: JUMPI
00000d44: PUSH2 0x0d4e
00000d47: PUSH1 0x07
00000d49: DUP3
00000d4a: PUSH2 0x1b43
00000d4d: JUMP
00000d4e: JUMPDEST
00000d4f: POP
00000d50: PUSH1 0x40
00000d52: MLOAD
00000d53: PUSH1 0x01
00000d55: PUSH1 0x01
00000d57: PUSH1 0xa0
00000d59: SHL
00000d5a: SUB
00000d5b: DUP3
00000d5c: AND
00000d5d: DUP2
00000d5e: MSTORE
00000d5f: PUSH32 0x3eecdc5b7fe6b9eeb35a1f4d3f16910d39a0dd7587ffe9e76cf56b29b6e4e1f1
00000d80: SWAP1
00000d81: PUSH1 0x20
00000d83: ADD
00000d84: PUSH2 0x0c37
00000d87: JUMP
00000d88: JUMPDEST
00000d89: PUSH2 0x0da0
00000d8c: PUSH1 0x00
00000d8e: DUP1
00000d8f: MLOAD
00000d90: PUSH1 0x20
00000d92: PUSH2 0x27b3
00000d95: DUP4
00000d96: CODECOPY
00000d97: DUP2
00000d98: MLOAD
00000d99: SWAP2
00000d9a: MSTORE
00000d9b: CALLER
00000d9c: PUSH2 0x1225
00000d9f: JUMP
00000da0: JUMPDEST
00000da1: PUSH2 0x0dbd
00000da4: JUMPI
00000da5: PUSH1 0x40
00000da7: MLOAD
00000da8: PUSH4 0x897e65bd
00000dad: PUSH1 0xe0
00000daf: SHL
00000db0: DUP2
00000db1: MSTORE
00000db2: PUSH1 0x04
00000db4: ADD
00000db5: PUSH1 0x40
00000db7: MLOAD
00000db8: DUP1
00000db9: SWAP2
00000dba: SUB
00000dbb: SWAP1
00000dbc: REVERT
00000dbd: JUMPDEST
00000dbe: PUSH2 0x0dc8
00000dc1: PUSH1 0x03
00000dc3: DUP5
00000dc4: PUSH2 0x1ac2
00000dc7: JUMP
00000dc8: JUMPDEST
00000dc9: PUSH2 0x0df0
00000dcc: JUMPI
00000dcd: PUSH1 0x40
00000dcf: MLOAD
00000dd0: PUSH4 0x6c337973
00000dd5: PUSH1 0xe1
00000dd7: SHL
00000dd8: DUP2
00000dd9: MSTORE
00000dda: PUSH1 0x01
00000ddc: PUSH1 0x01
00000dde: PUSH1 0xa0
00000de0: SHL
00000de1: SUB
00000de2: DUP5
00000de3: AND
00000de4: PUSH1 0x04
00000de6: DUP3
00000de7: ADD
00000de8: MSTORE
00000de9: PUSH1 0x24
00000deb: ADD
00000dec: PUSH2 0x094f
00000def: JUMP
00000df0: JUMPDEST
00000df1: PUSH2 0x0e30
00000df4: DUP4
00000df5: DUP4
00000df6: DUP4
00000df7: DUP1
00000df8: DUP1
00000df9: PUSH1 0x1f
00000dfb: ADD
00000dfc: PUSH1 0x20
00000dfe: DUP1
00000dff: SWAP2
00000e00: DIV
00000e01: MUL
00000e02: PUSH1 0x20
00000e04: ADD
00000e05: PUSH1 0x40
00000e07: MLOAD
00000e08: SWAP1
00000e09: DUP2
00000e0a: ADD
00000e0b: PUSH1 0x40
00000e0d: MSTORE
00000e0e: DUP1
00000e0f: SWAP4
00000e10: SWAP3
00000e11: SWAP2
00000e12: SWAP1
00000e13: DUP2
00000e14: DUP2
00000e15: MSTORE
00000e16: PUSH1 0x20
00000e18: ADD
00000e19: DUP4
00000e1a: DUP4
00000e1b: DUP1
00000e1c: DUP3
00000e1d: DUP5
00000e1e: CALLDATACOPY
00000e1f: PUSH1 0x00
00000e21: SWAP3
00000e22: ADD
00000e23: SWAP2
00000e24: SWAP1
00000e25: SWAP2
00000e26: MSTORE
00000e27: POP
00000e28: PUSH2 0x1ba3
00000e2b: SWAP3
00000e2c: POP
00000e2d: POP
00000e2e: POP
00000e2f: JUMP
00000e30: JUMPDEST
00000e31: POP
00000e32: POP
00000e33: POP
00000e34: JUMP
00000e35: JUMPDEST
00000e36: PUSH2 0x0e4d
00000e39: PUSH1 0x00
00000e3b: DUP1
00000e3c: MLOAD
00000e3d: PUSH1 0x20
00000e3f: PUSH2 0x2793
00000e42: DUP4
00000e43: CODECOPY
00000e44: DUP2
00000e45: MLOAD
00000e46: SWAP2
00000e47: MSTORE
00000e48: CALLER
00000e49: PUSH2 0x1225
00000e4c: JUMP
00000e4d: JUMPDEST
00000e4e: PUSH2 0x0e6a
00000e51: JUMPI
00000e52: PUSH1 0x40
00000e54: MLOAD
00000e55: PUSH4 0x605919ad
00000e5a: PUSH1 0xe1
00000e5c: SHL
00000e5d: DUP2
00000e5e: MSTORE
00000e5f: PUSH1 0x04
00000e61: ADD
00000e62: PUSH1 0x40
00000e64: MLOAD
00000e65: DUP1
00000e66: SWAP2
00000e67: SUB
00000e68: SWAP1
00000e69: REVERT
00000e6a: JUMPDEST
00000e6b: PUSH2 0x0e75
00000e6e: PUSH1 0x03
00000e70: DUP3
00000e71: PUSH2 0x1ac2
00000e74: JUMP
00000e75: JUMPDEST
00000e76: PUSH2 0x0c40
00000e79: JUMPI
00000e7a: PUSH2 0x0e84
00000e7d: PUSH1 0x03
00000e7f: DUP3
00000e80: PUSH2 0x1bc6
00000e83: JUMP
00000e84: JUMPDEST
00000e85: POP
00000e86: PUSH1 0x40
00000e88: MLOAD
00000e89: PUSH1 0x01
00000e8b: PUSH1 0x01
00000e8d: PUSH1 0xa0
00000e8f: SHL
00000e90: SUB
00000e91: DUP3
00000e92: AND
00000e93: DUP2
00000e94: MSTORE
00000e95: PUSH32 0x3f008fd510eae7a9e7bee13513d7b83bef8003d488b5a3d0b0da4de71d6846f1
00000eb6: SWAP1
00000eb7: PUSH1 0x20
00000eb9: ADD
00000eba: PUSH2 0x0c37
00000ebd: JUMP
00000ebe: JUMPDEST
00000ebf: DUP2
00000ec0: DUP1
00000ec1: ISZERO
00000ec2: DUP1
00000ec3: ISZERO
00000ec4: SWAP1
00000ec5: PUSH2 0x0edc
00000ec8: JUMPI
00000ec9: POP
00000eca: PUSH1 0x00
00000ecc: DUP1
00000ecd: MLOAD
00000ece: PUSH1 0x20
00000ed0: PUSH2 0x2793
00000ed3: DUP4
00000ed4: CODECOPY
00000ed5: DUP2
00000ed6: MLOAD
00000ed7: SWAP2
00000ed8: MSTORE
00000ed9: DUP2
00000eda: EQ
00000edb: ISZERO
00000edc: JUMPDEST
00000edd: DUP1
00000ede: ISZERO
00000edf: PUSH2 0x0ef6
00000ee2: JUMPI
00000ee3: POP
00000ee4: PUSH1 0x00
00000ee6: DUP1
00000ee7: MLOAD
00000ee8: PUSH1 0x20
00000eea: PUSH2 0x27d3
00000eed: DUP4
00000eee: CODECOPY
00000eef: DUP2
00000ef0: MLOAD
00000ef1: SWAP2
00000ef2: MSTORE
00000ef3: DUP2
00000ef4: EQ
00000ef5: ISZERO
00000ef6: JUMPDEST
00000ef7: DUP1
00000ef8: ISZERO
00000ef9: PUSH2 0x0f10
00000efc: JUMPI
00000efd: POP
00000efe: PUSH1 0x00
00000f00: DUP1
00000f01: MLOAD
00000f02: PUSH1 0x20
00000f04: PUSH2 0x27b3
00000f07: DUP4
00000f08: CODECOPY
00000f09: DUP2
00000f0a: MLOAD
00000f0b: SWAP2
00000f0c: MSTORE
00000f0d: DUP2
00000f0e: EQ
00000f0f: ISZERO
00000f10: JUMPDEST
00000f11: DUP1
00000f12: ISZERO
00000f13: PUSH2 0x0f2a
00000f16: JUMPI
00000f17: POP
00000f18: PUSH1 0x00
00000f1a: DUP1
00000f1b: MLOAD
00000f1c: PUSH1 0x20
00000f1e: PUSH2 0x27f3
00000f21: DUP4
00000f22: CODECOPY
00000f23: DUP2
00000f24: MLOAD
00000f25: SWAP2
00000f26: MSTORE
00000f27: DUP2
00000f28: EQ
00000f29: ISZERO
00000f2a: JUMPDEST
00000f2b: ISZERO
00000f2c: PUSH2 0x0f4b
00000f2f: JUMPI
00000f30: PUSH1 0x40
00000f32: MLOAD
00000f33: PUSH4 0x125a2bb7
00000f38: PUSH1 0xe0
00000f3a: SHL
00000f3b: DUP2
00000f3c: MSTORE
00000f3d: PUSH1 0x04
00000f3f: DUP2
00000f40: ADD
00000f41: DUP3
00000f42: SWAP1
00000f43: MSTORE
00000f44: PUSH1 0x24
00000f46: ADD
00000f47: PUSH2 0x094f
00000f4a: JUMP
00000f4b: JUMPDEST
00000f4c: PUSH2 0x0e30
00000f4f: DUP4
00000f50: DUP4
00000f51: PUSH2 0x1bdb
00000f54: JUMP
00000f55: JUMPDEST
00000f56: PUSH1 0x01
00000f58: PUSH1 0x01
00000f5a: PUSH1 0xa0
00000f5c: SHL
00000f5d: SUB
00000f5e: DUP2
00000f5f: AND
00000f60: CALLER
00000f61: EQ
00000f62: PUSH2 0x0f7e
00000f65: JUMPI
00000f66: PUSH1 0x40
00000f68: MLOAD
00000f69: PUSH4 0x334bd919
00000f6e: PUSH1 0xe1
00000f70: SHL
00000f71: DUP2
00000f72: MSTORE
00000f73: PUSH1 0x04
00000f75: ADD
00000f76: PUSH1 0x40
00000f78: MLOAD
00000f79: DUP1
00000f7a: SWAP2
00000f7b: SUB
00000f7c: SWAP1
00000f7d: REVERT
00000f7e: JUMPDEST
00000f7f: PUSH2 0x0e30
00000f82: DUP3
00000f83: DUP3
00000f84: PUSH2 0x1c00
00000f87: JUMP
00000f88: JUMPDEST
00000f89: PUSH1 0x00
00000f8b: PUSH2 0x0800
00000f8e: PUSH1 0x03
00000f90: DUP4
00000f91: PUSH2 0x1ac2
00000f94: JUMP
00000f95: JUMPDEST
00000f96: PUSH1 0x60
00000f98: PUSH2 0x0fa1
00000f9b: PUSH1 0x03
00000f9d: PUSH2 0x1c35
00000fa0: JUMP
00000fa1: JUMPDEST
00000fa2: SWAP1
00000fa3: POP
00000fa4: SWAP1
00000fa5: JUMP
00000fa6: JUMPDEST
00000fa7: PUSH2 0x0fbe
00000faa: PUSH1 0x00
00000fac: DUP1
00000fad: MLOAD
00000fae: PUSH1 0x20
00000fb0: PUSH2 0x2793
00000fb3: DUP4
00000fb4: CODECOPY
00000fb5: DUP2
00000fb6: MLOAD
00000fb7: SWAP2
00000fb8: MSTORE
00000fb9: CALLER
00000fba: PUSH2 0x1225
00000fbd: JUMP
00000fbe: JUMPDEST
00000fbf: PUSH2 0x0fdb
00000fc2: JUMPI
00000fc3: PUSH1 0x40
00000fc5: MLOAD
00000fc6: PUSH4 0x605919ad
00000fcb: PUSH1 0xe1
00000fcd: SHL
00000fce: DUP2
00000fcf: MSTORE
00000fd0: PUSH1 0x04
00000fd2: ADD
00000fd3: PUSH1 0x40
00000fd5: MLOAD
00000fd6: DUP1
00000fd7: SWAP2
00000fd8: SUB
00000fd9: SWAP1
00000fda: REVERT
00000fdb: JUMPDEST
00000fdc: PUSH2 0x0fe6
00000fdf: PUSH1 0x05
00000fe1: DUP3
00000fe2: PUSH2 0x1ac2
00000fe5: JUMP
00000fe6: JUMPDEST
00000fe7: ISZERO
00000fe8: PUSH2 0x0c40
00000feb: JUMPI
00000fec: PUSH2 0x0ff6
00000fef: PUSH1 0x05
00000ff1: DUP3
00000ff2: PUSH2 0x1b43
00000ff5: JUMP
00000ff6: JUMPDEST
00000ff7: POP
00000ff8: PUSH1 0x40
00000ffa: MLOAD
00000ffb: PUSH1 0x01
00000ffd: PUSH1 0x01
00000fff: PUSH1 0xa0
00001001: SHL
00001002: SUB
00001003: DUP3
00001004: AND
00001005: DUP2
00001006: MSTORE
00001007: PUSH32 0x4c910b69fe65a61f7531b9c5042b2329ca7179c77290aa7e2eb3afa3c8511fd3
00001028: SWAP1
00001029: PUSH1 0x20
0000102b: ADD
0000102c: PUSH2 0x0c37
0000102f: JUMP
00001030: JUMPDEST
00001031: PUSH1 0x00
00001033: PUSH2 0x0800
00001036: PUSH1 0x0c
00001038: DUP4
00001039: PUSH2 0x1ac2
0000103c: JUMP
0000103d: JUMPDEST
0000103e: PUSH1 0x00
00001040: PUSH2 0x104a
00001043: PUSH1 0x09
00001045: DUP4
00001046: PUSH2 0x1b58
00001049: JUMP
0000104a: JUMPDEST
0000104b: SWAP4
0000104c: SWAP3
0000104d: POP
0000104e: POP
0000104f: POP
00001050: JUMP
00001051: JUMPDEST
00001052: PUSH1 0x60
00001054: PUSH2 0x0fa1
00001057: PUSH1 0x05
00001059: PUSH2 0x1c35
0000105c: JUMP
0000105d: JUMPDEST
0000105e: PUSH1 0x00
00001060: PUSH2 0x0800
00001063: PUSH1 0x07
00001065: DUP4
00001066: PUSH2 0x1ac2
00001069: JUMP
0000106a: JUMPDEST
0000106b: PUSH1 0x60
0000106d: PUSH2 0x0fa1
00001070: PUSH1 0x07
00001072: PUSH2 0x1c35
00001075: JUMP
00001076: JUMPDEST
00001077: PUSH2 0x108e
0000107a: PUSH1 0x00
0000107c: DUP1
0000107d: MLOAD
0000107e: PUSH1 0x20
00001080: PUSH2 0x2793
00001083: DUP4
00001084: CODECOPY
00001085: DUP2
00001086: MLOAD
00001087: SWAP2
00001088: MSTORE
00001089: CALLER
0000108a: PUSH2 0x1225
0000108d: JUMP
0000108e: JUMPDEST
0000108f: PUSH2 0x10ab
00001092: JUMPI
00001093: PUSH1 0x40
00001095: MLOAD
00001096: PUSH4 0x605919ad
0000109b: PUSH1 0xe1
0000109d: SHL
0000109e: DUP2
0000109f: MSTORE
000010a0: PUSH1 0x04
000010a2: ADD
000010a3: PUSH1 0x40
000010a5: MLOAD
000010a6: DUP1
000010a7: SWAP2
000010a8: SUB
000010a9: SWAP1
000010aa: REVERT
000010ab: JUMPDEST
000010ac: PUSH2 0x10b6
000010af: PUSH1 0x0c
000010b1: DUP3
000010b2: PUSH2 0x1ac2
000010b5: JUMP
000010b6: JUMPDEST
000010b7: ISZERO
000010b8: PUSH2 0x0c40
000010bb: JUMPI
000010bc: PUSH2 0x10c6
000010bf: PUSH1 0x0c
000010c1: DUP3
000010c2: PUSH2 0x1b43
000010c5: JUMP
000010c6: JUMPDEST
000010c7: POP
000010c8: PUSH1 0x40
000010ca: MLOAD
000010cb: PUSH1 0x01
000010cd: PUSH1 0x01
000010cf: PUSH1 0xa0
000010d1: SHL
000010d2: SUB
000010d3: DUP3
000010d4: AND
000010d5: DUP2
000010d6: MSTORE
000010d7: PUSH32 0xab8cff50266d80b9c9d9703af934ca455b9218286bf4fcaa05653a564c499e4b
000010f8: SWAP1
000010f9: PUSH1 0x20
000010fb: ADD
000010fc: PUSH2 0x0c37
000010ff: JUMP
00001100: JUMPDEST
00001101: PUSH1 0x00
00001103: DUP3
00001104: DUP2
00001105: MSTORE
00001106: PUSH1 0x01
00001108: PUSH1 0x20
0000110a: MSTORE
0000110b: PUSH1 0x40
0000110d: DUP2
0000110e: KECCAK256
0000110f: PUSH2 0x104a
00001112: SWAP1
00001113: DUP4
00001114: PUSH2 0x1c42
00001117: JUMP
00001118: JUMPDEST
00001119: PUSH2 0x1130
0000111c: PUSH1 0x00
0000111e: DUP1
0000111f: MLOAD
00001120: PUSH1 0x20
00001122: PUSH2 0x27b3
00001125: DUP4
00001126: CODECOPY
00001127: DUP2
00001128: MLOAD
00001129: SWAP2
0000112a: MSTORE
0000112b: CALLER
0000112c: PUSH2 0x1225
0000112f: JUMP
00001130: JUMPDEST
00001131: PUSH2 0x114d
00001134: JUMPI
00001135: PUSH1 0x40
00001137: MLOAD
00001138: PUSH4 0x897e65bd
0000113d: PUSH1 0xe0
0000113f: SHL
00001140: DUP2
00001141: MSTORE
00001142: PUSH1 0x04
00001144: ADD
00001145: PUSH1 0x40
00001147: MLOAD
00001148: DUP1
00001149: SWAP2
0000114a: SUB
0000114b: SWAP1
0000114c: REVERT
0000114d: JUMPDEST
0000114e: DUP1
0000114f: SELFBALANCE
00001150: LT
00001151: ISZERO
00001152: PUSH2 0x1177
00001155: JUMPI
00001156: PUSH1 0x40
00001158: MLOAD
00001159: PUSH4 0x4787a103
0000115e: PUSH1 0xe1
00001160: SHL
00001161: DUP2
00001162: MSTORE
00001163: SELFBALANCE
00001164: PUSH1 0x04
00001166: DUP3
00001167: ADD
00001168: MSTORE
00001169: PUSH1 0x24
0000116b: DUP2
0000116c: ADD
0000116d: DUP3
0000116e: SWAP1
0000116f: MSTORE
00001170: PUSH1 0x44
00001172: ADD
00001173: PUSH2 0x094f
00001176: JUMP
00001177: JUMPDEST
00001178: PUSH1 0x02
0000117a: PUSH1 0x00
0000117c: SWAP1
0000117d: SLOAD
0000117e: SWAP1
0000117f: PUSH2 0x0100
00001182: EXP
00001183: SWAP1
00001184: DIV
00001185: PUSH1 0x01
00001187: PUSH1 0x01
00001189: PUSH1 0xa0
0000118b: SHL
0000118c: SUB
0000118d: AND
0000118e: PUSH1 0x01
00001190: PUSH1 0x01
00001192: PUSH1 0xa0
00001194: SHL
00001195: SUB
00001196: AND
00001197: PUSH4 0xd0e30db0
0000119c: DUP3
0000119d: PUSH1 0x40
0000119f: MLOAD
000011a0: DUP3
000011a1: PUSH4 0xffffffff
000011a6: AND
000011a7: PUSH1 0xe0
000011a9: SHL
000011aa: DUP2
000011ab: MSTORE
000011ac: PUSH1 0x04
000011ae: ADD
000011af: PUSH1 0x00
000011b1: PUSH1 0x40
000011b3: MLOAD
000011b4: DUP1
000011b5: DUP4
000011b6: SUB
000011b7: DUP2
000011b8: DUP6
000011b9: DUP9
000011ba: DUP1
000011bb: EXTCODESIZE
000011bc: ISZERO
000011bd: DUP1
000011be: ISZERO
000011bf: PUSH2 0x11c7
000011c2: JUMPI
000011c3: PUSH1 0x00
000011c5: DUP1
000011c6: REVERT
000011c7: JUMPDEST
000011c8: POP
000011c9: GAS
000011ca: CALL
000011cb: ISZERO
000011cc: DUP1
000011cd: ISZERO
000011ce: PUSH2 0x11db
000011d1: JUMPI
000011d2: RETURNDATASIZE
000011d3: PUSH1 0x00
000011d5: DUP1
000011d6: RETURNDATACOPY
000011d7: RETURNDATASIZE
000011d8: PUSH1 0x00
000011da: REVERT
000011db: JUMPDEST
000011dc: POP
000011dd: POP
000011de: PUSH1 0x02
000011e0: SLOAD
000011e1: PUSH1 0x40
000011e3: DUP1
000011e4: MLOAD
000011e5: PUSH1 0x01
000011e7: PUSH1 0x01
000011e9: PUSH1 0xa0
000011eb: SHL
000011ec: SUB
000011ed: SWAP1
000011ee: SWAP3
000011ef: AND
000011f0: DUP3
000011f1: MSTORE
000011f2: PUSH1 0x20
000011f4: DUP3
000011f5: ADD
000011f6: DUP7
000011f7: SWAP1
000011f8: MSTORE
000011f9: PUSH32 0x2c58f4d3d48c3b93bf8f7fd23f32658ccb97894f02022d2189ffa9903d37bfb8
0000121a: SWAP5
0000121b: POP
0000121c: ADD
0000121d: SWAP2
0000121e: POP
0000121f: PUSH2 0x0c37
00001222: SWAP1
00001223: POP
00001224: JUMP
00001225: JUMPDEST
00001226: PUSH1 0x00
00001228: SWAP2
00001229: DUP3
0000122a: MSTORE
0000122b: PUSH1 0x20
0000122d: DUP3
0000122e: DUP2
0000122f: MSTORE
00001230: PUSH1 0x40
00001232: DUP1
00001233: DUP5
00001234: KECCAK256
00001235: PUSH1 0x01
00001237: PUSH1 0x01
00001239: PUSH1 0xa0
0000123b: SHL
0000123c: SUB
0000123d: SWAP4
0000123e: SWAP1
0000123f: SWAP4
00001240: AND
00001241: DUP5
00001242: MSTORE
00001243: SWAP2
00001244: SWAP1
00001245: MSTORE
00001246: SWAP1
00001247: KECCAK256
00001248: SLOAD
00001249: PUSH1 0xff
0000124b: AND
0000124c: SWAP1
0000124d: JUMP
0000124e: JUMPDEST
0000124f: PUSH1 0x60
00001251: PUSH1 0x00
00001253: PUSH2 0x125c
00001256: PUSH1 0x09
00001258: PUSH2 0x1a66
0000125b: JUMP
0000125c: JUMPDEST
0000125d: SWAP1
0000125e: POP
0000125f: PUSH1 0x00
00001261: DUP2
00001262: PUSH8 0xffffffffffffffff
0000126b: DUP2
0000126c: GT
0000126d: ISZERO
0000126e: PUSH2 0x1279
00001271: JUMPI
00001272: PUSH2 0x1279
00001275: PUSH2 0x26af
00001278: JUMP
00001279: JUMPDEST
0000127a: PUSH1 0x40
0000127c: MLOAD
0000127d: SWAP1
0000127e: DUP1
0000127f: DUP3
00001280: MSTORE
00001281: DUP1
00001282: PUSH1 0x20
00001284: MUL
00001285: PUSH1 0x20
00001287: ADD
00001288: DUP3
00001289: ADD
0000128a: PUSH1 0x40
0000128c: MSTORE
0000128d: DUP1
0000128e: ISZERO
0000128f: PUSH2 0x12be
00001292: JUMPI
00001293: DUP2
00001294: PUSH1 0x20
00001296: ADD
00001297: JUMPDEST
00001298: PUSH1 0x40
0000129a: DUP1
0000129b: MLOAD
0000129c: DUP1
0000129d: DUP3
0000129e: ADD
0000129f: SWAP1
000012a0: SWAP2
000012a1: MSTORE
000012a2: PUSH1 0x00
000012a4: DUP1
000012a5: DUP3
000012a6: MSTORE
000012a7: PUSH1 0x20
000012a9: DUP3
000012aa: ADD
000012ab: MSTORE
000012ac: DUP2
000012ad: MSTORE
000012ae: PUSH1 0x20
000012b0: ADD
000012b1: SWAP1
000012b2: PUSH1 0x01
000012b4: SWAP1
000012b5: SUB
000012b6: SWAP1
000012b7: DUP2
000012b8: PUSH2 0x1297
000012bb: JUMPI
000012bc: SWAP1
000012bd: POP
000012be: JUMPDEST
000012bf: POP
000012c0: SWAP1
000012c1: POP
000012c2: PUSH1 0x00
000012c4: JUMPDEST
000012c5: DUP3
000012c6: DUP2
000012c7: LT
000012c8: ISZERO
000012c9: PUSH2 0x08db
000012cc: JUMPI
000012cd: PUSH1 0x00
000012cf: DUP1
000012d0: PUSH2 0x12da
000012d3: PUSH1 0x09
000012d5: DUP5
000012d6: PUSH2 0x1a71
000012d9: JUMP
000012da: JUMPDEST
000012db: SWAP2
000012dc: POP
000012dd: SWAP2
000012de: POP
000012df: PUSH1 0x40
000012e1: MLOAD
000012e2: DUP1
000012e3: PUSH1 0x40
000012e5: ADD
000012e6: PUSH1 0x40
000012e8: MSTORE
000012e9: DUP1
000012ea: DUP4
000012eb: PUSH1 0x01
000012ed: PUSH1 0x01
000012ef: PUSH1 0xa0
000012f1: SHL
000012f2: SUB
000012f3: AND
000012f4: DUP2
000012f5: MSTORE
000012f6: PUSH1 0x20
000012f8: ADD
000012f9: DUP3
000012fa: DUP2
000012fb: MSTORE
000012fc: POP
000012fd: DUP5
000012fe: DUP5
000012ff: DUP2
00001300: MLOAD
00001301: DUP2
00001302: LT
00001303: PUSH2 0x130e
00001306: JUMPI
00001307: PUSH2 0x130e
0000130a: PUSH2 0x26c5
0000130d: JUMP
0000130e: JUMPDEST
0000130f: PUSH1 0x20
00001311: SWAP1
00001312: DUP2
00001313: MUL
00001314: SWAP2
00001315: SWAP1
00001316: SWAP2
00001317: ADD
00001318: ADD
00001319: MSTORE
0000131a: POP
0000131b: POP
0000131c: PUSH1 0x01
0000131e: ADD
0000131f: PUSH2 0x12c4
00001322: JUMP
00001323: JUMPDEST
00001324: PUSH1 0x60
00001326: PUSH2 0x0fa1
00001329: PUSH1 0x0c
0000132b: PUSH2 0x1c35
0000132e: JUMP
0000132f: JUMPDEST
00001330: PUSH1 0x00
00001332: DUP2
00001333: DUP2
00001334: MSTORE
00001335: PUSH1 0x01
00001337: PUSH1 0x20
00001339: MSTORE
0000133a: PUSH1 0x40
0000133c: DUP2
0000133d: KECCAK256
0000133e: PUSH2 0x0800
00001341: SWAP1
00001342: PUSH2 0x1c4e
00001345: JUMP
00001346: JUMPDEST
00001347: PUSH2 0x135e
0000134a: PUSH1 0x00
0000134c: DUP1
0000134d: MLOAD
0000134e: PUSH1 0x20
00001350: PUSH2 0x2793
00001353: DUP4
00001354: CODECOPY
00001355: DUP2
00001356: MLOAD
00001357: SWAP2
00001358: MSTORE
00001359: CALLER
0000135a: PUSH2 0x1225
0000135d: JUMP
0000135e: JUMPDEST
0000135f: PUSH2 0x137b
00001362: JUMPI
00001363: PUSH1 0x40
00001365: MLOAD
00001366: PUSH4 0x605919ad
0000136b: PUSH1 0xe1
0000136d: SHL
0000136e: DUP2
0000136f: MSTORE
00001370: PUSH1 0x04
00001372: ADD
00001373: PUSH1 0x40
00001375: MLOAD
00001376: DUP1
00001377: SWAP2
00001378: SUB
00001379: SWAP1
0000137a: REVERT
0000137b: JUMPDEST
0000137c: PUSH2 0x1384
0000137f: DUP3
00001380: PUSH2 0x1a8f
00001383: JUMP
00001384: JUMPDEST
00001385: PUSH1 0x00
00001387: PUSH2 0x1391
0000138a: PUSH1 0x09
0000138c: DUP5
0000138d: PUSH2 0x1b58
00001390: JUMP
00001391: JUMPDEST
00001392: SWAP2
00001393: POP
00001394: POP
00001395: DUP1
00001396: DUP3
00001397: SUB
00001398: PUSH2 0x13a0
0000139b: JUMPI
0000139c: POP
0000139d: POP
0000139e: POP
0000139f: JUMP
000013a0: JUMPDEST
000013a1: DUP2
000013a2: PUSH1 0x00
000013a4: SUB
000013a5: PUSH2 0x13b9
000013a8: JUMPI
000013a9: PUSH2 0x13b3
000013ac: PUSH1 0x09
000013ae: DUP5
000013af: PUSH2 0x1b70
000013b2: JUMP
000013b3: JUMPDEST
000013b4: POP
000013b5: PUSH2 0x13c7
000013b8: JUMP
000013b9: JUMPDEST
000013ba: PUSH2 0x13c5
000013bd: PUSH1 0x09
000013bf: DUP5
000013c0: DUP5
000013c1: PUSH2 0x1b85
000013c4: JUMP
000013c5: JUMPDEST
000013c6: POP
000013c7: JUMPDEST
000013c8: PUSH1 0x40
000013ca: DUP1
000013cb: MLOAD
000013cc: PUSH1 0x01
000013ce: PUSH1 0x01
000013d0: PUSH1 0xa0
000013d2: SHL
000013d3: SUB
000013d4: DUP6
000013d5: AND
000013d6: DUP2
000013d7: MSTORE
000013d8: PUSH1 0x20
000013da: DUP2
000013db: ADD
000013dc: DUP4
000013dd: SWAP1
000013de: MSTORE
000013df: SWAP1
000013e0: DUP2
000013e1: ADD
000013e2: DUP4
000013e3: SWAP1
000013e4: MSTORE
000013e5: PUSH32 0x5a257baf8d7726a03c0e1fb5ddaa5b77d339332901e52d15169d56442a381c12
00001406: SWAP1
00001407: PUSH1 0x60
00001409: ADD
0000140a: PUSH2 0x0cf0
0000140d: JUMP
0000140e: JUMPDEST
0000140f: PUSH2 0x1426
00001412: PUSH1 0x00
00001414: DUP1
00001415: MLOAD
00001416: PUSH1 0x20
00001418: PUSH2 0x2793
0000141b: DUP4
0000141c: CODECOPY
0000141d: DUP2
0000141e: MLOAD
0000141f: SWAP2
00001420: MSTORE
00001421: CALLER
00001422: PUSH2 0x1225
00001425: JUMP
00001426: JUMPDEST
00001427: PUSH2 0x1443
0000142a: JUMPI
0000142b: PUSH1 0x40
0000142d: MLOAD
0000142e: PUSH4 0x605919ad
00001433: PUSH1 0xe1
00001435: SHL
00001436: DUP2
00001437: MSTORE
00001438: PUSH1 0x04
0000143a: ADD
0000143b: PUSH1 0x40
0000143d: MLOAD
0000143e: DUP1
0000143f: SWAP2
00001440: SUB
00001441: SWAP1
00001442: REVERT
00001443: JUMPDEST
00001444: PUSH2 0x144e
00001447: PUSH1 0x05
00001449: DUP3
0000144a: PUSH2 0x1ac2
0000144d: JUMP
0000144e: JUMPDEST
0000144f: PUSH2 0x0c40
00001452: JUMPI
00001453: PUSH2 0x145d
00001456: PUSH1 0x05
00001458: DUP3
00001459: PUSH2 0x1bc6
0000145c: JUMP
0000145d: JUMPDEST
0000145e: POP
0000145f: PUSH1 0x40
00001461: MLOAD
00001462: PUSH1 0x01
00001464: PUSH1 0x01
00001466: PUSH1 0xa0
00001468: SHL
00001469: SUB
0000146a: DUP3
0000146b: AND
0000146c: DUP2
0000146d: MSTORE
0000146e: PUSH32 0x784c8f4dbf0ffedd6e72c76501c545a70f8b203b30a26ce542bf92ba87c248a4
0000148f: SWAP1
00001490: PUSH1 0x20
00001492: ADD
00001493: PUSH2 0x0c37
00001496: JUMP
00001497: JUMPDEST
00001498: PUSH1 0x00
0000149a: DUP3
0000149b: DUP2
0000149c: MSTORE
0000149d: PUSH1 0x20
0000149f: DUP2
000014a0: SWAP1
000014a1: MSTORE
000014a2: PUSH1 0x40
000014a4: SWAP1
000014a5: KECCAK256
000014a6: PUSH1 0x01
000014a8: ADD
000014a9: SLOAD
000014aa: PUSH2 0x14b2
000014ad: DUP2
000014ae: PUSH2 0x1c58
000014b1: JUMP
000014b2: JUMPDEST
000014b3: PUSH2 0x14bc
000014b6: DUP4
000014b7: DUP4
000014b8: PUSH2 0x1c00
000014bb: JUMP
000014bc: JUMPDEST
000014bd: POP
000014be: POP
000014bf: POP
000014c0: POP
000014c1: JUMP
000014c2: JUMPDEST
000014c3: PUSH2 0x14da
000014c6: PUSH1 0x00
000014c8: DUP1
000014c9: MLOAD
000014ca: PUSH1 0x20
000014cc: PUSH2 0x27f3
000014cf: DUP4
000014d0: CODECOPY
000014d1: DUP2
000014d2: MLOAD
000014d3: SWAP2
000014d4: MSTORE
000014d5: CALLER
000014d6: PUSH2 0x1225
000014d9: JUMP
000014da: JUMPDEST
000014db: PUSH2 0x14f7
000014de: JUMPI
000014df: PUSH1 0x40
000014e1: MLOAD
000014e2: PUSH4 0x1966c8a5
000014e7: PUSH1 0xe0
000014e9: SHL
000014ea: DUP2
000014eb: MSTORE
000014ec: PUSH1 0x04
000014ee: ADD
000014ef: PUSH1 0x40
000014f1: MLOAD
000014f2: DUP1
000014f3: SWAP2
000014f4: SUB
000014f5: SWAP1
000014f6: REVERT
000014f7: JUMPDEST
000014f8: PUSH2 0x1500
000014fb: DUP5
000014fc: PUSH2 0x1a8f
000014ff: JUMP
00001500: JUMPDEST
00001501: PUSH2 0x150b
00001504: PUSH1 0x07
00001506: DUP4
00001507: PUSH2 0x1ac2
0000150a: JUMP
0000150b: JUMPDEST
0000150c: PUSH2 0x1533
0000150f: JUMPI
00001510: PUSH1 0x40
00001512: MLOAD
00001513: PUSH4 0xa787604b
00001518: PUSH1 0xe0
0000151a: SHL
0000151b: DUP2
0000151c: MSTORE
0000151d: PUSH1 0x01
0000151f: PUSH1 0x01
00001521: PUSH1 0xa0
00001523: SHL
00001524: SUB
00001525: DUP4
00001526: AND
00001527: PUSH1 0x04
00001529: DUP3
0000152a: ADD
0000152b: MSTORE
0000152c: PUSH1 0x24
0000152e: ADD
0000152f: PUSH2 0x094f
00001532: JUMP
00001533: JUMPDEST
00001534: PUSH1 0x00
00001536: PUSH2 0x1540
00001539: PUSH1 0x09
0000153b: DUP7
0000153c: PUSH2 0x1b58
0000153f: JUMP
00001540: JUMPDEST
00001541: SWAP2
00001542: POP
00001543: POP
00001544: DUP4
00001545: DUP2
00001546: LT
00001547: ISZERO
00001548: PUSH2 0x156e
0000154b: JUMPI
0000154c: PUSH1 0x40
0000154e: MLOAD
0000154f: PUSH4 0x086e2197
00001554: PUSH1 0xe1
00001556: SHL
00001557: DUP2
00001558: MSTORE
00001559: PUSH1 0x04
0000155b: DUP2
0000155c: ADD
0000155d: DUP3
0000155e: SWAP1
0000155f: MSTORE
00001560: PUSH1 0x24
00001562: DUP2
00001563: ADD
00001564: DUP6
00001565: SWAP1
00001566: MSTORE
00001567: PUSH1 0x44
00001569: ADD
0000156a: PUSH2 0x094f
0000156d: JUMP
0000156e: JUMPDEST
0000156f: PUSH1 0x00
00001571: PUSH2 0x157b
00001574: PUSH1 0x11
00001576: DUP8
00001577: PUSH2 0x1b58
0000157a: JUMP
0000157b: JUMPDEST
0000157c: SWAP2
0000157d: POP
0000157e: PUSH1 0x00
00001580: SWAP1
00001581: POP
00001582: DUP1
00001583: PUSH2 0x158d
00001586: PUSH1 0x0e
00001588: DUP10
00001589: PUSH2 0x1b58
0000158c: JUMP
0000158d: JUMPDEST
0000158e: SWAP1
0000158f: SWAP3
00001590: POP
00001591: SWAP1
00001592: POP
00001593: PUSH2 0x159c
00001596: DUP2
00001597: DUP5
00001598: PUSH2 0x2739
0000159b: JUMP
0000159c: JUMPDEST
0000159d: TIMESTAMP
0000159e: GT
0000159f: DUP1
000015a0: ISZERO
000015a1: PUSH2 0x15a7
000015a4: JUMPI
000015a5: POP
000015a6: DUP2
000015a7: JUMPDEST
000015a8: PUSH2 0x15ce
000015ab: JUMPI
000015ac: PUSH1 0x40
000015ae: MLOAD
000015af: PUSH4 0x0722e4a1
000015b4: PUSH1 0xe5
000015b6: SHL
000015b7: DUP2
000015b8: MSTORE
000015b9: PUSH1 0x04
000015bb: DUP2
000015bc: ADD
000015bd: DUP5
000015be: SWAP1
000015bf: MSTORE
000015c0: PUSH1 0x24
000015c2: DUP2
000015c3: ADD
000015c4: DUP3
000015c5: SWAP1
000015c6: MSTORE
000015c7: PUSH1 0x44
000015c9: ADD
000015ca: PUSH2 0x094f
000015cd: JUMP
000015ce: JUMPDEST
000015cf: PUSH1 0x40
000015d1: MLOAD
000015d2: PUSH4 0x70a08231
000015d7: PUSH1 0xe0
000015d9: SHL
000015da: DUP2
000015db: MSTORE
000015dc: ADDRESS
000015dd: PUSH1 0x04
000015df: DUP3
000015e0: ADD
000015e1: MSTORE
000015e2: DUP9
000015e3: SWAP1
000015e4: PUSH1 0x00
000015e6: SWAP1
000015e7: PUSH1 0x01
000015e9: PUSH1 0x01
000015eb: PUSH1 0xa0
000015ed: SHL
000015ee: SUB
000015ef: DUP4
000015f0: AND
000015f1: SWAP1
000015f2: PUSH4 0x70a08231
000015f7: SWAP1
000015f8: PUSH1 0x24
000015fa: ADD
000015fb: PUSH1 0x20
000015fd: PUSH1 0x40
000015ff: MLOAD
00001600: DUP1
00001601: DUP4
00001602: SUB
00001603: DUP2
00001604: DUP7
00001605: GAS
00001606: STATICCALL
00001607: ISZERO
00001608: DUP1
00001609: ISZERO
0000160a: PUSH2 0x1617
0000160d: JUMPI
0000160e: RETURNDATASIZE
0000160f: PUSH1 0x00
00001611: DUP1
00001612: RETURNDATACOPY
00001613: RETURNDATASIZE
00001614: PUSH1 0x00
00001616: REVERT
00001617: JUMPDEST
00001618: POP
00001619: POP
0000161a: POP
0000161b: POP
0000161c: PUSH1 0x40
0000161e: MLOAD
0000161f: RETURNDATASIZE
00001620: PUSH1 0x1f
00001622: NOT
00001623: PUSH1 0x1f
00001625: DUP3
00001626: ADD
00001627: AND
00001628: DUP3
00001629: ADD
0000162a: DUP1
0000162b: PUSH1 0x40
0000162d: MSTORE
0000162e: POP
0000162f: DUP2
00001630: ADD
00001631: SWAP1
00001632: PUSH2 0x163b
00001635: SWAP2
00001636: SWAP1
00001637: PUSH2 0x270a
0000163a: JUMP
0000163b: JUMPDEST
0000163c: SWAP1
0000163d: POP
0000163e: DUP9
0000163f: DUP2
00001640: LT
00001641: ISZERO
00001642: PUSH2 0x1668
00001645: JUMPI
00001646: PUSH1 0x40
00001648: MLOAD
00001649: PUSH4 0x4787a103
0000164e: PUSH1 0xe1
00001650: SHL
00001651: DUP2
00001652: MSTORE
00001653: PUSH1 0x04
00001655: DUP2
00001656: ADD
00001657: DUP3
00001658: SWAP1
00001659: MSTORE
0000165a: PUSH1 0x24
0000165c: DUP2
0000165d: ADD
0000165e: DUP11
0000165f: SWAP1
00001660: MSTORE
00001661: PUSH1 0x44
00001663: ADD
00001664: PUSH2 0x094f
00001667: JUMP
00001668: JUMPDEST
00001669: DUP7
0000166a: DUP1
0000166b: ISZERO
0000166c: PUSH2 0x1682
0000166f: JUMPI
00001670: POP
00001671: PUSH1 0x02
00001673: SLOAD
00001674: PUSH1 0x01
00001676: PUSH1 0x01
00001678: PUSH1 0xa0
0000167a: SHL
0000167b: SUB
0000167c: DUP12
0000167d: DUP2
0000167e: AND
0000167f: SWAP2
00001680: AND
00001681: EQ
00001682: JUMPDEST
00001683: ISZERO
00001684: PUSH2 0x171d
00001687: JUMPI
00001688: PUSH1 0x40
0000168a: MLOAD
0000168b: PUSH4 0x2e1a7d4d
00001690: PUSH1 0xe0
00001692: SHL
00001693: DUP2
00001694: MSTORE
00001695: PUSH1 0x04
00001697: DUP2
00001698: ADD
00001699: DUP11
0000169a: SWAP1
0000169b: MSTORE
0000169c: PUSH1 0x01
0000169e: PUSH1 0x01
000016a0: PUSH1 0xa0
000016a2: SHL
000016a3: SUB
000016a4: DUP12
000016a5: AND
000016a6: SWAP1
000016a7: PUSH4 0x2e1a7d4d
000016ac: SWAP1
000016ad: PUSH1 0x24
000016af: ADD
000016b0: PUSH1 0x00
000016b2: PUSH1 0x40
000016b4: MLOAD
000016b5: DUP1
000016b6: DUP4
000016b7: SUB
000016b8: DUP2
000016b9: PUSH1 0x00
000016bb: DUP8
000016bc: DUP1
000016bd: EXTCODESIZE
000016be: ISZERO
000016bf: DUP1
000016c0: ISZERO
000016c1: PUSH2 0x16c9
000016c4: JUMPI
000016c5: PUSH1 0x00
000016c7: DUP1
000016c8: REVERT
000016c9: JUMPDEST
000016ca: POP
000016cb: GAS
000016cc: CALL
000016cd: ISZERO
000016ce: DUP1
000016cf: ISZERO
000016d0: PUSH2 0x16dd
000016d3: JUMPI
000016d4: RETURNDATASIZE
000016d5: PUSH1 0x00
000016d7: DUP1
000016d8: RETURNDATACOPY
000016d9: RETURNDATASIZE
000016da: PUSH1 0x00
000016dc: REVERT
000016dd: JUMPDEST
000016de: POP
000016df: POP
000016e0: PUSH1 0x40
000016e2: MLOAD
000016e3: PUSH1 0x01
000016e5: PUSH1 0x01
000016e7: PUSH1 0xa0
000016e9: SHL
000016ea: SUB
000016eb: DUP12
000016ec: AND
000016ed: SWAP3
000016ee: POP
000016ef: DUP12
000016f0: ISZERO
000016f1: PUSH2 0x08fc
000016f4: MUL
000016f5: SWAP2
000016f6: POP
000016f7: DUP12
000016f8: SWAP1
000016f9: PUSH1 0x00
000016fb: DUP2
000016fc: DUP2
000016fd: DUP2
000016fe: DUP6
000016ff: DUP9
00001700: DUP9
00001701: CALL
00001702: SWAP4
00001703: POP
00001704: POP
00001705: POP
00001706: POP
00001707: ISZERO
00001708: DUP1
00001709: ISZERO
0000170a: PUSH2 0x1717
0000170d: JUMPI
0000170e: RETURNDATASIZE
0000170f: PUSH1 0x00
00001711: DUP1
00001712: RETURNDATACOPY
00001713: RETURNDATASIZE
00001714: PUSH1 0x00
00001716: REVERT
00001717: JUMPDEST
00001718: POP
00001719: PUSH2 0x1731
0000171c: JUMP
0000171d: JUMPDEST
0000171e: PUSH2 0x1731
00001721: PUSH1 0x01
00001723: PUSH1 0x01
00001725: PUSH1 0xa0
00001727: SHL
00001728: SUB
00001729: DUP12
0000172a: AND
0000172b: DUP10
0000172c: DUP12
0000172d: PUSH2 0x1ae4
00001730: JUMP
00001731: JUMPDEST
00001732: PUSH2 0x173d
00001735: PUSH1 0x11
00001737: DUP12
00001738: TIMESTAMP
00001739: PUSH2 0x1b85
0000173c: JUMP
0000173d: JUMPDEST
0000173e: POP
0000173f: PUSH1 0x40
00001741: DUP1
00001742: MLOAD
00001743: PUSH1 0x01
00001745: PUSH1 0x01
00001747: PUSH1 0xa0
00001749: SHL
0000174a: SUB
0000174b: DUP13
0000174c: DUP2
0000174d: AND
0000174e: DUP3
0000174f: MSTORE
00001750: PUSH1 0x20
00001752: DUP3
00001753: ADD
00001754: DUP13
00001755: SWAP1
00001756: MSTORE
00001757: DUP11
00001758: AND
00001759: DUP2
0000175a: DUP4
0000175b: ADD
0000175c: MSTORE
0000175d: DUP9
0000175e: ISZERO
0000175f: ISZERO
00001760: PUSH1 0x60
00001762: DUP3
00001763: ADD
00001764: MSTORE
00001765: SWAP1
00001766: MLOAD
00001767: PUSH32 0xf5a218c3f2e48fb71969f47c462c49a00473152fa2170938abd781982c93fca6
00001788: SWAP2
00001789: DUP2
0000178a: SWAP1
0000178b: SUB
0000178c: PUSH1 0x80
0000178e: ADD
0000178f: SWAP1
00001790: LOG1
00001791: POP
00001792: POP
00001793: POP
00001794: POP
00001795: POP
00001796: POP
00001797: POP
00001798: POP
00001799: POP
0000179a: POP
0000179b: JUMP
0000179c: JUMPDEST
0000179d: PUSH1 0x00
0000179f: DUP4
000017a0: DUP2
000017a1: MSTORE
000017a2: PUSH1 0x20
000017a4: DUP2
000017a5: SWAP1
000017a6: MSTORE
000017a7: PUSH1 0x40
000017a9: SWAP1
000017aa: KECCAK256
000017ab: PUSH1 0x01
000017ad: ADD
000017ae: SLOAD
000017af: PUSH2 0x17b7
000017b2: DUP2
000017b3: PUSH2 0x1c58
000017b6: JUMP
000017b7: JUMPDEST
000017b8: DUP4
000017b9: DUP1
000017ba: ISZERO
000017bb: DUP1
000017bc: ISZERO
000017bd: SWAP1
000017be: PUSH2 0x17d5
000017c1: JUMPI
000017c2: POP
000017c3: PUSH1 0x00
000017c5: DUP1
000017c6: MLOAD
000017c7: PUSH1 0x20
000017c9: PUSH2 0x2793
000017cc: DUP4
000017cd: CODECOPY
000017ce: DUP2
000017cf: MLOAD
000017d0: SWAP2
000017d1: MSTORE
000017d2: DUP2
000017d3: EQ
000017d4: ISZERO
000017d5: JUMPDEST
000017d6: DUP1
000017d7: ISZERO
000017d8: PUSH2 0x17ef
000017db: JUMPI
000017dc: POP
000017dd: PUSH1 0x00
000017df: DUP1
000017e0: MLOAD
000017e1: PUSH1 0x20
000017e3: PUSH2 0x27d3
000017e6: DUP4
000017e7: CODECOPY
000017e8: DUP2
000017e9: MLOAD
000017ea: SWAP2
000017eb: MSTORE
000017ec: DUP2
000017ed: EQ
000017ee: ISZERO
000017ef: JUMPDEST
000017f0: DUP1
000017f1: ISZERO
000017f2: PUSH2 0x1809
000017f5: JUMPI
000017f6: POP
000017f7: PUSH1 0x00
000017f9: DUP1
000017fa: MLOAD
000017fb: PUSH1 0x20
000017fd: PUSH2 0x27b3
00001800: DUP4
00001801: CODECOPY
00001802: DUP2
00001803: MLOAD
00001804: SWAP2
00001805: MSTORE
00001806: DUP2
00001807: EQ
00001808: ISZERO
00001809: JUMPDEST
0000180a: DUP1
0000180b: ISZERO
0000180c: PUSH2 0x1823
0000180f: JUMPI
00001810: POP
00001811: PUSH1 0x00
00001813: DUP1
00001814: MLOAD
00001815: PUSH1 0x20
00001817: PUSH2 0x27f3
0000181a: DUP4
0000181b: CODECOPY
0000181c: DUP2
0000181d: MLOAD
0000181e: SWAP2
0000181f: MSTORE
00001820: DUP2
00001821: EQ
00001822: ISZERO
00001823: JUMPDEST
00001824: ISZERO
00001825: PUSH2 0x1844
00001828: JUMPI
00001829: PUSH1 0x40
0000182b: MLOAD
0000182c: PUSH4 0x125a2bb7
00001831: PUSH1 0xe0
00001833: SHL
00001834: DUP2
00001835: MSTORE
00001836: PUSH1 0x04
00001838: DUP2
00001839: ADD
0000183a: DUP3
0000183b: SWAP1
0000183c: MSTORE
0000183d: PUSH1 0x24
0000183f: ADD
00001840: PUSH2 0x094f
00001843: JUMP
00001844: JUMPDEST
00001845: PUSH1 0x00
00001847: JUMPDEST
00001848: DUP4
00001849: DUP2
0000184a: LT
0000184b: ISZERO
0000184c: PUSH2 0x1882
0000184f: JUMPI
00001850: PUSH2 0x187a
00001853: DUP7
00001854: DUP7
00001855: DUP7
00001856: DUP5
00001857: DUP2
00001858: DUP2
00001859: LT
0000185a: PUSH2 0x1865
0000185d: JUMPI
0000185e: PUSH2 0x1865
00001861: PUSH2 0x26c5
00001864: JUMP
00001865: JUMPDEST
00001866: SWAP1
00001867: POP
00001868: PUSH1 0x20
0000186a: MUL
0000186b: ADD
0000186c: PUSH1 0x20
0000186e: DUP2
0000186f: ADD
00001870: SWAP1
00001871: PUSH2 0x0459
00001874: SWAP2
00001875: SWAP1
00001876: PUSH2 0x243a
00001879: JUMP
0000187a: JUMPDEST
0000187b: PUSH1 0x01
0000187d: ADD
0000187e: PUSH2 0x1847
00001881: JUMP
00001882: JUMPDEST
00001883: POP
00001884: POP
00001885: POP
00001886: POP
00001887: POP
00001888: POP
00001889: JUMP
0000188a: JUMPDEST
0000188b: CALLER
0000188c: ADDRESS
0000188d: EQ
0000188e: PUSH2 0x18ac
00001891: JUMPI
00001892: PUSH1 0x40
00001894: MLOAD
00001895: PUSH4 0x472511eb
0000189a: PUSH1 0xe1
0000189c: SHL
0000189d: DUP2
0000189e: MSTORE
0000189f: CALLER
000018a0: PUSH1 0x04
000018a2: DUP3
000018a3: ADD
000018a4: MSTORE
000018a5: PUSH1 0x24
000018a7: ADD
000018a8: PUSH2 0x094f
000018ab: JUMP
000018ac: JUMPDEST
000018ad: PUSH2 0x18b5
000018b0: DUP4
000018b1: PUSH2 0x1a8f
000018b4: JUMP
000018b5: JUMPDEST
000018b6: PUSH2 0x18c0
000018b9: PUSH1 0x0c
000018bb: DUP4
000018bc: PUSH2 0x1ac2
000018bf: JUMP
000018c0: JUMPDEST
000018c1: PUSH2 0x18e8
000018c4: JUMPI
000018c5: PUSH1 0x40
000018c7: MLOAD
000018c8: PUSH4 0x27bca0f5
000018cd: PUSH1 0xe2
000018cf: SHL
000018d0: DUP2
000018d1: MSTORE
000018d2: PUSH1 0x01
000018d4: PUSH1 0x01
000018d6: PUSH1 0xa0
000018d8: SHL
000018d9: SUB
000018da: DUP4
000018db: AND
000018dc: PUSH1 0x04
000018de: DUP3
000018df: ADD
000018e0: MSTORE
000018e1: PUSH1 0x24
000018e3: ADD
000018e4: PUSH2 0x094f
000018e7: JUMP
000018e8: JUMPDEST
000018e9: PUSH2 0x0e30
000018ec: PUSH1 0x01
000018ee: PUSH1 0x01
000018f0: PUSH1 0xa0
000018f2: SHL
000018f3: SUB
000018f4: DUP5
000018f5: AND
000018f6: DUP4
000018f7: DUP4
000018f8: PUSH2 0x1c62
000018fb: JUMP
000018fc: JUMPDEST
000018fd: PUSH1 0x00
000018ff: PUSH2 0x0800
00001902: PUSH1 0x05
00001904: DUP4
00001905: PUSH2 0x1ac2
00001908: JUMP
00001909: JUMPDEST
0000190a: PUSH2 0x1921
0000190d: PUSH1 0x00
0000190f: DUP1
00001910: MLOAD
00001911: PUSH1 0x20
00001913: PUSH2 0x2793
00001916: DUP4
00001917: CODECOPY
00001918: DUP2
00001919: MLOAD
0000191a: SWAP2
0000191b: MSTORE
0000191c: CALLER
0000191d: PUSH2 0x1225
00001920: JUMP
00001921: JUMPDEST
00001922: PUSH2 0x193e
00001925: JUMPI
00001926: PUSH1 0x40
00001928: MLOAD
00001929: PUSH4 0x605919ad
0000192e: PUSH1 0xe1
00001930: SHL
00001931: DUP2
00001932: MSTORE
00001933: PUSH1 0x04
00001935: ADD
00001936: PUSH1 0x40
00001938: MLOAD
00001939: DUP1
0000193a: SWAP2
0000193b: SUB
0000193c: SWAP1
0000193d: REVERT
0000193e: JUMPDEST
0000193f: PUSH2 0x1949
00001942: PUSH1 0x0c
00001944: DUP3
00001945: PUSH2 0x1ac2
00001948: JUMP
00001949: JUMPDEST
0000194a: PUSH2 0x0c40
0000194d: JUMPI
0000194e: PUSH2 0x1958
00001951: PUSH1 0x0c
00001953: DUP3
00001954: PUSH2 0x1bc6
00001957: JUMP
00001958: JUMPDEST
00001959: POP
0000195a: PUSH1 0x40
0000195c: MLOAD
0000195d: PUSH1 0x01
0000195f: PUSH1 0x01
00001961: PUSH1 0xa0
00001963: SHL
00001964: SUB
00001965: DUP3
00001966: AND
00001967: DUP2
00001968: MSTORE
00001969: PUSH32 0x3139419c41cdd7abca84fa19dd21118cd285d3e2ce1a9444e8161ce9fa62fdcd
0000198a: SWAP1
0000198b: PUSH1 0x20
0000198d: ADD
0000198e: PUSH2 0x0c37
00001991: JUMP
00001992: JUMPDEST
00001993: PUSH1 0x00
00001995: PUSH2 0x104a
00001998: PUSH1 0x0e
0000199a: DUP4
0000199b: PUSH2 0x1b58
0000199e: JUMP
0000199f: JUMPDEST
000019a0: PUSH2 0x0c40
000019a3: DUP2
000019a4: PUSH2 0x1a8f
000019a7: JUMP
000019a8: JUMPDEST
000019a9: PUSH2 0x19c0
000019ac: PUSH1 0x00
000019ae: DUP1
000019af: MLOAD
000019b0: PUSH1 0x20
000019b2: PUSH2 0x2793
000019b5: DUP4
000019b6: CODECOPY
000019b7: DUP2
000019b8: MLOAD
000019b9: SWAP2
000019ba: MSTORE
000019bb: CALLER
000019bc: PUSH2 0x1225
000019bf: JUMP
000019c0: JUMPDEST
000019c1: PUSH2 0x19dd
000019c4: JUMPI
000019c5: PUSH1 0x40
000019c7: MLOAD
000019c8: PUSH4 0x605919ad
000019cd: PUSH1 0xe1
000019cf: SHL
000019d0: DUP2
000019d1: MSTORE
000019d2: PUSH1 0x04
000019d4: ADD
000019d5: PUSH1 0x40
000019d7: MLOAD
000019d8: DUP1
000019d9: SWAP2
000019da: SUB
000019db: SWAP1
000019dc: REVERT
000019dd: JUMPDEST
000019de: PUSH2 0x19e8
000019e1: PUSH1 0x07
000019e3: DUP3
000019e4: PUSH2 0x1ac2
000019e7: JUMP
000019e8: JUMPDEST
000019e9: PUSH2 0x0c40
000019ec: JUMPI
000019ed: PUSH2 0x19f7
000019f0: PUSH1 0x07
000019f2: DUP3
000019f3: PUSH2 0x1bc6
000019f6: JUMP
000019f7: JUMPDEST
000019f8: POP
000019f9: PUSH1 0x40
000019fb: MLOAD
000019fc: PUSH1 0x01
000019fe: PUSH1 0x01
00001a00: PUSH1 0xa0
00001a02: SHL
00001a03: SUB
00001a04: DUP3
00001a05: AND
00001a06: DUP2
00001a07: MSTORE
00001a08: PUSH32 0xb161bb911e584e40711ead7275aaf23b4dfeb38befa1e269b835db83e0d112a7
00001a29: SWAP1
00001a2a: PUSH1 0x20
00001a2c: ADD
00001a2d: PUSH2 0x0c37
00001a30: JUMP
00001a31: JUMPDEST
00001a32: PUSH1 0x00
00001a34: PUSH1 0x01
00001a36: PUSH1 0x01
00001a38: PUSH1 0xe0
00001a3a: SHL
00001a3b: SUB
00001a3c: NOT
00001a3d: DUP3
00001a3e: AND
00001a3f: PUSH4 0x7965db0b
00001a44: PUSH1 0xe0
00001a46: SHL
00001a47: EQ
00001a48: DUP1
00001a49: PUSH2 0x0800
00001a4c: JUMPI
00001a4d: POP
00001a4e: PUSH4 0x01ffc9a7
00001a53: PUSH1 0xe0
00001a55: SHL
00001a56: PUSH1 0x01
00001a58: PUSH1 0x01
00001a5a: PUSH1 0xe0
00001a5c: SHL
00001a5d: SUB
00001a5e: NOT
00001a5f: DUP4
00001a60: AND
00001a61: EQ
00001a62: PUSH2 0x0800
00001a65: JUMP
00001a66: JUMPDEST
00001a67: PUSH1 0x00
00001a69: PUSH2 0x0800
00001a6c: DUP3
00001a6d: PUSH2 0x1cf2
00001a70: JUMP
00001a71: JUMPDEST
00001a72: PUSH1 0x00
00001a74: DUP1
00001a75: DUP1
00001a76: DUP1
00001a77: PUSH2 0x1a80
00001a7a: DUP7
00001a7b: DUP7
00001a7c: PUSH2 0x1cfd
00001a7f: JUMP
00001a80: JUMPDEST
00001a81: SWAP1
00001a82: SWAP5
00001a83: POP
00001a84: SWAP3
00001a85: POP
00001a86: POP
00001a87: POP
00001a88: JUMPDEST
00001a89: SWAP3
00001a8a: POP
00001a8b: SWAP3
00001a8c: SWAP1
00001a8d: POP
00001a8e: JUMP
00001a8f: JUMPDEST
00001a90: PUSH2 0x1a9a
00001a93: PUSH1 0x05
00001a95: DUP3
00001a96: PUSH2 0x1ac2
00001a99: JUMP
00001a9a: JUMPDEST
00001a9b: PUSH2 0x0c40
00001a9e: JUMPI
00001a9f: PUSH1 0x40
00001aa1: MLOAD
00001aa2: PUSH4 0x5f8b555b
00001aa7: PUSH1 0xe1
00001aa9: SHL
00001aaa: DUP2
00001aab: MSTORE
00001aac: PUSH1 0x01
00001aae: PUSH1 0x01
00001ab0: PUSH1 0xa0
00001ab2: SHL
00001ab3: SUB
00001ab4: DUP3
00001ab5: AND
00001ab6: PUSH1 0x04
00001ab8: DUP3
00001ab9: ADD
00001aba: MSTORE
00001abb: PUSH1 0x24
00001abd: ADD
00001abe: PUSH2 0x094f
00001ac1: JUMP
00001ac2: JUMPDEST
00001ac3: PUSH1 0x01
00001ac5: PUSH1 0x01
00001ac7: PUSH1 0xa0
00001ac9: SHL
00001aca: SUB
00001acb: DUP2
00001acc: AND
00001acd: PUSH1 0x00
00001acf: SWAP1
00001ad0: DUP2
00001ad1: MSTORE
00001ad2: PUSH1 0x01
00001ad4: DUP4
00001ad5: ADD
00001ad6: PUSH1 0x20
00001ad8: MSTORE
00001ad9: PUSH1 0x40
00001adb: DUP2
00001adc: KECCAK256
00001add: SLOAD
00001ade: ISZERO
00001adf: ISZERO
00001ae0: PUSH2 0x104a
00001ae3: JUMP
00001ae4: JUMPDEST
00001ae5: PUSH1 0x40
00001ae7: MLOAD
00001ae8: PUSH1 0x01
00001aea: PUSH1 0x01
00001aec: PUSH1 0xa0
00001aee: SHL
00001aef: SUB
00001af0: DUP4
00001af1: DUP2
00001af2: AND
00001af3: PUSH1 0x24
00001af5: DUP4
00001af6: ADD
00001af7: MSTORE
00001af8: PUSH1 0x44
00001afa: DUP3
00001afb: ADD
00001afc: DUP4
00001afd: SWAP1
00001afe: MSTORE
00001aff: PUSH2 0x0e30
00001b02: SWAP2
00001b03: DUP6
00001b04: SWAP2
00001b05: DUP3
00001b06: AND
00001b07: SWAP1
00001b08: PUSH4 0xa9059cbb
00001b0d: SWAP1
00001b0e: PUSH1 0x64
00001b10: ADD
00001b11: JUMPDEST
00001b12: PUSH1 0x40
00001b14: MLOAD
00001b15: PUSH1 0x20
00001b17: DUP2
00001b18: DUP4
00001b19: SUB
00001b1a: SUB
00001b1b: DUP2
00001b1c: MSTORE
00001b1d: SWAP1
00001b1e: PUSH1 0x40
00001b20: MSTORE
00001b21: SWAP2
00001b22: POP
00001b23: PUSH1 0xe0
00001b25: SHL
00001b26: PUSH1 0x20
00001b28: DUP3
00001b29: ADD
00001b2a: DUP1
00001b2b: MLOAD
00001b2c: PUSH1 0x01
00001b2e: PUSH1 0x01
00001b30: PUSH1 0xe0
00001b32: SHL
00001b33: SUB
00001b34: DUP4
00001b35: DUP2
00001b36: DUP4
00001b37: AND
00001b38: OR
00001b39: DUP4
00001b3a: MSTORE
00001b3b: POP
00001b3c: POP
00001b3d: POP
00001b3e: POP
00001b3f: PUSH2 0x1d28
00001b42: JUMP
00001b43: JUMPDEST
00001b44: PUSH1 0x00
00001b46: PUSH2 0x104a
00001b49: DUP4
00001b4a: PUSH1 0x01
00001b4c: PUSH1 0x01
00001b4e: PUSH1 0xa0
00001b50: SHL
00001b51: SUB
00001b52: DUP5
00001b53: AND
00001b54: PUSH2 0x1d8b
00001b57: JUMP
00001b58: JUMPDEST
00001b59: PUSH1 0x00
00001b5b: DUP1
00001b5c: DUP1
00001b5d: DUP1
00001b5e: PUSH2 0x1a80
00001b61: DUP7
00001b62: PUSH1 0x01
00001b64: PUSH1 0x01
00001b66: PUSH1 0xa0
00001b68: SHL
00001b69: SUB
00001b6a: DUP8
00001b6b: AND
00001b6c: PUSH2 0x1e7e
00001b6f: JUMP
00001b70: JUMPDEST
00001b71: PUSH1 0x00
00001b73: PUSH2 0x104a
00001b76: DUP4
00001b77: PUSH1 0x01
00001b79: PUSH1 0x01
00001b7b: PUSH1 0xa0
00001b7d: SHL
00001b7e: SUB
00001b7f: DUP5
00001b80: AND
00001b81: PUSH2 0x1eb8
00001b84: JUMP
00001b85: JUMPDEST
00001b86: PUSH1 0x00
00001b88: PUSH2 0x1b9b
00001b8b: DUP5
00001b8c: PUSH1 0x01
00001b8e: PUSH1 0x01
00001b90: PUSH1 0xa0
00001b92: SHL
00001b93: SUB
00001b94: DUP6
00001b95: AND
00001b96: DUP5
00001b97: PUSH2 0x1ed5
00001b9a: JUMP
00001b9b: JUMPDEST
00001b9c: SWAP5
00001b9d: SWAP4
00001b9e: POP
00001b9f: POP
00001ba0: POP
00001ba1: POP
00001ba2: JUMP
00001ba3: JUMPDEST
00001ba4: DUP1
00001ba5: MLOAD
00001ba6: PUSH1 0x00
00001ba8: DUP1
00001ba9: DUP3
00001baa: PUSH1 0x20
00001bac: DUP6
00001bad: ADD
00001bae: DUP7
00001baf: GAS
00001bb0: DELEGATECALL
00001bb1: RETURNDATASIZE
00001bb2: PUSH1 0x00
00001bb4: DUP1
00001bb5: RETURNDATACOPY
00001bb6: DUP1
00001bb7: DUP1
00001bb8: ISZERO
00001bb9: PUSH2 0x1bc1
00001bbc: JUMPI
00001bbd: RETURNDATASIZE
00001bbe: PUSH1 0x00
00001bc0: RETURN
00001bc1: JUMPDEST
00001bc2: RETURNDATASIZE
00001bc3: PUSH1 0x00
00001bc5: REVERT
00001bc6: JUMPDEST
00001bc7: PUSH1 0x00
00001bc9: PUSH2 0x104a
00001bcc: DUP4
00001bcd: PUSH1 0x01
00001bcf: PUSH1 0x01
00001bd1: PUSH1 0xa0
00001bd3: SHL
00001bd4: SUB
00001bd5: DUP5
00001bd6: AND
00001bd7: PUSH2 0x1ef2
00001bda: JUMP
00001bdb: JUMPDEST
00001bdc: PUSH1 0x00
00001bde: DUP3
00001bdf: DUP2
00001be0: MSTORE
00001be1: PUSH1 0x20
00001be3: DUP2
00001be4: SWAP1
00001be5: MSTORE
00001be6: PUSH1 0x40
00001be8: SWAP1
00001be9: KECCAK256
00001bea: PUSH1 0x01
00001bec: ADD
00001bed: SLOAD
00001bee: PUSH2 0x1bf6
00001bf1: DUP2
00001bf2: PUSH2 0x1c58
00001bf5: JUMP
00001bf6: JUMPDEST
00001bf7: PUSH2 0x14bc
00001bfa: DUP4
00001bfb: DUP4
00001bfc: PUSH2 0x1f41
00001bff: JUMP
00001c00: JUMPDEST
00001c01: PUSH1 0x00
00001c03: DUP1
00001c04: PUSH2 0x1c0d
00001c07: DUP5
00001c08: DUP5
00001c09: PUSH2 0x1f6e
00001c0c: JUMP
00001c0d: JUMPDEST
00001c0e: SWAP1
00001c0f: POP
00001c10: DUP1
00001c11: ISZERO
00001c12: PUSH2 0x104a
00001c15: JUMPI
00001c16: PUSH1 0x00
00001c18: DUP5
00001c19: DUP2
00001c1a: MSTORE
00001c1b: PUSH1 0x01
00001c1d: PUSH1 0x20
00001c1f: MSTORE
00001c20: PUSH1 0x40
00001c22: SWAP1
00001c23: KECCAK256
00001c24: PUSH2 0x1c2d
00001c27: SWAP1
00001c28: DUP5
00001c29: PUSH2 0x1b43
00001c2c: JUMP
00001c2d: JUMPDEST
00001c2e: POP
00001c2f: SWAP4
00001c30: SWAP3
00001c31: POP
00001c32: POP
00001c33: POP
00001c34: JUMP
00001c35: JUMPDEST
00001c36: PUSH1 0x60
00001c38: PUSH1 0x00
00001c3a: PUSH2 0x104a
00001c3d: DUP4
00001c3e: PUSH2 0x1fd9
00001c41: JUMP
00001c42: JUMPDEST
00001c43: PUSH1 0x00
00001c45: PUSH2 0x104a
00001c48: DUP4
00001c49: DUP4
00001c4a: PUSH2 0x2035
00001c4d: JUMP
00001c4e: JUMPDEST
00001c4f: PUSH1 0x00
00001c51: PUSH2 0x0800
00001c54: DUP3
00001c55: SLOAD
00001c56: SWAP1
00001c57: JUMP
00001c58: JUMPDEST
00001c59: PUSH2 0x0c40
00001c5c: DUP2
00001c5d: CALLER
00001c5e: PUSH2 0x205f
00001c61: JUMP
00001c62: JUMPDEST
00001c63: PUSH1 0x40
00001c65: DUP1
00001c66: MLOAD
00001c67: PUSH1 0x01
00001c69: PUSH1 0x01
00001c6b: PUSH1 0xa0
00001c6d: SHL
00001c6e: SUB
00001c6f: DUP5
00001c70: AND
00001c71: PUSH1 0x24
00001c73: DUP3
00001c74: ADD
00001c75: MSTORE
00001c76: PUSH1 0x44
00001c78: DUP1
00001c79: DUP3
00001c7a: ADD
00001c7b: DUP5
00001c7c: SWAP1
00001c7d: MSTORE
00001c7e: DUP3
00001c7f: MLOAD
00001c80: DUP1
00001c81: DUP4
00001c82: SUB
00001c83: SWAP1
00001c84: SWAP2
00001c85: ADD
00001c86: DUP2
00001c87: MSTORE
00001c88: PUSH1 0x64
00001c8a: SWAP1
00001c8b: SWAP2
00001c8c: ADD
00001c8d: SWAP1
00001c8e: SWAP2
00001c8f: MSTORE
00001c90: PUSH1 0x20
00001c92: DUP2
00001c93: ADD
00001c94: DUP1
00001c95: MLOAD
00001c96: PUSH1 0x01
00001c98: PUSH1 0x01
00001c9a: PUSH1 0xe0
00001c9c: SHL
00001c9d: SUB
00001c9e: AND
00001c9f: PUSH4 0x095ea7b3
00001ca4: PUSH1 0xe0
00001ca6: SHL
00001ca7: OR
00001ca8: SWAP1
00001ca9: MSTORE
00001caa: PUSH2 0x1cb3
00001cad: DUP5
00001cae: DUP3
00001caf: PUSH2 0x2098
00001cb2: JUMP
00001cb3: JUMPDEST
00001cb4: PUSH2 0x14bc
00001cb7: JUMPI
00001cb8: PUSH1 0x40
00001cba: MLOAD
00001cbb: PUSH1 0x01
00001cbd: PUSH1 0x01
00001cbf: PUSH1 0xa0
00001cc1: SHL
00001cc2: SUB
00001cc3: DUP5
00001cc4: DUP2
00001cc5: AND
00001cc6: PUSH1 0x24
00001cc8: DUP4
00001cc9: ADD
00001cca: MSTORE
00001ccb: PUSH1 0x00
00001ccd: PUSH1 0x44
00001ccf: DUP4
00001cd0: ADD
00001cd1: MSTORE
00001cd2: PUSH2 0x1ce8
00001cd5: SWAP2
00001cd6: DUP7
00001cd7: SWAP2
00001cd8: DUP3
00001cd9: AND
00001cda: SWAP1
00001cdb: PUSH4 0x095ea7b3
00001ce0: SWAP1
00001ce1: PUSH1 0x64
00001ce3: ADD
00001ce4: PUSH2 0x1b11
00001ce7: JUMP
00001ce8: JUMPDEST
00001ce9: PUSH2 0x14bc
00001cec: DUP5
00001ced: DUP3
00001cee: PUSH2 0x1d28
00001cf1: JUMP
00001cf2: JUMPDEST
00001cf3: PUSH1 0x00
00001cf5: PUSH2 0x0800
00001cf8: DUP3
00001cf9: PUSH2 0x1c4e
00001cfc: JUMP
00001cfd: JUMPDEST
00001cfe: PUSH1 0x00
00001d00: DUP1
00001d01: DUP1
00001d02: PUSH2 0x1d0b
00001d05: DUP6
00001d06: DUP6
00001d07: PUSH2 0x1c42
00001d0a: JUMP
00001d0b: JUMPDEST
00001d0c: PUSH1 0x00
00001d0e: DUP2
00001d0f: DUP2
00001d10: MSTORE
00001d11: PUSH1 0x02
00001d13: SWAP7
00001d14: SWAP1
00001d15: SWAP7
00001d16: ADD
00001d17: PUSH1 0x20
00001d19: MSTORE
00001d1a: PUSH1 0x40
00001d1c: SWAP1
00001d1d: SWAP6
00001d1e: KECCAK256
00001d1f: SLOAD
00001d20: SWAP5
00001d21: SWAP6
00001d22: SWAP4
00001d23: POP
00001d24: POP
00001d25: POP
00001d26: POP
00001d27: JUMP
00001d28: JUMPDEST
00001d29: PUSH1 0x00
00001d2b: PUSH2 0x1d3d
00001d2e: PUSH1 0x01
00001d30: PUSH1 0x01
00001d32: PUSH1 0xa0
00001d34: SHL
00001d35: SUB
00001d36: DUP5
00001d37: AND
00001d38: DUP4
00001d39: PUSH2 0x2140
00001d3c: JUMP
00001d3d: JUMPDEST
00001d3e: SWAP1
00001d3f: POP
00001d40: DUP1
00001d41: MLOAD
00001d42: PUSH1 0x00
00001d44: EQ
00001d45: ISZERO
00001d46: DUP1
00001d47: ISZERO
00001d48: PUSH2 0x1d62
00001d4b: JUMPI
00001d4c: POP
00001d4d: DUP1
00001d4e: DUP1
00001d4f: PUSH1 0x20
00001d51: ADD
00001d52: SWAP1
00001d53: MLOAD
00001d54: DUP2
00001d55: ADD
00001d56: SWAP1
00001d57: PUSH2 0x1d60
00001d5a: SWAP2
00001d5b: SWAP1
00001d5c: PUSH2 0x275f
00001d5f: JUMP
00001d60: JUMPDEST
00001d61: ISZERO
00001d62: JUMPDEST
00001d63: ISZERO
00001d64: PUSH2 0x0e30
00001d67: JUMPI
00001d68: PUSH1 0x40
00001d6a: MLOAD
00001d6b: PUSH4 0x5274afe7
00001d70: PUSH1 0xe0
00001d72: SHL
00001d73: DUP2
00001d74: MSTORE
00001d75: PUSH1 0x01
00001d77: PUSH1 0x01
00001d79: PUSH1 0xa0
00001d7b: SHL
00001d7c: SUB
00001d7d: DUP5
00001d7e: AND
00001d7f: PUSH1 0x04
00001d81: DUP3
00001d82: ADD
00001d83: MSTORE
00001d84: PUSH1 0x24
00001d86: ADD
00001d87: PUSH2 0x094f
00001d8a: JUMP
00001d8b: JUMPDEST
00001d8c: PUSH1 0x00
00001d8e: DUP2
00001d8f: DUP2
00001d90: MSTORE
00001d91: PUSH1 0x01
00001d93: DUP4
00001d94: ADD
00001d95: PUSH1 0x20
00001d97: MSTORE
00001d98: PUSH1 0x40
00001d9a: DUP2
00001d9b: KECCAK256
00001d9c: SLOAD
00001d9d: DUP1
00001d9e: ISZERO
00001d9f: PUSH2 0x1e74
00001da2: JUMPI
00001da3: PUSH1 0x00
00001da5: PUSH2 0x1daf
00001da8: PUSH1 0x01
00001daa: DUP4
00001dab: PUSH2 0x274c
00001dae: JUMP
00001daf: JUMPDEST
00001db0: DUP6
00001db1: SLOAD
00001db2: SWAP1
00001db3: SWAP2
00001db4: POP
00001db5: PUSH1 0x00
00001db7: SWAP1
00001db8: PUSH2 0x1dc3
00001dbb: SWAP1
00001dbc: PUSH1 0x01
00001dbe: SWAP1
00001dbf: PUSH2 0x274c
00001dc2: JUMP
00001dc3: JUMPDEST
00001dc4: SWAP1
00001dc5: POP
00001dc6: DUP1
00001dc7: DUP3
00001dc8: EQ
00001dc9: PUSH2 0x1e28
00001dcc: JUMPI
00001dcd: PUSH1 0x00
00001dcf: DUP7
00001dd0: PUSH1 0x00
00001dd2: ADD
00001dd3: DUP3
00001dd4: DUP2
00001dd5: SLOAD
00001dd6: DUP2
00001dd7: LT
00001dd8: PUSH2 0x1de3
00001ddb: JUMPI
00001ddc: PUSH2 0x1de3
00001ddf: PUSH2 0x26c5
00001de2: JUMP
00001de3: JUMPDEST
00001de4: SWAP1
00001de5: PUSH1 0x00
00001de7: MSTORE
00001de8: PUSH1 0x20
00001dea: PUSH1 0x00
00001dec: KECCAK256
00001ded: ADD
00001dee: SLOAD
00001def: SWAP1
00001df0: POP
00001df1: DUP1
00001df2: DUP8
00001df3: PUSH1 0x00
00001df5: ADD
00001df6: DUP5
00001df7: DUP2
00001df8: SLOAD
00001df9: DUP2
00001dfa: LT
00001dfb: PUSH2 0x1e06
00001dfe: JUMPI
00001dff: PUSH2 0x1e06
00001e02: PUSH2 0x26c5
00001e05: JUMP
00001e06: JUMPDEST
00001e07: PUSH1 0x00
00001e09: SWAP2
00001e0a: DUP3
00001e0b: MSTORE
00001e0c: PUSH1 0x20
00001e0e: DUP1
00001e0f: DUP4
00001e10: KECCAK256
00001e11: SWAP1
00001e12: SWAP2
00001e13: ADD
00001e14: SWAP3
00001e15: SWAP1
00001e16: SWAP3
00001e17: SSTORE
00001e18: SWAP2
00001e19: DUP3
00001e1a: MSTORE
00001e1b: PUSH1 0x01
00001e1d: DUP9
00001e1e: ADD
00001e1f: SWAP1
00001e20: MSTORE
00001e21: PUSH1 0x40
00001e23: SWAP1
00001e24: KECCAK256
00001e25: DUP4
00001e26: SWAP1
00001e27: SSTORE
00001e28: JUMPDEST
00001e29: DUP6
00001e2a: SLOAD
00001e2b: DUP7
00001e2c: SWAP1
00001e2d: DUP1
00001e2e: PUSH2 0x1e39
00001e31: JUMPI
00001e32: PUSH2 0x1e39
00001e35: PUSH2 0x277c
00001e38: JUMP
00001e39: JUMPDEST
00001e3a: PUSH1 0x01
00001e3c: SWAP1
00001e3d: SUB
00001e3e: DUP2
00001e3f: DUP2
00001e40: SWAP1
00001e41: PUSH1 0x00
00001e43: MSTORE
00001e44: PUSH1 0x20
00001e46: PUSH1 0x00
00001e48: KECCAK256
00001e49: ADD
00001e4a: PUSH1 0x00
00001e4c: SWAP1
00001e4d: SSTORE
00001e4e: SWAP1
00001e4f: SSTORE
00001e50: DUP6
00001e51: PUSH1 0x01
00001e53: ADD
00001e54: PUSH1 0x00
00001e56: DUP7
00001e57: DUP2
00001e58: MSTORE
00001e59: PUSH1 0x20
00001e5b: ADD
00001e5c: SWAP1
00001e5d: DUP2
00001e5e: MSTORE
00001e5f: PUSH1 0x20
00001e61: ADD
00001e62: PUSH1 0x00
00001e64: KECCAK256
00001e65: PUSH1 0x00
00001e67: SWAP1
00001e68: SSTORE
00001e69: PUSH1 0x01
00001e6b: SWAP4
00001e6c: POP
00001e6d: POP
00001e6e: POP
00001e6f: POP
00001e70: PUSH2 0x0800
00001e73: JUMP
00001e74: JUMPDEST
00001e75: PUSH1 0x00
00001e77: SWAP2
00001e78: POP
00001e79: POP
00001e7a: PUSH2 0x0800
00001e7d: JUMP
00001e7e: JUMPDEST
00001e7f: PUSH1 0x00
00001e81: DUP2
00001e82: DUP2
00001e83: MSTORE
00001e84: PUSH1 0x02
00001e86: DUP4
00001e87: ADD
00001e88: PUSH1 0x20
00001e8a: MSTORE
00001e8b: PUSH1 0x40
00001e8d: DUP2
00001e8e: KECCAK256
00001e8f: SLOAD
00001e90: DUP2
00001e91: SWAP1
00001e92: DUP1
00001e93: PUSH2 0x1ead
00001e96: JUMPI
00001e97: PUSH2 0x1ea0
00001e9a: DUP6
00001e9b: DUP6
00001e9c: PUSH2 0x214e
00001e9f: JUMP
00001ea0: JUMPDEST
00001ea1: SWAP3
00001ea2: POP
00001ea3: PUSH1 0x00
00001ea5: SWAP2
00001ea6: POP
00001ea7: PUSH2 0x1a88
00001eaa: SWAP1
00001eab: POP
00001eac: JUMP
00001ead: JUMPDEST
00001eae: PUSH1 0x01
00001eb0: SWAP3
00001eb1: POP
00001eb2: SWAP1
00001eb3: POP
00001eb4: PUSH2 0x1a88
00001eb7: JUMP
00001eb8: JUMPDEST
00001eb9: PUSH1 0x00
00001ebb: DUP2
00001ebc: DUP2
00001ebd: MSTORE
00001ebe: PUSH1 0x02
00001ec0: DUP4
00001ec1: ADD
00001ec2: PUSH1 0x20
00001ec4: MSTORE
00001ec5: PUSH1 0x40
00001ec7: DUP2
00001ec8: KECCAK256
00001ec9: DUP2
00001eca: SWAP1
00001ecb: SSTORE
00001ecc: PUSH2 0x104a
00001ecf: DUP4
00001ed0: DUP4
00001ed1: PUSH2 0x215a
00001ed4: JUMP
00001ed5: JUMPDEST
00001ed6: PUSH1 0x00
00001ed8: DUP3
00001ed9: DUP2
00001eda: MSTORE
00001edb: PUSH1 0x02
00001edd: DUP5
00001ede: ADD
00001edf: PUSH1 0x20
00001ee1: MSTORE
00001ee2: PUSH1 0x40
00001ee4: DUP2
00001ee5: KECCAK256
00001ee6: DUP3
00001ee7: SWAP1
00001ee8: SSTORE
00001ee9: PUSH2 0x1b9b
00001eec: DUP5
00001eed: DUP5
00001eee: PUSH2 0x2166
00001ef1: JUMP
00001ef2: JUMPDEST
00001ef3: PUSH1 0x00
00001ef5: DUP2
00001ef6: DUP2
00001ef7: MSTORE
00001ef8: PUSH1 0x01
00001efa: DUP4
00001efb: ADD
00001efc: PUSH1 0x20
00001efe: MSTORE
00001eff: PUSH1 0x40
00001f01: DUP2
00001f02: KECCAK256
00001f03: SLOAD
00001f04: PUSH2 0x1f39
00001f07: JUMPI
00001f08: POP
00001f09: DUP2
00001f0a: SLOAD
00001f0b: PUSH1 0x01
00001f0d: DUP2
00001f0e: DUP2
00001f0f: ADD
00001f10: DUP5
00001f11: SSTORE
00001f12: PUSH1 0x00
00001f14: DUP5
00001f15: DUP2
00001f16: MSTORE
00001f17: PUSH1 0x20
00001f19: DUP1
00001f1a: DUP3
00001f1b: KECCAK256
00001f1c: SWAP1
00001f1d: SWAP4
00001f1e: ADD
00001f1f: DUP5
00001f20: SWAP1
00001f21: SSTORE
00001f22: DUP5
00001f23: SLOAD
00001f24: DUP5
00001f25: DUP3
00001f26: MSTORE
00001f27: DUP3
00001f28: DUP7
00001f29: ADD
00001f2a: SWAP1
00001f2b: SWAP4
00001f2c: MSTORE
00001f2d: PUSH1 0x40
00001f2f: SWAP1
00001f30: KECCAK256
00001f31: SWAP2
00001f32: SWAP1
00001f33: SWAP2
00001f34: SSTORE
00001f35: PUSH2 0x0800
00001f38: JUMP
00001f39: JUMPDEST
00001f3a: POP
00001f3b: PUSH1 0x00
00001f3d: PUSH2 0x0800
00001f40: JUMP
00001f41: JUMPDEST
00001f42: PUSH1 0x00
00001f44: DUP1
00001f45: PUSH2 0x1f4e
00001f48: DUP5
00001f49: DUP5
00001f4a: PUSH2 0x2172
00001f4d: JUMP
00001f4e: JUMPDEST
00001f4f: SWAP1
00001f50: POP
00001f51: DUP1
00001f52: ISZERO
00001f53: PUSH2 0x104a
00001f56: JUMPI
00001f57: PUSH1 0x00
00001f59: DUP5
00001f5a: DUP2
00001f5b: MSTORE
00001f5c: PUSH1 0x01
00001f5e: PUSH1 0x20
00001f60: MSTORE
00001f61: PUSH1 0x40
00001f63: SWAP1
00001f64: KECCAK256
00001f65: PUSH2 0x1c2d
00001f68: SWAP1
00001f69: DUP5
00001f6a: PUSH2 0x1bc6
00001f6d: JUMP
00001f6e: JUMPDEST
00001f6f: PUSH1 0x00
00001f71: PUSH2 0x1f7a
00001f74: DUP4
00001f75: DUP4
00001f76: PUSH2 0x1225
00001f79: JUMP
00001f7a: JUMPDEST
00001f7b: ISZERO
00001f7c: PUSH2 0x1f39
00001f7f: JUMPI
00001f80: PUSH1 0x00
00001f82: DUP4
00001f83: DUP2
00001f84: MSTORE
00001f85: PUSH1 0x20
00001f87: DUP2
00001f88: DUP2
00001f89: MSTORE
00001f8a: PUSH1 0x40
00001f8c: DUP1
00001f8d: DUP4
00001f8e: KECCAK256
00001f8f: PUSH1 0x01
00001f91: PUSH1 0x01
00001f93: PUSH1 0xa0
00001f95: SHL
00001f96: SUB
00001f97: DUP7
00001f98: AND
00001f99: DUP1
00001f9a: DUP6
00001f9b: MSTORE
00001f9c: SWAP3
00001f9d: MSTORE
00001f9e: DUP1
00001f9f: DUP4
00001fa0: KECCAK256
00001fa1: DUP1
00001fa2: SLOAD
00001fa3: PUSH1 0xff
00001fa5: NOT
00001fa6: AND
00001fa7: SWAP1
00001fa8: SSTORE
00001fa9: MLOAD
00001faa: CALLER
00001fab: SWAP3
00001fac: DUP7
00001fad: SWAP2
00001fae: PUSH32 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b
00001fcf: SWAP2
00001fd0: SWAP1
00001fd1: LOG4
00001fd2: POP
00001fd3: PUSH1 0x01
00001fd5: PUSH2 0x0800
00001fd8: JUMP
00001fd9: JUMPDEST
00001fda: PUSH1 0x60
00001fdc: DUP2
00001fdd: PUSH1 0x00
00001fdf: ADD
00001fe0: DUP1
00001fe1: SLOAD
00001fe2: DUP1
00001fe3: PUSH1 0x20
00001fe5: MUL
00001fe6: PUSH1 0x20
00001fe8: ADD
00001fe9: PUSH1 0x40
00001feb: MLOAD
00001fec: SWAP1
00001fed: DUP2
00001fee: ADD
00001fef: PUSH1 0x40
00001ff1: MSTORE
00001ff2: DUP1
00001ff3: SWAP3
00001ff4: SWAP2
00001ff5: SWAP1
00001ff6: DUP2
00001ff7: DUP2
00001ff8: MSTORE
00001ff9: PUSH1 0x20
00001ffb: ADD
00001ffc: DUP3
00001ffd: DUP1
00001ffe: SLOAD
00001fff: DUP1
00002000: ISZERO
00002001: PUSH2 0x2029
00002004: JUMPI
00002005: PUSH1 0x20
00002007: MUL
00002008: DUP3
00002009: ADD
0000200a: SWAP2
0000200b: SWAP1
0000200c: PUSH1 0x00
0000200e: MSTORE
0000200f: PUSH1 0x20
00002011: PUSH1 0x00
00002013: KECCAK256
00002014: SWAP1
00002015: JUMPDEST
00002016: DUP2
00002017: SLOAD
00002018: DUP2
00002019: MSTORE
0000201a: PUSH1 0x20
0000201c: ADD
0000201d: SWAP1
0000201e: PUSH1 0x01
00002020: ADD
00002021: SWAP1
00002022: DUP1
00002023: DUP4
00002024: GT
00002025: PUSH2 0x2015
00002028: JUMPI
00002029: JUMPDEST
0000202a: POP
0000202b: POP
0000202c: POP
0000202d: POP
0000202e: POP
0000202f: SWAP1
00002030: POP
00002031: SWAP2
00002032: SWAP1
00002033: POP
00002034: JUMP
00002035: JUMPDEST
00002036: PUSH1 0x00
00002038: DUP3
00002039: PUSH1 0x00
0000203b: ADD
0000203c: DUP3
0000203d: DUP2
0000203e: SLOAD
0000203f: DUP2
00002040: LT
00002041: PUSH2 0x204c
00002044: JUMPI
00002045: PUSH2 0x204c
00002048: PUSH2 0x26c5
0000204b: JUMP
0000204c: JUMPDEST
0000204d: SWAP1
0000204e: PUSH1 0x00
00002050: MSTORE
00002051: PUSH1 0x20
00002053: PUSH1 0x00
00002055: KECCAK256
00002056: ADD
00002057: SLOAD
00002058: SWAP1
00002059: POP
0000205a: SWAP3
0000205b: SWAP2
0000205c: POP
0000205d: POP
0000205e: JUMP
0000205f: JUMPDEST
00002060: PUSH2 0x2069
00002063: DUP3
00002064: DUP3
00002065: PUSH2 0x1225
00002068: JUMP
00002069: JUMPDEST
0000206a: PUSH2 0x0cfa
0000206d: JUMPI
0000206e: PUSH1 0x40
00002070: MLOAD
00002071: PUSH4 0xe2517d3f
00002076: PUSH1 0xe0
00002078: SHL
00002079: DUP2
0000207a: MSTORE
0000207b: PUSH1 0x01
0000207d: PUSH1 0x01
0000207f: PUSH1 0xa0
00002081: SHL
00002082: SUB
00002083: DUP3
00002084: AND
00002085: PUSH1 0x04
00002087: DUP3
00002088: ADD
00002089: MSTORE
0000208a: PUSH1 0x24
0000208c: DUP2
0000208d: ADD
0000208e: DUP4
0000208f: SWAP1
00002090: MSTORE
00002091: PUSH1 0x44
00002093: ADD
00002094: PUSH2 0x094f
00002097: JUMP
00002098: JUMPDEST
00002099: PUSH1 0x00
0000209b: DUP1
0000209c: PUSH1 0x00
0000209e: DUP5
0000209f: PUSH1 0x01
000020a1: PUSH1 0x01
000020a3: PUSH1 0xa0
000020a5: SHL
000020a6: SUB
000020a7: AND
000020a8: DUP5
000020a9: PUSH1 0x40
000020ab: MLOAD
000020ac: PUSH2 0x20b5
000020af: SWAP2
000020b0: SWAP1
000020b1: PUSH2 0x26db
000020b4: JUMP
000020b5: JUMPDEST
000020b6: PUSH1 0x00
000020b8: PUSH1 0x40
000020ba: MLOAD
000020bb: DUP1
000020bc: DUP4
000020bd: SUB
000020be: DUP2
000020bf: PUSH1 0x00
000020c1: DUP7
000020c2: GAS
000020c3: CALL
000020c4: SWAP2
000020c5: POP
000020c6: POP
000020c7: RETURNDATASIZE
000020c8: DUP1
000020c9: PUSH1 0x00
000020cb: DUP2
000020cc: EQ
000020cd: PUSH2 0x20f2
000020d0: JUMPI
000020d1: PUSH1 0x40
000020d3: MLOAD
000020d4: SWAP2
000020d5: POP
000020d6: PUSH1 0x1f
000020d8: NOT
000020d9: PUSH1 0x3f
000020db: RETURNDATASIZE
000020dc: ADD
000020dd: AND
000020de: DUP3
000020df: ADD
000020e0: PUSH1 0x40
000020e2: MSTORE
000020e3: RETURNDATASIZE
000020e4: DUP3
000020e5: MSTORE
000020e6: RETURNDATASIZE
000020e7: PUSH1 0x00
000020e9: PUSH1 0x20
000020eb: DUP5
000020ec: ADD
000020ed: RETURNDATACOPY
000020ee: PUSH2 0x20f7
000020f1: JUMP
000020f2: JUMPDEST
000020f3: PUSH1 0x60
000020f5: SWAP2
000020f6: POP
000020f7: JUMPDEST
000020f8: POP
000020f9: SWAP2
000020fa: POP
000020fb: SWAP2
000020fc: POP
000020fd: DUP2
000020fe: DUP1
000020ff: ISZERO
00002100: PUSH2 0x2121
00002103: JUMPI
00002104: POP
00002105: DUP1
00002106: MLOAD
00002107: ISZERO
00002108: DUP1
00002109: PUSH2 0x2121
0000210c: JUMPI
0000210d: POP
0000210e: DUP1
0000210f: DUP1
00002110: PUSH1 0x20
00002112: ADD
00002113: SWAP1
00002114: MLOAD
00002115: DUP2
00002116: ADD
00002117: SWAP1
00002118: PUSH2 0x2121
0000211b: SWAP2
0000211c: SWAP1
0000211d: PUSH2 0x275f
00002120: JUMP
00002121: JUMPDEST
00002122: DUP1
00002123: ISZERO
00002124: PUSH2 0x2137
00002127: JUMPI
00002128: POP
00002129: PUSH1 0x00
0000212b: DUP6
0000212c: PUSH1 0x01
0000212e: PUSH1 0x01
00002130: PUSH1 0xa0
00002132: SHL
00002133: SUB
00002134: AND
00002135: EXTCODESIZE
00002136: GT
00002137: JUMPDEST
00002138: SWAP6
00002139: SWAP5
0000213a: POP
0000213b: POP
0000213c: POP
0000213d: POP
0000213e: POP
0000213f: JUMP
00002140: JUMPDEST
00002141: PUSH1 0x60
00002143: PUSH2 0x104a
00002146: DUP4
00002147: DUP4
00002148: PUSH1 0x00
0000214a: PUSH2 0x21fc
0000214d: JUMP
0000214e: JUMPDEST
0000214f: PUSH1 0x00
00002151: PUSH2 0x104a
00002154: DUP4
00002155: DUP4
00002156: PUSH2 0x2299
00002159: JUMP
0000215a: JUMPDEST
0000215b: PUSH1 0x00
0000215d: PUSH2 0x104a
00002160: DUP4
00002161: DUP4
00002162: PUSH2 0x1d8b
00002165: JUMP
00002166: JUMPDEST
00002167: PUSH1 0x00
00002169: PUSH2 0x104a
0000216c: DUP4
0000216d: DUP4
0000216e: PUSH2 0x1ef2
00002171: JUMP
00002172: JUMPDEST
00002173: PUSH1 0x00
00002175: PUSH2 0x217e
00002178: DUP4
00002179: DUP4
0000217a: PUSH2 0x1225
0000217d: JUMP
0000217e: JUMPDEST
0000217f: PUSH2 0x1f39
00002182: JUMPI
00002183: PUSH1 0x00
00002185: DUP4
00002186: DUP2
00002187: MSTORE
00002188: PUSH1 0x20
0000218a: DUP2
0000218b: DUP2
0000218c: MSTORE
0000218d: PUSH1 0x40
0000218f: DUP1
00002190: DUP4
00002191: KECCAK256
00002192: PUSH1 0x01
00002194: PUSH1 0x01
00002196: PUSH1 0xa0
00002198: SHL
00002199: SUB
0000219a: DUP7
0000219b: AND
0000219c: DUP5
0000219d: MSTORE
0000219e: SWAP1
0000219f: SWAP2
000021a0: MSTORE
000021a1: SWAP1
000021a2: KECCAK256
000021a3: DUP1
000021a4: SLOAD
000021a5: PUSH1 0xff
000021a7: NOT
000021a8: AND
000021a9: PUSH1 0x01
000021ab: OR
000021ac: SWAP1
000021ad: SSTORE
000021ae: PUSH2 0x21b4
000021b1: CALLER
000021b2: SWAP1
000021b3: JUMP
000021b4: JUMPDEST
000021b5: PUSH1 0x01
000021b7: PUSH1 0x01
000021b9: PUSH1 0xa0
000021bb: SHL
000021bc: SUB
000021bd: AND
000021be: DUP3
000021bf: PUSH1 0x01
000021c1: PUSH1 0x01
000021c3: PUSH1 0xa0
000021c5: SHL
000021c6: SUB
000021c7: AND
000021c8: DUP5
000021c9: PUSH32 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d
000021ea: PUSH1 0x40
000021ec: MLOAD
000021ed: PUSH1 0x40
000021ef: MLOAD
000021f0: DUP1
000021f1: SWAP2
000021f2: SUB
000021f3: SWAP1
000021f4: LOG4
000021f5: POP
000021f6: PUSH1 0x01
000021f8: PUSH2 0x0800
000021fb: JUMP
000021fc: JUMPDEST
000021fd: PUSH1 0x60
000021ff: DUP2
00002200: SELFBALANCE
00002201: LT
00002202: ISZERO
00002203: PUSH2 0x2221
00002206: JUMPI
00002207: PUSH1 0x40
00002209: MLOAD
0000220a: PUSH4 0xcd786059
0000220f: PUSH1 0xe0
00002211: SHL
00002212: DUP2
00002213: MSTORE
00002214: ADDRESS
00002215: PUSH1 0x04
00002217: DUP3
00002218: ADD
00002219: MSTORE
0000221a: PUSH1 0x24
0000221c: ADD
0000221d: PUSH2 0x094f
00002220: JUMP
00002221: JUMPDEST
00002222: PUSH1 0x00
00002224: DUP1
00002225: DUP6
00002226: PUSH1 0x01
00002228: PUSH1 0x01
0000222a: PUSH1 0xa0
0000222c: SHL
0000222d: SUB
0000222e: AND
0000222f: DUP5
00002230: DUP7
00002231: PUSH1 0x40
00002233: MLOAD
00002234: PUSH2 0x223d
00002237: SWAP2
00002238: SWAP1
00002239: PUSH2 0x26db
0000223c: JUMP
0000223d: JUMPDEST
0000223e: PUSH1 0x00
00002240: PUSH1 0x40
00002242: MLOAD
00002243: DUP1
00002244: DUP4
00002245: SUB
00002246: DUP2
00002247: DUP6
00002248: DUP8
00002249: GAS
0000224a: CALL
0000224b: SWAP3
0000224c: POP
0000224d: POP
0000224e: POP
0000224f: RETURNDATASIZE
00002250: DUP1
00002251: PUSH1 0x00
00002253: DUP2
00002254: EQ
00002255: PUSH2 0x227a
00002258: JUMPI
00002259: PUSH1 0x40
0000225b: MLOAD
0000225c: SWAP2
0000225d: POP
0000225e: PUSH1 0x1f
00002260: NOT
00002261: PUSH1 0x3f
00002263: RETURNDATASIZE
00002264: ADD
00002265: AND
00002266: DUP3
00002267: ADD
00002268: PUSH1 0x40
0000226a: MSTORE
0000226b: RETURNDATASIZE
0000226c: DUP3
0000226d: MSTORE
0000226e: RETURNDATASIZE
0000226f: PUSH1 0x00
00002271: PUSH1 0x20
00002273: DUP5
00002274: ADD
00002275: RETURNDATACOPY
00002276: PUSH2 0x227f
00002279: JUMP
0000227a: JUMPDEST
0000227b: PUSH1 0x60
0000227d: SWAP2
0000227e: POP
0000227f: JUMPDEST
00002280: POP
00002281: SWAP2
00002282: POP
00002283: SWAP2
00002284: POP
00002285: PUSH2 0x228f
00002288: DUP7
00002289: DUP4
0000228a: DUP4
0000228b: PUSH2 0x22b1
0000228e: JUMP
0000228f: JUMPDEST
00002290: SWAP7
00002291: SWAP6
00002292: POP
00002293: POP
00002294: POP
00002295: POP
00002296: POP
00002297: POP
00002298: JUMP
00002299: JUMPDEST
0000229a: PUSH1 0x00
0000229c: DUP2
0000229d: DUP2
0000229e: MSTORE
0000229f: PUSH1 0x01
000022a1: DUP4
000022a2: ADD
000022a3: PUSH1 0x20
000022a5: MSTORE
000022a6: PUSH1 0x40
000022a8: DUP2
000022a9: KECCAK256
000022aa: SLOAD
000022ab: ISZERO
000022ac: ISZERO
000022ad: PUSH2 0x104a
000022b0: JUMP
000022b1: JUMPDEST
000022b2: PUSH1 0x60
000022b4: DUP3
000022b5: PUSH2 0x22c6
000022b8: JUMPI
000022b9: PUSH2 0x22c1
000022bc: DUP3
000022bd: PUSH2 0x230d
000022c0: JUMP
000022c1: JUMPDEST
000022c2: PUSH2 0x104a
000022c5: JUMP
000022c6: JUMPDEST
000022c7: DUP2
000022c8: MLOAD
000022c9: ISZERO
000022ca: DUP1
000022cb: ISZERO
000022cc: PUSH2 0x22dd
000022cf: JUMPI
000022d0: POP
000022d1: PUSH1 0x01
000022d3: PUSH1 0x01
000022d5: PUSH1 0xa0
000022d7: SHL
000022d8: SUB
000022d9: DUP5
000022da: AND
000022db: EXTCODESIZE
000022dc: ISZERO
000022dd: JUMPDEST
000022de: ISZERO
000022df: PUSH2 0x2306
000022e2: JUMPI
000022e3: PUSH1 0x40
000022e5: MLOAD
000022e6: PUSH4 0x9996b315
000022eb: PUSH1 0xe0
000022ed: SHL
000022ee: DUP2
000022ef: MSTORE
000022f0: PUSH1 0x01
000022f2: PUSH1 0x01
000022f4: PUSH1 0xa0
000022f6: SHL
000022f7: SUB
000022f8: DUP6
000022f9: AND
000022fa: PUSH1 0x04
000022fc: DUP3
000022fd: ADD
000022fe: MSTORE
000022ff: PUSH1 0x24
00002301: ADD
00002302: PUSH2 0x094f
00002305: JUMP
00002306: JUMPDEST
00002307: POP
00002308: DUP1
00002309: PUSH2 0x104a
0000230c: JUMP
0000230d: JUMPDEST
0000230e: DUP1
0000230f: MLOAD
00002310: ISZERO
00002311: PUSH2 0x231d
00002314: JUMPI
00002315: DUP1
00002316: MLOAD
00002317: DUP1
00002318: DUP3
00002319: PUSH1 0x20
0000231b: ADD
0000231c: REVERT
0000231d: JUMPDEST
0000231e: PUSH1 0x40
00002320: MLOAD
00002321: PUSH4 0x0a12f521
00002326: PUSH1 0xe1
00002328: SHL
00002329: DUP2
0000232a: MSTORE
0000232b: PUSH1 0x04
0000232d: ADD
0000232e: PUSH1 0x40
00002330: MLOAD
00002331: DUP1
00002332: SWAP2
00002333: SUB
00002334: SWAP1
00002335: REVERT
00002336: JUMPDEST
00002337: PUSH1 0x00
00002339: PUSH1 0x20
0000233b: DUP3
0000233c: DUP5
0000233d: SUB
0000233e: SLT
0000233f: ISZERO
00002340: PUSH2 0x2348
00002343: JUMPI
00002344: PUSH1 0x00
00002346: DUP1
00002347: REVERT
00002348: JUMPDEST
00002349: DUP2
0000234a: CALLDATALOAD
0000234b: PUSH1 0x01
0000234d: PUSH1 0x01
0000234f: PUSH1 0xe0
00002351: SHL
00002352: SUB
00002353: NOT
00002354: DUP2
00002355: AND
00002356: DUP2
00002357: EQ
00002358: PUSH2 0x104a
0000235b: JUMPI
0000235c: PUSH1 0x00
0000235e: DUP1
0000235f: REVERT
00002360: JUMPDEST
00002361: PUSH1 0x20
00002363: DUP1
00002364: DUP3
00002365: MSTORE
00002366: DUP3
00002367: MLOAD
00002368: DUP3
00002369: DUP3
0000236a: ADD
0000236b: DUP2
0000236c: SWAP1
0000236d: MSTORE
0000236e: PUSH1 0x00
00002370: SWAP2
00002371: DUP5
00002372: ADD
00002373: SWAP1
00002374: PUSH1 0x40
00002376: DUP5
00002377: ADD
00002378: SWAP1
00002379: DUP4
0000237a: JUMPDEST
0000237b: DUP2
0000237c: DUP2
0000237d: LT
0000237e: ISZERO
0000237f: PUSH2 0x23b6
00002382: JUMPI
00002383: PUSH2 0x23a0
00002386: DUP4
00002387: DUP6
00002388: MLOAD
00002389: DUP1
0000238a: MLOAD
0000238b: PUSH1 0x01
0000238d: PUSH1 0x01
0000238f: PUSH1 0xa0
00002391: SHL
00002392: SUB
00002393: AND
00002394: DUP3
00002395: MSTORE
00002396: PUSH1 0x20
00002398: SWAP1
00002399: DUP2
0000239a: ADD
0000239b: MLOAD
0000239c: SWAP2
0000239d: ADD
0000239e: MSTORE
0000239f: JUMP
000023a0: JUMPDEST
000023a1: PUSH1 0x20
000023a3: SWAP4
000023a4: SWAP1
000023a5: SWAP4
000023a6: ADD
000023a7: SWAP3
000023a8: PUSH1 0x40
000023aa: SWAP3
000023ab: SWAP1
000023ac: SWAP3
000023ad: ADD
000023ae: SWAP2
000023af: PUSH1 0x01
000023b1: ADD
000023b2: PUSH2 0x237a
000023b5: JUMP
000023b6: JUMPDEST
000023b7: POP
000023b8: SWAP1
000023b9: SWAP6
000023ba: SWAP5
000023bb: POP
000023bc: POP
000023bd: POP
000023be: POP
000023bf: POP
000023c0: JUMP
000023c1: JUMPDEST
000023c2: DUP1
000023c3: CALLDATALOAD
000023c4: PUSH1 0x01
000023c6: PUSH1 0x01
000023c8: PUSH1 0xa0
000023ca: SHL
000023cb: SUB
000023cc: DUP2
000023cd: AND
000023ce: DUP2
000023cf: EQ
000023d0: PUSH2 0x23d8
000023d3: JUMPI
000023d4: PUSH1 0x00
000023d6: DUP1
000023d7: REVERT
000023d8: JUMPDEST
000023d9: SWAP2
000023da: SWAP1
000023db: POP
000023dc: JUMP
000023dd: JUMPDEST
000023de: DUP1
000023df: ISZERO
000023e0: ISZERO
000023e1: DUP2
000023e2: EQ
000023e3: PUSH2 0x0c40
000023e6: JUMPI
000023e7: PUSH1 0x00
000023e9: DUP1
000023ea: REVERT
000023eb: JUMPDEST
000023ec: PUSH1 0x00
000023ee: DUP1
000023ef: PUSH1 0x00
000023f1: DUP1
000023f2: PUSH1 0x80
000023f4: DUP6
000023f5: DUP8
000023f6: SUB
000023f7: SLT
000023f8: ISZERO
000023f9: PUSH2 0x2401
000023fc: JUMPI
000023fd: PUSH1 0x00
000023ff: DUP1
00002400: REVERT
00002401: JUMPDEST
00002402: PUSH2 0x240a
00002405: DUP6
00002406: PUSH2 0x23c1
00002409: JUMP
0000240a: JUMPDEST
0000240b: SWAP4
0000240c: POP
0000240d: PUSH1 0x20
0000240f: DUP6
00002410: ADD
00002411: CALLDATALOAD
00002412: SWAP3
00002413: POP
00002414: PUSH2 0x241f
00002417: PUSH1 0x40
00002419: DUP7
0000241a: ADD
0000241b: PUSH2 0x23c1
0000241e: JUMP
0000241f: JUMPDEST
00002420: SWAP2
00002421: POP
00002422: PUSH1 0x60
00002424: DUP6
00002425: ADD
00002426: CALLDATALOAD
00002427: PUSH2 0x242f
0000242a: DUP2
0000242b: PUSH2 0x23dd
0000242e: JUMP
0000242f: JUMPDEST
00002430: SWAP4
00002431: SWAP7
00002432: SWAP3
00002433: SWAP6
00002434: POP
00002435: SWAP1
00002436: SWAP4
00002437: POP
00002438: POP
00002439: JUMP
0000243a: JUMPDEST
0000243b: PUSH1 0x00
0000243d: PUSH1 0x20
0000243f: DUP3
00002440: DUP5
00002441: SUB
00002442: SLT
00002443: ISZERO
00002444: PUSH2 0x244c
00002447: JUMPI
00002448: PUSH1 0x00
0000244a: DUP1
0000244b: REVERT
0000244c: JUMPDEST
0000244d: PUSH2 0x104a
00002450: DUP3
00002451: PUSH2 0x23c1
00002454: JUMP
00002455: JUMPDEST
00002456: PUSH1 0x00
00002458: DUP1
00002459: PUSH1 0x40
0000245b: DUP4
0000245c: DUP6
0000245d: SUB
0000245e: SLT
0000245f: ISZERO
00002460: PUSH2 0x2468
00002463: JUMPI
00002464: PUSH1 0x00
00002466: DUP1
00002467: REVERT
00002468: JUMPDEST
00002469: PUSH2 0x2471
0000246c: DUP4
0000246d: PUSH2 0x23c1
00002470: JUMP
00002471: JUMPDEST
00002472: SWAP5
00002473: PUSH1 0x20
00002475: SWAP4
00002476: SWAP1
00002477: SWAP4
00002478: ADD
00002479: CALLDATALOAD
0000247a: SWAP4
0000247b: POP
0000247c: POP
0000247d: POP
0000247e: JUMP
0000247f: JUMPDEST
00002480: PUSH1 0x00
00002482: DUP1
00002483: PUSH1 0x00
00002485: PUSH1 0x40
00002487: DUP5
00002488: DUP7
00002489: SUB
0000248a: SLT
0000248b: ISZERO
0000248c: PUSH2 0x2494
0000248f: JUMPI
00002490: PUSH1 0x00
00002492: DUP1
00002493: REVERT
00002494: JUMPDEST
00002495: PUSH2 0x249d
00002498: DUP5
00002499: PUSH2 0x23c1
0000249c: JUMP
0000249d: JUMPDEST
0000249e: SWAP3
0000249f: POP
000024a0: PUSH1 0x20
000024a2: DUP5
000024a3: ADD
000024a4: CALLDATALOAD
000024a5: PUSH8 0xffffffffffffffff
000024ae: DUP2
000024af: GT
000024b0: ISZERO
000024b1: PUSH2 0x24b9
000024b4: JUMPI
000024b5: PUSH1 0x00
000024b7: DUP1
000024b8: REVERT
000024b9: JUMPDEST
000024ba: DUP5
000024bb: ADD
000024bc: PUSH1 0x1f
000024be: DUP2
000024bf: ADD
000024c0: DUP7
000024c1: SGT
000024c2: PUSH2 0x24ca
000024c5: JUMPI
000024c6: PUSH1 0x00
000024c8: DUP1
000024c9: REVERT
000024ca: JUMPDEST
000024cb: DUP1
000024cc: CALLDATALOAD
000024cd: PUSH8 0xffffffffffffffff
000024d6: DUP2
000024d7: GT
000024d8: ISZERO
000024d9: PUSH2 0x24e1
000024dc: JUMPI
000024dd: PUSH1 0x00
000024df: DUP1
000024e0: REVERT
000024e1: JUMPDEST
000024e2: DUP7
000024e3: PUSH1 0x20
000024e5: DUP3
000024e6: DUP5
000024e7: ADD
000024e8: ADD
000024e9: GT
000024ea: ISZERO
000024eb: PUSH2 0x24f3
000024ee: JUMPI
000024ef: PUSH1 0x00
000024f1: DUP1
000024f2: REVERT
000024f3: JUMPDEST
000024f4: SWAP4
000024f5: SWAP7
000024f6: PUSH1 0x20
000024f8: SWAP2
000024f9: SWAP1
000024fa: SWAP2
000024fb: ADD
000024fc: SWAP6
000024fd: POP
000024fe: SWAP3
000024ff: SWAP4
00002500: POP
00002501: POP
00002502: POP
00002503: JUMP
00002504: JUMPDEST
00002505: PUSH1 0x00
00002507: PUSH1 0x20
00002509: DUP3
0000250a: DUP5
0000250b: SUB
0000250c: SLT
0000250d: ISZERO
0000250e: PUSH2 0x2516
00002511: JUMPI
00002512: PUSH1 0x00
00002514: DUP1
00002515: REVERT
00002516: JUMPDEST
00002517: POP
00002518: CALLDATALOAD
00002519: SWAP2
0000251a: SWAP1
0000251b: POP
0000251c: JUMP
0000251d: JUMPDEST
0000251e: PUSH1 0x00
00002520: DUP1
00002521: PUSH1 0x40
00002523: DUP4
00002524: DUP6
00002525: SUB
00002526: SLT
00002527: ISZERO
00002528: PUSH2 0x2530
0000252b: JUMPI
0000252c: PUSH1 0x00
0000252e: DUP1
0000252f: REVERT
00002530: JUMPDEST
00002531: DUP3
00002532: CALLDATALOAD
00002533: SWAP2
00002534: POP
00002535: PUSH2 0x2540
00002538: PUSH1 0x20
0000253a: DUP5
0000253b: ADD
0000253c: PUSH2 0x23c1
0000253f: JUMP
00002540: JUMPDEST
00002541: SWAP1
00002542: POP
00002543: SWAP3
00002544: POP
00002545: SWAP3
00002546: SWAP1
00002547: POP
00002548: JUMP
00002549: JUMPDEST
0000254a: PUSH1 0x20
0000254c: DUP1
0000254d: DUP3
0000254e: MSTORE
0000254f: DUP3
00002550: MLOAD
00002551: DUP3
00002552: DUP3
00002553: ADD
00002554: DUP2
00002555: SWAP1
00002556: MSTORE
00002557: PUSH1 0x00
00002559: SWAP2
0000255a: DUP5
0000255b: ADD
0000255c: SWAP1
0000255d: PUSH1 0x40
0000255f: DUP5
00002560: ADD
00002561: SWAP1
00002562: DUP4
00002563: JUMPDEST
00002564: DUP2
00002565: DUP2
00002566: LT
00002567: ISZERO
00002568: PUSH2 0x23b6
0000256b: JUMPI
0000256c: DUP4
0000256d: MLOAD
0000256e: PUSH1 0x01
00002570: PUSH1 0x01
00002572: PUSH1 0xa0
00002574: SHL
00002575: SUB
00002576: AND
00002577: DUP4
00002578: MSTORE
00002579: PUSH1 0x20
0000257b: SWAP4
0000257c: DUP5
0000257d: ADD
0000257e: SWAP4
0000257f: SWAP1
00002580: SWAP3
00002581: ADD
00002582: SWAP2
00002583: PUSH1 0x01
00002585: ADD
00002586: PUSH2 0x2563
00002589: JUMP
0000258a: JUMPDEST
0000258b: PUSH1 0x00
0000258d: DUP1
0000258e: PUSH1 0x40
00002590: DUP4
00002591: DUP6
00002592: SUB
00002593: SLT
00002594: ISZERO
00002595: PUSH2 0x259d
00002598: JUMPI
00002599: PUSH1 0x00
0000259b: DUP1
0000259c: REVERT
0000259d: JUMPDEST
0000259e: POP
0000259f: POP
000025a0: DUP1
000025a1: CALLDATALOAD
000025a2: SWAP3
000025a3: PUSH1 0x20
000025a5: SWAP1
000025a6: SWAP2
000025a7: ADD
000025a8: CALLDATALOAD
000025a9: SWAP2
000025aa: POP
000025ab: JUMP
000025ac: JUMPDEST
000025ad: PUSH1 0x20
000025af: DUP1
000025b0: DUP3
000025b1: MSTORE
000025b2: DUP3
000025b3: MLOAD
000025b4: DUP3
000025b5: DUP3
000025b6: ADD
000025b7: DUP2
000025b8: SWAP1
000025b9: MSTORE
000025ba: PUSH1 0x00
000025bc: SWAP2
000025bd: DUP5
000025be: ADD
000025bf: SWAP1
000025c0: PUSH1 0x40
000025c2: DUP5
000025c3: ADD
000025c4: SWAP1
000025c5: DUP4
000025c6: JUMPDEST
000025c7: DUP2
000025c8: DUP2
000025c9: LT
000025ca: ISZERO
000025cb: PUSH2 0x23b6
000025ce: JUMPI
000025cf: PUSH2 0x25ec
000025d2: DUP4
000025d3: DUP6
000025d4: MLOAD
000025d5: DUP1
000025d6: MLOAD
000025d7: PUSH1 0x01
000025d9: PUSH1 0x01
000025db: PUSH1 0xa0
000025dd: SHL
000025de: SUB
000025df: AND
000025e0: DUP3
000025e1: MSTORE
000025e2: PUSH1 0x20
000025e4: SWAP1
000025e5: DUP2
000025e6: ADD
000025e7: MLOAD
000025e8: SWAP2
000025e9: ADD
000025ea: MSTORE
000025eb: JUMP
000025ec: JUMPDEST
000025ed: PUSH1 0x20
000025ef: SWAP4
000025f0: SWAP1
000025f1: SWAP4
000025f2: ADD
000025f3: SWAP3
000025f4: PUSH1 0x40
000025f6: SWAP3
000025f7: SWAP1
000025f8: SWAP3
000025f9: ADD
000025fa: SWAP2
000025fb: PUSH1 0x01
000025fd: ADD
000025fe: PUSH2 0x25c6
00002601: JUMP
00002602: JUMPDEST
00002603: PUSH1 0x00
00002605: DUP1
00002606: PUSH1 0x00
00002608: PUSH1 0x40
0000260a: DUP5
0000260b: DUP7
0000260c: SUB
0000260d: SLT
0000260e: ISZERO
0000260f: PUSH2 0x2617
00002612: JUMPI
00002613: PUSH1 0x00
00002615: DUP1
00002616: REVERT
00002617: JUMPDEST
00002618: DUP4
00002619: CALLDATALOAD
0000261a: SWAP3
0000261b: POP
0000261c: PUSH1 0x20
0000261e: DUP5
0000261f: ADD
00002620: CALLDATALOAD
00002621: PUSH8 0xffffffffffffffff
0000262a: DUP2
0000262b: GT
0000262c: ISZERO
0000262d: PUSH2 0x2635
00002630: JUMPI
00002631: PUSH1 0x00
00002633: DUP1
00002634: REVERT
00002635: JUMPDEST
00002636: DUP5
00002637: ADD
00002638: PUSH1 0x1f
0000263a: DUP2
0000263b: ADD
0000263c: DUP7
0000263d: SGT
0000263e: PUSH2 0x2646
00002641: JUMPI
00002642: PUSH1 0x00
00002644: DUP1
00002645: REVERT
00002646: JUMPDEST
00002647: DUP1
00002648: CALLDATALOAD
00002649: PUSH8 0xffffffffffffffff
00002652: DUP2
00002653: GT
00002654: ISZERO
00002655: PUSH2 0x265d
00002658: JUMPI
00002659: PUSH1 0x00
0000265b: DUP1
0000265c: REVERT
0000265d: JUMPDEST
0000265e: DUP7
0000265f: PUSH1 0x20
00002661: DUP3
00002662: PUSH1 0x05
00002664: SHL
00002665: DUP5
00002666: ADD
00002667: ADD
00002668: GT
00002669: ISZERO
0000266a: PUSH2 0x24f3
0000266d: JUMPI
0000266e: PUSH1 0x00
00002670: DUP1
00002671: REVERT
00002672: JUMPDEST
00002673: PUSH1 0x00
00002675: DUP1
00002676: PUSH1 0x00
00002678: PUSH1 0x60
0000267a: DUP5
0000267b: DUP7
0000267c: SUB
0000267d: SLT
0000267e: ISZERO
0000267f: PUSH2 0x2687
00002682: JUMPI
00002683: PUSH1 0x00
00002685: DUP1
00002686: REVERT
00002687: JUMPDEST
00002688: PUSH2 0x2690
0000268b: DUP5
0000268c: PUSH2 0x23c1
0000268f: JUMP
00002690: JUMPDEST
00002691: SWAP3
00002692: POP
00002693: PUSH2 0x269e
00002696: PUSH1 0x20
00002698: DUP6
00002699: ADD
0000269a: PUSH2 0x23c1
0000269d: JUMP
0000269e: JUMPDEST
0000269f: SWAP3
000026a0: SWAP6
000026a1: SWAP3
000026a2: SWAP5
000026a3: POP
000026a4: POP
000026a5: POP
000026a6: PUSH1 0x40
000026a8: SWAP2
000026a9: SWAP1
000026aa: SWAP2
000026ab: ADD
000026ac: CALLDATALOAD
000026ad: SWAP1
000026ae: JUMP
000026af: JUMPDEST
000026b0: PUSH4 0x4e487b71
000026b5: PUSH1 0xe0
000026b7: SHL
000026b8: PUSH1 0x00
000026ba: MSTORE
000026bb: PUSH1 0x41
000026bd: PUSH1 0x04
000026bf: MSTORE
000026c0: PUSH1 0x24
000026c2: PUSH1 0x00
000026c4: REVERT
000026c5: JUMPDEST
000026c6: PUSH4 0x4e487b71
000026cb: PUSH1 0xe0
000026cd: SHL
000026ce: PUSH1 0x00
000026d0: MSTORE
000026d1: PUSH1 0x32
000026d3: PUSH1 0x04
000026d5: MSTORE
000026d6: PUSH1 0x24
000026d8: PUSH1 0x00
000026da: REVERT
000026db: JUMPDEST
000026dc: PUSH1 0x00
000026de: DUP3
000026df: MLOAD
000026e0: PUSH1 0x00
000026e2: JUMPDEST
000026e3: DUP2
000026e4: DUP2
000026e5: LT
000026e6: ISZERO
000026e7: PUSH2 0x26fc
000026ea: JUMPI
000026eb: PUSH1 0x20
000026ed: DUP2
000026ee: DUP7
000026ef: ADD
000026f0: DUP2
000026f1: ADD
000026f2: MLOAD
000026f3: DUP6
000026f4: DUP4
000026f5: ADD
000026f6: MSTORE
000026f7: ADD
000026f8: PUSH2 0x26e2
000026fb: JUMP
000026fc: JUMPDEST
000026fd: POP
000026fe: PUSH1 0x00
00002700: SWAP3
00002701: ADD
00002702: SWAP2
00002703: DUP3
00002704: MSTORE
00002705: POP
00002706: SWAP2
00002707: SWAP1
00002708: POP
00002709: JUMP
0000270a: JUMPDEST
0000270b: PUSH1 0x00
0000270d: PUSH1 0x20
0000270f: DUP3
00002710: DUP5
00002711: SUB
00002712: SLT
00002713: ISZERO
00002714: PUSH2 0x271c
00002717: JUMPI
00002718: PUSH1 0x00
0000271a: DUP1
0000271b: REVERT
0000271c: JUMPDEST
0000271d: POP
0000271e: MLOAD
0000271f: SWAP2
00002720: SWAP1
00002721: POP
00002722: JUMP
00002723: JUMPDEST
00002724: PUSH4 0x4e487b71
00002729: PUSH1 0xe0
0000272b: SHL
0000272c: PUSH1 0x00
0000272e: MSTORE
0000272f: PUSH1 0x11
00002731: PUSH1 0x04
00002733: MSTORE
00002734: PUSH1 0x24
00002736: PUSH1 0x00
00002738: REVERT
00002739: JUMPDEST
0000273a: DUP1
0000273b: DUP3
0000273c: ADD
0000273d: DUP1
0000273e: DUP3
0000273f: GT
00002740: ISZERO
00002741: PUSH2 0x0800
00002744: JUMPI
00002745: PUSH2 0x0800
00002748: PUSH2 0x2723
0000274b: JUMP
0000274c: JUMPDEST
0000274d: DUP2
0000274e: DUP2
0000274f: SUB
00002750: DUP2
00002751: DUP2
00002752: GT
00002753: ISZERO
00002754: PUSH2 0x0800
00002757: JUMPI
00002758: PUSH2 0x0800
0000275b: PUSH2 0x2723
0000275e: JUMP
0000275f: JUMPDEST
00002760: PUSH1 0x00
00002762: PUSH1 0x20
00002764: DUP3
00002765: DUP5
00002766: SUB
00002767: SLT
00002768: ISZERO
00002769: PUSH2 0x2771
0000276c: JUMPI
0000276d: PUSH1 0x00
0000276f: DUP1
00002770: REVERT
00002771: JUMPDEST
00002772: DUP2
00002773: MLOAD
00002774: PUSH2 0x104a
00002777: DUP2
00002778: PUSH2 0x23dd
0000277b: JUMP
0000277c: JUMPDEST
0000277d: PUSH4 0x4e487b71
00002782: PUSH1 0xe0
00002784: SHL
00002785: PUSH1 0x00
00002787: MSTORE
00002788: PUSH1 0x31
0000278a: PUSH1 0x04
0000278c: MSTORE
0000278d: PUSH1 0x24
0000278f: PUSH1 0x00
00002791: REVERT
00002792: INVALID
00002793: UNKNOWN(0xAF)
00002794: UNKNOWN(0x29)
00002795: UNKNOWN(0x0D)
00002796: DUP7
00002797: DUP1
00002798: DUP3
00002799: EXP
0000279a: UNKNOWN(0xAD)
0000279b: SWAP3
0000279c: UNKNOWN(0x28)
0000279d: SSTORE
0000279e: RETURN
0000279f: SWAP12
000027a0: ADDRESS
000027a1: PUSH1 0x97
000027a3: UNKNOWN(0xB2)
000027a4: UNKNOWN(0x0E)
000027a5: UNKNOWN(0x28)
000027a6: PUSH24 0x4d6c1ad35a20325630c3a02c872340a532bdd7bb02bea115
000027bf: UNKNOWN(0xC1)
000027c0: UNKNOWN(0xB0)
000027c1: CALL
000027c2: UNKNOWN(0xBA)
000027c3: DUP8
000027c4: UNKNOWN(0xEA)
000027c5: UNKNOWN(0xC9)
000027c6: DUP3
000027c7: CREATE2
000027c8: UNKNOWN(0xB7)
000027c9: SWAP12
000027ca: MLOAD
000027cb: UNKNOWN(0xAC)
000027cc: XOR
000027cd: SWAP16
000027ce: STATICCALL
000027cf: UNKNOWN(0xAC)
000027d0: SHL
000027d1: PUSH16 0xce4c6ad1028fbb14d0f715be3e35174b
000027e2: UNKNOWN(0xEC)
000027e3: ORIGIN
000027e4: UNKNOWN(0x4C)
000027e5: CREATE2
000027e6: UNKNOWN(0xF9)
000027e7: SWAP10
000027e8: UNKNOWN(0xEA)
000027e9: CODECOPY
000027ea: SHR
000027eb: LOG4
000027ec: UNKNOWN(0xC4)
000027ed: UNKNOWN(0xCA)
000027ee: UNKNOWN(0x4C)
000027ef: DIFFICULTY
000027f0: PUSH32 0x2d159143236d81225394f3bd65b44e6e29fdf4d7ba0773d9bb3f5cc15eb80ba3
00002811: PUSH24 0x77a2646970667358221220cf155cc2499566f150a0b71454
0000282a: TSTORE
0000282b: SSTORE
0000282c: DUP8
0000282d: UNKNOWN(0xA7)
0000282e: UNKNOWN(0xDD)
0000282f: SHR
00002830: UNKNOWN(0xE0)
00002831: MSTORE
00002832: SELFDESTRUCT
00002833: LOG0
00002834: RETURNDATACOPY
00002835: LOG1
00002836: GT
00002837: TSTORE
00002838: SELFDESTRUCT
00002839: UNKNOWN(0xC2)
0000283a: PUSH7 0x5a0e64736f6c63
00002842: NUMBER
00002843: STOP
00002844: ADDMOD
00002845: BYTE
00002846: STOP
00002847: CALLER

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high other cast SELFDESTRUCT present 85 no
view
evidence_json
{
    "notes": "selfdestruct can remove contract code and send funds; review reachability",
    "selfdestruct_count": 2
}
high upgradeability detector Untrusted DELEGATECALL target reachable 55 no no
view
trace_id: 0x7ceec78e91f5752a6cbd255c39c24a8858c4a6798a20a6712a3f0d37f665bb2b
validation_json
{
    "sink": "DELEGATECALL",
    "errors": 0,
    "status": "unknown",
    "attempts": 192,
    "trace_id": "0x7ceec78e91f5752a6cbd255c39c24a8858c4a6798a20a6712a3f0d37f665bb2b",
    "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": "0xe1f21c67",
            "selector": "0xe1f21c67",
            "calldata_variants": [
                "0xe1f21c67",
                "0xe1f21c670000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe4860339",
            "selector": "0xe4860339",
            "calldata_variants": [
                "0xe4860339",
                "0xe48603390000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe7e31e7a",
            "selector": "0xe7e31e7a",
            "calldata_variants": [
                "0xe7e31e7a",
                "0xe7e31e7a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf0225a3c",
            "selector": "0xf0225a3c",
            "calldata_variants": [
                "0xf0225a3c",
                "0xf0225a3c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf1880b24",
            "selector": "0xf1880b24",
            "calldata_variants": [
                "0xf1880b24",
                "0xf1880b240000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf60d7e9c",
            "selector": "0xf60d7e9c",
            "calldata_variants": [
                "0xf60d7e9c",
                "0xf60d7e9c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xcc855ccc",
            "selector": "0xcc855ccc",
            "calldata_variants": [
                "0xcc855ccc",
                "0xcc855ccc0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd48bfca7",
            "selector": "0xd48bfca7",
            "calldata_variants": [
                "0xd48bfca7",
                "0xd48bfca70000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 7088,
            "opcode": "DELEGATECALL",
            "returndata_checked": null,
            "value_expression_category": "n/a",
            "target_expression_category": "computed"
        }
    ],
    "guards_detected": [
        {
            "pc": 10211,
            "type": "tx_origin_used"
        }
    ],
    "delegatecall_count": 1,
    "untrusted_delegatecall_count": 1
}
high auth detector Authorization based on tx.origin 70 no
view
validation_json
{
    "reason": "missing sink mapping",
    "status": "no_sink"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0xe1f21c67",
            "selector": "0xe1f21c67",
            "calldata_variants": [
                "0xe1f21c67",
                "0xe1f21c670000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe4860339",
            "selector": "0xe4860339",
            "calldata_variants": [
                "0xe4860339",
                "0xe48603390000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe7e31e7a",
            "selector": "0xe7e31e7a",
            "calldata_variants": [
                "0xe7e31e7a",
                "0xe7e31e7a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf0225a3c",
            "selector": "0xf0225a3c",
            "calldata_variants": [
                "0xf0225a3c",
                "0xf0225a3c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf1880b24",
            "selector": "0xf1880b24",
            "calldata_variants": [
                "0xf1880b24",
                "0xf1880b240000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf60d7e9c",
            "selector": "0xf60d7e9c",
            "calldata_variants": [
                "0xf60d7e9c",
                "0xf60d7e9c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xcc855ccc",
            "selector": "0xcc855ccc",
            "calldata_variants": [
                "0xcc855ccc",
                "0xcc855ccc0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd48bfca7",
            "selector": "0xd48bfca7",
            "calldata_variants": [
                "0xd48bfca7",
                "0xd48bfca70000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "guards_detected": [
        {
            "pc": 10211,
            "type": "tx_origin_used"
        }
    ]
}
medium other detector ETH value transfer possible 40 no no
view
trace_id: 0xdde44a864426764a4fd4787780c641c470c57eaa92ab7c44226825d61f03052a
call_targets: 0x468f873e7ba0907e2dee2f61d011a3d311178706
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0xdde44a864426764a4fd4787780c641c470c57eaa92ab7c44226825d61f03052a",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x468f873e7ba0907e2dee2f61d011a3d311178706"
    ],
    "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": "0xe1f21c67",
            "selector": "0xe1f21c67",
            "calldata_variants": [
                "0xe1f21c67",
                "0xe1f21c670000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe4860339",
            "selector": "0xe4860339",
            "calldata_variants": [
                "0xe4860339",
                "0xe48603390000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe7e31e7a",
            "selector": "0xe7e31e7a",
            "calldata_variants": [
                "0xe7e31e7a",
                "0xe7e31e7a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf0225a3c",
            "selector": "0xf0225a3c",
            "calldata_variants": [
                "0xf0225a3c",
                "0xf0225a3c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf1880b24",
            "selector": "0xf1880b24",
            "calldata_variants": [
                "0xf1880b24",
                "0xf1880b240000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf60d7e9c",
            "selector": "0xf60d7e9c",
            "calldata_variants": [
                "0xf60d7e9c",
                "0xf60d7e9c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xcc855ccc",
            "selector": "0xcc855ccc",
            "calldata_variants": [
                "0xcc855ccc",
                "0xcc855ccc0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd48bfca7",
            "selector": "0xd48bfca7",
            "calldata_variants": [
                "0xd48bfca7",
                "0xd48bfca70000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 2800,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 2854,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 4554,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 8,
    "guards_detected": [
        {
            "pc": 10211,
            "type": "tx_origin_used"
        }
    ]
}
medium other detector SELFDESTRUCT reachable 45 no no
view
trace_id: 0x8ef860214aab13c0d94783e143bd5f2f2423b7d5f1c7f04ce0aad21765fa8268
validation_json
{
    "sink": "SELFDESTRUCT",
    "errors": 0,
    "status": "unknown",
    "attempts": 32,
    "trace_id": "0x8ef860214aab13c0d94783e143bd5f2f2423b7d5f1c7f04ce0aad21765fa8268",
    "confirmed": false,
    "trace_mode": "structLogs",
    "call_targets": null,
    "matched_probe": null,
    "target_varies": null,
    "classification": "no_sink"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0xe1f21c67",
            "selector": "0xe1f21c67",
            "calldata_variants": [
                "0xe1f21c67",
                "0xe1f21c670000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe4860339",
            "selector": "0xe4860339",
            "calldata_variants": [
                "0xe4860339",
                "0xe48603390000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe7e31e7a",
            "selector": "0xe7e31e7a",
            "calldata_variants": [
                "0xe7e31e7a",
                "0xe7e31e7a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf0225a3c",
            "selector": "0xf0225a3c",
            "calldata_variants": [
                "0xf0225a3c",
                "0xf0225a3c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf1880b24",
            "selector": "0xf1880b24",
            "calldata_variants": [
                "0xf1880b24",
                "0xf1880b240000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf60d7e9c",
            "selector": "0xf60d7e9c",
            "calldata_variants": [
                "0xf60d7e9c",
                "0xf60d7e9c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xcc855ccc",
            "selector": "0xcc855ccc",
            "calldata_variants": [
                "0xcc855ccc",
                "0xcc855ccc0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd48bfca7",
            "selector": "0xd48bfca7",
            "calldata_variants": [
                "0xd48bfca7",
                "0xd48bfca70000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "guards_detected": [
        {
            "pc": 10211,
            "type": "tx_origin_used"
        }
    ],
    "selfdestruct_count": 2
}
medium other detector Untrusted CALL target/value reachable 45 no no
view
trace_id: 0xdde44a864426764a4fd4787780c641c470c57eaa92ab7c44226825d61f03052a
call_targets: 0x468f873e7ba0907e2dee2f61d011a3d311178706
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0xdde44a864426764a4fd4787780c641c470c57eaa92ab7c44226825d61f03052a",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x468f873e7ba0907e2dee2f61d011a3d311178706"
    ],
    "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": "0xe1f21c67",
            "selector": "0xe1f21c67",
            "calldata_variants": [
                "0xe1f21c67",
                "0xe1f21c670000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe4860339",
            "selector": "0xe4860339",
            "calldata_variants": [
                "0xe4860339",
                "0xe48603390000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe7e31e7a",
            "selector": "0xe7e31e7a",
            "calldata_variants": [
                "0xe7e31e7a",
                "0xe7e31e7a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf0225a3c",
            "selector": "0xf0225a3c",
            "calldata_variants": [
                "0xf0225a3c",
                "0xf0225a3c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf1880b24",
            "selector": "0xf1880b24",
            "calldata_variants": [
                "0xf1880b24",
                "0xf1880b240000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf60d7e9c",
            "selector": "0xf60d7e9c",
            "calldata_variants": [
                "0xf60d7e9c",
                "0xf60d7e9c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xcc855ccc",
            "selector": "0xcc855ccc",
            "calldata_variants": [
                "0xcc855ccc",
                "0xcc855ccc0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd48bfca7",
            "selector": "0xd48bfca7",
            "calldata_variants": [
                "0xd48bfca7",
                "0xd48bfca70000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 2800,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 2854,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 4554,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 8,
    "guards_detected": [
        {
            "pc": 10211,
            "type": "tx_origin_used"
        }
    ],
    "untrusted_call_count": 8
}
medium upgradeability cast DELEGATECALL present 80 no
view
evidence_json
{
    "notes": "delegatecall enables execution in caller context; common in proxies/upgradeable patterns",
    "delegatecall_count": 1
}
medium other detector CREATE/CREATE2 reachable 45 no no
view
trace_id: 0x8ef860214aab13c0d94783e143bd5f2f2423b7d5f1c7f04ce0aad21765fa8268
validation_json
{
    "sink": "CREATE",
    "errors": 0,
    "status": "unknown",
    "attempts": 32,
    "trace_id": "0x8ef860214aab13c0d94783e143bd5f2f2423b7d5f1c7f04ce0aad21765fa8268",
    "confirmed": false,
    "trace_mode": "structLogs",
    "call_targets": null,
    "matched_probe": null,
    "target_varies": null,
    "classification": "no_sink"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0xe1f21c67",
            "selector": "0xe1f21c67",
            "calldata_variants": [
                "0xe1f21c67",
                "0xe1f21c670000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe4860339",
            "selector": "0xe4860339",
            "calldata_variants": [
                "0xe4860339",
                "0xe48603390000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe7e31e7a",
            "selector": "0xe7e31e7a",
            "calldata_variants": [
                "0xe7e31e7a",
                "0xe7e31e7a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf0225a3c",
            "selector": "0xf0225a3c",
            "calldata_variants": [
                "0xf0225a3c",
                "0xf0225a3c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf1880b24",
            "selector": "0xf1880b24",
            "calldata_variants": [
                "0xf1880b24",
                "0xf1880b240000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf60d7e9c",
            "selector": "0xf60d7e9c",
            "calldata_variants": [
                "0xf60d7e9c",
                "0xf60d7e9c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xcc855ccc",
            "selector": "0xcc855ccc",
            "calldata_variants": [
                "0xcc855ccc",
                "0xcc855ccc0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd48bfca7",
            "selector": "0xd48bfca7",
            "calldata_variants": [
                "0xd48bfca7",
                "0xd48bfca70000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "create_count": 0,
    "create2_count": 2
}
low other cast Contract creation opcode present 60 no
view
evidence_json
{
    "notes": "runtime can deploy contracts dynamically via CREATE/CREATE2",
    "create_count": 0,
    "create2_count": 2
}
info other cast Heavy EXTCODE*/BALANCE usage 55 no
view
evidence_json
{
    "notes": "frequent external code or balance checks; may indicate introspection or validation logic",
    "ext_balance_count": 5
}