70f420ca-067f-49f1-9ce9-a3366c18aff0
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 31591 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 78173 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 78174 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 78175 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 78176 | capability.graph | complete | 1 / 3 | 1 week ago |
| 78177 | detector.run | complete | 1 / 3 | 1 week ago |
| 78178 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:581078] OpenAI Codex v0.77.0 (research preview)
[codex:581078] --------
[codex:581078] workdir: /tmp/codex-multi-hoq1r_bw
[codex:581078] model: gpt-5.2-codex
[codex:581078] provider: openai
[codex:581078] approval: never
[codex:581078] sandbox: read-only
[codex:581078] reasoning effort: xhigh
[codex:581078] reasoning summaries: auto
[codex:581078] session id: 019b87c8-5856-7d32-adb7-e3a2189c2fd6
[codex:581078] --------
[codex:581078] user
[codex:581078] 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:581078]
[codex:581078] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:581078]
[codex:581078] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:581078] - Gas inefficiency, code quality, or best practices
[codex:581078] - Theoretical vulnerabilities without a clear extraction path
[codex:581078] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:581078] - Issues requiring social engineering or off-chain coordination
[codex:581078]
[codex:581078] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:581078] - CALL/DELEGATECALL with controllable destination or calldata
[codex:581078] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:581078] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:581078] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:581078] - External calls before state updates (reentrancy)
[codex:581078] - SELFDESTRUCT with controllable beneficiary
[codex:581078] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:581078]
[codex:581078] For each finding, you MUST explain:
[codex:581078] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:581078] 2. The concrete sequence of transactions to extract value
[codex:581078] 3. Why you believe this is exploitable (not just suspicious)
[codex:581078]
[codex:581078] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:581078] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:581078]
[codex:581078] Output MUST be valid JSON matching the provided schema.
[codex:581078] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:581078] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:581078] mcp startup: no servers
[codex:581078]
[codex:581078] thinking
[codex:581078] **Checking skill applicability**
[codex:581078] exec
[codex:581078] /bin/bash -lc ls in /tmp/codex-multi-hoq1r_bw succeeded in 5ms:
[codex:581078] BYTECODE_BUNDLE.txt
[codex:581078] codex-output-schema.json
[codex:581078] exec
[codex:581078] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-hoq1r_bw succeeded in 6ms:
[codex:581078] Runtime bytecode bundle for best-effort auditing.
[codex:581078] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:581078]
[codex:581078] FILE: runtime_bytecode.hex
[codex:581078] 0x6080604052600436106101bb5760003560e01c8063715018a6116100ec578063a9059cbb1161008a578063dd62ed3e11610064578063dd62ed3e1461063d578063e30443bc14610678578063f2fde38b146106b1578063fbcbc0f1146106e4576101ca565b8063a9059cbb146105bc578063aafd847a146105f5578063be10b61414610628576101ca565b806391b89fba116100c657806391b89fba1461050857806395d89b411461053b578063a457c2d714610550578063a8b9d24014610589576101ca565b8063715018a6146104ad57806385a6b3ae146104c25780638da5cb5b146104d7576101ca565b8063313ce567116101595780634e7b827f116101335780634e7b827f146103f757806352b5f81d1461042a5780636a4740021461046557806370a082311461047a576101ca565b8063313ce5671461036057806331e79db01461038b57806339509351146103be576101ca565b806309bbedde1161019557806309bbedde146102ae57806318160ddd146102d557806323b872dd146102ea57806327ce01471461032d576101ca565b806303c83302146101cf57806306fdde03146101d7578063095ea7b314610261576101ca565b366101ca576101c8610730565b005b600080fd5b6101c8610730565b3480156101e357600080fd5b506101ec6107c1565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561022657818101518382015260200161020e565b50505050905090810190601f1680156102535780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561026d57600080fd5b5061029a6004803603604081101561028457600080fd5b506001600160a01b038135169060200135610857565b604080519115158252519081900360200190f35b3480156102ba57600080fd5b506102c3610875565b60408051918252519081900360200190f35b3480156102e157600080fd5b506102c361087b565b3480156102f657600080fd5b5061029a6004803603606081101561030d57600080fd5b506001600160a01b03813581169160208101359091169060400135610881565b34801561033957600080fd5b506102c36004803603602081101561035057600080fd5b50356001600160a01b0316610908565b34801561036c57600080fd5b50610375610965565b6040805160ff9092168252519081900360200190f35b34801561039757600080fd5b506101c8600480360360208110156103ae57600080fd5b50356001600160a01b031661096a565b3480156103ca57600080fd5b5061029a600480360360408110156103e157600080fd5b506001600160a01b038135169060200135610ac6565b34801561040357600080fd5b5061029a6004803603602081101561041a57600080fd5b50356001600160a01b0316610b14565b34801561043657600080fd5b506102c36004803603604081101561044d57600080fd5b506001600160a01b0381358116916020013516610b29565b34801561047157600080fd5b506101c8610b97565b34801561048657600080fd5b506102c36004803603602081101561049d57600080fd5b50356001600160a01b0316610bce565b3480156104b957600080fd5b506101c8610be9565b3480156104ce57600080fd5b506102c3610c8b565b3480156104e357600080fd5b506104ec610c91565b604080516001600160a01b039092168252519081900360200190f35b34801561051457600080fd5b506102c36004803603602081101561052b57600080fd5b50356001600160a01b0316610ca0565b34801561054757600080fd5b506101ec610cab565b34801561055c57600080fd5b5061029a6004803603604081101561057357600080fd5b506001600160a01b038135169060200135610d0c565b34801561059557600080fd5b506102c3600480360360208110156105ac57600080fd5b50356001600160a01b0316610d74565b3480156105c857600080fd5b5061029a600480360360408110156105df57600080fd5b506001600160a01b038135169060200135610da0565b34801561060157600080fd5b506102c36004803603602081101561061857600080fd5b50356001600160a01b0316610db4565b34801561063457600080fd5b506102c3610dcf565b34801561064957600080fd5b506102c36004803603604081101561066057600080fd5b506001600160a01b0381358116916020013516610df3565b34801561068457600080fd5b506101c86004803603604081101561069b57600080fd5b506001600160a01b038135169060200135610e1e565b3480156106bd57600080fd5b506101c8600480360360208110156106d457600080fd5b50356001600160a01b0316610fdb565b3480156106f057600080fd5b506107176004803603602081101561070757600080fd5b50356001600160a01b03166110d4565b6040805192835260208301919091528051918290030190f35b600061073a61087b565b1161074457600080fd5b34156107bf5761077561075561087b565b61076334600160801b611101565b8161076a57fe5b600554919004611161565b60055560408051348152905133917fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d78454116511919081900360200190a26008546107bb9034611161565b6008555b565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561084d5780601f106108225761010080835404028352916020019161084d565b820191906000526020600020905b81548152906001019060200180831161083057829003601f168201915b5050505050905090565b600061086b6108646111bb565b84846111bf565b5060015b92915050565b600a5490565b60025490565b600061088e8484846111fb565b6108fe8461089a6111bb565b6108f9856040518060600160405280602881526020016118ca602891396001600160a01b038a166000908152600160205260408120906108d86111bb565b6001600160a01b031681526020810191909152604001600020549190611232565b6111bf565b5060019392505050565b6001600160a01b038116600090815260066020526040812054600160801b90610957906109529061094c61094761093e88610bce565b60055490611101565b6112c9565b906112d9565b61130c565b8161095e57fe5b0492915050565b601290565b6109726111bb565b6009546001600160a01b039081169116146109c2576040805162461bcd60e51b815260206004820181905260248201526000805160206118f2833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152600e602052604090205460ff16156109e857600080fd5b6001600160a01b0381166000908152600e60205260408120805460ff19166001179055610a1690829061131f565b6040805163131836e760e21b8152600a60048201526001600160a01b0383166024820152905173ee0103e0293dfb46294363027f9fd64aff762bab91634c60db9c916044808301926000929190829003018186803b158015610a7757600080fd5b505af4158015610a8b573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b600061086b610ad36111bb565b846108f98560016000610ae46111bb565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611161565b600e6020526000908152604090205460ff1681565b6000610b336111bb565b6009546001600160a01b03908116911614610b83576040805162461bcd60e51b815260206004820181905260248201526000805160206118f2833981519152604482015290519081900360640190fd5b6000610b8f8484611378565b949350505050565b60405162461bcd60e51b815260040180806020018281038252606b81526020018061183e606b913960800191505060405180910390fd5b6001600160a01b031660009081526020819052604090205490565b610bf16111bb565b6009546001600160a01b03908116911614610c41576040805162461bcd60e51b815260206004820181905260248201526000805160206118f2833981519152604482015290519081900360640190fd5b6009546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600980546001600160a01b0319169055565b60085481565b6009546001600160a01b031690565b600061086f82610d74565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561084d5780601f106108225761010080835404028352916020019161084d565b600061086b610d196111bb565b846108f9856040518060600160405280602581526020016119616025913960016000610d436111bb565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611232565b6001600160a01b03811660009081526007602052604081205461086f90610d9a84610908565b906114bf565b600061086b610dad6111bb565b84846111fb565b6001600160a01b031660009081526007602052604090205490565b7f00000000000000000000000000000000000000000000021e19e0c9bab240000081565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610e266111bb565b6009546001600160a01b03908116911614610e76576040805162461bcd60e51b815260206004820181905260248201526000805160206118f2833981519152604482015290519081900360640190fd5b6001600160a01b0382166000908152600e602052604090205460ff1615610e9c57610fd7565b7f00000000000000000000000000000000000000000000021e19e0c9bab24000008110610f5257610ecd828261131f565b60408051632f0ad01760e21b8152600a60048201526001600160a01b038416602482015260448101839052905173ee0103e0293dfb46294363027f9fd64aff762bab9163bc2b405c916064808301926000929190829003018186803b158015610f3557600080fd5b505af4158015610f49573d6000803e3d6000fd5b50505050610fd7565b610f5d82600061131f565b6040805163131836e760e21b8152600a60048201526001600160a01b0384166024820152905173ee0103e0293dfb46294363027f9fd64aff762bab91634c60db9c916044808301926000929190829003018186803b158015610fbe57600080fd5b505af4158015610fd2573d6000803e3d6000fd5b505050505b5050565b610fe36111bb565b6009546001600160a01b03908116911614611033576040805162461bcd60e51b815260206004820181905260248201526000805160206118f2833981519152604482015290519081900360640190fd5b6001600160a01b0381166110785760405162461bcd60e51b81526004018080602001828103825260268152602001806117ea6026913960400191505060405180910390fd5b6009546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000806110e083610d74565b6001600160a01b039093166000908152600760205260409020549293915050565b6000826111105750600061086f565b8282028284828161111d57fe5b041461115a5760405162461bcd60e51b81526004018080602001828103825260218152602001806118a96021913960400191505060405180910390fd5b9392505050565b60008282018381101561115a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b60405162461bcd60e51b815260040180806020018281038252602e815260200180611933602e913960400191505060405180910390fd5b505050565b60405162461bcd60e51b815260040180806020018281038252602e815260200180611810602e913960400191505060405180910390fd5b600081848411156112c15760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561128657818101518382015260200161126e565b50505050905090810190601f1680156112b35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818181121561086f57600080fd5b60008282018183128015906112ee5750838112155b80611303575060008312801561130357508381125b61115a57600080fd5b60008082121561131b57600080fd5b5090565b600061132a83610bce565b90508082111561135257600061134083836114bf565b905061134c8482611501565b506111f6565b808210156111f657600061136682846114bf565b90506113728482611565565b50505050565b60008061138484610d74565b905080156114b5576001600160a01b0384166000908152600760205260409020546113af9082611161565b6001600160a01b0380861660008181526007602090815260409182902094909455805185815292871693830193909352825190927feb063efb53b3790d2bc15284b59af7544466c8787c2883321ee27095647911b6928290030190a26040516000906001600160a01b0385169083908381818185875af1925050503d8060008114611456576040519150601f19603f3d011682016040523d82523d6000602084013e61145b565b606091505b50509050806114ad576001600160a01b03851660009081526007602052604090205461148790836114bf565b6001600160a01b038616600090815260076020526040812091909155925061086f915050565b50905061086f565b5060009392505050565b600061115a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611232565b61150b82826115a9565b6115456115266109478360055461110190919063ffffffff16565b6001600160a01b03841660009081526006602052604090205490611699565b6001600160a01b0390921660009081526006602052604090209190915550565b61156f82826116cb565b61154561158a6109478360055461110190919063ffffffff16565b6001600160a01b038416600090815260066020526040902054906112d9565b6001600160a01b038216611604576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611610600083836111f6565b60025461161d9082611161565b6002556001600160a01b0382166000908152602081905260409020546116439082611161565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183038183128015906116ae5750838113155b806113035750600083128015611303575083811361115a57600080fd5b6001600160a01b0382166117105760405162461bcd60e51b81526004018080602001828103825260218152602001806119126021913960400191505060405180910390fd5b61171c826000836111f6565b611759816040518060600160405280602281526020016117c8602291396001600160a01b0385166000908152602081905260409020549190611232565b6001600160a01b03831660009081526020819052604090205560025461177f90826114bf565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737342616e6b4574685f4469766964656e645f547261636b65723a204e6f207472616e736665727320616c6c6f77656442616e6b4574685f4469766964656e645f547261636b65723a2077697468647261774469766964656e642064697361626c65642e20557365207468652027636c61696d272066756e6374696f6e206f6e20746865206d61696e2042616e6b45746820636f6e74726163742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a206275726e2066726f6d20746865207a65726f206164647265737342616e6b4574685f4469766964656e645f547261636b65723a204e6f20617070726f76616c7320616c6c6f77656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203d190769ed22fdddd962dd4c154e14e18b33892121d50e8c2f0f2a5708dade2164736f6c634300060c0033
[codex:581078]
[codex:581078] thinking
[codex:581078] **Analyzing bytecode for exploit paths**
[codex:581078] exec
[codex:581078] /bin/bash -lc "python - <<'PY'
[codex:581078] import re
[codex:581078] from pathlib import Path
[codex:581078] hexdata = Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex',1)[1]
[codex:581078] # extract hex string after newline
[codex:581078] m = re.search(r'0x[0-9a-fA-F]+', hexdata)
[codex:581078] if not m:
[codex:581078] raise SystemExit('no hex')
[codex:581078] hexstr = m.group(0)[2:]
[codex:581078] code = bytes.fromhex(hexstr)
[codex:581078] # opcode map
[codex:581078] opnames = {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:581078] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:581078] 0x20:'SHA3',
[codex:581078] 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:581078] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:581078] 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:581078] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:581078] }
[codex:581078]
[codex:581078] def op_name(op):
[codex:581078] if 0x60 <= op <= 0x7f:
[codex:581078] return f'PUSH{op-0x5f}'
[codex:581078] if 0x80 <= op <= 0x8f:
[codex:581078] return f'DUP{op-0x7f}'
[codex:581078] if 0x90 <= op <= 0x9f:
[codex:581078] return f'SWAP{op-0x8f}'
[codex:581078] if 0xa0 <= op <= 0xa4:
[codex:581078] return f'LOG{op-0x9f}'
[codex:581078] return opnames.get(op, f'OP{op:02x}')
[codex:581078]
[codex:581078] interesting = {'CALL','DELEGATECALL','CALLCODE','STATICCALL','SELFDESTRUCT','SSTORE'}
[codex:581078] # also record PUSH addresses before CALL
[codex:581078]
[codex:581078] ops = []
[codex:581078] i=0
[codex:581078] while i < len(code):
[codex:581078] op = code[i]
[codex:581078] name = op_name(op)
[codex:581078] arg = b''
[codex:581078] if 0x60 <= op <= 0x7f:
[codex:581078] n = op-0x5f
[codex:581078] arg = code[i+1:i+1+n]
[codex:581078] i += 1+n
[codex:581078] else:
[codex:581078] i += 1
[codex:581078] ops.append((i - (1+len(arg)), op, name, arg))
[codex:581078]
[codex:581078] # print interesting ops with nearby context
[codex:581078] for idx,(pos,op,name,arg) in enumerate(ops):
[codex:581078] if name in interesting:
[codex:581078] # show last 5 ops
[codex:581078] start = max(0, idx-5)
[codex:581078] context = ops[start:idx+1]
[codex:581078] print(f'@{pos:04x} {name}')
[codex:581078] for p,o,n,a in context:
[codex:581078] if a:
[codex:581078] print(f' {p:04x}: {n} 0x{a.hex()}')
[codex:581078] else:
[codex:581078] print(f' {p:04x}: {n}')
[codex:581078] print('')
[codex:581078] PY" in /tmp/codex-multi-hoq1r_bw succeeded in 41ms:
[codex:581078] @0778 SSTORE
[codex:581078] 0770: DIV
[codex:581078] 0771: PUSH2 0x1161
[codex:581078] 0774: JUMP
[codex:581078] 0775: JUMPDEST
[codex:581078] 0776: PUSH1 0x05
[codex:581078] 0778: SSTORE
[codex:581078]
[codex:581078] @07be SSTORE
[codex:581078] 07b6: CALLVALUE
[codex:581078] 07b7: PUSH2 0x1161
[codex:581078] 07ba: JUMP
[codex:581078] 07bb: JUMPDEST
[codex:581078] 07bc: PUSH1 0x08
[codex:581078] 07be: SSTORE
[codex:581078]
[codex:581078] @0a0b SSTORE
[codex:581078] 0a05: NOT
[codex:581078] 0a06: AND
[codex:581078] 0a07: PUSH1 0x01
[codex:581078]
[codex:581078] thinking
[codex:581078] **Investigating suspicious delegatecalls**
[codex:581078] exec
[codex:581078] /bin/bash -lc "python - <<'PY'
[codex:581078] import re
[codex:581078] from pathlib import Path
[codex:581078] hexdata = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:581078] hexstr = re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:581078] code = bytes.fromhex(hexstr)
[codex:581078]
[codex:581078] opnames = {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:581078] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:581078] 0x20:'SHA3',
[codex:581078] 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:581078] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:581078] 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:581078] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:581078] }
[codex:581078]
[codex:581078] def op_name(op):
[codex:581078] if 0x60 <= op <= 0x7f:
[codex:581078] return f'PUSH{op-0x5f}'
[codex:581078] if 0x80 <= op <= 0x8f:
[codex:581078] return f'DUP{op-0x7f}'
[codex:581078] if 0x90 <= op <= 0x9f:
[codex:581078] return f'SWAP{op-0x8f}'
[codex:581078] if 0xa0 <= op <= 0xa4:
[codex:581078] return f'LOG{op-0x9f}'
[codex:581078] return opnames.get(op, f'OP{op:02x}')
[codex:581078]
[codex:581078] ops = []
[codex:581078] i=0
[codex:581078] while i < len(code):
[codex:581078] op = code[i]
[codex:581078] name = op_name(op)
[codex:581078] arg = b''
[codex:581078] if 0x60 <= op <= 0x7f:
[codex:581078] n = op-0x5f
[codex:581078] arg = code[i+1:i+1+n]
[codex:581078] i += 1+n
[codex:581078] else:
[codex:581078] i += 1
[codex:581078] ops.append((i - (1+len(arg)), op, name, arg))
[codex:581078]
[codex:581078] # Build map from position to index
[codex:581078] pos_to_idx = {pos: idx for idx,(pos,_,_,_) in enumerate(ops)}
[codex:581078]
[codex:581078] # function to print range
[codex:581078]
[codex:581078] def print_range(start,end):
[codex:581078] for pos,op,name,arg in ops:
[codex:581078] if start <= pos <= end:
[codex:581078] if arg:
[codex:581078] print(f'{pos:04x}: {name} 0x{arg.hex()}')
[codex:581078] else:
[codex:581078] print(f'{pos:04x}: {name}')
[codex:581078]
[codex:581078] print('--- around 0xa50-0xaa0')
[codex:581078] print_range(0xa40,0xaa5)
[codex:581078] print('--- around 0xf10-0xfd0')
[codex:581078] print_range(0xf10,0xfd0)
[codex:581078] PY" in /tmp/codex-multi-hoq1r_bw succeeded in 32ms:
[codex:581078] --- around 0xa50-0xaa0
[codex:581078] 0a52: SWAP2
[codex:581078] 0a53: PUSH4 0x4c60db9c
[codex:581078] 0a58: SWAP2
[codex:581078] 0a59: PUSH1 0x44
[codex:581078] 0a5b: DUP1
[codex:581078] 0a5c: DUP4
[codex:581078] 0a5d: ADD
[codex:581078] 0a5e: SWAP3
[codex:581078] 0a5f: PUSH1 0x00
[codex:581078] 0a61: SWAP3
[codex:581078] 0a62: SWAP2
[codex:581078] 0a63: SWAP1
[codex:581078] 0a64: DUP3
[codex:581078] 0a65: SWAP1
[codex:581078] 0a66: SUB
[codex:581078] 0a67: ADD
[codex:581078] 0a68: DUP2
[codex:581078] 0a69: DUP7
[codex:581078] 0a6a: DUP1
[codex:581078]
[codex:581078] thinking
[codex:581078] **Analyzing delegatecall stack setup**
[codex:581078] exec
[codex:581078] /bin/bash -lc "python - <<'PY'
[codex:581078] import re
[codex:581078] from pathlib import Path
[codex:581078] hexdata = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:581078] hexstr = re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:581078] code = bytes.fromhex(hexstr)
[codex:581078]
[codex:581078] opnames = {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:581078] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:581078] 0x20:'SHA3',
[codex:581078] 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:581078] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:581078] 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:581078] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:581078] }
[codex:581078]
[codex:581078] def op_name(op):
[codex:581078] if 0x60 <= op <= 0x7f:
[codex:581078] return f'PUSH{op-0x5f}'
[codex:581078] if 0x80 <= op <= 0x8f:
[codex:581078] return f'DUP{op-0x7f}'
[codex:581078] if 0x90 <= op <= 0x9f:
[codex:581078] return f'SWAP{op-0x8f}'
[codex:581078] if 0xa0 <= op <= 0xa4:
[codex:581078] return f'LOG{op-0x9f}'
[codex:581078] return opnames.get(op, f'OP{op:02x}')
[codex:581078]
[codex:581078] ops = []
[codex:581078] i=0
[codex:581078] while i < len(code):
[codex:581078] op = code[i]
[codex:581078] name = op_name(op)
[codex:581078] arg = b''
[codex:581078] if 0x60 <= op <= 0x7f:
[codex:581078] n = op-0x5f
[codex:581078] arg = code[i+1:i+1+n]
[codex:581078] i += 1+n
[codex:581078] else:
[codex:581078] i += 1
[codex:581078] ops.append((i - (1+len(arg)), op, name, arg))
[codex:581078]
[codex:581078] # print range around 0x9e0-0xa50
[codex:581078] for pos,op,name,arg in ops:
[codex:581078] if 0x9e0 <= pos <= 0xa50:
[codex:581078] if arg:
[codex:581078] print(f'{pos:04x}: {name} 0x{arg.hex()}')
[codex:581078] else:
[codex:581078] print(f'{pos:04x}: {name}')
[codex:581078] PY" in /tmp/codex-multi-hoq1r_bw succeeded in 37ms:
[codex:581078] 09e0: PUSH2 0x09e8
[codex:581078] 09e3: JUMPI
[codex:581078] 09e4: PUSH1 0x00
[codex:581078] 09e6: DUP1
[codex:581078] 09e7: REVERT
[codex:581078] 09e8: JUMPDEST
[codex:581078] 09e9: PUSH1 0x01
[codex:581078] 09eb: PUSH1 0x01
[codex:581078] 09ed: PUSH1 0xa0
[codex:581078] 09ef: SHL
[codex:581078] 09f0: SUB
[codex:581078] 09f1: DUP2
[codex:581078] 09f2: AND
[codex:581078] 09f3: PUSH1 0x00
[codex:581078] 09f5: SWAP1
[codex:581078] 09f6: DUP2
[codex:581078] 09f7: MSTORE
[codex:581078] 09f8: PUSH1 0x0e
[codex:581078] 09fa: PUSH1 0x20
[codex:581078] 09fc: MSTORE
[codex:581078]
[codex:581078] thinking
[codex:581078] **Analyzing constant delegatecall usage**
[codex:581078] exec
[codex:581078] /bin/bash -lc "python - <<'PY'
[codex:581078] import re
[codex:581078] from pathlib import Path
[codex:581078] hexdata = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:581078] hexstr = re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:581078] code = bytes.fromhex(hexstr)
[codex:581078] start=0xa60
[codex:581078] end=0xa90
[codex:581078] print(code[start:end].hex())
[codex:581078] PY" in /tmp/codex-multi-hoq1r_bw succeeded in 26ms:
[codex:581078] 00929190829003018186803b158015610a7757600080fd5b505af4158015610a8b573d6000803e3d6000fd5b50506040
[codex:581078]
[codex:581078] thinking
[codex:581078] **Analyzing delegatecall and potential exploits**
[codex:581078] exec
[codex:581078] /bin/bash -lc "python - <<'PY'
[codex:581078] import re
[codex:581078] from pathlib import Path
[codex:581078] hexdata = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:581078] hexstr = re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:581078] code = bytes.fromhex(hexstr)
[codex:581078]
[codex:581078] opnames = {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:581078] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:581078] 0x20:'SHA3',
[codex:581078] 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:581078] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:581078] 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:581078] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:581078] }
[codex:581078]
[codex:581078] def op_name(op):
[codex:581078] if 0x60 <= op <= 0x7f:
[codex:581078] return f'PUSH{op-0x5f}'
[codex:581078] if 0x80 <= op <= 0x8f:
[codex:581078] return f'DUP{op-0x7f}'
[codex:581078] if 0x90 <= op <= 0x9f:
[codex:581078] return f'SWAP{op-0x8f}'
[codex:581078] if 0xa0 <= op <= 0xa4:
[codex:581078] return f'LOG{op-0x9f}'
[codex:581078] return opnames.get(op, f'OP{op:02x}')
[codex:581078]
[codex:581078] ops = []
[codex:581078] i=0
[codex:581078] while i < len(code):
[codex:581078] op = code[i]
[codex:581078] name = op_name(op)
[codex:581078] arg = b''
[codex:581078] if 0x60 <= op <= 0x7f:
[codex:581078] n = op-0x5f
[codex:581078] arg = code[i+1:i+1+n]
[codex:581078] i += 1+n
[codex:581078] else:
[codex:581078] i += 1
[codex:581078] ops.append((i - (1+len(arg)), op, name, arg))
[codex:581078]
[codex:581078] for pos,op,name,arg in ops:
[codex:581078] if 0x13f0 <= pos <= 0x1455:
[codex:581078] if arg:
[codex:581078] print(f'{pos:04x}: {name} 0x{arg.hex()}')
[codex:581078] else:
[codex:581078] print(f'{pos:04x}: {name}')
[codex:581078] PY" in /tmp/codex-multi-hoq1r_bw succeeded in 33ms:
[codex:581078] 1405: SWAP3
[codex:581078] 1406: DUP3
[codex:581078] 1407: SWAP1
[codex:581078] 1408: SUB
[codex:581078] 1409: ADD
[codex:581078] 140a: SWAP1
[codex:581078] 140b: LOG3
[codex:581078] 140c: PUSH1 0x40
[codex:581078] 140e: MLOAD
[codex:581078] 140f: PUSH1 0x00
[codex:581078] 1411: SWAP1
[codex:581078] 1412: PUSH1 0x01
[codex:581078] 1414: PUSH1 0x01
[codex:581078] 1416: PUSH1 0xa0
[codex:581078] 1418: SHL
[codex:581078] 1419: SUB
[codex:581078] 141a: DUP6
[codex:581078] 141b: AND
[codex:581078] 141c: SWAP1
[codex:581078] 141d: DUP4
[codex:581078]
[codex:581078] thinking
[codex:581078] **Analyzing CALL stack parameters**
[codex:581078] exec
[codex:581078] /bin/bash -lc "python - <<'PY'
[codex:581078] import re
[codex:581078] from pathlib import Path
[codex:581078] hexdata = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:581078] hexstr = re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:581078] code = bytes.fromhex(hexstr)
[codex:581078]
[codex:581078] opnames = {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:581078] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:581078] 0x20:'SHA3',
[codex:581078] 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:581078] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:581078] 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:581078] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:581078] }
[codex:581078]
[codex:581078] def op_name(op):
[codex:581078] if 0x60 <= op <= 0x7f:
[codex:581078] return f'PUSH{op-0x5f}'
[codex:581078] if 0x80 <= op <= 0x8f:
[codex:581078] return f'DUP{op-0x7f}'
[codex:581078] if 0x90 <= op <= 0x9f:
[codex:581078] return f'SWAP{op-0x8f}'
[codex:581078] if 0xa0 <= op <= 0xa4:
[codex:581078] return f'LOG{op-0x9f}'
[codex:581078] return opnames.get(op, f'OP{op:02x}')
[codex:581078]
[codex:581078] ops = []
[codex:581078] i=0
[codex:581078] while i < len(code):
[codex:581078] op = code[i]
[codex:581078] name = op_name(op)
[codex:581078] arg = b''
[codex:581078] if 0x60 <= op <= 0x7f:
[codex:581078] n = op-0x5f
[codex:581078] arg = code[i+1:i+1+n]
[codex:581078] i += 1+n
[codex:581078] else:
[codex:581078] i += 1
[codex:581078] ops.append((i - (1+len(arg)), op, name, arg))
[codex:581078]
[codex:581078] for pos,op,name,arg in ops:
[codex:581078] if 0x1370 <= pos <= 0x140f:
[codex:581078] if arg:
[codex:581078] print(f'{pos:04x}: {name} 0x{arg.hex()}')
[codex:581078] else:
[codex:581078] print(f'{pos:04x}: {name}')
[codex:581078] PY" in /tmp/codex-multi-hoq1r_bw succeeded in 31ms:
[codex:581078] 1371: JUMP
[codex:581078] 1372: JUMPDEST
[codex:581078] 1373: POP
[codex:581078] 1374: POP
[codex:581078] 1375: POP
[codex:581078] 1376: POP
[codex:581078] 1377: JUMP
[codex:581078] 1378: JUMPDEST
[codex:581078] 1379: PUSH1 0x00
[codex:581078] 137b: DUP1
[codex:581078] 137c: PUSH2 0x1384
[codex:581078] 137f: DUP5
[codex:581078] 1380: PUSH2 0x0d74
[codex:581078] 1383: JUMP
[codex:581078] 1384: JUMPDEST
[codex:581078] 1385: SWAP1
[codex:581078] 1386: POP
[codex:581078] 1387: DUP1
[codex:581078] 1388: ISZERO
[codex:581078] 1389: PUSH2 0x14b5
[codex:581078]
[codex:581078] thinking
[codex:581078] **Analyzing dividend tracker and access controls**
[codex:581078]
[codex:581078] I'm examining how the contract handles dividend transfers via ETH calls and looking closely at functions like `claim`, `processAccount`, and `setBalance` to see if they're properly access-controlled. I'm digging into bytecode patterns for ownership checks and mapping function selectors to offsets to verify if sensitive functions are restricted or exploitable. There's a possibility of delegatecalls to a fixed external address, which I’m cautiously considering for indirect risks, but I’m focusing on concrete, owner-only protections and public access patterns that might allow unauthorized balance manipulation or dividend claims.
[codex:581078] exec
[codex:581078] /bin/bash -lc "python - <<'PY'
[codex:581078] import re
[codex:581078] from pathlib import Path
[codex:581078] hexdata = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:581078] hexstr = re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:581078] code = bytes.fromhex(hexstr)
[codex:581078]
[codex:581078] # opcode decode
[codex:581078] opnames = {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:581078] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:581078] 0x20:'SHA3',
[codex:581078] 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:581078] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:581078] 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:581078] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:581078] }
[codex:581078]
[codex:581078] def op_name(op):
[codex:581078] if 0x60 <= op <= 0x7f:
[codex:581078] return f'PUSH{op-0x5f}'
[codex:581078] if 0x80 <= op <= 0x8f:
[codex:581078] return f'DUP{op-0x7f}'
[codex:581078] if 0x90 <= op <= 0x9f:
[codex:581078] return f'SWAP{op-0x8f}'
[codex:581078] if 0xa0 <= op <= 0xa4:
[codex:581078] return f'LOG{op-0x9f}'
[codex:581078] return opnames.get(op, f'OP{op:02x}')
[codex:581078]
[codex:581078] ops = []
[codex:581078] i=0
[codex:581078] while i < len(code):
[codex:581078] op = code[i]
[codex:581078] name = op_name(op)
[codex:581078] arg = b''
[codex:581078] if 0x60 <= op <= 0x7f:
[codex:581078] n = op-0x5f
[codex:581078] arg = code[i+1:i+1+n]
[codex:581078] i += 1+n
[codex:581078] else:
[codex:581078] i += 1
[codex:581078] ops.append((i - (1+len(arg)), op, name, arg))
[codex:581078]
[codex:581078] # find selector -> jumpdest
[codex:581078] sels = {}
[codex:581078] for idx,(pos,op,name,arg) in enumerate(ops):
[codex:581078] if name == 'PUSH4' and idx+3 < len(ops):
[codex:581078] # look ahead for EQ and PUSH2 dest and JUMPI
[codex:581078] # pattern: PUSH4 sel, EQ, PUSH2 dest, JUMPI (with maybe DUP1 in between)?
[codex:581078] # Search next 6 ops
[codex:581078] for j in range(idx+1, min(idx+8, len(ops)-2)):
[codex:581078] if ops[j][2] == 'EQ':
[codex:581078] # next non-push? just check next op after EQ
[codex:581078] if ops[j+1][2] == 'PUSH2' and ops[j+2][2] == 'JUMPI':
[codex:581078] dest = int.from_bytes(ops[j+1][3], 'big')
[codex:581078] selector = arg.hex()
[codex:581078] sels[selector] = dest
[codex:581078] break
[codex:581078]
[codex:581078] # print selectors
[codex:581078] for sel,dest in sorted(sels.items(), key=lambda x:x[1]):
[codex:581078] print(f'0x{sel} -> 0x{dest:04x}')
[codex:581078] PY" in /tmp/codex-multi-hoq1r_bw succeeded in 32ms:
[codex:581078] 0x03c83302 -> 0x01cf
[codex:581078] 0x06fdde03 -> 0x01d7
[codex:581078] 0x095ea7b3 -> 0x0261
[codex:581078] 0x09bbedde -> 0x02ae
[codex:581078] 0x18160ddd -> 0x02d5
[codex:581078] 0x23b872dd -> 0x02ea
[codex:581078] 0x27ce0147 -> 0x032d
[codex:581078] 0x313ce567 -> 0x0360
[codex:581078] 0x31e79db0 -> 0x038b
[codex:581078] 0x39509351 -> 0x03be
[codex:581078] 0x4e7b827f -> 0x03f7
[codex:581078] 0x52b5f81d -> 0x042a
[codex:581078] 0x6a474002 -> 0x0465
[codex:581078] 0x70a08231 -> 0x047a
[codex:581078] 0x715018a6 -> 0x04ad
[codex:581078] 0x85a6b3ae -> 0x04c2
[codex:581078] 0x8da5cb5b -> 0x04d7
[codex:581078] 0x91b89fba -> 0x0508
[codex:581078] 0x95d89b41 -> 0x053b
[codex:581078] 0xa457c2d7 -> 0x0550
[codex:581078]
[codex:581078] thinking
[codex:581078] **Identifying potentially vulnerable function selectors**
[codex:581078] exec
[codex:581078] /bin/bash -lc "python - <<'PY'
[codex:581078] import sys
[codex:581078] try:
[codex:581078] from Crypto.Hash import keccak
[codex:581078] print('pycryptodome ok')
[codex:581078] k = keccak.new(digest_bits=256)
[codex:581078] k.update(b'excludeFromDividends(address)')
[codex:581078] print(k.hexdigest()[:8])
[codex:581078] except Exception as e:
[codex:581078] print('err', e)
[codex:581078] PY" in /tmp/codex-multi-hoq1r_bw succeeded in 45ms:
[codex:581078] pycryptodome ok
[codex:581078] 31e79db0
[codex:581078]
[codex:581078] thinking
[codex:581078] **Identifying function selectors**
[codex:581078] exec
[codex:581078] /bin/bash -lc "python - <<'PY'
[codex:581078] from Crypto.Hash import keccak
[codex:581078]
[codex:581078] candidates = [
[codex:581078] 'excludeFromDividends(address)',
[codex:581078] 'getAccount(address)',
[codex:581078] 'getAccountAtIndex(uint256)',
[codex:581078] 'getNumberOfTokenHolders()',
[codex:581078] 'claim()',
[codex:581078] 'process(uint256)',
[codex:581078] 'processAccount(address,bool)',
[codex:581078] 'setBalance(address,uint256)',
[codex:581078] 'updateClaimWait(uint256)',
[codex:581078] 'claimWait()',
[codex:581078] 'withdrawDividend()',
[codex:581078] 'withdrawableDividendOf(address)',
[codex:581078] 'accumulativeDividendOf(address)',
[codex:581078] 'dividendTokenBalanceOf(address)',
[codex:581078] 'totalDividendsDistributed()',
[codex:581078] 'dividendToken()',
[codex:581078] 'getLastProcessedIndex()',
[codex:581078] 'lastProcessedIndex()',
[codex:581078] 'isExcludedFromDividends(address)',
[codex:581078] 'setBalance(address,uint256)',
[codex:581078] 'setDividendTokenAddress(address)',
[codex:581078] 'setClaimWait(uint256)',
[codex:581078] 'setMinimumTokenBalanceForDividends(uint256)',
[codex:581078] 'minimumTokenBalanceForDividends()',
[codex:581078] 'getAccountInfo(address)',
[codex:581078] 'getAccountInfoAtIndex(uint256)',
[codex:581078] 'tokenHoldersMap()',
[codex:581078] ]
[codex:581078]
[codex:581078] for sig in candidates:
[codex:581078] k = keccak.new(digest_bits=256)
[codex:581078] k.update(sig.encode())
[codex:581078] sel = k.hexdigest()[:8]
[codex:581078] print(f'{sig} -> 0x{sel}')
[codex:581078] PY" in /tmp/codex-multi-hoq1r_bw succeeded in 37ms:
[codex:581078] excludeFromDividends(address) -> 0x31e79db0
[codex:581078] getAccount(address) -> 0xfbcbc0f1
[codex:581078] getAccountAtIndex(uint256) -> 0x5183d6fd
[codex:581078] getNumberOfTokenHolders() -> 0x09bbedde
[codex:581078] claim() -> 0x4e71d92d
[codex:581078] process(uint256) -> 0xffb2c479
[codex:581078] processAccount(address,bool) -> 0xbc4c4b37
[codex:581078] setBalance(address,uint256) -> 0xe30443bc
[codex:581078] updateClaimWait(uint256) -> 0xe98030c7
[codex:581078] claimWait() -> 0x6f2789ec
[codex:581078] withdrawDividend() -> 0x6a474002
[codex:581078] withdrawableDividendOf(address) -> 0xa8b9d240
[codex:581078] accumulativeDividendOf(address) -> 0x27ce0147
[codex:581078] dividendTokenBalanceOf(address) -> 0x6843cd84
[codex:581078] totalDividendsDistributed() -> 0x85a6b3ae
[codex:581078] dividendToken() -> 0x1582358e
[codex:581078] getLastProcessedIndex() -> 0xe7841ec0
[codex:581078] lastProcessedIndex() -> 0x3009a609
[codex:581078] isExcludedFromDividends(address) -> 0xc705c569
[codex:581078] setBalance(address,uint256) -> 0xe30443bc
[codex:581078]
[codex:581078] thinking
[codex:581078] **Analyzing contract function selectors**
[codex:581078] exec
[codex:581078] /bin/bash -lc "python - <<'PY'
[codex:581078] from Crypto.Hash import keccak
[codex:581078] sigs = ['claim()', 'claimDividend()', 'processAccount(address)', 'processAccount(address,bool)', 'process(uint256)', 'updateClaimWait(uint256)', 'setClaimWait(uint256)', 'getClaimWait()', 'claimWait()', 'getLastClaimTime(address)', 'getLastClaimTimes(address)', 'lastClaimTimes(address)', 'getAccount(address)', 'getAccountAtIndex(uint256)', 'getAccountInfo(address)', 'getAccountInfoAtIndex(uint256)', 'canAutoClaim(uint256)', 'excludeFromDividends(address)', 'includeInDividends(address)', 'setBalance(address,uint256)', 'setBalance(address)', 'withdrawDividend()', 'withdrawDividendOfUser(address)', 'withdrawDividendOfUser()', 'withdrawDividendAndPay(address)', 'getTotalDividendsDistributed()', 'totalDividendsDistributed()', 'getNumberOfTokenHolders()', 'lastProcessedIndex()', 'getLastProcessedIndex()', 'dividendToken()', 'minimumTokenBalanceForDividends()', 'setMinimumTokenBalanceForDividends(uint256)', 'isExcludedFromDividends(address)', 'isExcludedFromDividends(address)', 'getDividendTokenBalanceOf(address)', 'dividendTokenBalanceOf(address)']
[codex:581078] for sig in sigs:
[codex:581078] k=keccak.new(digest_bits=256); k.update(sig.encode());
[codex:581078] sel=k.hexdigest()[:8]
[codex:581078] if sel in ['03c83302','4e7b827f','52b5f81d','715018a6','91b89fba','a457c2d7','aafd847a','be10b614']:
[codex:581078] print(sig, sel)
[codex:581078] PY" in /tmp/codex-multi-hoq1r_bw succeeded in 36ms:
[codex:581078] minimumTokenBalanceForDividends() be10b614
[codex:581078]
[codex:581078] thinking
[codex:581078] **Analyzing function selectors for dividends**
[codex:581078] exec
[codex:581078] /bin/bash -lc "python - <<'PY'
[codex:581078] from Crypto.Hash import keccak
[codex:581078] sigs = [
[codex:581078] 'withdrawnDividendOf(address)',
[codex:581078] 'dividendOf(address)',
[codex:581078] 'magnifiedDividendPerShare()',
[codex:581078] 'totalDividendsDistributed()',
[codex:581078] 'distributeDividends()',
[codex:581078] 'distributeDividends(uint256)',
[codex:581078] 'distributeDividends(address,uint256)',
[codex:581078] 'getLastProcessedIndex()',
[codex:581078] 'setLastProcessedIndex(uint256)',
[codex:581078] 'lastProcessedIndex()',
[codex:581078] 'tokenHoldersMap()',
[codex:581078] 'getAccount(address)',
[codex:581078] 'getAccountAtIndex(uint256)',
[codex:581078] 'getAccountInfo(address)',
[codex:581078] 'getAccountInfoAtIndex(uint256)',
[codex:581078] 'process(uint256)',
[codex:581078] 'processAccount(address,bool)',
[codex:581078] 'claim()',
[codex:581078] 'claimDividend()',
[codex:581078] 'getClaimWait()',
[codex:581078] 'claimWait()',
[codex:581078] 'updateClaimWait(uint256)',
[codex:581078] 'setClaimWait(uint256)',
[codex:581078] 'setBalance(address,uint256)',
[codex:581078] 'setBalance(address)',
[codex:581078] 'setExcludedFromDividends(address,bool)',
[codex:581078] 'excludeFromDividends(address)',
[codex:581078] 'isExcludedFromDividends(address)',
[codex:581078] 'getDividendTokenBalanceOf(address)',
[codex:581078] 'dividendTokenBalanceOf(address)',
[codex:581078] 'minimumTokenBalanceForDividends()',
[codex:581078] 'setMinimumTokenBalanceForDividends(uint256)',
[codex:581078] 'getNumberOfTokenHolders()',
[codex:581078] ]
[codex:581078] for sig in sigs:
[codex:581078] k=keccak.new(digest_bits=256); k.update(sig.encode());
[codex:581078] sel=k.hexdigest()[:8]
[codex:581078] if sel in ['03c83302','4e7b827f','52b5f81d','715018a6','91b89fba','a457c2d7','aafd847a']:
[codex:581078] print(sig, sel)
[codex:581078] PY" in /tmp/codex-multi-hoq1r_bw succeeded in 39ms:
[codex:581078] withdrawnDividendOf(address) aafd847a
[codex:581078] dividendOf(address) 91b89fba
[codex:581078] distributeDividends() 03c83302
[codex:581078]
[codex:581078] thinking
[codex:581078] **Mapping function selectors**
[codex:581078] exec
[codex:581078] /bin/bash -lc "python - <<'PY'
[codex:581078] from Crypto.Hash import keccak
[codex:581078] for sig in ['magnifiedDividendPerShare()','totalDividendsDistributed()','magnifiedDividendCorrections(address)','magnifiedDividendCorrections(address,uint256)','withdrawnDividends(address)','totalDividendsDistributed()']:
[codex:581078] k=keccak.new(digest_bits=256); k.update(sig.encode());
[codex:581078] print(sig, k.hexdigest()[:8])
[codex:581078] PY" in /tmp/codex-multi-hoq1r_bw succeeded in 37ms:
[codex:581078] magnifiedDividendPerShare() 3a7960e0
[codex:581078] totalDividendsDistributed() 85a6b3ae
[codex:581078] magnifiedDividendCorrections(address) 97a06724
[codex:581078] magnifiedDividendCorrections(address,uint256) 9bb78386
[codex:581078] withdrawnDividends(address) de3aaf61
[codex:581078] totalDividendsDistributed() 85a6b3ae
[codex:581078]
[codex:581078] thinking
[codex:581078] **Analyzing function signatures**
[codex:581078] exec
[codex:581078] /bin/bash -lc "python - <<'PY'
[codex:581078] from Crypto.Hash import keccak
[codex:581078] sigs=['getLastClaimTime(address)','lastClaimTimes(address)','lastClaimTime(address)','getLastClaimTimes(address)','claimTimes(address)','excludedFromDividends(address)','isExcluded(address)','isExcludedFromDividends(address)','excludedFromDividends(address)']
[codex:581078] for sig in sigs:
[codex:581078] k=keccak.new(digest_bits=256); k.update(sig.encode());
[codex:581078] sel=k.hexdigest()[:8]
[codex:581078] if sel in ['4e7b827f','52b5f81d','715018a6','a457c2d7']:
[codex:581078] print(sig, sel)
[codex:581078] PY" in /tmp/codex-multi-hoq1r_bw succeeded in 38ms:
[codex:581078] excludedFromDividends(address) 4e7b827f
[codex:581078] excludedFromDividends(address) 4e7b827f
[codex:581078]
[codex:581078] thinking
[codex:581078] **Analyzing function selectors**
[codex:581078] exec
[codex:581078] /bin/bash -lc "python - <<'PY'
[codex:581078] from Crypto.Hash import keccak
[codex:581078] sigs=['getLastClaimTime(address)','getLastClaimTimes(address)','lastClaimTime(address)','lastClaimTimes(address)','lastClaimTime(address)','lastClaimTimes(address)','getLastProcessedIndex()','lastProcessedIndex()','getIndexOfKey(address)','getKeyAtIndex(uint256)','getValueAtIndex(uint256)','getMapSize()','getLength()','length()','size()']
[codex:581078] for sig in sigs:
[codex:581078] k=keccak.new(digest_bits=256); k.update(sig.encode());
[codex:581078] sel=k.hexdigest()[:8]
[codex:581078] if sel in ['52b5f81d','715018a6','a457c2d7']:
[codex:581078] print(sig, sel)
[codex:581078] PY" in /tmp/codex-multi-hoq1r_bw succeeded in 41ms:
[codex:581078]
[codex:581078]
[codex:581078] thinking
[codex:581078] **Computing function selectors for IterableMapping**
[codex:581078] exec
[codex:581078] /bin/bash -lc "python - <<'PY'
[codex:581078] from Crypto.Hash import keccak
[codex:581078] sigs=['getIndexOfKey(address)','getKeyAtIndex(uint256)','getValueAtIndex(uint256)','size()','length()','getLength()','getMapSize()','getIndex(address)']
[codex:581078] for sig in sigs:
[codex:581078] k=keccak.new(digest_bits=256); k.update(sig.encode());
[codex:581078] print(sig, k.hexdigest()[:8])
[codex:581078] PY" in /tmp/codex-multi-hoq1r_bw succeeded in 36ms:
[codex:581078] getIndexOfKey(address) 564c8d11
[codex:581078] getKeyAtIndex(uint256) 663037ac
[codex:581078] getValueAtIndex(uint256) f63791b0
[codex:581078] size() 949d225d
[codex:581078] length() 1f7b6d32
[codex:581078] getLength() be1c766b
[codex:581078] getMapSize() 3706e7e8
[codex:581078] getIndex(address) b31610db
[codex:581078]
[codex:581078] thinking
[codex:581078] **Analyzing function selectors for clues**
[codex:581078] exec
[codex:581078] /bin/bash -lc "python - <<'PY'
[codex:581078] from Crypto.Hash import keccak
[codex:581078] sigs=['setLastProcessedIndex(uint256)','updateLastProcessedIndex(uint256)','setClaimWait(uint256)','updateClaimWait(uint256)','setMinimumTokenBalanceForDividends(uint256)','setBalance(address,uint256)','setBalance(address,uint256,bool)','setBalance(address,bool)','setBalance(address,uint256,bool)']
[codex:581078] for sig in sigs:
[codex:581078] k=keccak.new(digest_bits=256); k.update(sig.encode());
[codex:581078] sel=k.hexdigest()[:8]
[codex:581078] if sel in ['52b5f81d','715018a6','a457c2d7']:
[codex:581078] print(sig, sel)
[codex:581078] PY" in /tmp/codex-multi-hoq1r_bw succeeded in 37ms:
[codex:581078]
[codex:581078]
[codex:581078] thinking
[codex:581078] **Analyzing dividend functions and reentrancy risks**
[codex:581078] exec
[codex:581078] /bin/bash -lc "python - <<'PY'
[codex:581078] import re
[codex:581078] from pathlib import Path
[codex:581078] hexdata = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:581078] hexstr = re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:581078] code = bytes.fromhex(hexstr)
[codex:581078]
[codex:581078] opnames = {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:581078] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:581078] 0x20:'SHA3',
[codex:581078] 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:581078] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:581078] 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:581078] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:581078] }
[codex:581078]
[codex:581078] def op_name(op):
[codex:581078] if 0x60 <= op <= 0x7f:
[codex:581078] return f'PUSH{op-0x5f}'
[codex:581078] if 0x80 <= op <= 0x8f:
[codex:581078] return f'DUP{op-0x7f}'
[codex:581078] if 0x90 <= op <= 0x9f:
[codex:581078] return f'SWAP{op-0x8f}'
[codex:581078] if 0xa0 <= op <= 0xa4:
[codex:581078] return f'LOG{op-0x9f}'
[codex:581078] return opnames.get(op, f'OP{op:02x}')
[codex:581078]
[codex:581078] ops = []
[codex:581078] i=0
[codex:581078] while i < len(code):
[codex:581078] op = code[i]
[codex:581078] name = op_name(op)
[codex:581078] arg = b''
[codex:581078] if 0x60 <= op <= 0x7f:
[codex:581078] n = op-0x5f
[codex:581078] arg = code[i+1:i+1+n]
[codex:581078] i += 1+n
[codex:581078] else:
[codex:581078] i += 1
[codex:581078] ops.append((i - (1+len(arg)), op, name, arg))
[codex:581078]
[codex:581078] for pos,op,name,arg in ops:
[codex:581078] if 0x0678 <= pos <= 0x0735:
[codex:581078] if arg:
[codex:581078] print(f'{pos:04x}: {name} 0x{arg.hex()}')
[codex:581078] else:
[codex:581078] print(f'{pos:04x}: {name}')
[codex:581078] PY" in /tmp/codex-multi-hoq1r_bw succeeded in 31ms:
[codex:581078] 0678: JUMPDEST
[codex:581078] 0679: CALLVALUE
[codex:581078] 067a: DUP1
[codex:581078] 067b: ISZERO
[codex:581078] 067c: PUSH2 0x0684
[codex:581078] 067f: JUMPI
[codex:581078] 0680: PUSH1 0x00
[codex:581078] 0682: DUP1
[codex:581078] 0683: REVERT
[codex:581078] 0684: JUMPDEST
[codex:581078] 0685: POP
[codex:581078] 0686: PUSH2 0x01c8
[codex:581078] 0689: PUSH1 0x04
[codex:581078] 068b: DUP1
[codex:581078] 068c: CALLDATASIZE
[codex:581078] 068d: SUB
[codex:581078] 068e: PUSH1 0x40
[codex:581078] 0690: DUP2
[codex:581078] 0691: LT
[codex:581078] 0692: ISZERO
[codex:581078]
[codex:581078] thinking
[codex:581078] **Analyzing function address mappings**
[codex:581078] exec
[codex:581078] /bin/bash -lc "python - <<'PY'
[codex:581078] import re
[codex:581078] from pathlib import Path
[codex:581078] hexdata = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:581078] hexstr = re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:581078] code = bytes.fromhex(hexstr)
[codex:581078]
[codex:581078] opnames = {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:581078] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:581078] 0x20:'SHA3',
[codex:581078] 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:581078] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:581078] 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:581078] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:581078] }
[codex:581078]
[codex:581078] def op_name(op):
[codex:581078] if 0x60 <= op <= 0x7f:
[codex:581078] return f'PUSH{op-0x5f}'
[codex:581078] if 0x80 <= op <= 0x8f:
[codex:581078] return f'DUP{op-0x7f}'
[codex:581078] if 0x90 <= op <= 0x9f:
[codex:581078] return f'SWAP{op-0x8f}'
[codex:581078] if 0xa0 <= op <= 0xa4:
[codex:581078] return f'LOG{op-0x9f}'
[codex:581078] return opnames.get(op, f'OP{op:02x}')
[codex:581078]
[codex:581078] ops = []
[codex:581078] i=0
[codex:581078] while i < len(code):
[codex:581078] op = code[i]
[codex:581078] name = op_name(op)
[codex:581078] arg = b''
[codex:581078] if 0x60 <= op <= 0x7f:
[codex:581078] n = op-0x5f
[codex:581078] arg = code[i+1:i+1+n]
[codex:581078] i += 1+n
[codex:581078] else:
[codex:581078] i += 1
[codex:581078] ops.append((i - (1+len(arg)), op, name, arg))
[codex:581078]
[codex:581078] for pos,op,name,arg in ops:
[codex:581078] if 0x0e1e <= pos <= 0x0f20:
[codex:581078] if arg:
[codex:581078] print(f'{pos:04x}: {name} 0x{arg.hex()}')
[codex:581078] else:
[codex:581078] print(f'{pos:04x}: {name}')
[codex:581078] PY" in /tmp/codex-multi-hoq1r_bw succeeded in 33ms:
[codex:581078] 0e1e: JUMPDEST
[codex:581078] 0e1f: PUSH2 0x0e26
[codex:581078] 0e22: PUSH2 0x11bb
[codex:581078] 0e25: JUMP
[codex:581078] 0e26: JUMPDEST
[codex:581078] 0e27: PUSH1 0x09
[codex:581078] 0e29: SLOAD
[codex:581078] 0e2a: PUSH1 0x01
[codex:581078] 0e2c: PUSH1 0x01
[codex:581078] 0e2e: PUSH1 0xa0
[codex:581078] 0e30: SHL
[codex:581078] 0e31: SUB
[codex:581078] 0e32: SWAP1
[codex:581078] 0e33: DUP2
[codex:581078] 0e34: AND
[codex:581078] 0e35: SWAP2
[codex:581078] 0e36: AND
[codex:581078] 0e37: EQ
[codex:581078] 0e38: PUSH2 0x0e76
[codex:581078] 0e3b: JUMPI
[codex:581078]
[codex:581078] thinking
[codex:581078] **Investigating owner check mechanism**
[codex:581078] exec
[codex:581078] /bin/bash -lc "python - <<'PY'
[codex:581078] import re
[codex:581078] from pathlib import Path
[codex:581078] hexdata = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:581078] hexstr = re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:581078] code = bytes.fromhex(hexstr)
[codex:581078]
[codex:581078] opnames = {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:581078] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:581078] 0x20:'SHA3',
[codex:581078] 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:581078] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:581078] 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:581078] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:581078] }
[codex:581078]
[codex:581078] def op_name(op):
[codex:581078] if 0x60 <= op <= 0x7f:
[codex:581078] return f'PUSH{op-0x5f}'
[codex:581078] if 0x80 <= op <= 0x8f:
[codex:581078] return f'DUP{op-0x7f}'
[codex:581078] if 0x90 <= op <= 0x9f:
[codex:581078] return f'SWAP{op-0x8f}'
[codex:581078] if 0xa0 <= op <= 0xa4:
[codex:581078] return f'LOG{op-0x9f}'
[codex:581078] return opnames.get(op, f'OP{op:02x}')
[codex:581078]
[codex:581078] ops = []
[codex:581078] i=0
[codex:581078] while i < len(code):
[codex:581078] op = code[i]
[codex:581078] name = op_name(op)
[codex:581078] arg = b''
[codex:581078] if 0x60 <= op <= 0x7f:
[codex:581078] n = op-0x5f
[codex:581078] arg = code[i+1:i+1+n]
[codex:581078] i += 1+n
[codex:581078] else:
[codex:581078] i += 1
[codex:581078] ops.append((i - (1+len(arg)), op, name, arg))
[codex:581078]
[codex:581078] for pos,op,name,arg in ops:
[codex:581078] if 0x11a0 <= pos <= 0x11d5:
[codex:581078] if arg:
[codex:581078] print(f'{pos:04x}: {name} 0x{arg.hex()}')
[codex:581078] else:
[codex:581078] print(f'{pos:04x}: {name}')
[codex:581078] PY" in /tmp/codex-multi-hoq1r_bw succeeded in 36ms:
[codex:581078] 11ab: PUSH1 0x44
[codex:581078] 11ad: DUP3
[codex:581078] 11ae: ADD
[codex:581078] 11af: MSTORE
[codex:581078] 11b0: SWAP1
[codex:581078] 11b1: MLOAD
[codex:581078] 11b2: SWAP1
[codex:581078] 11b3: DUP2
[codex:581078] 11b4: SWAP1
[codex:581078] 11b5: SUB
[codex:581078] 11b6: PUSH1 0x64
[codex:581078] 11b8: ADD
[codex:581078] 11b9: SWAP1
[codex:581078] 11ba: REVERT
[codex:581078] 11bb: JUMPDEST
[codex:581078] 11bc: CALLER
[codex:581078] 11bd: SWAP1
[codex:581078] 11be: JUMP
[codex:581078] 11bf: JUMPDEST
[codex:581078] 11c0: PUSH1 0x40
[codex:581078]
[codex:581078] thinking
[codex:581078] **Analyzing ownership checks and dividend distribution**
[codex:581078] exec
[codex:581078] /bin/bash -lc "python - <<'PY'
[codex:581078] import re
[codex:581078] from pathlib import Path
[codex:581078] hexdata = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:581078] hexstr = re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:581078] code = bytes.fromhex(hexstr)
[codex:581078]
[codex:581078] opnames = {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:581078] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:581078] 0x20:'SHA3',
[codex:581078] 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:581078] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:581078] 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:581078] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:581078] }
[codex:581078]
[codex:581078] def op_name(op):
[codex:581078] if 0x60 <= op <= 0x7f:
[codex:581078] return f'PUSH{op-0x5f}'
[codex:581078] if 0x80 <= op <= 0x8f:
[codex:581078] return f'DUP{op-0x7f}'
[codex:581078] if 0x90 <= op <= 0x9f:
[codex:581078] return f'SWAP{op-0x8f}'
[codex:581078] if 0xa0 <= op <= 0xa4:
[codex:581078] return f'LOG{op-0x9f}'
[codex:581078] return opnames.get(op, f'OP{op:02x}')
[codex:581078]
[codex:581078] ops = []
[codex:581078] i=0
[codex:581078] while i < len(code):
[codex:581078] op = code[i]
[codex:581078] name = op_name(op)
[codex:581078] arg = b''
[codex:581078] if 0x60 <= op <= 0x7f:
[codex:581078] n = op-0x5f
[codex:581078] arg = code[i+1:i+1+n]
[codex:581078] i += 1+n
[codex:581078] else:
[codex:581078] i += 1
[codex:581078] ops.append((i - (1+len(arg)), op, name, arg))
[codex:581078]
[codex:581078] for pos,op,name,arg in ops:
[codex:581078] if 0x0720 <= pos <= 0x07d0:
[codex:581078] if arg:
[codex:581078] print(f'{pos:04x}: {name} 0x{arg.hex()}')
[codex:581078] else:
[codex:581078] print(f'{pos:04x}: {name}')
[codex:581078] PY" in /tmp/codex-multi-hoq1r_bw succeeded in 35ms:
[codex:581078] 0721: DUP4
[codex:581078] 0722: ADD
[codex:581078] 0723: SWAP2
[codex:581078] 0724: SWAP1
[codex:581078] 0725: SWAP2
[codex:581078] 0726: MSTORE
[codex:581078] 0727: DUP1
[codex:581078] 0728: MLOAD
[codex:581078] 0729: SWAP2
[codex:581078] 072a: DUP3
[codex:581078] 072b: SWAP1
[codex:581078] 072c: SUB
[codex:581078] 072d: ADD
[codex:581078] 072e: SWAP1
[codex:581078] 072f: RETURN
[codex:581078] 0730: JUMPDEST
[codex:581078] 0731: PUSH1 0x00
[codex:581078] 0733: PUSH2 0x073a
[codex:581078] 0736: PUSH2 0x087b
[codex:581078] 0739: JUMP
[codex:581078]
[codex:581078] thinking
[codex:581078] **Examining distributeDividends function behavior**
[codex:581078] exec
[codex:581078] /bin/bash -lc "python - <<'PY'
[codex:581078] from Crypto.Hash import keccak
[codex:581078] sigs=['processAccount(address)','processAccount(address,bool)','processAccount(address,uint256)','processAccount(address,bool,uint256)','process(uint256)','process()','claim()','claim(address)','claimDividend()','claimDividend(address)','withdrawDividendOfUser(address)','withdrawDividendOfUser()','withdrawDividendOfUser(address,bool)','processDividends(uint256)','processDividends()','setBalance(address,uint256)','setBalance(address,uint256,bool)','setBalance(address,bool)','setBalance(address,uint256,bool,uint256)','processAccount(address,uint256,bool)']
[codex:581078] for sig in sigs:
[codex:581078] k=keccak.new(digest_bits=256); k.update(sig.encode());
[codex:581078] sel=k.hexdigest()[:8]
[codex:581078] if sel in ['715018a6','a457c2d7','52b5f81d']:
[codex:581078] print(sig, sel)
[codex:581078] PY" in /tmp/codex-multi-hoq1r_bw succeeded in 40ms:
[codex:581078]
[codex:581078]
[codex:581078] thinking
[codex:581078] **Analyzing delegatecall usage and function selectors**
[codex:581078] exec
[codex:581078] /bin/bash -lc "python - <<'PY'
[codex:581078] from Crypto.Hash import keccak
[codex:581078] sigs=['set(address,uint256)','remove(address)','get(address)','getValue(address)','getIndexOfKey(address)','size()','contains(address)','insert(address,uint256)','update(address,uint256)','setBalance(address,uint256)','removeTokenHolder(address)','addTokenHolder(address)','setMapValue(address,uint256)','getMapValue(address)','getIndex(address)','getKeyAtIndex(uint256)','getValueAtIndex(uint256)']
[codex:581078] for sig in sigs:
[codex:581078] k=keccak.new(digest_bits=256); k.update(sig.encode());
[codex:581078] sel=k.hexdigest()[:8]
[codex:581078] if sel in ['bc2b405c','4c60db9c','131836e7','2f0ad017']:
[codex:581078] print(sig, sel)
[codex:581078] PY" in /tmp/codex-multi-hoq1r_bw succeeded in 37ms:
[codex:581078]
[codex:581078]
[codex:581078] thinking
[codex:581078] **Analyzing delegatecall and reentrancy risks**
[codex:581078] codex
[codex:581078] {"no_findings":true,"summary":"No concrete, exploitable profit path identified from the provided bytecode alone.","findings":[]}
[codex:581078] tokens used
[codex:581078] 103,051
[codex:581078] {"no_findings":true,"summary":"No concrete, exploitable profit path identified from the provided bytecode alone.","findings":[]}
{
"codex": {
"ran_at": "2026-01-04T07:01:04.147623+00:00",
"returncode": 0
},
"summary": "No concrete, exploitable profit path identified from the provided bytecode alone.",
"raw_final": {
"summary": "No concrete, exploitable profit path identified from the provided bytecode alone.",
"findings": [],
"no_findings": true
},
"no_findings": true,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x01bb 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0x715018a6 00000019: GT 0000001a: PUSH2 0x00ec 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0xa9059cbb 00000024: GT 00000025: PUSH2 0x008a 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0xdd62ed3e 0000002f: GT 00000030: PUSH2 0x0064 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0xdd62ed3e 0000003a: EQ 0000003b: PUSH2 0x063d 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xe30443bc 00000045: EQ 00000046: PUSH2 0x0678 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xf2fde38b 00000050: EQ 00000051: PUSH2 0x06b1 00000054: JUMPI 00000055: DUP1 00000056: PUSH4 0xfbcbc0f1 0000005b: EQ 0000005c: PUSH2 0x06e4 0000005f: JUMPI 00000060: PUSH2 0x01ca 00000063: JUMP 00000064: JUMPDEST 00000065: DUP1 00000066: PUSH4 0xa9059cbb 0000006b: EQ 0000006c: PUSH2 0x05bc 0000006f: JUMPI 00000070: DUP1 00000071: PUSH4 0xaafd847a 00000076: EQ 00000077: PUSH2 0x05f5 0000007a: JUMPI 0000007b: DUP1 0000007c: PUSH4 0xbe10b614 00000081: EQ 00000082: PUSH2 0x0628 00000085: JUMPI 00000086: PUSH2 0x01ca 00000089: JUMP 0000008a: JUMPDEST 0000008b: DUP1 0000008c: PUSH4 0x91b89fba 00000091: GT 00000092: PUSH2 0x00c6 00000095: JUMPI 00000096: DUP1 00000097: PUSH4 0x91b89fba 0000009c: EQ 0000009d: PUSH2 0x0508 000000a0: JUMPI 000000a1: DUP1 000000a2: PUSH4 0x95d89b41 000000a7: EQ 000000a8: PUSH2 0x053b 000000ab: JUMPI 000000ac: DUP1 000000ad: PUSH4 0xa457c2d7 000000b2: EQ 000000b3: PUSH2 0x0550 000000b6: JUMPI 000000b7: DUP1 000000b8: PUSH4 0xa8b9d240 000000bd: EQ 000000be: PUSH2 0x0589 000000c1: JUMPI 000000c2: PUSH2 0x01ca 000000c5: JUMP 000000c6: JUMPDEST 000000c7: DUP1 000000c8: PUSH4 0x715018a6 000000cd: EQ 000000ce: PUSH2 0x04ad 000000d1: JUMPI 000000d2: DUP1 000000d3: PUSH4 0x85a6b3ae 000000d8: EQ 000000d9: PUSH2 0x04c2 000000dc: JUMPI 000000dd: DUP1 000000de: PUSH4 0x8da5cb5b 000000e3: EQ 000000e4: PUSH2 0x04d7 000000e7: JUMPI 000000e8: PUSH2 0x01ca 000000eb: JUMP 000000ec: JUMPDEST 000000ed: DUP1 000000ee: PUSH4 0x313ce567 000000f3: GT 000000f4: PUSH2 0x0159 000000f7: JUMPI 000000f8: DUP1 000000f9: PUSH4 0x4e7b827f 000000fe: GT 000000ff: PUSH2 0x0133 00000102: JUMPI 00000103: DUP1 00000104: PUSH4 0x4e7b827f 00000109: EQ 0000010a: PUSH2 0x03f7 0000010d: JUMPI 0000010e: DUP1 0000010f: PUSH4 0x52b5f81d 00000114: EQ 00000115: PUSH2 0x042a 00000118: JUMPI 00000119: DUP1 0000011a: PUSH4 0x6a474002 0000011f: EQ 00000120: PUSH2 0x0465 00000123: JUMPI 00000124: DUP1 00000125: PUSH4 0x70a08231 0000012a: EQ 0000012b: PUSH2 0x047a 0000012e: JUMPI 0000012f: PUSH2 0x01ca 00000132: JUMP 00000133: JUMPDEST 00000134: DUP1 00000135: PUSH4 0x313ce567 0000013a: EQ 0000013b: PUSH2 0x0360 0000013e: JUMPI 0000013f: DUP1 00000140: PUSH4 0x31e79db0 00000145: EQ 00000146: PUSH2 0x038b 00000149: JUMPI 0000014a: DUP1 0000014b: PUSH4 0x39509351 00000150: EQ 00000151: PUSH2 0x03be 00000154: JUMPI 00000155: PUSH2 0x01ca 00000158: JUMP 00000159: JUMPDEST 0000015a: DUP1 0000015b: PUSH4 0x09bbedde 00000160: GT 00000161: PUSH2 0x0195 00000164: JUMPI 00000165: DUP1 00000166: PUSH4 0x09bbedde 0000016b: EQ 0000016c: PUSH2 0x02ae 0000016f: JUMPI 00000170: DUP1 00000171: PUSH4 0x18160ddd 00000176: EQ 00000177: PUSH2 0x02d5 0000017a: JUMPI 0000017b: DUP1 0000017c: PUSH4 0x23b872dd 00000181: EQ 00000182: PUSH2 0x02ea 00000185: JUMPI 00000186: DUP1 00000187: PUSH4 0x27ce0147 0000018c: EQ 0000018d: PUSH2 0x032d 00000190: JUMPI 00000191: PUSH2 0x01ca 00000194: JUMP 00000195: JUMPDEST 00000196: DUP1 00000197: PUSH4 0x03c83302 0000019c: EQ 0000019d: PUSH2 0x01cf 000001a0: JUMPI 000001a1: DUP1 000001a2: PUSH4 0x06fdde03 000001a7: EQ 000001a8: PUSH2 0x01d7 000001ab: JUMPI 000001ac: DUP1 000001ad: PUSH4 0x095ea7b3 000001b2: EQ 000001b3: PUSH2 0x0261 000001b6: JUMPI 000001b7: PUSH2 0x01ca 000001ba: JUMP 000001bb: JUMPDEST 000001bc: CALLDATASIZE 000001bd: PUSH2 0x01ca 000001c0: JUMPI 000001c1: PUSH2 0x01c8 000001c4: PUSH2 0x0730 000001c7: JUMP 000001c8: JUMPDEST 000001c9: STOP 000001ca: JUMPDEST 000001cb: PUSH1 0x00 000001cd: DUP1 000001ce: REVERT 000001cf: JUMPDEST 000001d0: PUSH2 0x01c8 000001d3: PUSH2 0x0730 000001d6: JUMP 000001d7: JUMPDEST 000001d8: CALLVALUE 000001d9: DUP1 000001da: ISZERO 000001db: PUSH2 0x01e3 000001de: JUMPI 000001df: PUSH1 0x00 000001e1: DUP1 000001e2: REVERT 000001e3: JUMPDEST 000001e4: POP 000001e5: PUSH2 0x01ec 000001e8: PUSH2 0x07c1 000001eb: JUMP 000001ec: JUMPDEST 000001ed: PUSH1 0x40 000001ef: DUP1 000001f0: MLOAD 000001f1: PUSH1 0x20 000001f3: DUP1 000001f4: DUP3 000001f5: MSTORE 000001f6: DUP4 000001f7: MLOAD 000001f8: DUP2 000001f9: DUP4 000001fa: ADD 000001fb: MSTORE 000001fc: DUP4 000001fd: MLOAD 000001fe: SWAP2 000001ff: SWAP3 00000200: DUP4 00000201: SWAP3 00000202: SWAP1 00000203: DUP4 00000204: ADD 00000205: SWAP2 00000206: DUP6 00000207: ADD 00000208: SWAP1 00000209: DUP1 0000020a: DUP4 0000020b: DUP4 0000020c: PUSH1 0x00 0000020e: JUMPDEST 0000020f: DUP4 00000210: DUP2 00000211: LT 00000212: ISZERO 00000213: PUSH2 0x0226 00000216: JUMPI 00000217: DUP2 00000218: DUP2 00000219: ADD 0000021a: MLOAD 0000021b: DUP4 0000021c: DUP3 0000021d: ADD 0000021e: MSTORE 0000021f: PUSH1 0x20 00000221: ADD 00000222: PUSH2 0x020e 00000225: JUMP 00000226: JUMPDEST 00000227: POP 00000228: POP 00000229: POP 0000022a: POP 0000022b: SWAP1 0000022c: POP 0000022d: SWAP1 0000022e: DUP2 0000022f: ADD 00000230: SWAP1 00000231: PUSH1 0x1f 00000233: AND 00000234: DUP1 00000235: ISZERO 00000236: PUSH2 0x0253 00000239: JUMPI 0000023a: DUP1 0000023b: DUP3 0000023c: SUB 0000023d: DUP1 0000023e: MLOAD 0000023f: PUSH1 0x01 00000241: DUP4 00000242: PUSH1 0x20 00000244: SUB 00000245: PUSH2 0x0100 00000248: EXP 00000249: SUB 0000024a: NOT 0000024b: AND 0000024c: DUP2 0000024d: MSTORE 0000024e: PUSH1 0x20 00000250: ADD 00000251: SWAP2 00000252: POP 00000253: JUMPDEST 00000254: POP 00000255: SWAP3 00000256: POP 00000257: POP 00000258: POP 00000259: PUSH1 0x40 0000025b: MLOAD 0000025c: DUP1 0000025d: SWAP2 0000025e: SUB 0000025f: SWAP1 00000260: RETURN 00000261: JUMPDEST 00000262: CALLVALUE 00000263: DUP1 00000264: ISZERO 00000265: PUSH2 0x026d 00000268: JUMPI 00000269: PUSH1 0x00 0000026b: DUP1 0000026c: REVERT 0000026d: JUMPDEST 0000026e: POP 0000026f: PUSH2 0x029a 00000272: PUSH1 0x04 00000274: DUP1 00000275: CALLDATASIZE 00000276: SUB 00000277: PUSH1 0x40 00000279: DUP2 0000027a: LT 0000027b: ISZERO 0000027c: PUSH2 0x0284 0000027f: JUMPI 00000280: PUSH1 0x00 00000282: DUP1 00000283: REVERT 00000284: JUMPDEST 00000285: POP 00000286: PUSH1 0x01 00000288: PUSH1 0x01 0000028a: PUSH1 0xa0 0000028c: SHL 0000028d: SUB 0000028e: DUP2 0000028f: CALLDATALOAD 00000290: AND 00000291: SWAP1 00000292: PUSH1 0x20 00000294: ADD 00000295: CALLDATALOAD 00000296: PUSH2 0x0857 00000299: JUMP 0000029a: JUMPDEST 0000029b: PUSH1 0x40 0000029d: DUP1 0000029e: MLOAD 0000029f: SWAP2 000002a0: ISZERO 000002a1: ISZERO 000002a2: DUP3 000002a3: MSTORE 000002a4: MLOAD 000002a5: SWAP1 000002a6: DUP2 000002a7: SWAP1 000002a8: SUB 000002a9: PUSH1 0x20 000002ab: ADD 000002ac: SWAP1 000002ad: RETURN 000002ae: JUMPDEST 000002af: CALLVALUE 000002b0: DUP1 000002b1: ISZERO 000002b2: PUSH2 0x02ba 000002b5: JUMPI 000002b6: PUSH1 0x00 000002b8: DUP1 000002b9: REVERT 000002ba: JUMPDEST 000002bb: POP 000002bc: PUSH2 0x02c3 000002bf: PUSH2 0x0875 000002c2: JUMP 000002c3: JUMPDEST 000002c4: PUSH1 0x40 000002c6: DUP1 000002c7: MLOAD 000002c8: SWAP2 000002c9: DUP3 000002ca: MSTORE 000002cb: MLOAD 000002cc: SWAP1 000002cd: DUP2 000002ce: SWAP1 000002cf: SUB 000002d0: PUSH1 0x20 000002d2: ADD 000002d3: SWAP1 000002d4: RETURN 000002d5: JUMPDEST 000002d6: CALLVALUE 000002d7: DUP1 000002d8: ISZERO 000002d9: PUSH2 0x02e1 000002dc: JUMPI 000002dd: PUSH1 0x00 000002df: DUP1 000002e0: REVERT 000002e1: JUMPDEST 000002e2: POP 000002e3: PUSH2 0x02c3 000002e6: PUSH2 0x087b 000002e9: JUMP 000002ea: JUMPDEST 000002eb: CALLVALUE 000002ec: DUP1 000002ed: ISZERO 000002ee: PUSH2 0x02f6 000002f1: JUMPI 000002f2: PUSH1 0x00 000002f4: DUP1 000002f5: REVERT 000002f6: JUMPDEST 000002f7: POP 000002f8: PUSH2 0x029a 000002fb: PUSH1 0x04 000002fd: DUP1 000002fe: CALLDATASIZE 000002ff: SUB 00000300: PUSH1 0x60 00000302: DUP2 00000303: LT 00000304: ISZERO 00000305: PUSH2 0x030d 00000308: JUMPI 00000309: PUSH1 0x00 0000030b: DUP1 0000030c: REVERT 0000030d: JUMPDEST 0000030e: POP 0000030f: PUSH1 0x01 00000311: PUSH1 0x01 00000313: PUSH1 0xa0 00000315: SHL 00000316: SUB 00000317: DUP2 00000318: CALLDATALOAD 00000319: DUP2 0000031a: AND 0000031b: SWAP2 0000031c: PUSH1 0x20 0000031e: DUP2 0000031f: ADD 00000320: CALLDATALOAD 00000321: SWAP1 00000322: SWAP2 00000323: AND 00000324: SWAP1 00000325: PUSH1 0x40 00000327: ADD 00000328: CALLDATALOAD 00000329: PUSH2 0x0881 0000032c: JUMP 0000032d: JUMPDEST 0000032e: CALLVALUE 0000032f: DUP1 00000330: ISZERO 00000331: PUSH2 0x0339 00000334: JUMPI 00000335: PUSH1 0x00 00000337: DUP1 00000338: REVERT 00000339: JUMPDEST 0000033a: POP 0000033b: PUSH2 0x02c3 0000033e: PUSH1 0x04 00000340: DUP1 00000341: CALLDATASIZE 00000342: SUB 00000343: PUSH1 0x20 00000345: DUP2 00000346: LT 00000347: ISZERO 00000348: PUSH2 0x0350 0000034b: JUMPI 0000034c: PUSH1 0x00 0000034e: DUP1 0000034f: REVERT 00000350: JUMPDEST 00000351: POP 00000352: CALLDATALOAD 00000353: PUSH1 0x01 00000355: PUSH1 0x01 00000357: PUSH1 0xa0 00000359: SHL 0000035a: SUB 0000035b: AND 0000035c: PUSH2 0x0908 0000035f: JUMP 00000360: JUMPDEST 00000361: CALLVALUE 00000362: DUP1 00000363: ISZERO 00000364: PUSH2 0x036c 00000367: JUMPI 00000368: PUSH1 0x00 0000036a: DUP1 0000036b: REVERT 0000036c: JUMPDEST 0000036d: POP 0000036e: PUSH2 0x0375 00000371: PUSH2 0x0965 00000374: JUMP 00000375: JUMPDEST 00000376: PUSH1 0x40 00000378: DUP1 00000379: MLOAD 0000037a: PUSH1 0xff 0000037c: SWAP1 0000037d: SWAP3 0000037e: AND 0000037f: DUP3 00000380: MSTORE 00000381: MLOAD 00000382: SWAP1 00000383: DUP2 00000384: SWAP1 00000385: SUB 00000386: PUSH1 0x20 00000388: ADD 00000389: SWAP1 0000038a: RETURN 0000038b: JUMPDEST 0000038c: CALLVALUE 0000038d: DUP1 0000038e: ISZERO 0000038f: PUSH2 0x0397 00000392: JUMPI 00000393: PUSH1 0x00 00000395: DUP1 00000396: REVERT 00000397: JUMPDEST 00000398: POP 00000399: PUSH2 0x01c8 0000039c: PUSH1 0x04 0000039e: DUP1 0000039f: CALLDATASIZE 000003a0: SUB 000003a1: PUSH1 0x20 000003a3: DUP2 000003a4: LT 000003a5: ISZERO 000003a6: PUSH2 0x03ae 000003a9: JUMPI 000003aa: PUSH1 0x00 000003ac: DUP1 000003ad: REVERT 000003ae: JUMPDEST 000003af: POP 000003b0: CALLDATALOAD 000003b1: PUSH1 0x01 000003b3: PUSH1 0x01 000003b5: PUSH1 0xa0 000003b7: SHL 000003b8: SUB 000003b9: AND 000003ba: PUSH2 0x096a 000003bd: JUMP 000003be: JUMPDEST 000003bf: CALLVALUE 000003c0: DUP1 000003c1: ISZERO 000003c2: PUSH2 0x03ca 000003c5: JUMPI 000003c6: PUSH1 0x00 000003c8: DUP1 000003c9: REVERT 000003ca: JUMPDEST 000003cb: POP 000003cc: PUSH2 0x029a 000003cf: PUSH1 0x04 000003d1: DUP1 000003d2: CALLDATASIZE 000003d3: SUB 000003d4: PUSH1 0x40 000003d6: DUP2 000003d7: LT 000003d8: ISZERO 000003d9: PUSH2 0x03e1 000003dc: JUMPI 000003dd: PUSH1 0x00 000003df: DUP1 000003e0: REVERT 000003e1: JUMPDEST 000003e2: POP 000003e3: PUSH1 0x01 000003e5: PUSH1 0x01 000003e7: PUSH1 0xa0 000003e9: SHL 000003ea: SUB 000003eb: DUP2 000003ec: CALLDATALOAD 000003ed: AND 000003ee: SWAP1 000003ef: PUSH1 0x20 000003f1: ADD 000003f2: CALLDATALOAD 000003f3: PUSH2 0x0ac6 000003f6: JUMP 000003f7: JUMPDEST 000003f8: CALLVALUE 000003f9: DUP1 000003fa: ISZERO 000003fb: PUSH2 0x0403 000003fe: JUMPI 000003ff: PUSH1 0x00 00000401: DUP1 00000402: REVERT 00000403: JUMPDEST 00000404: POP 00000405: PUSH2 0x029a 00000408: PUSH1 0x04 0000040a: DUP1 0000040b: CALLDATASIZE 0000040c: SUB 0000040d: PUSH1 0x20 0000040f: DUP2 00000410: LT 00000411: ISZERO 00000412: PUSH2 0x041a 00000415: JUMPI 00000416: PUSH1 0x00 00000418: DUP1 00000419: REVERT 0000041a: JUMPDEST 0000041b: POP 0000041c: CALLDATALOAD 0000041d: PUSH1 0x01 0000041f: PUSH1 0x01 00000421: PUSH1 0xa0 00000423: SHL 00000424: SUB 00000425: AND 00000426: PUSH2 0x0b14 00000429: JUMP 0000042a: JUMPDEST 0000042b: CALLVALUE 0000042c: DUP1 0000042d: ISZERO 0000042e: PUSH2 0x0436 00000431: JUMPI 00000432: PUSH1 0x00 00000434: DUP1 00000435: REVERT 00000436: JUMPDEST 00000437: POP 00000438: PUSH2 0x02c3 0000043b: PUSH1 0x04 0000043d: DUP1 0000043e: CALLDATASIZE 0000043f: SUB 00000440: PUSH1 0x40 00000442: DUP2 00000443: LT 00000444: ISZERO 00000445: PUSH2 0x044d 00000448: JUMPI 00000449: PUSH1 0x00 0000044b: DUP1 0000044c: REVERT 0000044d: JUMPDEST 0000044e: POP 0000044f: PUSH1 0x01 00000451: PUSH1 0x01 00000453: PUSH1 0xa0 00000455: SHL 00000456: SUB 00000457: DUP2 00000458: CALLDATALOAD 00000459: DUP2 0000045a: AND 0000045b: SWAP2 0000045c: PUSH1 0x20 0000045e: ADD 0000045f: CALLDATALOAD 00000460: AND 00000461: PUSH2 0x0b29 00000464: JUMP 00000465: JUMPDEST 00000466: CALLVALUE 00000467: DUP1 00000468: ISZERO 00000469: PUSH2 0x0471 0000046c: JUMPI 0000046d: PUSH1 0x00 0000046f: DUP1 00000470: REVERT 00000471: JUMPDEST 00000472: POP 00000473: PUSH2 0x01c8 00000476: PUSH2 0x0b97 00000479: JUMP 0000047a: JUMPDEST 0000047b: CALLVALUE 0000047c: DUP1 0000047d: ISZERO 0000047e: PUSH2 0x0486 00000481: JUMPI 00000482: PUSH1 0x00 00000484: DUP1 00000485: REVERT 00000486: JUMPDEST 00000487: POP 00000488: PUSH2 0x02c3 0000048b: PUSH1 0x04 0000048d: DUP1 0000048e: CALLDATASIZE 0000048f: SUB 00000490: PUSH1 0x20 00000492: DUP2 00000493: LT 00000494: ISZERO 00000495: PUSH2 0x049d 00000498: JUMPI 00000499: PUSH1 0x00 0000049b: DUP1 0000049c: REVERT 0000049d: JUMPDEST 0000049e: POP 0000049f: CALLDATALOAD 000004a0: PUSH1 0x01 000004a2: PUSH1 0x01 000004a4: PUSH1 0xa0 000004a6: SHL 000004a7: SUB 000004a8: AND 000004a9: PUSH2 0x0bce 000004ac: JUMP 000004ad: JUMPDEST 000004ae: CALLVALUE 000004af: DUP1 000004b0: ISZERO 000004b1: PUSH2 0x04b9 000004b4: JUMPI 000004b5: PUSH1 0x00 000004b7: DUP1 000004b8: REVERT 000004b9: JUMPDEST 000004ba: POP 000004bb: PUSH2 0x01c8 000004be: PUSH2 0x0be9 000004c1: JUMP 000004c2: JUMPDEST 000004c3: CALLVALUE 000004c4: DUP1 000004c5: ISZERO 000004c6: PUSH2 0x04ce 000004c9: JUMPI 000004ca: PUSH1 0x00 000004cc: DUP1 000004cd: REVERT 000004ce: JUMPDEST 000004cf: POP 000004d0: PUSH2 0x02c3 000004d3: PUSH2 0x0c8b 000004d6: JUMP 000004d7: JUMPDEST 000004d8: CALLVALUE 000004d9: DUP1 000004da: ISZERO 000004db: PUSH2 0x04e3 000004de: JUMPI 000004df: PUSH1 0x00 000004e1: DUP1 000004e2: REVERT 000004e3: JUMPDEST 000004e4: POP 000004e5: PUSH2 0x04ec 000004e8: PUSH2 0x0c91 000004eb: JUMP 000004ec: JUMPDEST 000004ed: PUSH1 0x40 000004ef: DUP1 000004f0: MLOAD 000004f1: PUSH1 0x01 000004f3: PUSH1 0x01 000004f5: PUSH1 0xa0 000004f7: SHL 000004f8: SUB 000004f9: SWAP1 000004fa: SWAP3 000004fb: AND 000004fc: DUP3 000004fd: MSTORE 000004fe: MLOAD 000004ff: SWAP1 00000500: DUP2 00000501: SWAP1 00000502: SUB 00000503: PUSH1 0x20 00000505: ADD 00000506: SWAP1 00000507: RETURN 00000508: JUMPDEST 00000509: CALLVALUE 0000050a: DUP1 0000050b: ISZERO 0000050c: PUSH2 0x0514 0000050f: JUMPI 00000510: PUSH1 0x00 00000512: DUP1 00000513: REVERT 00000514: JUMPDEST 00000515: POP 00000516: PUSH2 0x02c3 00000519: PUSH1 0x04 0000051b: DUP1 0000051c: CALLDATASIZE 0000051d: SUB 0000051e: PUSH1 0x20 00000520: DUP2 00000521: LT 00000522: ISZERO 00000523: PUSH2 0x052b 00000526: JUMPI 00000527: PUSH1 0x00 00000529: DUP1 0000052a: REVERT 0000052b: JUMPDEST 0000052c: POP 0000052d: CALLDATALOAD 0000052e: PUSH1 0x01 00000530: PUSH1 0x01 00000532: PUSH1 0xa0 00000534: SHL 00000535: SUB 00000536: AND 00000537: PUSH2 0x0ca0 0000053a: JUMP 0000053b: JUMPDEST 0000053c: CALLVALUE 0000053d: DUP1 0000053e: ISZERO 0000053f: PUSH2 0x0547 00000542: JUMPI 00000543: PUSH1 0x00 00000545: DUP1 00000546: REVERT 00000547: JUMPDEST 00000548: POP 00000549: PUSH2 0x01ec 0000054c: PUSH2 0x0cab 0000054f: JUMP 00000550: JUMPDEST 00000551: CALLVALUE 00000552: DUP1 00000553: ISZERO 00000554: PUSH2 0x055c 00000557: JUMPI 00000558: PUSH1 0x00 0000055a: DUP1 0000055b: REVERT 0000055c: JUMPDEST 0000055d: POP 0000055e: PUSH2 0x029a 00000561: PUSH1 0x04 00000563: DUP1 00000564: CALLDATASIZE 00000565: SUB 00000566: PUSH1 0x40 00000568: DUP2 00000569: LT 0000056a: ISZERO 0000056b: PUSH2 0x0573 0000056e: JUMPI 0000056f: PUSH1 0x00 00000571: DUP1 00000572: REVERT 00000573: JUMPDEST 00000574: POP 00000575: PUSH1 0x01 00000577: PUSH1 0x01 00000579: PUSH1 0xa0 0000057b: SHL 0000057c: SUB 0000057d: DUP2 0000057e: CALLDATALOAD 0000057f: AND 00000580: SWAP1 00000581: PUSH1 0x20 00000583: ADD 00000584: CALLDATALOAD 00000585: PUSH2 0x0d0c 00000588: JUMP 00000589: JUMPDEST 0000058a: CALLVALUE 0000058b: DUP1 0000058c: ISZERO 0000058d: PUSH2 0x0595 00000590: JUMPI 00000591: PUSH1 0x00 00000593: DUP1 00000594: REVERT 00000595: JUMPDEST 00000596: POP 00000597: PUSH2 0x02c3 0000059a: PUSH1 0x04 0000059c: DUP1 0000059d: CALLDATASIZE 0000059e: SUB 0000059f: PUSH1 0x20 000005a1: DUP2 000005a2: LT 000005a3: ISZERO 000005a4: PUSH2 0x05ac 000005a7: JUMPI 000005a8: PUSH1 0x00 000005aa: DUP1 000005ab: REVERT 000005ac: JUMPDEST 000005ad: POP 000005ae: CALLDATALOAD 000005af: PUSH1 0x01 000005b1: PUSH1 0x01 000005b3: PUSH1 0xa0 000005b5: SHL 000005b6: SUB 000005b7: AND 000005b8: PUSH2 0x0d74 000005bb: JUMP 000005bc: JUMPDEST 000005bd: CALLVALUE 000005be: DUP1 000005bf: ISZERO 000005c0: PUSH2 0x05c8 000005c3: JUMPI 000005c4: PUSH1 0x00 000005c6: DUP1 000005c7: REVERT 000005c8: JUMPDEST 000005c9: POP 000005ca: PUSH2 0x029a 000005cd: PUSH1 0x04 000005cf: DUP1 000005d0: CALLDATASIZE 000005d1: SUB 000005d2: PUSH1 0x40 000005d4: DUP2 000005d5: LT 000005d6: ISZERO 000005d7: PUSH2 0x05df 000005da: JUMPI 000005db: PUSH1 0x00 000005dd: DUP1 000005de: REVERT 000005df: JUMPDEST 000005e0: POP 000005e1: PUSH1 0x01 000005e3: PUSH1 0x01 000005e5: PUSH1 0xa0 000005e7: SHL 000005e8: SUB 000005e9: DUP2 000005ea: CALLDATALOAD 000005eb: AND 000005ec: SWAP1 000005ed: PUSH1 0x20 000005ef: ADD 000005f0: CALLDATALOAD 000005f1: PUSH2 0x0da0 000005f4: JUMP 000005f5: JUMPDEST 000005f6: CALLVALUE 000005f7: DUP1 000005f8: ISZERO 000005f9: PUSH2 0x0601 000005fc: JUMPI 000005fd: PUSH1 0x00 000005ff: DUP1 00000600: REVERT 00000601: JUMPDEST 00000602: POP 00000603: PUSH2 0x02c3 00000606: PUSH1 0x04 00000608: DUP1 00000609: CALLDATASIZE 0000060a: SUB 0000060b: PUSH1 0x20 0000060d: DUP2 0000060e: LT 0000060f: ISZERO 00000610: PUSH2 0x0618 00000613: JUMPI 00000614: PUSH1 0x00 00000616: DUP1 00000617: REVERT 00000618: JUMPDEST 00000619: POP 0000061a: CALLDATALOAD 0000061b: PUSH1 0x01 0000061d: PUSH1 0x01 0000061f: PUSH1 0xa0 00000621: SHL 00000622: SUB 00000623: AND 00000624: PUSH2 0x0db4 00000627: JUMP 00000628: JUMPDEST 00000629: CALLVALUE 0000062a: DUP1 0000062b: ISZERO 0000062c: PUSH2 0x0634 0000062f: JUMPI 00000630: PUSH1 0x00 00000632: DUP1 00000633: REVERT 00000634: JUMPDEST 00000635: POP 00000636: PUSH2 0x02c3 00000639: PUSH2 0x0dcf 0000063c: JUMP 0000063d: JUMPDEST 0000063e: CALLVALUE 0000063f: DUP1 00000640: ISZERO 00000641: PUSH2 0x0649 00000644: JUMPI 00000645: PUSH1 0x00 00000647: DUP1 00000648: REVERT 00000649: JUMPDEST 0000064a: POP 0000064b: PUSH2 0x02c3 0000064e: PUSH1 0x04 00000650: DUP1 00000651: CALLDATASIZE 00000652: SUB 00000653: PUSH1 0x40 00000655: DUP2 00000656: LT 00000657: ISZERO 00000658: PUSH2 0x0660 0000065b: JUMPI 0000065c: PUSH1 0x00 0000065e: DUP1 0000065f: REVERT 00000660: JUMPDEST 00000661: POP 00000662: PUSH1 0x01 00000664: PUSH1 0x01 00000666: PUSH1 0xa0 00000668: SHL 00000669: SUB 0000066a: DUP2 0000066b: CALLDATALOAD 0000066c: DUP2 0000066d: AND 0000066e: SWAP2 0000066f: PUSH1 0x20 00000671: ADD 00000672: CALLDATALOAD 00000673: AND 00000674: PUSH2 0x0df3 00000677: JUMP 00000678: JUMPDEST 00000679: CALLVALUE 0000067a: DUP1 0000067b: ISZERO 0000067c: PUSH2 0x0684 0000067f: JUMPI 00000680: PUSH1 0x00 00000682: DUP1 00000683: REVERT 00000684: JUMPDEST 00000685: POP 00000686: PUSH2 0x01c8 00000689: PUSH1 0x04 0000068b: DUP1 0000068c: CALLDATASIZE 0000068d: SUB 0000068e: PUSH1 0x40 00000690: DUP2 00000691: LT 00000692: ISZERO 00000693: PUSH2 0x069b 00000696: JUMPI 00000697: PUSH1 0x00 00000699: DUP1 0000069a: REVERT 0000069b: JUMPDEST 0000069c: POP 0000069d: PUSH1 0x01 0000069f: PUSH1 0x01 000006a1: PUSH1 0xa0 000006a3: SHL 000006a4: SUB 000006a5: DUP2 000006a6: CALLDATALOAD 000006a7: AND 000006a8: SWAP1 000006a9: PUSH1 0x20 000006ab: ADD 000006ac: CALLDATALOAD 000006ad: PUSH2 0x0e1e 000006b0: JUMP 000006b1: JUMPDEST 000006b2: CALLVALUE 000006b3: DUP1 000006b4: ISZERO 000006b5: PUSH2 0x06bd 000006b8: JUMPI 000006b9: PUSH1 0x00 000006bb: DUP1 000006bc: REVERT 000006bd: JUMPDEST 000006be: POP 000006bf: PUSH2 0x01c8 000006c2: PUSH1 0x04 000006c4: DUP1 000006c5: CALLDATASIZE 000006c6: SUB 000006c7: PUSH1 0x20 000006c9: DUP2 000006ca: LT 000006cb: ISZERO 000006cc: PUSH2 0x06d4 000006cf: JUMPI 000006d0: PUSH1 0x00 000006d2: DUP1 000006d3: REVERT 000006d4: JUMPDEST 000006d5: POP 000006d6: CALLDATALOAD 000006d7: PUSH1 0x01 000006d9: PUSH1 0x01 000006db: PUSH1 0xa0 000006dd: SHL 000006de: SUB 000006df: AND 000006e0: PUSH2 0x0fdb 000006e3: JUMP 000006e4: JUMPDEST 000006e5: CALLVALUE 000006e6: DUP1 000006e7: ISZERO 000006e8: PUSH2 0x06f0 000006eb: JUMPI 000006ec: PUSH1 0x00 000006ee: DUP1 000006ef: REVERT 000006f0: JUMPDEST 000006f1: POP 000006f2: PUSH2 0x0717 000006f5: PUSH1 0x04 000006f7: DUP1 000006f8: CALLDATASIZE 000006f9: SUB 000006fa: PUSH1 0x20 000006fc: DUP2 000006fd: LT 000006fe: ISZERO 000006ff: PUSH2 0x0707 00000702: JUMPI 00000703: PUSH1 0x00 00000705: DUP1 00000706: REVERT 00000707: JUMPDEST 00000708: POP 00000709: CALLDATALOAD 0000070a: PUSH1 0x01 0000070c: PUSH1 0x01 0000070e: PUSH1 0xa0 00000710: SHL 00000711: SUB 00000712: AND 00000713: PUSH2 0x10d4 00000716: JUMP 00000717: JUMPDEST 00000718: PUSH1 0x40 0000071a: DUP1 0000071b: MLOAD 0000071c: SWAP3 0000071d: DUP4 0000071e: MSTORE 0000071f: PUSH1 0x20 00000721: DUP4 00000722: ADD 00000723: SWAP2 00000724: SWAP1 00000725: SWAP2 00000726: MSTORE 00000727: DUP1 00000728: MLOAD 00000729: SWAP2 0000072a: DUP3 0000072b: SWAP1 0000072c: SUB 0000072d: ADD 0000072e: SWAP1 0000072f: RETURN 00000730: JUMPDEST 00000731: PUSH1 0x00 00000733: PUSH2 0x073a 00000736: PUSH2 0x087b 00000739: JUMP 0000073a: JUMPDEST 0000073b: GT 0000073c: PUSH2 0x0744 0000073f: JUMPI 00000740: PUSH1 0x00 00000742: DUP1 00000743: REVERT 00000744: JUMPDEST 00000745: CALLVALUE 00000746: ISZERO 00000747: PUSH2 0x07bf 0000074a: JUMPI 0000074b: PUSH2 0x0775 0000074e: PUSH2 0x0755 00000751: PUSH2 0x087b 00000754: JUMP 00000755: JUMPDEST 00000756: PUSH2 0x0763 00000759: CALLVALUE 0000075a: PUSH1 0x01 0000075c: PUSH1 0x80 0000075e: SHL 0000075f: PUSH2 0x1101 00000762: JUMP 00000763: JUMPDEST 00000764: DUP2 00000765: PUSH2 0x076a 00000768: JUMPI 00000769: INVALID 0000076a: JUMPDEST 0000076b: PUSH1 0x05 0000076d: SLOAD 0000076e: SWAP2 0000076f: SWAP1 00000770: DIV 00000771: PUSH2 0x1161 00000774: JUMP 00000775: JUMPDEST 00000776: PUSH1 0x05 00000778: SSTORE 00000779: PUSH1 0x40 0000077b: DUP1 0000077c: MLOAD 0000077d: CALLVALUE 0000077e: DUP2 0000077f: MSTORE 00000780: SWAP1 00000781: MLOAD 00000782: CALLER 00000783: SWAP2 00000784: PUSH32 0xa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d78454116511 000007a5: SWAP2 000007a6: SWAP1 000007a7: DUP2 000007a8: SWAP1 000007a9: SUB 000007aa: PUSH1 0x20 000007ac: ADD 000007ad: SWAP1 000007ae: LOG2 000007af: PUSH1 0x08 000007b1: SLOAD 000007b2: PUSH2 0x07bb 000007b5: SWAP1 000007b6: CALLVALUE 000007b7: PUSH2 0x1161 000007ba: JUMP 000007bb: JUMPDEST 000007bc: PUSH1 0x08 000007be: SSTORE 000007bf: JUMPDEST 000007c0: JUMP 000007c1: JUMPDEST 000007c2: PUSH1 0x03 000007c4: DUP1 000007c5: SLOAD 000007c6: PUSH1 0x40 000007c8: DUP1 000007c9: MLOAD 000007ca: PUSH1 0x20 000007cc: PUSH1 0x1f 000007ce: PUSH1 0x02 000007d0: PUSH1 0x00 000007d2: NOT 000007d3: PUSH2 0x0100 000007d6: PUSH1 0x01 000007d8: DUP9 000007d9: AND 000007da: ISZERO 000007db: MUL 000007dc: ADD 000007dd: SWAP1 000007de: SWAP6 000007df: AND 000007e0: SWAP5 000007e1: SWAP1 000007e2: SWAP5 000007e3: DIV 000007e4: SWAP4 000007e5: DUP5 000007e6: ADD 000007e7: DUP2 000007e8: SWAP1 000007e9: DIV 000007ea: DUP2 000007eb: MUL 000007ec: DUP3 000007ed: ADD 000007ee: DUP2 000007ef: ADD 000007f0: SWAP1 000007f1: SWAP3 000007f2: MSTORE 000007f3: DUP3 000007f4: DUP2 000007f5: MSTORE 000007f6: PUSH1 0x60 000007f8: SWAP4 000007f9: SWAP1 000007fa: SWAP3 000007fb: SWAP1 000007fc: SWAP2 000007fd: DUP4 000007fe: ADD 000007ff: DUP3 00000800: DUP3 00000801: DUP1 00000802: ISZERO 00000803: PUSH2 0x084d 00000806: JUMPI 00000807: DUP1 00000808: PUSH1 0x1f 0000080a: LT 0000080b: PUSH2 0x0822 0000080e: JUMPI 0000080f: PUSH2 0x0100 00000812: DUP1 00000813: DUP4 00000814: SLOAD 00000815: DIV 00000816: MUL 00000817: DUP4 00000818: MSTORE 00000819: SWAP2 0000081a: PUSH1 0x20 0000081c: ADD 0000081d: SWAP2 0000081e: PUSH2 0x084d 00000821: JUMP 00000822: JUMPDEST 00000823: DUP3 00000824: ADD 00000825: SWAP2 00000826: SWAP1 00000827: PUSH1 0x00 00000829: MSTORE 0000082a: PUSH1 0x20 0000082c: PUSH1 0x00 0000082e: KECCAK256 0000082f: SWAP1 00000830: JUMPDEST 00000831: DUP2 00000832: SLOAD 00000833: DUP2 00000834: MSTORE 00000835: SWAP1 00000836: PUSH1 0x01 00000838: ADD 00000839: SWAP1 0000083a: PUSH1 0x20 0000083c: ADD 0000083d: DUP1 0000083e: DUP4 0000083f: GT 00000840: PUSH2 0x0830 00000843: JUMPI 00000844: DUP3 00000845: SWAP1 00000846: SUB 00000847: PUSH1 0x1f 00000849: AND 0000084a: DUP3 0000084b: ADD 0000084c: SWAP2 0000084d: JUMPDEST 0000084e: POP 0000084f: POP 00000850: POP 00000851: POP 00000852: POP 00000853: SWAP1 00000854: POP 00000855: SWAP1 00000856: JUMP 00000857: JUMPDEST 00000858: PUSH1 0x00 0000085a: PUSH2 0x086b 0000085d: PUSH2 0x0864 00000860: PUSH2 0x11bb 00000863: JUMP 00000864: JUMPDEST 00000865: DUP5 00000866: DUP5 00000867: PUSH2 0x11bf 0000086a: JUMP 0000086b: JUMPDEST 0000086c: POP 0000086d: PUSH1 0x01 0000086f: JUMPDEST 00000870: SWAP3 00000871: SWAP2 00000872: POP 00000873: POP 00000874: JUMP 00000875: JUMPDEST 00000876: PUSH1 0x0a 00000878: SLOAD 00000879: SWAP1 0000087a: JUMP 0000087b: JUMPDEST 0000087c: PUSH1 0x02 0000087e: SLOAD 0000087f: SWAP1 00000880: JUMP 00000881: JUMPDEST 00000882: PUSH1 0x00 00000884: PUSH2 0x088e 00000887: DUP5 00000888: DUP5 00000889: DUP5 0000088a: PUSH2 0x11fb 0000088d: JUMP 0000088e: JUMPDEST 0000088f: PUSH2 0x08fe 00000892: DUP5 00000893: PUSH2 0x089a 00000896: PUSH2 0x11bb 00000899: JUMP 0000089a: JUMPDEST 0000089b: PUSH2 0x08f9 0000089e: DUP6 0000089f: PUSH1 0x40 000008a1: MLOAD 000008a2: DUP1 000008a3: PUSH1 0x60 000008a5: ADD 000008a6: PUSH1 0x40 000008a8: MSTORE 000008a9: DUP1 000008aa: PUSH1 0x28 000008ac: DUP2 000008ad: MSTORE 000008ae: PUSH1 0x20 000008b0: ADD 000008b1: PUSH2 0x18ca 000008b4: PUSH1 0x28 000008b6: SWAP2 000008b7: CODECOPY 000008b8: PUSH1 0x01 000008ba: PUSH1 0x01 000008bc: PUSH1 0xa0 000008be: SHL 000008bf: SUB 000008c0: DUP11 000008c1: AND 000008c2: PUSH1 0x00 000008c4: SWAP1 000008c5: DUP2 000008c6: MSTORE 000008c7: PUSH1 0x01 000008c9: PUSH1 0x20 000008cb: MSTORE 000008cc: PUSH1 0x40 000008ce: DUP2 000008cf: KECCAK256 000008d0: SWAP1 000008d1: PUSH2 0x08d8 000008d4: PUSH2 0x11bb 000008d7: JUMP 000008d8: JUMPDEST 000008d9: PUSH1 0x01 000008db: PUSH1 0x01 000008dd: PUSH1 0xa0 000008df: SHL 000008e0: SUB 000008e1: AND 000008e2: DUP2 000008e3: MSTORE 000008e4: PUSH1 0x20 000008e6: DUP2 000008e7: ADD 000008e8: SWAP2 000008e9: SWAP1 000008ea: SWAP2 000008eb: MSTORE 000008ec: PUSH1 0x40 000008ee: ADD 000008ef: PUSH1 0x00 000008f1: KECCAK256 000008f2: SLOAD 000008f3: SWAP2 000008f4: SWAP1 000008f5: PUSH2 0x1232 000008f8: JUMP 000008f9: JUMPDEST 000008fa: PUSH2 0x11bf 000008fd: JUMP 000008fe: JUMPDEST 000008ff: POP 00000900: PUSH1 0x01 00000902: SWAP4 00000903: SWAP3 00000904: POP 00000905: POP 00000906: POP 00000907: JUMP 00000908: JUMPDEST 00000909: PUSH1 0x01 0000090b: PUSH1 0x01 0000090d: PUSH1 0xa0 0000090f: SHL 00000910: SUB 00000911: DUP2 00000912: AND 00000913: PUSH1 0x00 00000915: SWAP1 00000916: DUP2 00000917: MSTORE 00000918: PUSH1 0x06 0000091a: PUSH1 0x20 0000091c: MSTORE 0000091d: PUSH1 0x40 0000091f: DUP2 00000920: KECCAK256 00000921: SLOAD 00000922: PUSH1 0x01 00000924: PUSH1 0x80 00000926: SHL 00000927: SWAP1 00000928: PUSH2 0x0957 0000092b: SWAP1 0000092c: PUSH2 0x0952 0000092f: SWAP1 00000930: PUSH2 0x094c 00000933: PUSH2 0x0947 00000936: PUSH2 0x093e 00000939: DUP9 0000093a: PUSH2 0x0bce 0000093d: JUMP 0000093e: JUMPDEST 0000093f: PUSH1 0x05 00000941: SLOAD 00000942: SWAP1 00000943: PUSH2 0x1101 00000946: JUMP 00000947: JUMPDEST 00000948: PUSH2 0x12c9 0000094b: JUMP 0000094c: JUMPDEST 0000094d: SWAP1 0000094e: PUSH2 0x12d9 00000951: JUMP 00000952: JUMPDEST 00000953: PUSH2 0x130c 00000956: JUMP 00000957: JUMPDEST 00000958: DUP2 00000959: PUSH2 0x095e 0000095c: JUMPI 0000095d: INVALID 0000095e: JUMPDEST 0000095f: DIV 00000960: SWAP3 00000961: SWAP2 00000962: POP 00000963: POP 00000964: JUMP 00000965: JUMPDEST 00000966: PUSH1 0x12 00000968: SWAP1 00000969: JUMP 0000096a: JUMPDEST 0000096b: PUSH2 0x0972 0000096e: PUSH2 0x11bb 00000971: JUMP 00000972: JUMPDEST 00000973: PUSH1 0x09 00000975: SLOAD 00000976: PUSH1 0x01 00000978: PUSH1 0x01 0000097a: PUSH1 0xa0 0000097c: SHL 0000097d: SUB 0000097e: SWAP1 0000097f: DUP2 00000980: AND 00000981: SWAP2 00000982: AND 00000983: EQ 00000984: PUSH2 0x09c2 00000987: JUMPI 00000988: PUSH1 0x40 0000098a: DUP1 0000098b: MLOAD 0000098c: PUSH3 0x461bcd 00000990: PUSH1 0xe5 00000992: SHL 00000993: DUP2 00000994: MSTORE 00000995: PUSH1 0x20 00000997: PUSH1 0x04 00000999: DUP3 0000099a: ADD 0000099b: DUP2 0000099c: SWAP1 0000099d: MSTORE 0000099e: PUSH1 0x24 000009a0: DUP3 000009a1: ADD 000009a2: MSTORE 000009a3: PUSH1 0x00 000009a5: DUP1 000009a6: MLOAD 000009a7: PUSH1 0x20 000009a9: PUSH2 0x18f2 000009ac: DUP4 000009ad: CODECOPY 000009ae: DUP2 000009af: MLOAD 000009b0: SWAP2 000009b1: MSTORE 000009b2: PUSH1 0x44 000009b4: DUP3 000009b5: ADD 000009b6: MSTORE 000009b7: SWAP1 000009b8: MLOAD 000009b9: SWAP1 000009ba: DUP2 000009bb: SWAP1 000009bc: SUB 000009bd: PUSH1 0x64 000009bf: ADD 000009c0: SWAP1 000009c1: REVERT 000009c2: JUMPDEST 000009c3: PUSH1 0x01 000009c5: PUSH1 0x01 000009c7: PUSH1 0xa0 000009c9: SHL 000009ca: SUB 000009cb: DUP2 000009cc: AND 000009cd: PUSH1 0x00 000009cf: SWAP1 000009d0: DUP2 000009d1: MSTORE 000009d2: PUSH1 0x0e 000009d4: PUSH1 0x20 000009d6: MSTORE 000009d7: PUSH1 0x40 000009d9: SWAP1 000009da: KECCAK256 000009db: SLOAD 000009dc: PUSH1 0xff 000009de: AND 000009df: ISZERO 000009e0: PUSH2 0x09e8 000009e3: JUMPI 000009e4: PUSH1 0x00 000009e6: DUP1 000009e7: REVERT 000009e8: JUMPDEST 000009e9: PUSH1 0x01 000009eb: PUSH1 0x01 000009ed: PUSH1 0xa0 000009ef: SHL 000009f0: SUB 000009f1: DUP2 000009f2: AND 000009f3: PUSH1 0x00 000009f5: SWAP1 000009f6: DUP2 000009f7: MSTORE 000009f8: PUSH1 0x0e 000009fa: PUSH1 0x20 000009fc: MSTORE 000009fd: PUSH1 0x40 000009ff: DUP2 00000a00: KECCAK256 00000a01: DUP1 00000a02: SLOAD 00000a03: PUSH1 0xff 00000a05: NOT 00000a06: AND 00000a07: PUSH1 0x01 00000a09: OR 00000a0a: SWAP1 00000a0b: SSTORE 00000a0c: PUSH2 0x0a16 00000a0f: SWAP1 00000a10: DUP3 00000a11: SWAP1 00000a12: PUSH2 0x131f 00000a15: JUMP 00000a16: JUMPDEST 00000a17: PUSH1 0x40 00000a19: DUP1 00000a1a: MLOAD 00000a1b: PUSH4 0x131836e7 00000a20: PUSH1 0xe2 00000a22: SHL 00000a23: DUP2 00000a24: MSTORE 00000a25: PUSH1 0x0a 00000a27: PUSH1 0x04 00000a29: DUP3 00000a2a: ADD 00000a2b: MSTORE 00000a2c: PUSH1 0x01 00000a2e: PUSH1 0x01 00000a30: PUSH1 0xa0 00000a32: SHL 00000a33: SUB 00000a34: DUP4 00000a35: AND 00000a36: PUSH1 0x24 00000a38: DUP3 00000a39: ADD 00000a3a: MSTORE 00000a3b: SWAP1 00000a3c: MLOAD 00000a3d: PUSH20 0xee0103e0293dfb46294363027f9fd64aff762bab 00000a52: SWAP2 00000a53: PUSH4 0x4c60db9c 00000a58: SWAP2 00000a59: PUSH1 0x44 00000a5b: DUP1 00000a5c: DUP4 00000a5d: ADD 00000a5e: SWAP3 00000a5f: PUSH1 0x00 00000a61: SWAP3 00000a62: SWAP2 00000a63: SWAP1 00000a64: DUP3 00000a65: SWAP1 00000a66: SUB 00000a67: ADD 00000a68: DUP2 00000a69: DUP7 00000a6a: DUP1 00000a6b: EXTCODESIZE 00000a6c: ISZERO 00000a6d: DUP1 00000a6e: ISZERO 00000a6f: PUSH2 0x0a77 00000a72: JUMPI 00000a73: PUSH1 0x00 00000a75: DUP1 00000a76: REVERT 00000a77: JUMPDEST 00000a78: POP 00000a79: GAS 00000a7a: DELEGATECALL 00000a7b: ISZERO 00000a7c: DUP1 00000a7d: ISZERO 00000a7e: PUSH2 0x0a8b 00000a81: JUMPI 00000a82: RETURNDATASIZE 00000a83: PUSH1 0x00 00000a85: DUP1 00000a86: RETURNDATACOPY 00000a87: RETURNDATASIZE 00000a88: PUSH1 0x00 00000a8a: REVERT 00000a8b: JUMPDEST 00000a8c: POP 00000a8d: POP 00000a8e: PUSH1 0x40 00000a90: MLOAD 00000a91: PUSH1 0x01 00000a93: PUSH1 0x01 00000a95: PUSH1 0xa0 00000a97: SHL 00000a98: SUB 00000a99: DUP5 00000a9a: AND 00000a9b: SWAP3 00000a9c: POP 00000a9d: PUSH32 0xa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b25 00000abe: SWAP2 00000abf: POP 00000ac0: PUSH1 0x00 00000ac2: SWAP1 00000ac3: LOG2 00000ac4: POP 00000ac5: JUMP 00000ac6: JUMPDEST 00000ac7: PUSH1 0x00 00000ac9: PUSH2 0x086b 00000acc: PUSH2 0x0ad3 00000acf: PUSH2 0x11bb 00000ad2: JUMP 00000ad3: JUMPDEST 00000ad4: DUP5 00000ad5: PUSH2 0x08f9 00000ad8: DUP6 00000ad9: PUSH1 0x01 00000adb: PUSH1 0x00 00000add: PUSH2 0x0ae4 00000ae0: PUSH2 0x11bb 00000ae3: JUMP 00000ae4: JUMPDEST 00000ae5: PUSH1 0x01 00000ae7: PUSH1 0x01 00000ae9: PUSH1 0xa0 00000aeb: SHL 00000aec: SUB 00000aed: SWAP1 00000aee: DUP2 00000aef: AND 00000af0: DUP3 00000af1: MSTORE 00000af2: PUSH1 0x20 00000af4: DUP1 00000af5: DUP4 00000af6: ADD 00000af7: SWAP4 00000af8: SWAP1 00000af9: SWAP4 00000afa: MSTORE 00000afb: PUSH1 0x40 00000afd: SWAP2 00000afe: DUP3 00000aff: ADD 00000b00: PUSH1 0x00 00000b02: SWAP1 00000b03: DUP2 00000b04: KECCAK256 00000b05: SWAP2 00000b06: DUP13 00000b07: AND 00000b08: DUP2 00000b09: MSTORE 00000b0a: SWAP3 00000b0b: MSTORE 00000b0c: SWAP1 00000b0d: KECCAK256 00000b0e: SLOAD 00000b0f: SWAP1 00000b10: PUSH2 0x1161 00000b13: JUMP 00000b14: JUMPDEST 00000b15: PUSH1 0x0e 00000b17: PUSH1 0x20 00000b19: MSTORE 00000b1a: PUSH1 0x00 00000b1c: SWAP1 00000b1d: DUP2 00000b1e: MSTORE 00000b1f: PUSH1 0x40 00000b21: SWAP1 00000b22: KECCAK256 00000b23: SLOAD 00000b24: PUSH1 0xff 00000b26: AND 00000b27: DUP2 00000b28: JUMP 00000b29: JUMPDEST 00000b2a: PUSH1 0x00 00000b2c: PUSH2 0x0b33 00000b2f: PUSH2 0x11bb 00000b32: JUMP 00000b33: JUMPDEST 00000b34: PUSH1 0x09 00000b36: SLOAD 00000b37: PUSH1 0x01 00000b39: PUSH1 0x01 00000b3b: PUSH1 0xa0 00000b3d: SHL 00000b3e: SUB 00000b3f: SWAP1 00000b40: DUP2 00000b41: AND 00000b42: SWAP2 00000b43: AND 00000b44: EQ 00000b45: PUSH2 0x0b83 00000b48: JUMPI 00000b49: PUSH1 0x40 00000b4b: DUP1 00000b4c: MLOAD 00000b4d: PUSH3 0x461bcd 00000b51: PUSH1 0xe5 00000b53: SHL 00000b54: DUP2 00000b55: MSTORE 00000b56: PUSH1 0x20 00000b58: PUSH1 0x04 00000b5a: DUP3 00000b5b: ADD 00000b5c: DUP2 00000b5d: SWAP1 00000b5e: MSTORE 00000b5f: PUSH1 0x24 00000b61: DUP3 00000b62: ADD 00000b63: MSTORE 00000b64: PUSH1 0x00 00000b66: DUP1 00000b67: MLOAD 00000b68: PUSH1 0x20 00000b6a: PUSH2 0x18f2 00000b6d: DUP4 00000b6e: CODECOPY 00000b6f: DUP2 00000b70: MLOAD 00000b71: SWAP2 00000b72: MSTORE 00000b73: PUSH1 0x44 00000b75: DUP3 00000b76: ADD 00000b77: MSTORE 00000b78: SWAP1 00000b79: MLOAD 00000b7a: SWAP1 00000b7b: DUP2 00000b7c: SWAP1 00000b7d: SUB 00000b7e: PUSH1 0x64 00000b80: ADD 00000b81: SWAP1 00000b82: REVERT 00000b83: JUMPDEST 00000b84: PUSH1 0x00 00000b86: PUSH2 0x0b8f 00000b89: DUP5 00000b8a: DUP5 00000b8b: PUSH2 0x1378 00000b8e: JUMP 00000b8f: JUMPDEST 00000b90: SWAP5 00000b91: SWAP4 00000b92: POP 00000b93: POP 00000b94: POP 00000b95: POP 00000b96: JUMP 00000b97: JUMPDEST 00000b98: PUSH1 0x40 00000b9a: MLOAD 00000b9b: PUSH3 0x461bcd 00000b9f: PUSH1 0xe5 00000ba1: SHL 00000ba2: DUP2 00000ba3: MSTORE 00000ba4: PUSH1 0x04 00000ba6: ADD 00000ba7: DUP1 00000ba8: DUP1 00000ba9: PUSH1 0x20 00000bab: ADD 00000bac: DUP3 00000bad: DUP2 00000bae: SUB 00000baf: DUP3 00000bb0: MSTORE 00000bb1: PUSH1 0x6b 00000bb3: DUP2 00000bb4: MSTORE 00000bb5: PUSH1 0x20 00000bb7: ADD 00000bb8: DUP1 00000bb9: PUSH2 0x183e 00000bbc: PUSH1 0x6b 00000bbe: SWAP2 00000bbf: CODECOPY 00000bc0: PUSH1 0x80 00000bc2: ADD 00000bc3: SWAP2 00000bc4: POP 00000bc5: POP 00000bc6: PUSH1 0x40 00000bc8: MLOAD 00000bc9: DUP1 00000bca: SWAP2 00000bcb: SUB 00000bcc: SWAP1 00000bcd: REVERT 00000bce: JUMPDEST 00000bcf: PUSH1 0x01 00000bd1: PUSH1 0x01 00000bd3: PUSH1 0xa0 00000bd5: SHL 00000bd6: SUB 00000bd7: AND 00000bd8: PUSH1 0x00 00000bda: SWAP1 00000bdb: DUP2 00000bdc: MSTORE 00000bdd: PUSH1 0x20 00000bdf: DUP2 00000be0: SWAP1 00000be1: MSTORE 00000be2: PUSH1 0x40 00000be4: SWAP1 00000be5: KECCAK256 00000be6: SLOAD 00000be7: SWAP1 00000be8: JUMP 00000be9: JUMPDEST 00000bea: PUSH2 0x0bf1 00000bed: PUSH2 0x11bb 00000bf0: JUMP 00000bf1: JUMPDEST 00000bf2: PUSH1 0x09 00000bf4: SLOAD 00000bf5: PUSH1 0x01 00000bf7: PUSH1 0x01 00000bf9: PUSH1 0xa0 00000bfb: SHL 00000bfc: SUB 00000bfd: SWAP1 00000bfe: DUP2 00000bff: AND 00000c00: SWAP2 00000c01: AND 00000c02: EQ 00000c03: PUSH2 0x0c41 00000c06: JUMPI 00000c07: PUSH1 0x40 00000c09: DUP1 00000c0a: MLOAD 00000c0b: PUSH3 0x461bcd 00000c0f: PUSH1 0xe5 00000c11: SHL 00000c12: DUP2 00000c13: MSTORE 00000c14: PUSH1 0x20 00000c16: PUSH1 0x04 00000c18: DUP3 00000c19: ADD 00000c1a: DUP2 00000c1b: SWAP1 00000c1c: MSTORE 00000c1d: PUSH1 0x24 00000c1f: DUP3 00000c20: ADD 00000c21: MSTORE 00000c22: PUSH1 0x00 00000c24: DUP1 00000c25: MLOAD 00000c26: PUSH1 0x20 00000c28: PUSH2 0x18f2 00000c2b: DUP4 00000c2c: CODECOPY 00000c2d: DUP2 00000c2e: MLOAD 00000c2f: SWAP2 00000c30: MSTORE 00000c31: PUSH1 0x44 00000c33: DUP3 00000c34: ADD 00000c35: MSTORE 00000c36: SWAP1 00000c37: MLOAD 00000c38: SWAP1 00000c39: DUP2 00000c3a: SWAP1 00000c3b: SUB 00000c3c: PUSH1 0x64 00000c3e: ADD 00000c3f: SWAP1 00000c40: REVERT 00000c41: JUMPDEST 00000c42: PUSH1 0x09 00000c44: SLOAD 00000c45: PUSH1 0x40 00000c47: MLOAD 00000c48: PUSH1 0x00 00000c4a: SWAP2 00000c4b: PUSH1 0x01 00000c4d: PUSH1 0x01 00000c4f: PUSH1 0xa0 00000c51: SHL 00000c52: SUB 00000c53: AND 00000c54: SWAP1 00000c55: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 00000c76: SWAP1 00000c77: DUP4 00000c78: SWAP1 00000c79: LOG3 00000c7a: PUSH1 0x09 00000c7c: DUP1 00000c7d: SLOAD 00000c7e: PUSH1 0x01 00000c80: PUSH1 0x01 00000c82: PUSH1 0xa0 00000c84: SHL 00000c85: SUB 00000c86: NOT 00000c87: AND 00000c88: SWAP1 00000c89: SSTORE 00000c8a: JUMP 00000c8b: JUMPDEST 00000c8c: PUSH1 0x08 00000c8e: SLOAD 00000c8f: DUP2 00000c90: JUMP 00000c91: JUMPDEST 00000c92: PUSH1 0x09 00000c94: SLOAD 00000c95: PUSH1 0x01 00000c97: PUSH1 0x01 00000c99: PUSH1 0xa0 00000c9b: SHL 00000c9c: SUB 00000c9d: AND 00000c9e: SWAP1 00000c9f: JUMP 00000ca0: JUMPDEST 00000ca1: PUSH1 0x00 00000ca3: PUSH2 0x086f 00000ca6: DUP3 00000ca7: PUSH2 0x0d74 00000caa: JUMP 00000cab: JUMPDEST 00000cac: PUSH1 0x04 00000cae: DUP1 00000caf: SLOAD 00000cb0: PUSH1 0x40 00000cb2: DUP1 00000cb3: MLOAD 00000cb4: PUSH1 0x20 00000cb6: PUSH1 0x1f 00000cb8: PUSH1 0x02 00000cba: PUSH1 0x00 00000cbc: NOT 00000cbd: PUSH2 0x0100 00000cc0: PUSH1 0x01 00000cc2: DUP9 00000cc3: AND 00000cc4: ISZERO 00000cc5: MUL 00000cc6: ADD 00000cc7: SWAP1 00000cc8: SWAP6 00000cc9: AND 00000cca: SWAP5 00000ccb: SWAP1 00000ccc: SWAP5 00000ccd: DIV 00000cce: SWAP4 00000ccf: DUP5 00000cd0: ADD 00000cd1: DUP2 00000cd2: SWAP1 00000cd3: DIV 00000cd4: DUP2 00000cd5: MUL 00000cd6: DUP3 00000cd7: ADD 00000cd8: DUP2 00000cd9: ADD 00000cda: SWAP1 00000cdb: SWAP3 00000cdc: MSTORE 00000cdd: DUP3 00000cde: DUP2 00000cdf: MSTORE 00000ce0: PUSH1 0x60 00000ce2: SWAP4 00000ce3: SWAP1 00000ce4: SWAP3 00000ce5: SWAP1 00000ce6: SWAP2 00000ce7: DUP4 00000ce8: ADD 00000ce9: DUP3 00000cea: DUP3 00000ceb: DUP1 00000cec: ISZERO 00000ced: PUSH2 0x084d 00000cf0: JUMPI 00000cf1: DUP1 00000cf2: PUSH1 0x1f 00000cf4: LT 00000cf5: PUSH2 0x0822 00000cf8: JUMPI 00000cf9: PUSH2 0x0100 00000cfc: DUP1 00000cfd: DUP4 00000cfe: SLOAD 00000cff: DIV 00000d00: MUL 00000d01: DUP4 00000d02: MSTORE 00000d03: SWAP2 00000d04: PUSH1 0x20 00000d06: ADD 00000d07: SWAP2 00000d08: PUSH2 0x084d 00000d0b: JUMP 00000d0c: JUMPDEST 00000d0d: PUSH1 0x00 00000d0f: PUSH2 0x086b 00000d12: PUSH2 0x0d19 00000d15: PUSH2 0x11bb 00000d18: JUMP 00000d19: JUMPDEST 00000d1a: DUP5 00000d1b: PUSH2 0x08f9 00000d1e: DUP6 00000d1f: PUSH1 0x40 00000d21: MLOAD 00000d22: DUP1 00000d23: PUSH1 0x60 00000d25: ADD 00000d26: PUSH1 0x40 00000d28: MSTORE 00000d29: DUP1 00000d2a: PUSH1 0x25 00000d2c: DUP2 00000d2d: MSTORE 00000d2e: PUSH1 0x20 00000d30: ADD 00000d31: PUSH2 0x1961 00000d34: PUSH1 0x25 00000d36: SWAP2 00000d37: CODECOPY 00000d38: PUSH1 0x01 00000d3a: PUSH1 0x00 00000d3c: PUSH2 0x0d43 00000d3f: PUSH2 0x11bb 00000d42: JUMP 00000d43: JUMPDEST 00000d44: PUSH1 0x01 00000d46: PUSH1 0x01 00000d48: PUSH1 0xa0 00000d4a: SHL 00000d4b: SUB 00000d4c: SWAP1 00000d4d: DUP2 00000d4e: AND 00000d4f: DUP3 00000d50: MSTORE 00000d51: PUSH1 0x20 00000d53: DUP1 00000d54: DUP4 00000d55: ADD 00000d56: SWAP4 00000d57: SWAP1 00000d58: SWAP4 00000d59: MSTORE 00000d5a: PUSH1 0x40 00000d5c: SWAP2 00000d5d: DUP3 00000d5e: ADD 00000d5f: PUSH1 0x00 00000d61: SWAP1 00000d62: DUP2 00000d63: KECCAK256 00000d64: SWAP2 00000d65: DUP14 00000d66: AND 00000d67: DUP2 00000d68: MSTORE 00000d69: SWAP3 00000d6a: MSTORE 00000d6b: SWAP1 00000d6c: KECCAK256 00000d6d: SLOAD 00000d6e: SWAP2 00000d6f: SWAP1 00000d70: PUSH2 0x1232 00000d73: JUMP 00000d74: JUMPDEST 00000d75: PUSH1 0x01 00000d77: PUSH1 0x01 00000d79: PUSH1 0xa0 00000d7b: SHL 00000d7c: SUB 00000d7d: DUP2 00000d7e: AND 00000d7f: PUSH1 0x00 00000d81: SWAP1 00000d82: DUP2 00000d83: MSTORE 00000d84: PUSH1 0x07 00000d86: PUSH1 0x20 00000d88: MSTORE 00000d89: PUSH1 0x40 00000d8b: DUP2 00000d8c: KECCAK256 00000d8d: SLOAD 00000d8e: PUSH2 0x086f 00000d91: SWAP1 00000d92: PUSH2 0x0d9a 00000d95: DUP5 00000d96: PUSH2 0x0908 00000d99: JUMP 00000d9a: JUMPDEST 00000d9b: SWAP1 00000d9c: PUSH2 0x14bf 00000d9f: JUMP 00000da0: JUMPDEST 00000da1: PUSH1 0x00 00000da3: PUSH2 0x086b 00000da6: PUSH2 0x0dad 00000da9: PUSH2 0x11bb 00000dac: JUMP 00000dad: JUMPDEST 00000dae: DUP5 00000daf: DUP5 00000db0: PUSH2 0x11fb 00000db3: JUMP 00000db4: JUMPDEST 00000db5: PUSH1 0x01 00000db7: PUSH1 0x01 00000db9: PUSH1 0xa0 00000dbb: SHL 00000dbc: SUB 00000dbd: AND 00000dbe: PUSH1 0x00 00000dc0: SWAP1 00000dc1: DUP2 00000dc2: MSTORE 00000dc3: PUSH1 0x07 00000dc5: PUSH1 0x20 00000dc7: MSTORE 00000dc8: PUSH1 0x40 00000dca: SWAP1 00000dcb: KECCAK256 00000dcc: SLOAD 00000dcd: SWAP1 00000dce: JUMP 00000dcf: JUMPDEST 00000dd0: PUSH32 0x00000000000000000000000000000000000000000000021e19e0c9bab2400000 00000df1: DUP2 00000df2: JUMP 00000df3: JUMPDEST 00000df4: PUSH1 0x01 00000df6: PUSH1 0x01 00000df8: PUSH1 0xa0 00000dfa: SHL 00000dfb: SUB 00000dfc: SWAP2 00000dfd: DUP3 00000dfe: AND 00000dff: PUSH1 0x00 00000e01: SWAP1 00000e02: DUP2 00000e03: MSTORE 00000e04: PUSH1 0x01 00000e06: PUSH1 0x20 00000e08: SWAP1 00000e09: DUP2 00000e0a: MSTORE 00000e0b: PUSH1 0x40 00000e0d: DUP1 00000e0e: DUP4 00000e0f: KECCAK256 00000e10: SWAP4 00000e11: SWAP1 00000e12: SWAP5 00000e13: AND 00000e14: DUP3 00000e15: MSTORE 00000e16: SWAP2 00000e17: SWAP1 00000e18: SWAP2 00000e19: MSTORE 00000e1a: KECCAK256 00000e1b: SLOAD 00000e1c: SWAP1 00000e1d: JUMP 00000e1e: JUMPDEST 00000e1f: PUSH2 0x0e26 00000e22: PUSH2 0x11bb 00000e25: JUMP 00000e26: JUMPDEST 00000e27: PUSH1 0x09 00000e29: SLOAD 00000e2a: PUSH1 0x01 00000e2c: PUSH1 0x01 00000e2e: PUSH1 0xa0 00000e30: SHL 00000e31: SUB 00000e32: SWAP1 00000e33: DUP2 00000e34: AND 00000e35: SWAP2 00000e36: AND 00000e37: EQ 00000e38: PUSH2 0x0e76 00000e3b: JUMPI 00000e3c: PUSH1 0x40 00000e3e: DUP1 00000e3f: MLOAD 00000e40: PUSH3 0x461bcd 00000e44: PUSH1 0xe5 00000e46: SHL 00000e47: DUP2 00000e48: MSTORE 00000e49: PUSH1 0x20 00000e4b: PUSH1 0x04 00000e4d: DUP3 00000e4e: ADD 00000e4f: DUP2 00000e50: SWAP1 00000e51: MSTORE 00000e52: PUSH1 0x24 00000e54: DUP3 00000e55: ADD 00000e56: MSTORE 00000e57: PUSH1 0x00 00000e59: DUP1 00000e5a: MLOAD 00000e5b: PUSH1 0x20 00000e5d: PUSH2 0x18f2 00000e60: DUP4 00000e61: CODECOPY 00000e62: DUP2 00000e63: MLOAD 00000e64: SWAP2 00000e65: MSTORE 00000e66: PUSH1 0x44 00000e68: DUP3 00000e69: ADD 00000e6a: MSTORE 00000e6b: SWAP1 00000e6c: MLOAD 00000e6d: SWAP1 00000e6e: DUP2 00000e6f: SWAP1 00000e70: SUB 00000e71: PUSH1 0x64 00000e73: ADD 00000e74: SWAP1 00000e75: REVERT 00000e76: JUMPDEST 00000e77: PUSH1 0x01 00000e79: PUSH1 0x01 00000e7b: PUSH1 0xa0 00000e7d: SHL 00000e7e: SUB 00000e7f: DUP3 00000e80: AND 00000e81: PUSH1 0x00 00000e83: SWAP1 00000e84: DUP2 00000e85: MSTORE 00000e86: PUSH1 0x0e 00000e88: PUSH1 0x20 00000e8a: MSTORE 00000e8b: PUSH1 0x40 00000e8d: SWAP1 00000e8e: KECCAK256 00000e8f: SLOAD 00000e90: PUSH1 0xff 00000e92: AND 00000e93: ISZERO 00000e94: PUSH2 0x0e9c 00000e97: JUMPI 00000e98: PUSH2 0x0fd7 00000e9b: JUMP 00000e9c: JUMPDEST 00000e9d: PUSH32 0x00000000000000000000000000000000000000000000021e19e0c9bab2400000 00000ebe: DUP2 00000ebf: LT 00000ec0: PUSH2 0x0f52 00000ec3: JUMPI 00000ec4: PUSH2 0x0ecd 00000ec7: DUP3 00000ec8: DUP3 00000ec9: PUSH2 0x131f 00000ecc: JUMP 00000ecd: JUMPDEST 00000ece: PUSH1 0x40 00000ed0: DUP1 00000ed1: MLOAD 00000ed2: PUSH4 0x2f0ad017 00000ed7: PUSH1 0xe2 00000ed9: SHL 00000eda: DUP2 00000edb: MSTORE 00000edc: PUSH1 0x0a 00000ede: PUSH1 0x04 00000ee0: DUP3 00000ee1: ADD 00000ee2: MSTORE 00000ee3: PUSH1 0x01 00000ee5: PUSH1 0x01 00000ee7: PUSH1 0xa0 00000ee9: SHL 00000eea: SUB 00000eeb: DUP5 00000eec: AND 00000eed: PUSH1 0x24 00000eef: DUP3 00000ef0: ADD 00000ef1: MSTORE 00000ef2: PUSH1 0x44 00000ef4: DUP2 00000ef5: ADD 00000ef6: DUP4 00000ef7: SWAP1 00000ef8: MSTORE 00000ef9: SWAP1 00000efa: MLOAD 00000efb: PUSH20 0xee0103e0293dfb46294363027f9fd64aff762bab 00000f10: SWAP2 00000f11: PUSH4 0xbc2b405c 00000f16: SWAP2 00000f17: PUSH1 0x64 00000f19: DUP1 00000f1a: DUP4 00000f1b: ADD 00000f1c: SWAP3 00000f1d: PUSH1 0x00 00000f1f: SWAP3 00000f20: SWAP2 00000f21: SWAP1 00000f22: DUP3 00000f23: SWAP1 00000f24: SUB 00000f25: ADD 00000f26: DUP2 00000f27: DUP7 00000f28: DUP1 00000f29: EXTCODESIZE 00000f2a: ISZERO 00000f2b: DUP1 00000f2c: ISZERO 00000f2d: PUSH2 0x0f35 00000f30: JUMPI 00000f31: PUSH1 0x00 00000f33: DUP1 00000f34: REVERT 00000f35: JUMPDEST 00000f36: POP 00000f37: GAS 00000f38: DELEGATECALL 00000f39: ISZERO 00000f3a: DUP1 00000f3b: ISZERO 00000f3c: PUSH2 0x0f49 00000f3f: JUMPI 00000f40: RETURNDATASIZE 00000f41: PUSH1 0x00 00000f43: DUP1 00000f44: RETURNDATACOPY 00000f45: RETURNDATASIZE 00000f46: PUSH1 0x00 00000f48: REVERT 00000f49: JUMPDEST 00000f4a: POP 00000f4b: POP 00000f4c: POP 00000f4d: POP 00000f4e: PUSH2 0x0fd7 00000f51: JUMP 00000f52: JUMPDEST 00000f53: PUSH2 0x0f5d 00000f56: DUP3 00000f57: PUSH1 0x00 00000f59: PUSH2 0x131f 00000f5c: JUMP 00000f5d: JUMPDEST 00000f5e: PUSH1 0x40 00000f60: DUP1 00000f61: MLOAD 00000f62: PUSH4 0x131836e7 00000f67: PUSH1 0xe2 00000f69: SHL 00000f6a: DUP2 00000f6b: MSTORE 00000f6c: PUSH1 0x0a 00000f6e: PUSH1 0x04 00000f70: DUP3 00000f71: ADD 00000f72: MSTORE 00000f73: PUSH1 0x01 00000f75: PUSH1 0x01 00000f77: PUSH1 0xa0 00000f79: SHL 00000f7a: SUB 00000f7b: DUP5 00000f7c: AND 00000f7d: PUSH1 0x24 00000f7f: DUP3 00000f80: ADD 00000f81: MSTORE 00000f82: SWAP1 00000f83: MLOAD 00000f84: PUSH20 0xee0103e0293dfb46294363027f9fd64aff762bab 00000f99: SWAP2 00000f9a: PUSH4 0x4c60db9c 00000f9f: SWAP2 00000fa0: PUSH1 0x44 00000fa2: DUP1 00000fa3: DUP4 00000fa4: ADD 00000fa5: SWAP3 00000fa6: PUSH1 0x00 00000fa8: SWAP3 00000fa9: SWAP2 00000faa: SWAP1 00000fab: DUP3 00000fac: SWAP1 00000fad: SUB 00000fae: ADD 00000faf: DUP2 00000fb0: DUP7 00000fb1: DUP1 00000fb2: EXTCODESIZE 00000fb3: ISZERO 00000fb4: DUP1 00000fb5: ISZERO 00000fb6: PUSH2 0x0fbe 00000fb9: JUMPI 00000fba: PUSH1 0x00 00000fbc: DUP1 00000fbd: REVERT 00000fbe: JUMPDEST 00000fbf: POP 00000fc0: GAS 00000fc1: DELEGATECALL 00000fc2: ISZERO 00000fc3: DUP1 00000fc4: ISZERO 00000fc5: PUSH2 0x0fd2 00000fc8: JUMPI 00000fc9: RETURNDATASIZE 00000fca: PUSH1 0x00 00000fcc: DUP1 00000fcd: RETURNDATACOPY 00000fce: RETURNDATASIZE 00000fcf: PUSH1 0x00 00000fd1: REVERT 00000fd2: JUMPDEST 00000fd3: POP 00000fd4: POP 00000fd5: POP 00000fd6: POP 00000fd7: JUMPDEST 00000fd8: POP 00000fd9: POP 00000fda: JUMP 00000fdb: JUMPDEST 00000fdc: PUSH2 0x0fe3 00000fdf: PUSH2 0x11bb 00000fe2: JUMP 00000fe3: JUMPDEST 00000fe4: PUSH1 0x09 00000fe6: SLOAD 00000fe7: PUSH1 0x01 00000fe9: PUSH1 0x01 00000feb: PUSH1 0xa0 00000fed: SHL 00000fee: SUB 00000fef: SWAP1 00000ff0: DUP2 00000ff1: AND 00000ff2: SWAP2 00000ff3: AND 00000ff4: EQ 00000ff5: PUSH2 0x1033 00000ff8: JUMPI 00000ff9: PUSH1 0x40 00000ffb: DUP1 00000ffc: MLOAD 00000ffd: PUSH3 0x461bcd 00001001: PUSH1 0xe5 00001003: SHL 00001004: DUP2 00001005: MSTORE 00001006: PUSH1 0x20 00001008: PUSH1 0x04 0000100a: DUP3 0000100b: ADD 0000100c: DUP2 0000100d: SWAP1 0000100e: MSTORE 0000100f: PUSH1 0x24 00001011: DUP3 00001012: ADD 00001013: MSTORE 00001014: PUSH1 0x00 00001016: DUP1 00001017: MLOAD 00001018: PUSH1 0x20 0000101a: PUSH2 0x18f2 0000101d: DUP4 0000101e: CODECOPY 0000101f: DUP2 00001020: MLOAD 00001021: SWAP2 00001022: MSTORE 00001023: PUSH1 0x44 00001025: DUP3 00001026: ADD 00001027: MSTORE 00001028: SWAP1 00001029: MLOAD 0000102a: SWAP1 0000102b: DUP2 0000102c: SWAP1 0000102d: SUB 0000102e: PUSH1 0x64 00001030: ADD 00001031: SWAP1 00001032: REVERT 00001033: JUMPDEST 00001034: PUSH1 0x01 00001036: PUSH1 0x01 00001038: PUSH1 0xa0 0000103a: SHL 0000103b: SUB 0000103c: DUP2 0000103d: AND 0000103e: PUSH2 0x1078 00001041: JUMPI 00001042: PUSH1 0x40 00001044: MLOAD 00001045: PUSH3 0x461bcd 00001049: PUSH1 0xe5 0000104b: SHL 0000104c: DUP2 0000104d: MSTORE 0000104e: PUSH1 0x04 00001050: ADD 00001051: DUP1 00001052: DUP1 00001053: PUSH1 0x20 00001055: ADD 00001056: DUP3 00001057: DUP2 00001058: SUB 00001059: DUP3 0000105a: MSTORE 0000105b: PUSH1 0x26 0000105d: DUP2 0000105e: MSTORE 0000105f: PUSH1 0x20 00001061: ADD 00001062: DUP1 00001063: PUSH2 0x17ea 00001066: PUSH1 0x26 00001068: SWAP2 00001069: CODECOPY 0000106a: PUSH1 0x40 0000106c: ADD 0000106d: SWAP2 0000106e: POP 0000106f: POP 00001070: PUSH1 0x40 00001072: MLOAD 00001073: DUP1 00001074: SWAP2 00001075: SUB 00001076: SWAP1 00001077: REVERT 00001078: JUMPDEST 00001079: PUSH1 0x09 0000107b: SLOAD 0000107c: PUSH1 0x40 0000107e: MLOAD 0000107f: PUSH1 0x01 00001081: PUSH1 0x01 00001083: PUSH1 0xa0 00001085: SHL 00001086: SUB 00001087: DUP1 00001088: DUP5 00001089: AND 0000108a: SWAP3 0000108b: AND 0000108c: SWAP1 0000108d: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 000010ae: SWAP1 000010af: PUSH1 0x00 000010b1: SWAP1 000010b2: LOG3 000010b3: PUSH1 0x09 000010b5: DUP1 000010b6: SLOAD 000010b7: PUSH1 0x01 000010b9: PUSH1 0x01 000010bb: PUSH1 0xa0 000010bd: SHL 000010be: SUB 000010bf: NOT 000010c0: AND 000010c1: PUSH1 0x01 000010c3: PUSH1 0x01 000010c5: PUSH1 0xa0 000010c7: SHL 000010c8: SUB 000010c9: SWAP3 000010ca: SWAP1 000010cb: SWAP3 000010cc: AND 000010cd: SWAP2 000010ce: SWAP1 000010cf: SWAP2 000010d0: OR 000010d1: SWAP1 000010d2: SSTORE 000010d3: JUMP 000010d4: JUMPDEST 000010d5: PUSH1 0x00 000010d7: DUP1 000010d8: PUSH2 0x10e0 000010db: DUP4 000010dc: PUSH2 0x0d74 000010df: JUMP 000010e0: JUMPDEST 000010e1: PUSH1 0x01 000010e3: PUSH1 0x01 000010e5: PUSH1 0xa0 000010e7: SHL 000010e8: SUB 000010e9: SWAP1 000010ea: SWAP4 000010eb: AND 000010ec: PUSH1 0x00 000010ee: SWAP1 000010ef: DUP2 000010f0: MSTORE 000010f1: PUSH1 0x07 000010f3: PUSH1 0x20 000010f5: MSTORE 000010f6: PUSH1 0x40 000010f8: SWAP1 000010f9: KECCAK256 000010fa: SLOAD 000010fb: SWAP3 000010fc: SWAP4 000010fd: SWAP2 000010fe: POP 000010ff: POP 00001100: JUMP 00001101: JUMPDEST 00001102: PUSH1 0x00 00001104: DUP3 00001105: PUSH2 0x1110 00001108: JUMPI 00001109: POP 0000110a: PUSH1 0x00 0000110c: PUSH2 0x086f 0000110f: JUMP 00001110: JUMPDEST 00001111: DUP3 00001112: DUP3 00001113: MUL 00001114: DUP3 00001115: DUP5 00001116: DUP3 00001117: DUP2 00001118: PUSH2 0x111d 0000111b: JUMPI 0000111c: INVALID 0000111d: JUMPDEST 0000111e: DIV 0000111f: EQ 00001120: PUSH2 0x115a 00001123: JUMPI 00001124: PUSH1 0x40 00001126: MLOAD 00001127: PUSH3 0x461bcd 0000112b: PUSH1 0xe5 0000112d: SHL 0000112e: DUP2 0000112f: MSTORE 00001130: PUSH1 0x04 00001132: ADD 00001133: DUP1 00001134: DUP1 00001135: PUSH1 0x20 00001137: ADD 00001138: DUP3 00001139: DUP2 0000113a: SUB 0000113b: DUP3 0000113c: MSTORE 0000113d: PUSH1 0x21 0000113f: DUP2 00001140: MSTORE 00001141: PUSH1 0x20 00001143: ADD 00001144: DUP1 00001145: PUSH2 0x18a9 00001148: PUSH1 0x21 0000114a: SWAP2 0000114b: CODECOPY 0000114c: PUSH1 0x40 0000114e: ADD 0000114f: SWAP2 00001150: POP 00001151: POP 00001152: PUSH1 0x40 00001154: MLOAD 00001155: DUP1 00001156: SWAP2 00001157: SUB 00001158: SWAP1 00001159: REVERT 0000115a: JUMPDEST 0000115b: SWAP4 0000115c: SWAP3 0000115d: POP 0000115e: POP 0000115f: POP 00001160: JUMP 00001161: JUMPDEST 00001162: PUSH1 0x00 00001164: DUP3 00001165: DUP3 00001166: ADD 00001167: DUP4 00001168: DUP2 00001169: LT 0000116a: ISZERO 0000116b: PUSH2 0x115a 0000116e: JUMPI 0000116f: PUSH1 0x40 00001171: DUP1 00001172: MLOAD 00001173: PUSH3 0x461bcd 00001177: PUSH1 0xe5 00001179: SHL 0000117a: DUP2 0000117b: MSTORE 0000117c: PUSH1 0x20 0000117e: PUSH1 0x04 00001180: DUP3 00001181: ADD 00001182: MSTORE 00001183: PUSH1 0x1b 00001185: PUSH1 0x24 00001187: DUP3 00001188: ADD 00001189: MSTORE 0000118a: PUSH32 0x536166654d6174683a206164646974696f6e206f766572666c6f770000000000 000011ab: PUSH1 0x44 000011ad: DUP3 000011ae: ADD 000011af: MSTORE 000011b0: SWAP1 000011b1: MLOAD 000011b2: SWAP1 000011b3: DUP2 000011b4: SWAP1 000011b5: SUB 000011b6: PUSH1 0x64 000011b8: ADD 000011b9: SWAP1 000011ba: REVERT 000011bb: JUMPDEST 000011bc: CALLER 000011bd: SWAP1 000011be: JUMP 000011bf: JUMPDEST 000011c0: PUSH1 0x40 000011c2: MLOAD 000011c3: PUSH3 0x461bcd 000011c7: PUSH1 0xe5 000011c9: SHL 000011ca: DUP2 000011cb: MSTORE 000011cc: PUSH1 0x04 000011ce: ADD 000011cf: DUP1 000011d0: DUP1 000011d1: PUSH1 0x20 000011d3: ADD 000011d4: DUP3 000011d5: DUP2 000011d6: SUB 000011d7: DUP3 000011d8: MSTORE 000011d9: PUSH1 0x2e 000011db: DUP2 000011dc: MSTORE 000011dd: PUSH1 0x20 000011df: ADD 000011e0: DUP1 000011e1: PUSH2 0x1933 000011e4: PUSH1 0x2e 000011e6: SWAP2 000011e7: CODECOPY 000011e8: PUSH1 0x40 000011ea: ADD 000011eb: SWAP2 000011ec: POP 000011ed: POP 000011ee: PUSH1 0x40 000011f0: MLOAD 000011f1: DUP1 000011f2: SWAP2 000011f3: SUB 000011f4: SWAP1 000011f5: REVERT 000011f6: JUMPDEST 000011f7: POP 000011f8: POP 000011f9: POP 000011fa: JUMP 000011fb: JUMPDEST 000011fc: PUSH1 0x40 000011fe: MLOAD 000011ff: PUSH3 0x461bcd 00001203: PUSH1 0xe5 00001205: SHL 00001206: DUP2 00001207: MSTORE 00001208: PUSH1 0x04 0000120a: ADD 0000120b: DUP1 0000120c: DUP1 0000120d: PUSH1 0x20 0000120f: ADD 00001210: DUP3 00001211: DUP2 00001212: SUB 00001213: DUP3 00001214: MSTORE 00001215: PUSH1 0x2e 00001217: DUP2 00001218: MSTORE 00001219: PUSH1 0x20 0000121b: ADD 0000121c: DUP1 0000121d: PUSH2 0x1810 00001220: PUSH1 0x2e 00001222: SWAP2 00001223: CODECOPY 00001224: PUSH1 0x40 00001226: ADD 00001227: SWAP2 00001228: POP 00001229: POP 0000122a: PUSH1 0x40 0000122c: MLOAD 0000122d: DUP1 0000122e: SWAP2 0000122f: SUB 00001230: SWAP1 00001231: REVERT 00001232: JUMPDEST 00001233: PUSH1 0x00 00001235: DUP2 00001236: DUP5 00001237: DUP5 00001238: GT 00001239: ISZERO 0000123a: PUSH2 0x12c1 0000123d: JUMPI 0000123e: PUSH1 0x40 00001240: MLOAD 00001241: PUSH3 0x461bcd 00001245: PUSH1 0xe5 00001247: SHL 00001248: DUP2 00001249: MSTORE 0000124a: PUSH1 0x04 0000124c: ADD 0000124d: DUP1 0000124e: DUP1 0000124f: PUSH1 0x20 00001251: ADD 00001252: DUP3 00001253: DUP2 00001254: SUB 00001255: DUP3 00001256: MSTORE 00001257: DUP4 00001258: DUP2 00001259: DUP2 0000125a: MLOAD 0000125b: DUP2 0000125c: MSTORE 0000125d: PUSH1 0x20 0000125f: ADD 00001260: SWAP2 00001261: POP 00001262: DUP1 00001263: MLOAD 00001264: SWAP1 00001265: PUSH1 0x20 00001267: ADD 00001268: SWAP1 00001269: DUP1 0000126a: DUP4 0000126b: DUP4 0000126c: PUSH1 0x00 0000126e: JUMPDEST 0000126f: DUP4 00001270: DUP2 00001271: LT 00001272: ISZERO 00001273: PUSH2 0x1286 00001276: JUMPI 00001277: DUP2 00001278: DUP2 00001279: ADD 0000127a: MLOAD 0000127b: DUP4 0000127c: DUP3 0000127d: ADD 0000127e: MSTORE 0000127f: PUSH1 0x20 00001281: ADD 00001282: PUSH2 0x126e 00001285: JUMP 00001286: JUMPDEST 00001287: POP 00001288: POP 00001289: POP 0000128a: POP 0000128b: SWAP1 0000128c: POP 0000128d: SWAP1 0000128e: DUP2 0000128f: ADD 00001290: SWAP1 00001291: PUSH1 0x1f 00001293: AND 00001294: DUP1 00001295: ISZERO 00001296: PUSH2 0x12b3 00001299: JUMPI 0000129a: DUP1 0000129b: DUP3 0000129c: SUB 0000129d: DUP1 0000129e: MLOAD 0000129f: PUSH1 0x01 000012a1: DUP4 000012a2: PUSH1 0x20 000012a4: SUB 000012a5: PUSH2 0x0100 000012a8: EXP 000012a9: SUB 000012aa: NOT 000012ab: AND 000012ac: DUP2 000012ad: MSTORE 000012ae: PUSH1 0x20 000012b0: ADD 000012b1: SWAP2 000012b2: POP 000012b3: JUMPDEST 000012b4: POP 000012b5: SWAP3 000012b6: POP 000012b7: POP 000012b8: POP 000012b9: PUSH1 0x40 000012bb: MLOAD 000012bc: DUP1 000012bd: SWAP2 000012be: SUB 000012bf: SWAP1 000012c0: REVERT 000012c1: JUMPDEST 000012c2: POP 000012c3: POP 000012c4: POP 000012c5: SWAP1 000012c6: SUB 000012c7: SWAP1 000012c8: JUMP 000012c9: JUMPDEST 000012ca: PUSH1 0x00 000012cc: DUP2 000012cd: DUP2 000012ce: DUP2 000012cf: SLT 000012d0: ISZERO 000012d1: PUSH2 0x086f 000012d4: JUMPI 000012d5: PUSH1 0x00 000012d7: DUP1 000012d8: REVERT 000012d9: JUMPDEST 000012da: PUSH1 0x00 000012dc: DUP3 000012dd: DUP3 000012de: ADD 000012df: DUP2 000012e0: DUP4 000012e1: SLT 000012e2: DUP1 000012e3: ISZERO 000012e4: SWAP1 000012e5: PUSH2 0x12ee 000012e8: JUMPI 000012e9: POP 000012ea: DUP4 000012eb: DUP2 000012ec: SLT 000012ed: ISZERO 000012ee: JUMPDEST 000012ef: DUP1 000012f0: PUSH2 0x1303 000012f3: JUMPI 000012f4: POP 000012f5: PUSH1 0x00 000012f7: DUP4 000012f8: SLT 000012f9: DUP1 000012fa: ISZERO 000012fb: PUSH2 0x1303 000012fe: JUMPI 000012ff: POP 00001300: DUP4 00001301: DUP2 00001302: SLT 00001303: JUMPDEST 00001304: PUSH2 0x115a 00001307: JUMPI 00001308: PUSH1 0x00 0000130a: DUP1 0000130b: REVERT 0000130c: JUMPDEST 0000130d: PUSH1 0x00 0000130f: DUP1 00001310: DUP3 00001311: SLT 00001312: ISZERO 00001313: PUSH2 0x131b 00001316: JUMPI 00001317: PUSH1 0x00 00001319: DUP1 0000131a: REVERT 0000131b: JUMPDEST 0000131c: POP 0000131d: SWAP1 0000131e: JUMP 0000131f: JUMPDEST 00001320: PUSH1 0x00 00001322: PUSH2 0x132a 00001325: DUP4 00001326: PUSH2 0x0bce 00001329: JUMP 0000132a: JUMPDEST 0000132b: SWAP1 0000132c: POP 0000132d: DUP1 0000132e: DUP3 0000132f: GT 00001330: ISZERO 00001331: PUSH2 0x1352 00001334: JUMPI 00001335: PUSH1 0x00 00001337: PUSH2 0x1340 0000133a: DUP4 0000133b: DUP4 0000133c: PUSH2 0x14bf 0000133f: JUMP 00001340: JUMPDEST 00001341: SWAP1 00001342: POP 00001343: PUSH2 0x134c 00001346: DUP5 00001347: DUP3 00001348: PUSH2 0x1501 0000134b: JUMP 0000134c: JUMPDEST 0000134d: POP 0000134e: PUSH2 0x11f6 00001351: JUMP 00001352: JUMPDEST 00001353: DUP1 00001354: DUP3 00001355: LT 00001356: ISZERO 00001357: PUSH2 0x11f6 0000135a: JUMPI 0000135b: PUSH1 0x00 0000135d: PUSH2 0x1366 00001360: DUP3 00001361: DUP5 00001362: PUSH2 0x14bf 00001365: JUMP 00001366: JUMPDEST 00001367: SWAP1 00001368: POP 00001369: PUSH2 0x1372 0000136c: DUP5 0000136d: DUP3 0000136e: PUSH2 0x1565 00001371: JUMP 00001372: JUMPDEST 00001373: POP 00001374: POP 00001375: POP 00001376: POP 00001377: JUMP 00001378: JUMPDEST 00001379: PUSH1 0x00 0000137b: DUP1 0000137c: PUSH2 0x1384 0000137f: DUP5 00001380: PUSH2 0x0d74 00001383: JUMP 00001384: JUMPDEST 00001385: SWAP1 00001386: POP 00001387: DUP1 00001388: ISZERO 00001389: PUSH2 0x14b5 0000138c: JUMPI 0000138d: PUSH1 0x01 0000138f: PUSH1 0x01 00001391: PUSH1 0xa0 00001393: SHL 00001394: SUB 00001395: DUP5 00001396: AND 00001397: PUSH1 0x00 00001399: SWAP1 0000139a: DUP2 0000139b: MSTORE 0000139c: PUSH1 0x07 0000139e: PUSH1 0x20 000013a0: MSTORE 000013a1: PUSH1 0x40 000013a3: SWAP1 000013a4: KECCAK256 000013a5: SLOAD 000013a6: PUSH2 0x13af 000013a9: SWAP1 000013aa: DUP3 000013ab: PUSH2 0x1161 000013ae: JUMP 000013af: JUMPDEST 000013b0: PUSH1 0x01 000013b2: PUSH1 0x01 000013b4: PUSH1 0xa0 000013b6: SHL 000013b7: SUB 000013b8: DUP1 000013b9: DUP7 000013ba: AND 000013bb: PUSH1 0x00 000013bd: DUP2 000013be: DUP2 000013bf: MSTORE 000013c0: PUSH1 0x07 000013c2: PUSH1 0x20 000013c4: SWAP1 000013c5: DUP2 000013c6: MSTORE 000013c7: PUSH1 0x40 000013c9: SWAP2 000013ca: DUP3 000013cb: SWAP1 000013cc: KECCAK256 000013cd: SWAP5 000013ce: SWAP1 000013cf: SWAP5 000013d0: SSTORE 000013d1: DUP1 000013d2: MLOAD 000013d3: DUP6 000013d4: DUP2 000013d5: MSTORE 000013d6: SWAP3 000013d7: DUP8 000013d8: AND 000013d9: SWAP4 000013da: DUP4 000013db: ADD 000013dc: SWAP4 000013dd: SWAP1 000013de: SWAP4 000013df: MSTORE 000013e0: DUP3 000013e1: MLOAD 000013e2: SWAP1 000013e3: SWAP3 000013e4: PUSH32 0xeb063efb53b3790d2bc15284b59af7544466c8787c2883321ee27095647911b6 00001405: SWAP3 00001406: DUP3 00001407: SWAP1 00001408: SUB 00001409: ADD 0000140a: SWAP1 0000140b: LOG2 0000140c: PUSH1 0x40 0000140e: MLOAD 0000140f: PUSH1 0x00 00001411: SWAP1 00001412: PUSH1 0x01 00001414: PUSH1 0x01 00001416: PUSH1 0xa0 00001418: SHL 00001419: SUB 0000141a: DUP6 0000141b: AND 0000141c: SWAP1 0000141d: DUP4 0000141e: SWAP1 0000141f: DUP4 00001420: DUP2 00001421: DUP2 00001422: DUP2 00001423: DUP6 00001424: DUP8 00001425: GAS 00001426: CALL 00001427: SWAP3 00001428: POP 00001429: POP 0000142a: POP 0000142b: RETURNDATASIZE 0000142c: DUP1 0000142d: PUSH1 0x00 0000142f: DUP2 00001430: EQ 00001431: PUSH2 0x1456 00001434: JUMPI 00001435: PUSH1 0x40 00001437: MLOAD 00001438: SWAP2 00001439: POP 0000143a: PUSH1 0x1f 0000143c: NOT 0000143d: PUSH1 0x3f 0000143f: RETURNDATASIZE 00001440: ADD 00001441: AND 00001442: DUP3 00001443: ADD 00001444: PUSH1 0x40 00001446: MSTORE 00001447: RETURNDATASIZE 00001448: DUP3 00001449: MSTORE 0000144a: RETURNDATASIZE 0000144b: PUSH1 0x00 0000144d: PUSH1 0x20 0000144f: DUP5 00001450: ADD 00001451: RETURNDATACOPY 00001452: PUSH2 0x145b 00001455: JUMP 00001456: JUMPDEST 00001457: PUSH1 0x60 00001459: SWAP2 0000145a: POP 0000145b: JUMPDEST 0000145c: POP 0000145d: POP 0000145e: SWAP1 0000145f: POP 00001460: DUP1 00001461: PUSH2 0x14ad 00001464: JUMPI 00001465: PUSH1 0x01 00001467: PUSH1 0x01 00001469: PUSH1 0xa0 0000146b: SHL 0000146c: SUB 0000146d: DUP6 0000146e: AND 0000146f: PUSH1 0x00 00001471: SWAP1 00001472: DUP2 00001473: MSTORE 00001474: PUSH1 0x07 00001476: PUSH1 0x20 00001478: MSTORE 00001479: PUSH1 0x40 0000147b: SWAP1 0000147c: KECCAK256 0000147d: SLOAD 0000147e: PUSH2 0x1487 00001481: SWAP1 00001482: DUP4 00001483: PUSH2 0x14bf 00001486: JUMP 00001487: JUMPDEST 00001488: PUSH1 0x01 0000148a: PUSH1 0x01 0000148c: PUSH1 0xa0 0000148e: SHL 0000148f: SUB 00001490: DUP7 00001491: AND 00001492: PUSH1 0x00 00001494: SWAP1 00001495: DUP2 00001496: MSTORE 00001497: PUSH1 0x07 00001499: PUSH1 0x20 0000149b: MSTORE 0000149c: PUSH1 0x40 0000149e: DUP2 0000149f: KECCAK256 000014a0: SWAP2 000014a1: SWAP1 000014a2: SWAP2 000014a3: SSTORE 000014a4: SWAP3 000014a5: POP 000014a6: PUSH2 0x086f 000014a9: SWAP2 000014aa: POP 000014ab: POP 000014ac: JUMP 000014ad: JUMPDEST 000014ae: POP 000014af: SWAP1 000014b0: POP 000014b1: PUSH2 0x086f 000014b4: JUMP 000014b5: JUMPDEST 000014b6: POP 000014b7: PUSH1 0x00 000014b9: SWAP4 000014ba: SWAP3 000014bb: POP 000014bc: POP 000014bd: POP 000014be: JUMP 000014bf: JUMPDEST 000014c0: PUSH1 0x00 000014c2: PUSH2 0x115a 000014c5: DUP4 000014c6: DUP4 000014c7: PUSH1 0x40 000014c9: MLOAD 000014ca: DUP1 000014cb: PUSH1 0x40 000014cd: ADD 000014ce: PUSH1 0x40 000014d0: MSTORE 000014d1: DUP1 000014d2: PUSH1 0x1e 000014d4: DUP2 000014d5: MSTORE 000014d6: PUSH1 0x20 000014d8: ADD 000014d9: PUSH32 0x536166654d6174683a207375627472616374696f6e206f766572666c6f770000 000014fa: DUP2 000014fb: MSTORE 000014fc: POP 000014fd: PUSH2 0x1232 00001500: JUMP 00001501: JUMPDEST 00001502: PUSH2 0x150b 00001505: DUP3 00001506: DUP3 00001507: PUSH2 0x15a9 0000150a: JUMP 0000150b: JUMPDEST 0000150c: PUSH2 0x1545 0000150f: PUSH2 0x1526 00001512: PUSH2 0x0947 00001515: DUP4 00001516: PUSH1 0x05 00001518: SLOAD 00001519: PUSH2 0x1101 0000151c: SWAP1 0000151d: SWAP2 0000151e: SWAP1 0000151f: PUSH4 0xffffffff 00001524: AND 00001525: JUMP 00001526: JUMPDEST 00001527: PUSH1 0x01 00001529: PUSH1 0x01 0000152b: PUSH1 0xa0 0000152d: SHL 0000152e: SUB 0000152f: DUP5 00001530: AND 00001531: PUSH1 0x00 00001533: SWAP1 00001534: DUP2 00001535: MSTORE 00001536: PUSH1 0x06 00001538: PUSH1 0x20 0000153a: MSTORE 0000153b: PUSH1 0x40 0000153d: SWAP1 0000153e: KECCAK256 0000153f: SLOAD 00001540: SWAP1 00001541: PUSH2 0x1699 00001544: JUMP 00001545: JUMPDEST 00001546: PUSH1 0x01 00001548: PUSH1 0x01 0000154a: PUSH1 0xa0 0000154c: SHL 0000154d: SUB 0000154e: SWAP1 0000154f: SWAP3 00001550: AND 00001551: PUSH1 0x00 00001553: SWAP1 00001554: DUP2 00001555: MSTORE 00001556: PUSH1 0x06 00001558: PUSH1 0x20 0000155a: MSTORE 0000155b: PUSH1 0x40 0000155d: SWAP1 0000155e: KECCAK256 0000155f: SWAP2 00001560: SWAP1 00001561: SWAP2 00001562: SSTORE 00001563: POP 00001564: JUMP 00001565: JUMPDEST 00001566: PUSH2 0x156f 00001569: DUP3 0000156a: DUP3 0000156b: PUSH2 0x16cb 0000156e: JUMP 0000156f: JUMPDEST 00001570: PUSH2 0x1545 00001573: PUSH2 0x158a 00001576: PUSH2 0x0947 00001579: DUP4 0000157a: PUSH1 0x05 0000157c: SLOAD 0000157d: PUSH2 0x1101 00001580: SWAP1 00001581: SWAP2 00001582: SWAP1 00001583: PUSH4 0xffffffff 00001588: AND 00001589: JUMP 0000158a: JUMPDEST 0000158b: PUSH1 0x01 0000158d: PUSH1 0x01 0000158f: PUSH1 0xa0 00001591: SHL 00001592: SUB 00001593: DUP5 00001594: AND 00001595: PUSH1 0x00 00001597: SWAP1 00001598: DUP2 00001599: MSTORE 0000159a: PUSH1 0x06 0000159c: PUSH1 0x20 0000159e: MSTORE 0000159f: PUSH1 0x40 000015a1: SWAP1 000015a2: KECCAK256 000015a3: SLOAD 000015a4: SWAP1 000015a5: PUSH2 0x12d9 000015a8: JUMP 000015a9: JUMPDEST 000015aa: PUSH1 0x01 000015ac: PUSH1 0x01 000015ae: PUSH1 0xa0 000015b0: SHL 000015b1: SUB 000015b2: DUP3 000015b3: AND 000015b4: PUSH2 0x1604 000015b7: JUMPI 000015b8: PUSH1 0x40 000015ba: DUP1 000015bb: MLOAD 000015bc: PUSH3 0x461bcd 000015c0: PUSH1 0xe5 000015c2: SHL 000015c3: DUP2 000015c4: MSTORE 000015c5: PUSH1 0x20 000015c7: PUSH1 0x04 000015c9: DUP3 000015ca: ADD 000015cb: MSTORE 000015cc: PUSH1 0x1f 000015ce: PUSH1 0x24 000015d0: DUP3 000015d1: ADD 000015d2: MSTORE 000015d3: PUSH32 0x45524332303a206d696e7420746f20746865207a65726f206164647265737300 000015f4: PUSH1 0x44 000015f6: DUP3 000015f7: ADD 000015f8: MSTORE 000015f9: SWAP1 000015fa: MLOAD 000015fb: SWAP1 000015fc: DUP2 000015fd: SWAP1 000015fe: SUB 000015ff: PUSH1 0x64 00001601: ADD 00001602: SWAP1 00001603: REVERT 00001604: JUMPDEST 00001605: PUSH2 0x1610 00001608: PUSH1 0x00 0000160a: DUP4 0000160b: DUP4 0000160c: PUSH2 0x11f6 0000160f: JUMP 00001610: JUMPDEST 00001611: PUSH1 0x02 00001613: SLOAD 00001614: PUSH2 0x161d 00001617: SWAP1 00001618: DUP3 00001619: PUSH2 0x1161 0000161c: JUMP 0000161d: JUMPDEST 0000161e: PUSH1 0x02 00001620: SSTORE 00001621: PUSH1 0x01 00001623: PUSH1 0x01 00001625: PUSH1 0xa0 00001627: SHL 00001628: SUB 00001629: DUP3 0000162a: AND 0000162b: PUSH1 0x00 0000162d: SWAP1 0000162e: DUP2 0000162f: MSTORE 00001630: PUSH1 0x20 00001632: DUP2 00001633: SWAP1 00001634: MSTORE 00001635: PUSH1 0x40 00001637: SWAP1 00001638: KECCAK256 00001639: SLOAD 0000163a: PUSH2 0x1643 0000163d: SWAP1 0000163e: DUP3 0000163f: PUSH2 0x1161 00001642: JUMP 00001643: JUMPDEST 00001644: PUSH1 0x01 00001646: PUSH1 0x01 00001648: PUSH1 0xa0 0000164a: SHL 0000164b: SUB 0000164c: DUP4 0000164d: AND 0000164e: PUSH1 0x00 00001650: DUP2 00001651: DUP2 00001652: MSTORE 00001653: PUSH1 0x20 00001655: DUP2 00001656: DUP2 00001657: MSTORE 00001658: PUSH1 0x40 0000165a: DUP1 0000165b: DUP4 0000165c: KECCAK256 0000165d: SWAP5 0000165e: SWAP1 0000165f: SWAP5 00001660: SSTORE 00001661: DUP4 00001662: MLOAD 00001663: DUP6 00001664: DUP2 00001665: MSTORE 00001666: SWAP4 00001667: MLOAD 00001668: SWAP3 00001669: SWAP4 0000166a: SWAP2 0000166b: SWAP3 0000166c: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef 0000168d: SWAP3 0000168e: DUP2 0000168f: SWAP1 00001690: SUB 00001691: SWAP1 00001692: SWAP2 00001693: ADD 00001694: SWAP1 00001695: LOG3 00001696: POP 00001697: POP 00001698: JUMP 00001699: JUMPDEST 0000169a: PUSH1 0x00 0000169c: DUP2 0000169d: DUP4 0000169e: SUB 0000169f: DUP2 000016a0: DUP4 000016a1: SLT 000016a2: DUP1 000016a3: ISZERO 000016a4: SWAP1 000016a5: PUSH2 0x16ae 000016a8: JUMPI 000016a9: POP 000016aa: DUP4 000016ab: DUP2 000016ac: SGT 000016ad: ISZERO 000016ae: JUMPDEST 000016af: DUP1 000016b0: PUSH2 0x1303 000016b3: JUMPI 000016b4: POP 000016b5: PUSH1 0x00 000016b7: DUP4 000016b8: SLT 000016b9: DUP1 000016ba: ISZERO 000016bb: PUSH2 0x1303 000016be: JUMPI 000016bf: POP 000016c0: DUP4 000016c1: DUP2 000016c2: SGT 000016c3: PUSH2 0x115a 000016c6: JUMPI 000016c7: PUSH1 0x00 000016c9: DUP1 000016ca: REVERT 000016cb: JUMPDEST 000016cc: PUSH1 0x01 000016ce: PUSH1 0x01 000016d0: PUSH1 0xa0 000016d2: SHL 000016d3: SUB 000016d4: DUP3 000016d5: AND 000016d6: PUSH2 0x1710 000016d9: JUMPI 000016da: PUSH1 0x40 000016dc: MLOAD 000016dd: PUSH3 0x461bcd 000016e1: PUSH1 0xe5 000016e3: SHL 000016e4: DUP2 000016e5: MSTORE 000016e6: PUSH1 0x04 000016e8: ADD 000016e9: DUP1 000016ea: DUP1 000016eb: PUSH1 0x20 000016ed: ADD 000016ee: DUP3 000016ef: DUP2 000016f0: SUB 000016f1: DUP3 000016f2: MSTORE 000016f3: PUSH1 0x21 000016f5: DUP2 000016f6: MSTORE 000016f7: PUSH1 0x20 000016f9: ADD 000016fa: DUP1 000016fb: PUSH2 0x1912 000016fe: PUSH1 0x21 00001700: SWAP2 00001701: CODECOPY 00001702: PUSH1 0x40 00001704: ADD 00001705: SWAP2 00001706: POP 00001707: POP 00001708: PUSH1 0x40 0000170a: MLOAD 0000170b: DUP1 0000170c: SWAP2 0000170d: SUB 0000170e: SWAP1 0000170f: REVERT 00001710: JUMPDEST 00001711: PUSH2 0x171c 00001714: DUP3 00001715: PUSH1 0x00 00001717: DUP4 00001718: PUSH2 0x11f6 0000171b: JUMP 0000171c: JUMPDEST 0000171d: PUSH2 0x1759 00001720: DUP2 00001721: PUSH1 0x40 00001723: MLOAD 00001724: DUP1 00001725: PUSH1 0x60 00001727: ADD 00001728: PUSH1 0x40 0000172a: MSTORE 0000172b: DUP1 0000172c: PUSH1 0x22 0000172e: DUP2 0000172f: MSTORE 00001730: PUSH1 0x20 00001732: ADD 00001733: PUSH2 0x17c8 00001736: PUSH1 0x22 00001738: SWAP2 00001739: CODECOPY 0000173a: PUSH1 0x01 0000173c: PUSH1 0x01 0000173e: PUSH1 0xa0 00001740: SHL 00001741: SUB 00001742: DUP6 00001743: AND 00001744: PUSH1 0x00 00001746: SWAP1 00001747: DUP2 00001748: MSTORE 00001749: PUSH1 0x20 0000174b: DUP2 0000174c: SWAP1 0000174d: MSTORE 0000174e: PUSH1 0x40 00001750: SWAP1 00001751: KECCAK256 00001752: SLOAD 00001753: SWAP2 00001754: SWAP1 00001755: PUSH2 0x1232 00001758: JUMP 00001759: JUMPDEST 0000175a: PUSH1 0x01 0000175c: PUSH1 0x01 0000175e: PUSH1 0xa0 00001760: SHL 00001761: SUB 00001762: DUP4 00001763: AND 00001764: PUSH1 0x00 00001766: SWAP1 00001767: DUP2 00001768: MSTORE 00001769: PUSH1 0x20 0000176b: DUP2 0000176c: SWAP1 0000176d: MSTORE 0000176e: PUSH1 0x40 00001770: SWAP1 00001771: KECCAK256 00001772: SSTORE 00001773: PUSH1 0x02 00001775: SLOAD 00001776: PUSH2 0x177f 00001779: SWAP1 0000177a: DUP3 0000177b: PUSH2 0x14bf 0000177e: JUMP 0000177f: JUMPDEST 00001780: PUSH1 0x02 00001782: SSTORE 00001783: PUSH1 0x40 00001785: DUP1 00001786: MLOAD 00001787: DUP3 00001788: DUP2 00001789: MSTORE 0000178a: SWAP1 0000178b: MLOAD 0000178c: PUSH1 0x00 0000178e: SWAP2 0000178f: PUSH1 0x01 00001791: PUSH1 0x01 00001793: PUSH1 0xa0 00001795: SHL 00001796: SUB 00001797: DUP6 00001798: AND 00001799: SWAP2 0000179a: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef 000017bb: SWAP2 000017bc: DUP2 000017bd: SWAP1 000017be: SUB 000017bf: PUSH1 0x20 000017c1: ADD 000017c2: SWAP1 000017c3: LOG3 000017c4: POP 000017c5: POP 000017c6: JUMP 000017c7: INVALID 000017c8: GASLIMIT 000017c9: MSTORE 000017ca: NUMBER 000017cb: ORIGIN 000017cc: ADDRESS 000017cd: GASPRICE 000017ce: KECCAK256 000017cf: PUSH3 0x75726e 000017d3: KECCAK256 000017d4: PUSH2 0x6d6f 000017d7: PUSH22 0x6e7420657863656564732062616c616e63654f776e61 000017ee: PUSH3 0x6c653a 000017f2: KECCAK256 000017f3: PUSH15 0x6577206f776e657220697320746865 00001803: KECCAK256 00001804: PUSH27 0x65726f206164647265737342616e6b4574685f4469766964656e64 00001820: PUSH0 00001821: SLOAD 00001822: PUSH19 0x61636b65723a204e6f207472616e7366657273 00001836: KECCAK256 00001837: PUSH2 0x6c6c 0000183a: PUSH16 0x77656442616e6b4574685f4469766964 0000184b: PUSH6 0x6e645f547261 00001852: PUSH4 0x6b65723a 00001857: KECCAK256 00001858: PUSH24 0x697468647261774469766964656e642064697361626c6564 00001871: UNKNOWN(0x2E) 00001872: KECCAK256 00001873: SSTORE 00001874: PUSH20 0x65207468652027636c61696d272066756e637469 00001889: PUSH16 0x6e206f6e20746865206d61696e204261 0000189a: PUSH15 0x6b45746820636f6e74726163742e53 000018aa: PUSH2 0x6665 000018ad: UNKNOWN(0x4D) 000018ae: PUSH2 0x7468 000018b1: GASPRICE 000018b2: KECCAK256 000018b3: PUSH14 0x756c7469706c69636174696f6e20 000018c2: PUSH16 0x766572666c6f7745524332303a207472 000018d3: PUSH2 0x6e73 000018d6: PUSH7 0x657220616d6f75 000018de: PUSH15 0x74206578636565647320616c6c6f77 000018ee: PUSH2 0x6e63 000018f1: PUSH6 0x4f776e61626c 000018f8: PUSH6 0x3a2063616c6c 000018ff: PUSH6 0x72206973206e 00001906: PUSH16 0x7420746865206f776e65724552433230 00001917: GASPRICE 00001918: KECCAK256 00001919: PUSH3 0x75726e 0000191d: KECCAK256 0000191e: PUSH7 0x726f6d20746865 00001926: KECCAK256 00001927: PUSH27 0x65726f206164647265737342616e6b4574685f4469766964656e64 00001943: PUSH0 00001944: SLOAD 00001945: PUSH19 0x61636b65723a204e6f20617070726f76616c73 00001959: KECCAK256 0000195a: PUSH2 0x6c6c 0000195d: PUSH16 0x77656445524332303a20646563726561 0000196e: PUSH20 0x656420616c6c6f77616e63652062656c6f77207a 00001983: PUSH6 0x726fa2646970 0000198a: PUSH7 0x73582212203d19 00001992: SMOD 00001993: PUSH10 0xed22fdddd962dd4c154e 0000199e: EQ 0000199f: UNKNOWN(0xE1) 000019a0: DUP12 000019a1: CALLER 000019a2: DUP10 000019a3: UNKNOWN(0x21) 000019a4: UNKNOWN(0x21) 000019a5: UNKNOWN(0xD5) 000019a6: UNKNOWN(0x0E) 000019a7: DUP13 000019a8: UNKNOWN(0x2F) 000019a9: UNKNOWN(0x0F) 000019aa: UNKNOWN(0x2A) 000019ab: JUMPI 000019ac: ADDMOD 000019ad: UNKNOWN(0xDA) 000019ae: UNKNOWN(0xDE) 000019af: UNKNOWN(0x21) 000019b0: PUSH5 0x736f6c6343 000019b6: STOP 000019b7: MOD 000019b8: UNKNOWN(0x0C) 000019b9: STOP 000019ba: CALLER
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | upgradeability | detector | Untrusted DELEGATECALL target reachable | 55 | no | no |
viewtrace_id: 0xdd9254ebfc34cab63c681cf11e96035c62f25616f7d884fd981e892da8f8be6e
validation_json{
"sink": "DELEGATECALL",
"errors": 0,
"status": "unknown",
"attempts": 192,
"trace_id": "0xdd9254ebfc34cab63c681cf11e96035c62f25616f7d884fd981e892da8f8be6e",
"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": "0xdd62ed3e",
"selector": "0xdd62ed3e",
"calldata_variants": [
"0xdd62ed3e",
"0xdd62ed3e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe30443bc",
"selector": "0xe30443bc",
"calldata_variants": [
"0xe30443bc",
"0xe30443bc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfbcbc0f1",
"selector": "0xfbcbc0f1",
"calldata_variants": [
"0xfbcbc0f1",
"0xfbcbc0f10000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa9059cbb",
"selector": "0xa9059cbb",
"calldata_variants": [
"0xa9059cbb",
"0xa9059cbb0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xaafd847a",
"selector": "0xaafd847a",
"calldata_variants": [
"0xaafd847a",
"0xaafd847a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbe10b614",
"selector": "0xbe10b614",
"calldata_variants": [
"0xbe10b614",
"0xbe10b6140000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x91b89fba",
"selector": "0x91b89fba",
"calldata_variants": [
"0x91b89fba",
"0x91b89fba0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 2682,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
},
{
"pc": 3896,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
},
{
"pc": 4033,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
}
],
"guards_detected": [
{
"pc": 6091,
"type": "tx_origin_used"
}
],
"delegatecall_count": 3,
"untrusted_delegatecall_count": 3
}
|
| high | auth | detector | Authorization based on tx.origin | 70 | no | — |
viewvalidation_json{
"reason": "missing sink mapping",
"status": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xdd62ed3e",
"selector": "0xdd62ed3e",
"calldata_variants": [
"0xdd62ed3e",
"0xdd62ed3e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe30443bc",
"selector": "0xe30443bc",
"calldata_variants": [
"0xe30443bc",
"0xe30443bc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfbcbc0f1",
"selector": "0xfbcbc0f1",
"calldata_variants": [
"0xfbcbc0f1",
"0xfbcbc0f10000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa9059cbb",
"selector": "0xa9059cbb",
"calldata_variants": [
"0xa9059cbb",
"0xa9059cbb0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xaafd847a",
"selector": "0xaafd847a",
"calldata_variants": [
"0xaafd847a",
"0xaafd847a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbe10b614",
"selector": "0xbe10b614",
"calldata_variants": [
"0xbe10b614",
"0xbe10b6140000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x91b89fba",
"selector": "0x91b89fba",
"calldata_variants": [
"0x91b89fba",
"0x91b89fba0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"guards_detected": [
{
"pc": 6091,
"type": "tx_origin_used"
}
]
}
|
| medium | upgradeability | cast | DELEGATECALL present | 80 | no | — |
viewevidence_json{
"notes": "delegatecall enables execution in caller context; common in proxies/upgradeable patterns",
"delegatecall_count": 3
}
|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0xe69b81ca9f496877c928edec5adc0a9b95236a99fbdc694bb8dd2096143ca577
call_targets:
0x340acf0e012a196feccbfa065f5b43748d8f779f
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xe69b81ca9f496877c928edec5adc0a9b95236a99fbdc694bb8dd2096143ca577",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x340acf0e012a196feccbfa065f5b43748d8f779f"
],
"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": "0xdd62ed3e",
"selector": "0xdd62ed3e",
"calldata_variants": [
"0xdd62ed3e",
"0xdd62ed3e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe30443bc",
"selector": "0xe30443bc",
"calldata_variants": [
"0xe30443bc",
"0xe30443bc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfbcbc0f1",
"selector": "0xfbcbc0f1",
"calldata_variants": [
"0xfbcbc0f1",
"0xfbcbc0f10000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa9059cbb",
"selector": "0xa9059cbb",
"calldata_variants": [
"0xa9059cbb",
"0xa9059cbb0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xaafd847a",
"selector": "0xaafd847a",
"calldata_variants": [
"0xaafd847a",
"0xaafd847a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbe10b614",
"selector": "0xbe10b614",
"calldata_variants": [
"0xbe10b614",
"0xbe10b6140000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x91b89fba",
"selector": "0x91b89fba",
"calldata_variants": [
"0x91b89fba",
"0x91b89fba0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 5158,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 1,
"guards_detected": [
{
"pc": 6091,
"type": "tx_origin_used"
}
],
"untrusted_call_count": 1
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0xe69b81ca9f496877c928edec5adc0a9b95236a99fbdc694bb8dd2096143ca577
call_targets:
0x340acf0e012a196feccbfa065f5b43748d8f779f
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xe69b81ca9f496877c928edec5adc0a9b95236a99fbdc694bb8dd2096143ca577",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x340acf0e012a196feccbfa065f5b43748d8f779f"
],
"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": "0xdd62ed3e",
"selector": "0xdd62ed3e",
"calldata_variants": [
"0xdd62ed3e",
"0xdd62ed3e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe30443bc",
"selector": "0xe30443bc",
"calldata_variants": [
"0xe30443bc",
"0xe30443bc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfbcbc0f1",
"selector": "0xfbcbc0f1",
"calldata_variants": [
"0xfbcbc0f1",
"0xfbcbc0f10000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa9059cbb",
"selector": "0xa9059cbb",
"calldata_variants": [
"0xa9059cbb",
"0xa9059cbb0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xaafd847a",
"selector": "0xaafd847a",
"calldata_variants": [
"0xaafd847a",
"0xaafd847a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbe10b614",
"selector": "0xbe10b614",
"calldata_variants": [
"0xbe10b614",
"0xbe10b6140000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x91b89fba",
"selector": "0x91b89fba",
"calldata_variants": [
"0x91b89fba",
"0x91b89fba0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 5158,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 1,
"guards_detected": [
{
"pc": 6091,
"type": "tx_origin_used"
}
]
}
|