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

Analysis Run

83f88a50-5919-4b54-b492-bcfe6e7ec907

complete
Chain ID
1
Address
Block Number
Created
Mon, Jan 5, 2026 3:57 AM
Review Summary

What survived the funnel

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

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

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
31679 report.consolidate complete 1 / 1 3 months ago
95497 artifact.fetch complete 1 / 3 1 week ago
95498 tool.cast_disasm complete 1 / 3 1 week ago
95499 analysis.bundle complete 1 / 3 1 week ago
95500 capability.graph complete 1 / 3 1 week ago
95501 detector.run complete 1 / 3 1 week ago
95502 validation.fork complete 1 / 3 1 week ago

Artifact

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

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 1
Findings
0
No findings?
yes
Summary
Reviewed the full runtime bytecode bundle; no concrete, exploitable profit path is evident from bytecode alone (calls appear gated and no delegatecall/selfdestruct or unprotected owner/admin slot writes were found).
View stderr
[codex:302519] OpenAI Codex v0.77.0 (research preview)
[codex:302519] --------
[codex:302519] workdir: /tmp/codex-multi-v8jcpqg0
[codex:302519] model: gpt-5.2-codex
[codex:302519] provider: openai
[codex:302519] approval: never
[codex:302519] sandbox: read-only
[codex:302519] reasoning effort: xhigh
[codex:302519] reasoning summaries: auto
[codex:302519] session id: 019b8c43-bf5b-75c0-9914-dbc897adb5a5
[codex:302519] --------
[codex:302519] user
[codex:302519] 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:302519] 
[codex:302519] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:302519] 
[codex:302519] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:302519] - Gas inefficiency, code quality, or best practices
[codex:302519] - Theoretical vulnerabilities without a clear extraction path
[codex:302519] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:302519] - Issues requiring social engineering or off-chain coordination
[codex:302519] 
[codex:302519] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:302519] - CALL/DELEGATECALL with controllable destination or calldata
[codex:302519] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:302519] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:302519] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:302519] - External calls before state updates (reentrancy)
[codex:302519] - SELFDESTRUCT with controllable beneficiary
[codex:302519] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:302519] 
[codex:302519] For each finding, you MUST explain:
[codex:302519] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:302519] 2. The concrete sequence of transactions to extract value
[codex:302519] 3. Why you believe this is exploitable (not just suspicious)
[codex:302519] 
[codex:302519] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:302519] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:302519] 
[codex:302519] Output MUST be valid JSON matching the provided schema.
[codex:302519] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:302519] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:302519] mcp startup: no servers
[codex:302519] 
[codex:302519] thinking
[codex:302519] **Preparing to analyze exploit request**
[codex:302519] exec
[codex:302519] /bin/bash -lc ls in /tmp/codex-multi-v8jcpqg0 succeeded in 5ms:
[codex:302519] BYTECODE_BUNDLE.txt
[codex:302519] codex-output-schema.json
[codex:302519] exec
[codex:302519] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-v8jcpqg0 succeeded in 8ms:
[codex:302519] Runtime bytecode bundle for best-effort auditing.
[codex:302519] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:302519] 
[codex:302519] FILE: runtime_bytecode.hex
[codex:302519] 0x6080604052600436106101c15763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630317058181146101cc57806312fa6feb146101ff57806318160ddd146102285780631dae27b31461023d578063324536eb146102525780633f4ba83a1461026757806340c10f191461027e57806341e11c59146102a25780634935f367146102b75780635c975abb146102db5780635f04bf03146102f0578063668038e01461035557806370a082311461036a578063715018a61461038b578063814b3fe0146103a05780638456cb59146103b8578063882f327b146103cd5780638da5cb5b146103ee5780638eeb8d651461041f57806391b46a911461043457806391cb866b146104585780639a816f7d14610479578063a6c8d5a81461049a578063acdf4f18146104bb578063b8d48835146104c3578063bafbc927146104e4578063bb20b07914610508578063beabacc814610520578063ca1606371461054a578063d9075c351461056b578063e34cc84f14610580578063e50d33e3146105a1578063ef78d4fd146105b6578063f2fde38b146105cb578063fcddd056146105ec578063fcf4c297146105f4575b6101c9610615565b50005b3480156101d857600080fd5b506101ed600160a060020a036004351661071a565b60408051918252519081900360200190f35b34801561020b57600080fd5b5061021461072c565b604080519115158252519081900360200190f35b34801561023457600080fd5b506101ed610735565b34801561024957600080fd5b5061021461073b565b34801561025e57600080fd5b506101ed61084d565b34801561027357600080fd5b5061027c610853565b005b34801561028a57600080fd5b50610214600160a060020a03600435166024356108c9565b3480156102ae57600080fd5b506101ed6109b9565b3480156102c357600080fd5b50610214600160a060020a03600435166024356109bf565b3480156102e757600080fd5b50610214610a69565b3480156102fc57600080fd5b50610305610a79565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610341578181015183820152602001610329565b505050509050019250505060405180910390f35b34801561036157600080fd5b506101ed610af1565b34801561037657600080fd5b506101ed600160a060020a0360043516610c95565b34801561039757600080fd5b5061027c610cdd565b3480156103ac57600080fd5b506101ed600435610d49565b3480156103c457600080fd5b5061027c610d5b565b3480156103d957600080fd5b50610214600160a060020a0360043516610dd6565b3480156103fa57600080fd5b50610403610edd565b60408051600160a060020a039092168252519081900360200190f35b34801561042b57600080fd5b506101ed610eec565b34801561044057600080fd5b506101ed600160a060020a0360043516602435610ef2565b34801561046457600080fd5b506101ed600160a060020a0360043516610f0f565b34801561048557600080fd5b506101ed600160a060020a03600435166110ff565b3480156104a657600080fd5b506101ed600160a060020a0360043516611111565b61021461122f565b3480156104cf57600080fd5b50610214600160a060020a03600435166112bb565b3480156104f057600080fd5b50610214600160a060020a03600435166024356113b2565b34801561051457600080fd5b506101ed60043561149a565b34801561052c57600080fd5b50610214600160a060020a03600435811690602435166044356114ac565b34801561055657600080fd5b50610214600160a060020a03600435166116ef565b34801561057757600080fd5b50610305611704565b34801561058c57600080fd5b50610305600160a060020a0360043516611776565b3480156105ad57600080fd5b506101ed6118d8565b3480156105c257600080fd5b506101ed6119d1565b3480156105d757600080fd5b5061027c600160a060020a03600435166119d7565b610214610615565b34801561060057600080fd5b50610214600160a060020a03600435166119fa565b60035460009060ff161561062857600080fd5b600054600160a060020a0316331461063f57600080fd5b60005460a060020a900460ff161561065657600080fd5b6001805460009081526004602090815260408083203490558354835260059091529020429055805461068d9163ffffffff611b2116565b6001818155600d916000916106a8919063ffffffff611b2e16565b81526020808201929092526040908101600090812054600180548352600d9094529190205580546106de9163ffffffff611b2e16565b60408051348152905133917fdf9a51129930649214df58f542322c245372c6f2fa6fc3c9b40d927c597cd230919081900360200190a350600190565b600a6020526000908152604090205481565b60035460ff1681565b600e5490565b6003546000908190819060ff16151561075357600080fd5b3360009081526007602052604090205460ff161561077057600080fd5b6001543360009081526009602052604090205410156107945761079233611b40565b505b33600090815260086020908152604080832060015484529091529020546006546107c39163ffffffff611bd716565b91506107ff600d60006107e160018054611b2e90919063ffffffff16565b81526020019081526020016000205483611c0090919063ffffffff16565b33600081815260076020526040808220805460ff1916600117905551929350909183156108fc0291849190818181858888f19350505050158015610847573d6000803e3d6000fd5b50505090565b600e5481565b600054600160a060020a0316331461086a57600080fd5b60005460a060020a900460ff16151561088257600080fd5b6000805474ff0000000000000000000000000000000000000000191681556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b339190a1565b60008054600160a060020a031633146108e157600080fd5b600154156108ee57600080fd5b600160a060020a0383166000908152600860209081526040808320838052909152902054610922908363ffffffff611b2116565b600160a060020a0384166000908152600860209081526040808320838052825290912091909155600d90527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee5461097f908363ffffffff611b2116565b60008052600d6020527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee819055600e555060015b92915050565b60025481565b600160a060020a0382166000908152600b60205260408120548190819060ff1615156109ee5760009250610a61565b5060009050805b600160a060020a0385166000908152600c6020526040902054811015610a5d57600160a060020a0385166000908152600c60205260409020805485919083908110610a3c57fe5b90600052602060002001541115610a5257610a5d565b9015906001016109f5565b8192505b505092915050565b60005460a060020a900460ff1681565b6060806000600154604051908082528060200260200182016040528015610aaa578160200160208202803883390190505b509150600090505b600154811015610aeb576000818152600460205260409020548251839083908110610ad957fe5b60209081029091010152600101610ab2565b50919050565b6000805481908190819060a060020a900460ff1615610b0f57600080fd5b600154336000908152600a602052604090205410610b2c57600080fd5b600154336000908152600960205260408120549094501015610b5357610b5133611b40565b505b336000908152600a602052604090205491505b600154821015610c0a57336000908152600860209081526040808320858452909152812054118015610b9f5750610b9d33836109bf565b155b15610bff57336000908152600860209081526040808320858452825280832054600490925290912054610bd79163ffffffff611bd716565b6000838152600d6020526040902054909150610bfa90829063ffffffff611c0016565b830192505b600190910190610b66565b600154336000908152600a6020526040812091909155831115610c8d57604051339084156108fc029085906000818181858888f19350505050158015610c54573d6000803e3d6000fd5b50604080518481529051839133917f987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a9181900360200190a35b509092915050565b60035460009060ff1615610cab57506000610cd8565b50600160a060020a0381166000908152600860209081526040808320600983528184205484529091529020545b919050565b600054600160a060020a03163314610cf457600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60046020526000908152604090205481565b600054600160a060020a03163314610d7257600080fd5b60005460a060020a900460ff1615610d8957600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1781556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff6259190a1565b60008054600160a060020a03163314610dee57600080fd5b610dfa826001546109bf565b15610e0457600080fd5b600154600160a060020a0383166000908152600960205260409020541015610e3157610e2f82611b40565b505b610e5b610e3d83610c95565b6001546000908152600d60205260409020549063ffffffff611b2e16565b600180546000908152600d6020908152604080832094909455600160a060020a038616808352600b8252848320805460ff191685179055600c82528483208454815480870183559185529284200191909155915492517f9f1ec8c880f76798e7b793325d625e9b60e4082a553c98f42b6cda368dd600089190a3506001919050565b600054600160a060020a031681565b60065481565b600860209081526000928352604080842090915290825290205481565b60008054819081908190600160a060020a03163314610f2d57600080fd5b600154600160a060020a0386166000908152600a602052604090205410610f5357600080fd5b600154600160a060020a0386166000908152600960205260408120549094501015610f8357610f8185611b40565b505b600160a060020a0385166000908152600a602052604090205491505b60015482101561105557600160a060020a0385166000908152600860209081526040808320858452909152812054118015610fe15750610fdf85836109bf565b155b1561104a57600160a060020a03851660009081526008602090815260408083208584528252808320546004909252909120546110229163ffffffff611bd716565b6000838152600d602052604090205490915061104590829063ffffffff611c0016565b830192505b600190910190610f9f565b600154600160a060020a0386166000908152600a60205260408120919091558311156110f357604051600160a060020a0386169084156108fc029085906000818181858888f193505050501580156110b1573d6000803e3d6000fd5b506040805184815290518391600160a060020a038816917f987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a9181900360200190a35b8293505b505050919050565b60096020526000908152604090205481565b600160a060020a0381166000908152600a60205260408120548190819081805b60015483101561122457600160a060020a03871660009081526009602052604090205483111561118d57600160a060020a03871660009081526008602090815260408083206009835281842054845290915290205493506111b4565b600160a060020a038716600090815260086020908152604080832086845290915290205493505b6000841180156111cb57506111c987846109bf565b155b15611219576000838152600460205260409020546111ef908563ffffffff611bd716565b6000848152600d602052604090205490925061121290839063ffffffff611c0016565b9485019490505b600190920191611131565b509295945050505050565b60008054600160a060020a0316331461124757600080fd5b60035460ff161561125757600080fd5b600254421161126557600080fd5b346006819055600180548082019091556040805192835251909133917fdf9a51129930649214df58f542322c245372c6f2fa6fc3c9b40d927c597cd2309181900360200190a36003805460ff1916600117905590565b60008054600160a060020a031633146112d357600080fd5b6112df826001546109bf565b15156112ea57600080fd5b600154600160a060020a03831660009081526009602052604090205410156113175761131582611b40565b505b61134161132383610c95565b6001546000908152600d60205260409020549063ffffffff611b2116565b600180546000908152600d6020908152604080832094909455600160a060020a038616808352600c82528483208454815480870183559185529284200191909155915492517f0f0bc5b519ddefdd8e5f9e6423433aa2b869738de2ae34d58ebc796fc749fa0d9190a3506001919050565b6000805481908190819060a060020a900460ff16156113d057600080fd5b600160a060020a03861660009081526009602052604090205485116113f457600080fd5b60015485111561140357600080fd5b600160a060020a0386166000908152600960209081526040808320546008835281842081855290925290912054909350915081156114765750600182015b84811161147657600160a060020a03861660009081526008602090815260408083208484529091529020829055600101611441565b50505050600160a060020a0391909116600090815260096020526040902055600190565b60056020526000908152604090205481565b60035460009081908190819060ff16156114c557600080fd5b600054600160a060020a031633146114dc57600080fd5b60005460a060020a900460ff16156114f357600080fd5b600160a060020a038616151561150857600080fd5b600160a060020a038716600090815260096020908152604080832054600883528184208185529092529091205490935085111561154457600080fd5b6001548310156115595761155787611b40565b505b600154600160a060020a03871660009081526009602052604090205410156115865761158486611b40565b505b600160a060020a038716600090815260086020908152604080832060015484529091529020546115bc908663ffffffff611b2e16565b600160a060020a03808916600090815260086020818152604080842060018054865290835281852096909655938b168352908152828220935482529290925290205461160e908663ffffffff611b2116565b600160a060020a0387166000908152600860209081526040808320600180548552925290912091909155546116449088906109bf565b9150611652866001546109bf565b905081801561165f575080155b1561169d576001546000908152600d6020526040902054611686908663ffffffff611b2116565b6001546000908152600d60205260409020556116e2565b811580156116a85750805b156116e2576001546000908152600d60205260409020546116cf908663ffffffff611b2e16565b6001546000908152600d60205260409020555b5060019695505050505050565b60076020526000908152604090205460ff1681565b6060806000600154604051908082528060200260200182016040528015611735578160200160208202803883390190505b509150600090505b600154811015610aeb57600081815260056020526040902054825183908390811061176457fe5b6020908102909101015260010161173d565b6060806000806001546040519080825280602002602001820160405280156117a8578160200160208202803883390190505b509250600091505b6001548210156110f357600160a060020a03851660009081526009602052604090205482111561181d57600160a060020a03851660009081526008602090815260408083208584528252808320546004909252909120546118169163ffffffff611bd716565b9050611866565b600160a060020a0385166000908152600860209081526040808320600983528184205484528252808320548584526004909252909120546118639163ffffffff611bd716565b90505b61187085836109bf565b15611894576000838381518110151561188557fe5b602090810290910101526118cd565b6000828152600d60205260409020546118b490829063ffffffff611c0016565b83838151811015156118c257fe5b602090810290910101525b6001909101906117b0565b336000908152600a60205260408120548190819081805b6001548310156119c7573360009081526009602052604090205483111561193957336000908152600860209081526040808320600983528184205484529091529020549350611957565b33600090815260086020908152604080832086845290915290205493505b60008411801561196e575061196c33846109bf565b155b156119bc57600083815260046020526040902054611992908563ffffffff611bd716565b6000848152600d60205260409020549092506119b590839063ffffffff611c0016565b9485019490505b6001909201916118ef565b5092949350505050565b60015481565b600054600160a060020a031633146119ee57600080fd5b6119f781611c15565b50565b6000805481908190600160a060020a03163314611a1657600080fd5b60035460ff161515611a2757600080fd5b600160a060020a03841660009081526007602052604090205460ff1615611a4d57600080fd5b600154600160a060020a0385166000908152600960205260409020541015611a7a57611a7884611b40565b505b600160a060020a03841660009081526008602090815260408083206001548452909152902054600654611ab29163ffffffff611bd716565b9150611ad0600d60006107e160018054611b2e90919063ffffffff16565b600160a060020a038516600081815260076020526040808220805460ff1916600117905551929350909183156108fc0291849190818181858888f193505050501580156110f7573d6000803e3d6000fd5b818101828110156109b357fe5b600082821115611b3a57fe5b50900390565b600160a060020a03811660009081526009602090815260408083205460088352818420818552909252822054828115611bb05750600182015b6001548111611bb057600160a060020a03851660009081526008602090815260408083208484529091529020829055600101611b79565b60018054600160a060020a0387166000908152600960205260409020559350505050919050565b6000821515611be8575060006109b3565b50818102818382811515611bf857fe5b04146109b357fe5b60008183811515611c0d57fe5b049392505050565b600160a060020a0381161515611c2a57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790555600a165627a7a7230582025d10253a2b9d47c65084fa899de9f3c71ae5ff2bc2fe3b23afaa8f14448af2f0029
[codex:302519] 
[codex:302519] thinking
[codex:302519] **Analyzing bytecode for exploit paths**
[codex:302519] 
[codex:302519] I'm gearing up to analyze this large, ERC20-like bytecode to identify any concrete exploit paths by scanning for function selectors, suspicious calls, and opcode patterns like CALL, DELEGATECALL, and SELFDESTRUCT using an in-memory Python script. I'll focus on spotting payable or vulnerable functions that could lead to a profit exploit.
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii
[codex:302519] import re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex',1)[1]
[codex:302519] # get hex string after line
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # scan for opcodes f1,f2,f4,ff
[codex:302519] ops={0xf1:'CALL',0xf2:'CALLCODE',0xf4:'DELEGATECALL',0xff:'SELFDESTRUCT'}
[codex:302519] idxs={k:[] for k in ops}
[codex:302519] for i,b in enumerate(code):
[codex:302519]     if b in ops:
[codex:302519]         idxs[b].append(i)
[codex:302519] print({ops[k]:len(v) for k,v in idxs.items()})
[codex:302519] # show few contexts
[codex:302519] for b,locs in idxs.items():
[codex:302519]     print(ops[b], locs[:10])
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 37ms:
[codex:302519] {'CALL': 6, 'CALLCODE': 7, 'DELEGATECALL': 6, 'SELFDESTRUCT': 180}
[codex:302519] CALL [872, 2097, 3134, 4251, 6923, 7351]
[codex:302519] CALLCODE [418, 1110, 1790, 3356, 4758, 7248, 7343]
[codex:302519] DELEGATECALL [441, 447, 2225, 3310, 3786, 5102]
[codex:302519] SELFDESTRUCT [14, 15, 16, 17, 73, 1176, 1565, 1611, 1668, 1669]
[codex:302519] 
[codex:302519] thinking
[codex:302519] **Planning opcode disassembly**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii, re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode names
[codex:302519] opnames={
[codex:302519]     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:302519]     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:302519]     0x20:'SHA3',
[codex:302519]     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:302519]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519]     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:302519]     0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519]     0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519]     0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519]     0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519] 
[codex:302519] ops_of_interest={'CALL','DELEGATECALL','SELFDESTRUCT','CALLCODE'}
[codex:302519] locs=[]
[codex:302519] idx=0
[codex:302519] while idx < len(code):
[codex:302519]     op=code[idx]
[codex:302519]     name=opnames.get(op,'UNKNOWN')
[codex:302519]     if name in ops_of_interest:
[codex:302519]         locs.append((idx,name))
[codex:302519]     if 0x60 <= op <= 0x7f: # push
[codex:302519]         push_len=op-0x5f
[codex:302519]         idx += 1+push_len
[codex:302519]     else:
[codex:302519]         idx += 1
[codex:302519] 
[codex:302519] print('found',len(locs),'ops of interest')
[codex:302519] print(locs[:50])
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 31ms:
[codex:302519] found 4 ops of interest
[codex:302519] [(2097, 'CALL'), (3134, 'CALL'), (4251, 'CALL'), (6923, 'CALL')]
[codex:302519] 
[codex:302519] thinking
[codex:302519] **Preparing to analyze CALL instructions**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii, re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode table
[codex:302519] opnames={
[codex:302519]     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:302519]     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:302519]     0x20:'SHA3',
[codex:302519]     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:302519]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519]     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:302519]     0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519]     0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519]     0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519]     0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519] 
[codex:302519] def disasm(start, count):
[codex:302519]     i=start
[codex:302519]     out=[]
[codex:302519]     while i < len(code) and len(out)<count:
[codex:302519]         op=code[i]
[codex:302519]         name=opnames.get(op,'UNKNOWN')
[codex:302519]         if 0x60 <= op <= 0x7f:
[codex:302519]             l=op-0x5f
[codex:302519]             data=code[i+1:i+1+l]
[codex:302519]             out.append((i,name,data.hex()))
[codex:302519]             i += 1+l
[codex:302519]         else:
[codex:302519]             out.append((i,name,''))
[codex:302519]             i += 1
[codex:302519]     return out
[codex:302519] 
[codex:302519] # find CALLs
[codex:302519] call_offsets=[]
[codex:302519] i=0
[codex:302519] while i < len(code):
[codex:302519]     op=code[i]
[codex:302519]     if op==0xf1:
[codex:302519]         call_offsets.append(i)
[codex:302519]     if 0x60 <= op <= 0x7f:
[codex:302519]         i += 1+(op-0x5f)
[codex:302519]     else:
[codex:302519]         i += 1
[codex:302519] 
[codex:302519] print('CALL offsets',call_offsets)
[codex:302519] for off in call_offsets:
[codex:302519]     print('--- around',off)
[codex:302519]     for addr,name,data in disasm(off-20, 40):
[codex:302519]         if addr==off:
[codex:302519]             marker='>>'
[codex:302519]         else:
[codex:302519]             marker='  '
[codex:302519]         if data:
[codex:302519]             print(f\"{marker} {addr:04x} {name} 0x{data}\")
[codex:302519]         else:
[codex:302519]             print(f\"{marker} {addr:04x} {name}\")
[codex:302519] 
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 29ms:
[codex:302519] CALL offsets [2097, 3134, 4251, 6923]
[codex:302519] --- around 2097
[codex:302519]    081d SWAP4
[codex:302519]    081e POP
[codex:302519]    081f SWAP1
[codex:302519]    0820 SWAP2
[codex:302519]    0821 DUP4
[codex:302519]    0822 ISZERO
[codex:302519]    0823 PUSH2 0x08fc
[codex:302519]    0826 MUL
[codex:302519]    0827 SWAP2
[codex:302519]    0828 DUP5
[codex:302519]    0829 SWAP2
[codex:302519]    082a SWAP1
[codex:302519]    082b DUP2
[codex:302519]    082c DUP2
[codex:302519]    082d DUP2
[codex:302519]    082e DUP6
[codex:302519]    082f DUP9
[codex:302519]    0830 DUP9
[codex:302519] 
[codex:302519] thinking
[codex:302519] **Analyzing low-level CALL instruction context**
[codex:302519] 
[codex:302519] I'm exploring how CALL instructions transfer ETH by examining the surrounding EVM bytecode and stack operations. I’m trying to decode the gas stipend and call parameters, suspecting internal functions like safeTransferETH, and planning to parse function selectors to map calls for deeper insight into potential profit extraction or vulnerabilities.
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # parse dispatcher: look for pattern PUSH4 <sel> ... PUSH2 <dest> JUMPI
[codex:302519] mapping={}
[codex:302519] # simple scan of bytecode for PUSH4 and following PUSH2 then JUMPI
[codex:302519] i=0
[codex:302519] while i < len(code)-1:
[codex:302519]     op=code[i]
[codex:302519]     if op==0x63: # PUSH4
[codex:302519]         sel=int.from_bytes(code[i+1:i+5],'big')
[codex:302519]         # scan forward a bit to find PUSH2 dest then JUMPI
[codex:302519]         j=i+5
[codex:302519]         dest=None
[codex:302519]         while j < i+20 and j < len(code):
[codex:302519]             opj=code[j]
[codex:302519]             if opj==0x61: # PUSH2
[codex:302519]                 dest=int.from_bytes(code[j+1:j+3],'big')
[codex:302519]             if opj==0x57 and dest is not None:
[codex:302519]                 mapping[sel]=dest
[codex:302519]                 break
[codex:302519]             # advance
[codex:302519]             if 0x60 <= opj <= 0x7f:
[codex:302519]                 j += 1+(opj-0x5f)
[codex:302519]             else:
[codex:302519]                 j += 1
[codex:302519]         i += 5
[codex:302519]     else:
[codex:302519]         if 0x60 <= op <= 0x7f:
[codex:302519]             i += 1+(op-0x5f)
[codex:302519]         else:
[codex:302519]             i += 1
[codex:302519] # print mapping sorted by dest
[codex:302519] for sel,dest in sorted(mapping.items(), key=lambda kv: kv[1]):
[codex:302519]     print(f\"0x{sel:08x} -> 0x{dest:04x}\")
[codex:302519] print('count',len(mapping))
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 29ms:
[codex:302519] 0x03170581 -> 0x01cc
[codex:302519] 0x12fa6feb -> 0x01ff
[codex:302519] 0x18160ddd -> 0x0228
[codex:302519] 0x1dae27b3 -> 0x023d
[codex:302519] 0x324536eb -> 0x0252
[codex:302519] 0x3f4ba83a -> 0x0267
[codex:302519] 0x40c10f19 -> 0x027e
[codex:302519] 0x41e11c59 -> 0x02a2
[codex:302519] 0x4935f367 -> 0x02b7
[codex:302519] 0x5c975abb -> 0x02db
[codex:302519] 0x5f04bf03 -> 0x02f0
[codex:302519] 0x668038e0 -> 0x0355
[codex:302519] 0x70a08231 -> 0x036a
[codex:302519] 0x715018a6 -> 0x038b
[codex:302519] 0x814b3fe0 -> 0x03a0
[codex:302519] 0x8456cb59 -> 0x03b8
[codex:302519] 0x882f327b -> 0x03cd
[codex:302519] 0x8da5cb5b -> 0x03ee
[codex:302519] 0x8eeb8d65 -> 0x041f
[codex:302519] 0x91b46a91 -> 0x0434
[codex:302519] 
[codex:302519] thinking
[codex:302519] **Mapping function calls to jump destinations**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # parse opcodes to get JUMPDESTs and map their order
[codex:302519] jumpdests=[]
[codex:302519] idx=0
[codex:302519] while idx < len(code):
[codex:302519]     op=code[idx]
[codex:302519]     if op==0x5b:
[codex:302519]         jumpdests.append(idx)
[codex:302519]     if 0x60 <= op <= 0x7f:
[codex:302519]         idx += 1+(op-0x5f)
[codex:302519]     else:
[codex:302519]         idx += 1
[codex:302519] # mapping from selectors to dest
[codex:302519] mapping={}
[codex:302519] idx=0
[codex:302519] while idx < len(code)-1:
[codex:302519]     op=code[idx]
[codex:302519]     if op==0x63:
[codex:302519]         sel=int.from_bytes(code[idx+1:idx+5],'big')
[codex:302519]         j=idx+5
[codex:302519]         dest=None
[codex:302519]         while j<idx+20 and j<len(code):
[codex:302519]             opj=code[j]
[codex:302519]             if opj==0x61:
[codex:302519]                 dest=int.from_bytes(code[j+1:j+3],'big')
[codex:302519]             if opj==0x57 and dest is not None:
[codex:302519]                 mapping[sel]=dest
[codex:302519]                 break
[codex:302519]             if 0x60 <= opj <= 0x7f:
[codex:302519]                 j+=1+(opj-0x5f)
[codex:302519]             else:
[codex:302519]                 j+=1
[codex:302519]         idx += 5
[codex:302519]     else:
[codex:302519]         if 0x60 <= op <= 0x7f:
[codex:302519]             idx += 1+(op-0x5f)
[codex:302519]         else:
[codex:302519]             idx += 1
[codex:302519] # call offsets
[codex:302519] call_offsets=[]
[codex:302519] idx=0
[codex:302519] while idx < len(code):
[codex:302519]     op=code[idx]
[codex:302519]     if op==0xf1:
[codex:302519]         call_offsets.append(idx)
[codex:302519]     if 0x60 <= op <= 0x7f:
[codex:302519]         idx += 1+(op-0x5f)
[codex:302519]     else:
[codex:302519]         idx += 1
[codex:302519] 
[codex:302519] # for each call find nearest previous jumpdest
[codex:302519] for off in call_offsets:
[codex:302519]     prev=[j for j in jumpdests if j<=off]
[codex:302519]     last=prev[-1] if prev else None
[codex:302519]     print('CALL at',hex(off),'prev jumpdest',hex(last) if last else None)
[codex:302519] 
[codex:302519] # show selector names for those jumpdest if any
[codex:302519] sel_by_dest={v:k for k,v in mapping.items()}
[codex:302519] print('selector by dest for those call contexts:')
[codex:302519] for off in call_offsets:
[codex:302519]     prev=[j for j in jumpdests if j<=off]
[codex:302519]     last=prev[-1] if prev else None
[codex:302519]     sel=sel_by_dest.get(last)
[codex:302519]     print(hex(off),'jumpdest',hex(last), 'selector', hex(sel) if sel else None)
[codex:302519] 
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 33ms:
[codex:302519] CALL at 0x831 prev jumpdest 0x7ff
[codex:302519] CALL at 0xc3e prev jumpdest 0xc0a
[codex:302519] CALL at 0x109b prev jumpdest 0x1055
[codex:302519] CALL at 0x1b0b prev jumpdest 0x1ad0
[codex:302519] selector by dest for those call contexts:
[codex:302519] 0x831 jumpdest 0x7ff selector None
[codex:302519] 0xc3e jumpdest 0xc0a selector None
[codex:302519] 0x109b jumpdest 0x1055 selector None
[codex:302519] 0x1b0b jumpdest 0x1ad0 selector None
[codex:302519] 
[codex:302519] thinking
[codex:302519] **Investigating function call locations**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode names
[codex:302519] opnames={
[codex:302519]     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:302519]     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:302519]     0x20:'SHA3',
[codex:302519]     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:302519]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519]     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:302519]     0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519]     0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519]     0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519]     0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519] 
[codex:302519] def disasm_range(start,end):
[codex:302519]     i=start
[codex:302519]     while i < end:
[codex:302519]         op=code[i]
[codex:302519]         name=opnames.get(op,'UNKNOWN')
[codex:302519]         if 0x60 <= op <= 0x7f:
[codex:302519]             l=op-0x5f
[codex:302519]             data=code[i+1:i+1+l]
[codex:302519]             print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:302519]             i += 1+l
[codex:302519]         else:
[codex:302519]             print(f\"{i:04x}: {name}\")
[codex:302519]             i += 1
[codex:302519] 
[codex:302519] # disasm around 0x0615 to 0x0900
[codex:302519] start=0x0615; end=0x0900
[codex:302519] print('disasm',hex(start),hex(end))
[codex:302519] disasm_range(start,end)
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 29ms:
[codex:302519] disasm 0x615 0x900
[codex:302519] 0615: JUMPDEST
[codex:302519] 0616: PUSH1 0x03
[codex:302519] 0618: SLOAD
[codex:302519] 0619: PUSH1 0x00
[codex:302519] 061b: SWAP1
[codex:302519] 061c: PUSH1 0xff
[codex:302519] 061e: AND
[codex:302519] 061f: ISZERO
[codex:302519] 0620: PUSH2 0x0628
[codex:302519] 0623: JUMPI
[codex:302519] 0624: PUSH1 0x00
[codex:302519] 0626: DUP1
[codex:302519] 0627: REVERT
[codex:302519] 0628: JUMPDEST
[codex:302519] 0629: PUSH1 0x00
[codex:302519] 062b: SLOAD
[codex:302519] 062c: PUSH1 0x01
[codex:302519] 062e: PUSH1 0xa0
[codex:302519] 0630: PUSH1 0x02
[codex:302519] 
[codex:302519] thinking
[codex:302519] **Analyzing complex bytecode flow**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode names
[codex:302519] opnames={
[codex:302519]     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:302519]     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:302519]     0x20:'SHA3',
[codex:302519]     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:302519]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519]     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:302519]     0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519]     0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519]     0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519]     0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519] 
[codex:302519] def disasm_range(start,end):
[codex:302519]     i=start
[codex:302519]     while i < end:
[codex:302519]         op=code[i]
[codex:302519]         name=opnames.get(op,'UNKNOWN')
[codex:302519]         if 0x60 <= op <= 0x7f:
[codex:302519]             l=op-0x5f
[codex:302519]             data=code[i+1:i+1+l]
[codex:302519]             print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:302519]             i += 1+l
[codex:302519]         else:
[codex:302519]             print(f\"{i:04x}: {name}\")
[codex:302519]             i += 1
[codex:302519] 
[codex:302519] start=0x1b00; end=0x1c40
[codex:302519] print('disasm',hex(start),hex(end))
[codex:302519] disasm_range(start,end)
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 29ms:
[codex:302519] disasm 0x1b00 0x1c40
[codex:302519] 1b00: MUL
[codex:302519] 1b01: SWAP2
[codex:302519] 1b02: DUP5
[codex:302519] 1b03: SWAP2
[codex:302519] 1b04: SWAP1
[codex:302519] 1b05: DUP2
[codex:302519] 1b06: DUP2
[codex:302519] 1b07: DUP2
[codex:302519] 1b08: DUP6
[codex:302519] 1b09: DUP9
[codex:302519] 1b0a: DUP9
[codex:302519] 1b0b: CALL
[codex:302519] 1b0c: SWAP4
[codex:302519] 1b0d: POP
[codex:302519] 1b0e: POP
[codex:302519] 1b0f: POP
[codex:302519] 1b10: POP
[codex:302519] 1b11: ISZERO
[codex:302519] 1b12: DUP1
[codex:302519] 
[codex:302519] thinking
[codex:302519] **Analyzing EVM call stack and control flow**
[codex:302519] 
[codex:302519] I'm sorting through disassembly to understand how internal math functions relate to calls around 0x1b0b and 0x1b21, clarifying function boundaries and jumps. I'm zooming into a function at 0x073b that appears to send ETH using a guarded call pattern and planning a symbolic stack evaluation to trace call arguments and storage effects, aiming to see if any unsafe external calls or reentrancy issues could allow exploit paths. I’m setting up to write a symbolic interpreter to simulate opcodes from 0x073b to 0x0831, representing storage loads and calldata symbolically, to reconstruct the call’s input parameters and check the logic around transfers.
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] 
[codex:302519] # opcode names and stack effects
[codex:302519] opnames={
[codex:302519]     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:302519]     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:302519]     0x20:'SHA3',
[codex:302519]     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:302519]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519]     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:302519]     0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519]     0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519]     0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519]     0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519] 
[codex:302519] start=0x073b
[codex:302519] end=0x0832
[codex:302519] # simple symbolic stack
[codex:302519] stack=[f'arg{i}' for i in range(10)]  # placeholder maybe too many? We'll treat arg0 top? Actually stack top is last element.
[codex:302519] # We'll start with empty and let underflow create placeholders? We'll do custom.
[codex:302519] stack=[]
[codex:302519] mem={}
[codex:302519] 
[codex:302519] # function to pop
[codex:302519] arg_counter=0
[codex:302519] 
[codex:302519] def pop():
[codex:302519]     global arg_counter
[codex:302519]     if not stack:
[codex:302519]         arg_counter += 1
[codex:302519]         return f'unk{arg_counter}'
[codex:302519]     return stack.pop()
[codex:302519] 
[codex:302519] def push(x):
[codex:302519]     stack.append(x)
[codex:302519] 
[codex:302519] def fmt(x):
[codex:302519]     return x
[codex:302519] 
[codex:302519] # helper to handle binary op
[codex:302519] 
[codex:302519] def binop(op):
[codex:302519]     b=pop(); a=pop();
[codex:302519]     push(f'({a} {op} {b})')
[codex:302519] 
[codex:302519] def unop(op):
[codex:302519]     a=pop(); push(f'{op}({a})')
[codex:302519] 
[codex:302519] # parse
[codex:302519] pc=start
[codex:302519] while pc < end:
[codex:302519]     op=code[pc]
[codex:302519]     name=opnames.get(op,'UNKNOWN')
[codex:302519]     # print debug
[codex:302519]     # print(hex(pc), name, 'stack', stack)
[codex:302519]     if 0x60 <= op <= 0x7f:
[codex:302519]         l=op-0x5f
[codex:302519]         data=code[pc+1:pc+1+l]
[codex:302519]         val=int.from_bytes(data,'big')
[codex:302519]         push(hex(val))
[codex:302519]         pc += 1+l
[codex:302519]         continue
[codex:302519]     if name.startswith('DUP'):
[codex:302519]         n=int(name[3:])
[codex:302519]         if len(stack)<n:
[codex:302519]             # pad
[codex:302519]             while len(stack)<n:
[codex:302519]                 stack.insert(0,f'unk{len(stack)+1}')
[codex:302519]         push(stack[-n])
[codex:302519]     elif name.startswith('SWAP'):
[codex:302519]         n=int(name[4:])
[codex:302519]         if len(stack)<n+1:
[codex:302519]             while len(stack)<n+1:
[codex:302519]                 stack.insert(0,f'unk{len(stack)+1}')
[codex:302519]         stack[-1], stack[-1-n] = stack[-1-n], stack[-1]
[codex:302519]     elif name=='POP':
[codex:302519]         pop()
[codex:302519]     elif name=='ADD':
[codex:302519]         binop('+')
[codex:302519]     elif name=='SUB':
[codex:302519]         binop('-')
[codex:302519]     elif name=='MUL':
[codex:302519]         binop('*')
[codex:302519]     elif name=='DIV':
[codex:302519]         binop('/')
[codex:302519]     elif name=='AND':
[codex:302519]         binop('&')
[codex:302519]     elif name=='OR':
[codex:302519]         binop('|')
[codex:302519]     elif name=='EQ':
[codex:302519]         binop('==')
[codex:302519]     elif name=='LT':
[codex:302519]         binop('<')
[codex:302519]     elif name=='GT':
[codex:302519]         binop('>')
[codex:302519]     elif name=='ISZERO':
[codex:302519]         unop('iszero')
[codex:302519]     elif name=='NOT':
[codex:302519]         unop('not')
[codex:302519]     elif name=='CALLER':
[codex:302519]         push('CALLER')
[codex:302519]     elif name=='CALLVALUE':
[codex:302519]         push('CALLVALUE')
[codex:302519]     elif name=='SLOAD':
[codex:302519]         key=pop(); push(f'sload({key})')
[codex:302519]     elif name=='SSTORE':
[codex:302519]         val=pop(); key=pop();
[codex:302519]         # ignore store
[codex:302519]     elif name=='MSTORE':
[codex:302519]         val=pop(); key=pop(); mem[key]=val
[codex:302519]     elif name=='MLOAD':
[codex:302519]         key=pop(); push(f'mem[{key}]')
[codex:302519]     elif name=='SHA3':
[codex:302519]         size=pop(); offset=pop();
[codex:302519]         # try resolve if offset and size are constants
[codex:302519]         push(f'sha3({offset},{size})')
[codex:302519]     elif name in ('JUMP','JUMPI','JUMPDEST'):
[codex:302519]         # ignore control flow
[codex:302519]         pass
[codex:302519]     elif name=='LOG3' or name=='LOG1' or name=='LOG2' or name=='LOG4':
[codex:302519]         # pop appropriate? LOGn pops mstart, msize, topic1..n
[codex:302519]         if name=='LOG1':
[codex:302519]             pop(); pop(); pop()
[codex:302519]         elif name=='LOG2':
[codex:302519]             pop(); pop(); pop(); pop()
[codex:302519]         elif name=='LOG3':
[codex:302519]             pop(); pop(); pop(); pop(); pop()
[codex:302519]         elif name=='LOG4':
[codex:302519]             pop(); pop(); pop(); pop(); pop(); pop()
[codex:302519]     elif name=='CALL':
[codex:302519]         # capture call args
[codex:302519]         out_size=pop(); out_offset=pop(); in_size=pop(); in_offset=pop(); value=pop(); to=pop(); gas=pop()
[codex:302519]         print('CALL at',hex(pc),'args:',{'gas':gas,'to':to,'value':value,'in_offset':in_offset,'in_size':in_size,'out_offset':out_offset,'out_size':out_size})
[codex:302519]         push('call_result')
[codex:302519]     else:
[codex:302519]         # other ops ignored
[codex:302519]         pass
[codex:302519]     pc += 1
[codex:302519] 
[codex:302519] print('final stack',stack)
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 29ms:
[codex:302519] CALL at 0x831 args: {'gas': '0x0', 'to': 'mem[0x40]', 'value': '0x0', 'in_offset': 'mem[0x40]', 'in_size': '(0x1c00 & 0xffffffff)', 'out_offset': 'CALLER', 'out_size': '(iszero((0x1c00 & 0xffffffff)) * 0x8fc)'}
[codex:302519] final stack ['0x0', '0x0', '0x0', 'iszero(iszero((sload(0x3) & 0xff)))', '0x753', '0x0', '0x0', 'iszero((sload(sha3(0x40,0x0)) & 0xff))', '0x770', '0x0', '0x0', 'iszero((sload(0x1) < sload(sha3(0x40,0x0))))', '0x794', '0x792', 'CALLER', '0x7c3', '(0xffffffff & 0x1bd7)', 'sload(sha3(0x40,0x0))', '0x7ff', '0xd', '0x0', '0x7e1', '0xd', '(0x1c00 & 0xffffffff)', 'CALLER', '(iszero((0x1c00 & 0xffffffff)) * 0x8fc)', '(0x1c00 & 0xffffffff)', 'mem[0x40]', 'call_result']
[codex:302519] 
[codex:302519] thinking
[codex:302519] **Analyzing symbolic interpreter issues**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode names
[codex:302519] opnames={
[codex:302519]     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:302519]     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:302519]     0x20:'SHA3',
[codex:302519]     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:302519]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519]     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:302519]     0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519]     0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519]     0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519]     0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519] 
[codex:302519] def disasm_range(start,end):
[codex:302519]     i=start
[codex:302519]     while i<end:
[codex:302519]         op=code[i]
[codex:302519]         name=opnames.get(op,'UNKNOWN')
[codex:302519]         if 0x60 <= op <= 0x7f:
[codex:302519]             l=op-0x5f
[codex:302519]             data=code[i+1:i+1+l]
[codex:302519]             print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:302519]             i+=1+l
[codex:302519]         else:
[codex:302519]             print(f\"{i:04x}: {name}\")
[codex:302519]             i+=1
[codex:302519] 
[codex:302519] # show for some function entries near 0x023d etc
[codex:302519] for dest in [0x01cc,0x01ff,0x0228,0x023d,0x0252,0x0267,0x027e,0x02a2,0x02b7,0x02db,0x02f0]:
[codex:302519]     print('\\nFunction entry',hex(dest))
[codex:302519]     disasm_range(dest, dest+0x40)
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 29ms:
[codex:302519] 
[codex:302519] Function entry 0x1cc
[codex:302519] 01cc: JUMPDEST
[codex:302519] 01cd: CALLVALUE
[codex:302519] 01ce: DUP1
[codex:302519] 01cf: ISZERO
[codex:302519] 01d0: PUSH2 0x01d8
[codex:302519] 01d3: JUMPI
[codex:302519] 01d4: PUSH1 0x00
[codex:302519] 01d6: DUP1
[codex:302519] 01d7: REVERT
[codex:302519] 01d8: JUMPDEST
[codex:302519] 01d9: POP
[codex:302519] 01da: PUSH2 0x01ed
[codex:302519] 01dd: PUSH1 0x01
[codex:302519] 01df: PUSH1 0xa0
[codex:302519] 01e1: PUSH1 0x02
[codex:302519] 01e3: EXP
[codex:302519] 01e4: SUB
[codex:302519] 01e5: PUSH1 0x04
[codex:302519] 
[codex:302519] thinking
[codex:302519] **Tracing internal call and security checks**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode names
[codex:302519] opnames={
[codex:302519]     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:302519]     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:302519]     0x20:'SHA3',
[codex:302519]     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:302519]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519]     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:302519]     0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519]     0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519]     0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519]     0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519] 
[codex:302519] def disasm_range(start,end):
[codex:302519]     i=start
[codex:302519]     while i<end:
[codex:302519]         op=code[i]
[codex:302519]         name=opnames.get(op,'UNKNOWN')
[codex:302519]         if 0x60 <= op <= 0x7f:
[codex:302519]             l=op-0x5f
[codex:302519]             data=code[i+1:i+1+l]
[codex:302519]             print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:302519]             i+=1+l
[codex:302519]         else:
[codex:302519]             print(f\"{i:04x}: {name}\")
[codex:302519]             i+=1
[codex:302519] 
[codex:302519] # function entry for selector f2fde38b is 0x05cb
[codex:302519] start=0x05cb; end=0x0630
[codex:302519] print('disasm',hex(start),hex(end))
[codex:302519] disasm_range(start,end)
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 28ms:
[codex:302519] disasm 0x5cb 0x630
[codex:302519] 05cb: JUMPDEST
[codex:302519] 05cc: CALLVALUE
[codex:302519] 05cd: DUP1
[codex:302519] 05ce: ISZERO
[codex:302519] 05cf: PUSH2 0x05d7
[codex:302519] 05d2: JUMPI
[codex:302519] 05d3: PUSH1 0x00
[codex:302519] 05d5: DUP1
[codex:302519] 05d6: REVERT
[codex:302519] 05d7: JUMPDEST
[codex:302519] 05d8: POP
[codex:302519] 05d9: PUSH2 0x027c
[codex:302519] 05dc: PUSH1 0x01
[codex:302519] 05de: PUSH1 0xa0
[codex:302519] 05e0: PUSH1 0x02
[codex:302519] 05e2: EXP
[codex:302519] 05e3: SUB
[codex:302519] 05e4: PUSH1 0x04
[codex:302519] 05e6: CALLDATALOAD
[codex:302519] 
[codex:302519] thinking
[codex:302519] **Inspecting ownership check**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode names
[codex:302519] opnames={
[codex:302519]     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:302519]     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:302519]     0x20:'SHA3',
[codex:302519]     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:302519]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519]     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:302519]     0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519]     0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519]     0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519]     0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519] 
[codex:302519] def disasm_range(start,end):
[codex:302519]     i=start
[codex:302519]     while i<end:
[codex:302519]         op=code[i]
[codex:302519]         name=opnames.get(op,'UNKNOWN')
[codex:302519]         if 0x60 <= op <= 0x7f:
[codex:302519]             l=op-0x5f
[codex:302519]             data=code[i+1:i+1+l]
[codex:302519]             print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:302519]             i+=1+l
[codex:302519]         else:
[codex:302519]             print(f\"{i:04x}: {name}\")
[codex:302519]             i+=1
[codex:302519] 
[codex:302519] start=0x19d7; end=0x1a30
[codex:302519] print('disasm',hex(start),hex(end))
[codex:302519] disasm_range(start,end)
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 30ms:
[codex:302519] disasm 0x19d7 0x1a30
[codex:302519] 19d7: JUMPDEST
[codex:302519] 19d8: PUSH1 0x00
[codex:302519] 19da: SLOAD
[codex:302519] 19db: PUSH1 0x01
[codex:302519] 19dd: PUSH1 0xa0
[codex:302519] 19df: PUSH1 0x02
[codex:302519] 19e1: EXP
[codex:302519] 19e2: SUB
[codex:302519] 19e3: AND
[codex:302519] 19e4: CALLER
[codex:302519] 19e5: EQ
[codex:302519] 19e6: PUSH2 0x19ee
[codex:302519] 19e9: JUMPI
[codex:302519] 19ea: PUSH1 0x00
[codex:302519] 19ec: DUP1
[codex:302519] 19ed: REVERT
[codex:302519] 19ee: JUMPDEST
[codex:302519] 19ef: PUSH2 0x19f7
[codex:302519] 19f2: DUP2
[codex:302519] 
[codex:302519] thinking
[codex:302519] **Tracing potential ETH transfer functions**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode names (same as earlier)
[codex:302519] opnames={
[codex:302519]     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:302519]     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:302519]     0x20:'SHA3',
[codex:302519]     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:302519]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519]     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:302519]     0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519]     0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519]     0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519]     0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519] 
[codex:302519] def disasm_range(start,end):
[codex:302519]     i=start
[codex:302519]     while i<end:
[codex:302519]         op=code[i]
[codex:302519]         name=opnames.get(op,'UNKNOWN')
[codex:302519]         if 0x60 <= op <= 0x7f:
[codex:302519]             l=op-0x5f
[codex:302519]             data=code[i+1:i+1+l]
[codex:302519]             print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:302519]             i+=1+l
[codex:302519]         else:
[codex:302519]             print(f\"{i:04x}: {name}\")
[codex:302519]             i+=1
[codex:302519] 
[codex:302519] start=0x0b80; end=0x0c90
[codex:302519] print('disasm',hex(start),hex(end))
[codex:302519] disasm_range(start,end)
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 32ms:
[codex:302519] disasm 0xb80 0xc90
[codex:302519] 0b80: DUP1
[codex:302519] 0b81: DUP4
[codex:302519] 0b82: SHA3
[codex:302519] 0b83: DUP6
[codex:302519] 0b84: DUP5
[codex:302519] 0b85: MSTORE
[codex:302519] 0b86: SWAP1
[codex:302519] 0b87: SWAP2
[codex:302519] 0b88: MSTORE
[codex:302519] 0b89: DUP2
[codex:302519] 0b8a: SHA3
[codex:302519] 0b8b: SLOAD
[codex:302519] 0b8c: GT
[codex:302519] 0b8d: DUP1
[codex:302519] 0b8e: ISZERO
[codex:302519] 0b8f: PUSH2 0x0b9f
[codex:302519] 0b92: JUMPI
[codex:302519] 0b93: POP
[codex:302519] 0b94: PUSH2 0x0b9d
[codex:302519] 
[codex:302519] thinking
[codex:302519] **Analyzing internal call structure and ETH transfers**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] pattern=bytes([0x61,0x0b,0x66])  # PUSH2 0x0b66
[codex:302519] for i in range(len(code)):
[codex:302519]     if code[i:i+3]==pattern:
[codex:302519]         print(hex(i))
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 29ms:
[codex:302519] 0xc06
[codex:302519] 
[codex:302519] thinking
[codex:302519] **Analyzing function boundaries near loop**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode names
[codex:302519] opnames={
[codex:302519]     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:302519]     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:302519]     0x20:'SHA3',
[codex:302519]     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:302519]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519]     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:302519]     0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519]     0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519]     0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519]     0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519] 
[codex:302519] def disasm_range(start,end):
[codex:302519]     i=start
[codex:302519]     while i<end:
[codex:302519]         op=code[i]
[codex:302519]         name=opnames.get(op,'UNKNOWN')
[codex:302519]         if 0x60 <= op <= 0x7f:
[codex:302519]             l=op-0x5f
[codex:302519]             data=code[i+1:i+1+l]
[codex:302519]             print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:302519]             i+=1+l
[codex:302519]         else:
[codex:302519]             print(f\"{i:04x}: {name}\")
[codex:302519]             i+=1
[codex:302519] 
[codex:302519] start=0x0a60; end=0x0c90
[codex:302519] print('disasm',hex(start),hex(end))
[codex:302519] disasm_range(start,end)
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 27ms:
[codex:302519] disasm 0xa60 0xc90
[codex:302519] 0a60: POP
[codex:302519] 0a61: JUMPDEST
[codex:302519] 0a62: POP
[codex:302519] 0a63: POP
[codex:302519] 0a64: SWAP3
[codex:302519] 0a65: SWAP2
[codex:302519] 0a66: POP
[codex:302519] 0a67: POP
[codex:302519] 0a68: JUMP
[codex:302519] 0a69: JUMPDEST
[codex:302519] 0a6a: PUSH1 0x00
[codex:302519] 0a6c: SLOAD
[codex:302519] 0a6d: PUSH1 0xa0
[codex:302519] 0a6f: PUSH1 0x02
[codex:302519] 0a71: EXP
[codex:302519] 0a72: SWAP1
[codex:302519] 0a73: DIV
[codex:302519] 0a74: PUSH1 0xff
[codex:302519] 0a76: AND
[codex:302519] 
[codex:302519] thinking
[codex:302519] **Investigating function entry point**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] pattern=bytes([0x61,0x0a,0xf1])
[codex:302519] for i in range(len(code)):
[codex:302519]     if code[i:i+3]==pattern:
[codex:302519]         print(hex(i))
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 28ms:
[codex:302519] 0x366
[codex:302519] 
[codex:302519] thinking
[codex:302519] **Analyzing function jump and return values**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode names
[codex:302519] opnames={
[codex:302519]     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:302519]     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:302519]     0x20:'SHA3',
[codex:302519]     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:302519]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519]     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:302519]     0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519]     0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519]     0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519]     0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519] 
[codex:302519] def disasm_range(start,end):
[codex:302519]     i=start
[codex:302519]     while i<end:
[codex:302519]         op=code[i]
[codex:302519]         name=opnames.get(op,'UNKNOWN')
[codex:302519]         if 0x60 <= op <= 0x7f:
[codex:302519]             l=op-0x5f
[codex:302519]             data=code[i+1:i+1+l]
[codex:302519]             print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:302519]             i+=1+l
[codex:302519]         else:
[codex:302519]             print(f\"{i:04x}: {name}\")
[codex:302519]             i+=1
[codex:302519] 
[codex:302519] start=0x0355; end=0x0385
[codex:302519] print('disasm',hex(start),hex(end))
[codex:302519] disasm_range(start,end)
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 26ms:
[codex:302519] disasm 0x355 0x385
[codex:302519] 0355: JUMPDEST
[codex:302519] 0356: CALLVALUE
[codex:302519] 0357: DUP1
[codex:302519] 0358: ISZERO
[codex:302519] 0359: PUSH2 0x0361
[codex:302519] 035c: JUMPI
[codex:302519] 035d: PUSH1 0x00
[codex:302519] 035f: DUP1
[codex:302519] 0360: REVERT
[codex:302519] 0361: JUMPDEST
[codex:302519] 0362: POP
[codex:302519] 0363: PUSH2 0x01ed
[codex:302519] 0366: PUSH2 0x0af1
[codex:302519] 0369: JUMP
[codex:302519] 036a: JUMPDEST
[codex:302519] 036b: CALLVALUE
[codex:302519] 036c: DUP1
[codex:302519] 036d: ISZERO
[codex:302519] 036e: PUSH2 0x0376
[codex:302519] 
[codex:302519] thinking
[codex:302519] **Analyzing EVM call parameters and flow**
[codex:302519] 
[codex:302519] I'm examining the EVM instructions leading up to a CALL opcode within an external function, trying to decode how gas and value parameters are set. The goal is to understand if there’s a potential exploit involving repeated payouts. I’m considering running a symbolic interpretation to track stack states despite complexity and also planning to analyze other nearby calls that might relate to owner-only withdrawals. This is a detailed step to verify security and understand fund transfers.
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode names
[codex:302519] opnames={
[codex:302519]     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:302519]     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:302519]     0x20:'SHA3',
[codex:302519]     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:302519]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519]     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:302519]     0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519]     0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519]     0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519]     0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519] 
[codex:302519] def disasm_range(start,end):
[codex:302519]     i=start
[codex:302519]     while i<end:
[codex:302519]         op=code[i]
[codex:302519]         name=opnames.get(op,'UNKNOWN')
[codex:302519]         if 0x60 <= op <= 0x7f:
[codex:302519]             l=op-0x5f
[codex:302519]             data=code[i+1:i+1+l]
[codex:302519]             print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:302519]             i+=1+l
[codex:302519]         else:
[codex:302519]             print(f\"{i:04x}: {name}\")
[codex:302519]             i+=1
[codex:302519] 
[codex:302519] start=0x1040; end=0x10d0
[codex:302519] print('disasm',hex(start),hex(end))
[codex:302519] disasm_range(start,end)
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 27ms:
[codex:302519] disasm 0x1040 0x10d0
[codex:302519] 1040: PUSH2 0x1c00
[codex:302519] 1043: AND
[codex:302519] 1044: JUMP
[codex:302519] 1045: JUMPDEST
[codex:302519] 1046: DUP4
[codex:302519] 1047: ADD
[codex:302519] 1048: SWAP3
[codex:302519] 1049: POP
[codex:302519] 104a: JUMPDEST
[codex:302519] 104b: PUSH1 0x01
[codex:302519] 104d: SWAP1
[codex:302519] 104e: SWAP2
[codex:302519] 104f: ADD
[codex:302519] 1050: SWAP1
[codex:302519] 1051: PUSH2 0x0f9f
[codex:302519] 1054: JUMP
[codex:302519] 1055: JUMPDEST
[codex:302519] 1056: PUSH1 0x01
[codex:302519] 1058: SLOAD
[codex:302519] 
[codex:302519] thinking
[codex:302519] **Analyzing call patterns and selectors**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode names
[codex:302519] opnames={
[codex:302519]     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:302519]     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:302519]     0x20:'SHA3',
[codex:302519]     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:302519]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519]     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:302519]     0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519]     0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519]     0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519]     0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519] 
[codex:302519] def disasm_range(start,end):
[codex:302519]     i=start
[codex:302519]     while i<end:
[codex:302519]         op=code[i]
[codex:302519]         name=opnames.get(op,'UNKNOWN')
[codex:302519]         if 0x60 <= op <= 0x7f:
[codex:302519]             l=op-0x5f
[codex:302519]             data=code[i+1:i+1+l]
[codex:302519]             print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:302519]             i+=1+l
[codex:302519]         else:
[codex:302519]             print(f\"{i:04x}: {name}\")
[codex:302519]             i+=1
[codex:302519] 
[codex:302519] # entries around 0x04bb to 0x05b6
[codex:302519] for dest in [0x04bb,0x04c3,0x04e4,0x0508,0x0520,0x054a,0x056b,0x0580,0x05a1,0x05b6]:
[codex:302519]     print('\\nEntry',hex(dest))
[codex:302519]     disasm_range(dest, dest+0x30)
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 27ms:
[codex:302519] 
[codex:302519] Entry 0x4bb
[codex:302519] 04bb: JUMPDEST
[codex:302519] 04bc: PUSH2 0x0214
[codex:302519] 04bf: PUSH2 0x122f
[codex:302519] 04c2: JUMP
[codex:302519] 04c3: JUMPDEST
[codex:302519] 04c4: CALLVALUE
[codex:302519] 04c5: DUP1
[codex:302519] 04c6: ISZERO
[codex:302519] 04c7: PUSH2 0x04cf
[codex:302519] 04ca: JUMPI
[codex:302519] 04cb: PUSH1 0x00
[codex:302519] 04cd: DUP1
[codex:302519] 04ce: REVERT
[codex:302519] 04cf: JUMPDEST
[codex:302519] 04d0: POP
[codex:302519] 04d1: PUSH2 0x0214
[codex:302519] 04d4: PUSH1 0x01
[codex:302519] 04d6: PUSH1 0xa0
[codex:302519] 
[codex:302519] thinking
[codex:302519] **Analyzing internal function calls for ownership checks**
[codex:302519] exec
[codex:302519] /bin/bash -lc "python - <<'PY'
[codex:302519] import binascii,re
[codex:302519] from pathlib import Path
[codex:302519] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:302519] hexstr=re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:]
[codex:302519] code=binascii.unhexlify(hexstr)
[codex:302519] # opcode names
[codex:302519] opnames={
[codex:302519]     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:302519]     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:302519]     0x20:'SHA3',
[codex:302519]     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:302519]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:302519]     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:302519]     0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:302519]     0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:302519]     0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:302519]     0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:302519]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:302519] }
[codex:302519] 
[codex:302519] def disasm_range(start,end):
[codex:302519]     i=start
[codex:302519]     while i<end:
[codex:302519]         op=code[i]
[codex:302519]         name=opnames.get(op,'UNKNOWN')
[codex:302519]         if 0x60 <= op <= 0x7f:
[codex:302519]             l=op-0x5f
[codex:302519]             data=code[i+1:i+1+l]
[codex:302519]             print(f\"{i:04x}: {name} 0x{data.hex()}\")
[codex:302519]             i+=1+l
[codex:302519]         else:
[codex:302519]             print(f\"{i:04x}: {name}\")
[codex:302519]             i+=1
[codex:302519] 
[codex:302519] start=0x19c0; end=0x1a20
[codex:302519] print('disasm',hex(start),hex(end))
[codex:302519] disasm_range(start,end)
[codex:302519] PY" in /tmp/codex-multi-v8jcpqg0 succeeded in 30ms:
[codex:302519] disasm 0x19c0 0x1a20
[codex:302519] 19c0: SWAP3
[codex:302519] 19c1: ADD
[codex:302519] 19c2: SWAP2
[codex:302519] 19c3: PUSH2 0x18ef
[codex:302519] 19c6: JUMP
[codex:302519] 19c7: JUMPDEST
[codex:302519] 19c8: POP
[codex:302519] 19c9: SWAP3
[codex:302519] 19ca: SWAP5
[codex:302519] 19cb: SWAP4
[codex:302519] 19cc: POP
[codex:302519] 19cd: POP
[codex:302519] 19ce: POP
[codex:302519] 19cf: POP
[codex:302519] 19d0: JUMP
[codex:302519] 19d1: JUMPDEST
[codex:302519] 19d2: PUSH1 0x01
[codex:302519] 19d4: SLOAD
[codex:302519] 19d5: DUP2
[codex:302519] 
[codex:302519] thinking
[codex:302519] **Summarizing bytecode audit results**
[codex:302519] 
[codex:302519] I'm wrapping up the bytecode review, finding no clear exploit paths or profit opportunities. I confirm reentrancy protections appear in place, no dangerous delegatecalls or selfdestructs, and state updates precede external calls. I'll produce a JSON report reflecting no findings with an honest summary about analysis limits.
[codex:302519] codex
[codex:302519] {"no_findings":true,"summary":"Reviewed the full runtime bytecode bundle; no concrete, exploitable profit path is evident from bytecode alone (calls appear gated and no delegatecall/selfdestruct or unprotected owner/admin slot writes were found).","findings":[]}
[codex:302519] tokens used
[codex:302519] 105,927
[codex:302519] {"no_findings":true,"summary":"Reviewed the full runtime bytecode bundle; no concrete, exploitable profit path is evident from bytecode alone (calls appear gated and no delegatecall/selfdestruct or unprotected owner/admin slot writes were found).","findings":[]}
Metadata
{
    "codex": {
        "ran_at": "2026-01-05T03:57:31.492853+00:00",
        "returncode": 0
    },
    "summary": "Reviewed the full runtime bytecode bundle; no concrete, exploitable profit path is evident from bytecode alone (calls appear gated and no delegatecall/selfdestruct or unprotected owner/admin slot writes were found).",
    "raw_final": {
        "summary": "Reviewed the full runtime bytecode bundle; no concrete, exploitable profit path is evident from bytecode alone (calls appear gated and no delegatecall/selfdestruct or unprotected owner/admin slot writes were found).",
        "findings": [],
        "no_findings": true
    },
    "no_findings": true,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
4
EXT*/BALANCE
0
Total opcodes
4963
Flags
No heuristic flags raised.
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: PUSH1 0x04
00000007: CALLDATASIZE
00000008: LT
00000009: PUSH2 0x01c1
0000000c: JUMPI
0000000d: PUSH4 0xffffffff
00000012: PUSH29 0x0100000000000000000000000000000000000000000000000000000000
00000030: PUSH1 0x00
00000032: CALLDATALOAD
00000033: DIV
00000034: AND
00000035: PUSH4 0x03170581
0000003a: DUP2
0000003b: EQ
0000003c: PUSH2 0x01cc
0000003f: JUMPI
00000040: DUP1
00000041: PUSH4 0x12fa6feb
00000046: EQ
00000047: PUSH2 0x01ff
0000004a: JUMPI
0000004b: DUP1
0000004c: PUSH4 0x18160ddd
00000051: EQ
00000052: PUSH2 0x0228
00000055: JUMPI
00000056: DUP1
00000057: PUSH4 0x1dae27b3
0000005c: EQ
0000005d: PUSH2 0x023d
00000060: JUMPI
00000061: DUP1
00000062: PUSH4 0x324536eb
00000067: EQ
00000068: PUSH2 0x0252
0000006b: JUMPI
0000006c: DUP1
0000006d: PUSH4 0x3f4ba83a
00000072: EQ
00000073: PUSH2 0x0267
00000076: JUMPI
00000077: DUP1
00000078: PUSH4 0x40c10f19
0000007d: EQ
0000007e: PUSH2 0x027e
00000081: JUMPI
00000082: DUP1
00000083: PUSH4 0x41e11c59
00000088: EQ
00000089: PUSH2 0x02a2
0000008c: JUMPI
0000008d: DUP1
0000008e: PUSH4 0x4935f367
00000093: EQ
00000094: PUSH2 0x02b7
00000097: JUMPI
00000098: DUP1
00000099: PUSH4 0x5c975abb
0000009e: EQ
0000009f: PUSH2 0x02db
000000a2: JUMPI
000000a3: DUP1
000000a4: PUSH4 0x5f04bf03
000000a9: EQ
000000aa: PUSH2 0x02f0
000000ad: JUMPI
000000ae: DUP1
000000af: PUSH4 0x668038e0
000000b4: EQ
000000b5: PUSH2 0x0355
000000b8: JUMPI
000000b9: DUP1
000000ba: PUSH4 0x70a08231
000000bf: EQ
000000c0: PUSH2 0x036a
000000c3: JUMPI
000000c4: DUP1
000000c5: PUSH4 0x715018a6
000000ca: EQ
000000cb: PUSH2 0x038b
000000ce: JUMPI
000000cf: DUP1
000000d0: PUSH4 0x814b3fe0
000000d5: EQ
000000d6: PUSH2 0x03a0
000000d9: JUMPI
000000da: DUP1
000000db: PUSH4 0x8456cb59
000000e0: EQ
000000e1: PUSH2 0x03b8
000000e4: JUMPI
000000e5: DUP1
000000e6: PUSH4 0x882f327b
000000eb: EQ
000000ec: PUSH2 0x03cd
000000ef: JUMPI
000000f0: DUP1
000000f1: PUSH4 0x8da5cb5b
000000f6: EQ
000000f7: PUSH2 0x03ee
000000fa: JUMPI
000000fb: DUP1
000000fc: PUSH4 0x8eeb8d65
00000101: EQ
00000102: PUSH2 0x041f
00000105: JUMPI
00000106: DUP1
00000107: PUSH4 0x91b46a91
0000010c: EQ
0000010d: PUSH2 0x0434
00000110: JUMPI
00000111: DUP1
00000112: PUSH4 0x91cb866b
00000117: EQ
00000118: PUSH2 0x0458
0000011b: JUMPI
0000011c: DUP1
0000011d: PUSH4 0x9a816f7d
00000122: EQ
00000123: PUSH2 0x0479
00000126: JUMPI
00000127: DUP1
00000128: PUSH4 0xa6c8d5a8
0000012d: EQ
0000012e: PUSH2 0x049a
00000131: JUMPI
00000132: DUP1
00000133: PUSH4 0xacdf4f18
00000138: EQ
00000139: PUSH2 0x04bb
0000013c: JUMPI
0000013d: DUP1
0000013e: PUSH4 0xb8d48835
00000143: EQ
00000144: PUSH2 0x04c3
00000147: JUMPI
00000148: DUP1
00000149: PUSH4 0xbafbc927
0000014e: EQ
0000014f: PUSH2 0x04e4
00000152: JUMPI
00000153: DUP1
00000154: PUSH4 0xbb20b079
00000159: EQ
0000015a: PUSH2 0x0508
0000015d: JUMPI
0000015e: DUP1
0000015f: PUSH4 0xbeabacc8
00000164: EQ
00000165: PUSH2 0x0520
00000168: JUMPI
00000169: DUP1
0000016a: PUSH4 0xca160637
0000016f: EQ
00000170: PUSH2 0x054a
00000173: JUMPI
00000174: DUP1
00000175: PUSH4 0xd9075c35
0000017a: EQ
0000017b: PUSH2 0x056b
0000017e: JUMPI
0000017f: DUP1
00000180: PUSH4 0xe34cc84f
00000185: EQ
00000186: PUSH2 0x0580
00000189: JUMPI
0000018a: DUP1
0000018b: PUSH4 0xe50d33e3
00000190: EQ
00000191: PUSH2 0x05a1
00000194: JUMPI
00000195: DUP1
00000196: PUSH4 0xef78d4fd
0000019b: EQ
0000019c: PUSH2 0x05b6
0000019f: JUMPI
000001a0: DUP1
000001a1: PUSH4 0xf2fde38b
000001a6: EQ
000001a7: PUSH2 0x05cb
000001aa: JUMPI
000001ab: DUP1
000001ac: PUSH4 0xfcddd056
000001b1: EQ
000001b2: PUSH2 0x05ec
000001b5: JUMPI
000001b6: DUP1
000001b7: PUSH4 0xfcf4c297
000001bc: EQ
000001bd: PUSH2 0x05f4
000001c0: JUMPI
000001c1: JUMPDEST
000001c2: PUSH2 0x01c9
000001c5: PUSH2 0x0615
000001c8: JUMP
000001c9: JUMPDEST
000001ca: POP
000001cb: STOP
000001cc: JUMPDEST
000001cd: CALLVALUE
000001ce: DUP1
000001cf: ISZERO
000001d0: PUSH2 0x01d8
000001d3: JUMPI
000001d4: PUSH1 0x00
000001d6: DUP1
000001d7: REVERT
000001d8: JUMPDEST
000001d9: POP
000001da: PUSH2 0x01ed
000001dd: PUSH1 0x01
000001df: PUSH1 0xa0
000001e1: PUSH1 0x02
000001e3: EXP
000001e4: SUB
000001e5: PUSH1 0x04
000001e7: CALLDATALOAD
000001e8: AND
000001e9: PUSH2 0x071a
000001ec: JUMP
000001ed: JUMPDEST
000001ee: PUSH1 0x40
000001f0: DUP1
000001f1: MLOAD
000001f2: SWAP2
000001f3: DUP3
000001f4: MSTORE
000001f5: MLOAD
000001f6: SWAP1
000001f7: DUP2
000001f8: SWAP1
000001f9: SUB
000001fa: PUSH1 0x20
000001fc: ADD
000001fd: SWAP1
000001fe: RETURN
000001ff: JUMPDEST
00000200: CALLVALUE
00000201: DUP1
00000202: ISZERO
00000203: PUSH2 0x020b
00000206: JUMPI
00000207: PUSH1 0x00
00000209: DUP1
0000020a: REVERT
0000020b: JUMPDEST
0000020c: POP
0000020d: PUSH2 0x0214
00000210: PUSH2 0x072c
00000213: JUMP
00000214: JUMPDEST
00000215: PUSH1 0x40
00000217: DUP1
00000218: MLOAD
00000219: SWAP2
0000021a: ISZERO
0000021b: ISZERO
0000021c: DUP3
0000021d: MSTORE
0000021e: MLOAD
0000021f: SWAP1
00000220: DUP2
00000221: SWAP1
00000222: SUB
00000223: PUSH1 0x20
00000225: ADD
00000226: SWAP1
00000227: RETURN
00000228: JUMPDEST
00000229: CALLVALUE
0000022a: DUP1
0000022b: ISZERO
0000022c: PUSH2 0x0234
0000022f: JUMPI
00000230: PUSH1 0x00
00000232: DUP1
00000233: REVERT
00000234: JUMPDEST
00000235: POP
00000236: PUSH2 0x01ed
00000239: PUSH2 0x0735
0000023c: JUMP
0000023d: JUMPDEST
0000023e: CALLVALUE
0000023f: DUP1
00000240: ISZERO
00000241: PUSH2 0x0249
00000244: JUMPI
00000245: PUSH1 0x00
00000247: DUP1
00000248: REVERT
00000249: JUMPDEST
0000024a: POP
0000024b: PUSH2 0x0214
0000024e: PUSH2 0x073b
00000251: JUMP
00000252: JUMPDEST
00000253: CALLVALUE
00000254: DUP1
00000255: ISZERO
00000256: PUSH2 0x025e
00000259: JUMPI
0000025a: PUSH1 0x00
0000025c: DUP1
0000025d: REVERT
0000025e: JUMPDEST
0000025f: POP
00000260: PUSH2 0x01ed
00000263: PUSH2 0x084d
00000266: JUMP
00000267: JUMPDEST
00000268: CALLVALUE
00000269: DUP1
0000026a: ISZERO
0000026b: PUSH2 0x0273
0000026e: JUMPI
0000026f: PUSH1 0x00
00000271: DUP1
00000272: REVERT
00000273: JUMPDEST
00000274: POP
00000275: PUSH2 0x027c
00000278: PUSH2 0x0853
0000027b: JUMP
0000027c: JUMPDEST
0000027d: STOP
0000027e: JUMPDEST
0000027f: CALLVALUE
00000280: DUP1
00000281: ISZERO
00000282: PUSH2 0x028a
00000285: JUMPI
00000286: PUSH1 0x00
00000288: DUP1
00000289: REVERT
0000028a: JUMPDEST
0000028b: POP
0000028c: PUSH2 0x0214
0000028f: PUSH1 0x01
00000291: PUSH1 0xa0
00000293: PUSH1 0x02
00000295: EXP
00000296: SUB
00000297: PUSH1 0x04
00000299: CALLDATALOAD
0000029a: AND
0000029b: PUSH1 0x24
0000029d: CALLDATALOAD
0000029e: PUSH2 0x08c9
000002a1: JUMP
000002a2: JUMPDEST
000002a3: CALLVALUE
000002a4: DUP1
000002a5: ISZERO
000002a6: PUSH2 0x02ae
000002a9: JUMPI
000002aa: PUSH1 0x00
000002ac: DUP1
000002ad: REVERT
000002ae: JUMPDEST
000002af: POP
000002b0: PUSH2 0x01ed
000002b3: PUSH2 0x09b9
000002b6: JUMP
000002b7: JUMPDEST
000002b8: CALLVALUE
000002b9: DUP1
000002ba: ISZERO
000002bb: PUSH2 0x02c3
000002be: JUMPI
000002bf: PUSH1 0x00
000002c1: DUP1
000002c2: REVERT
000002c3: JUMPDEST
000002c4: POP
000002c5: PUSH2 0x0214
000002c8: PUSH1 0x01
000002ca: PUSH1 0xa0
000002cc: PUSH1 0x02
000002ce: EXP
000002cf: SUB
000002d0: PUSH1 0x04
000002d2: CALLDATALOAD
000002d3: AND
000002d4: PUSH1 0x24
000002d6: CALLDATALOAD
000002d7: PUSH2 0x09bf
000002da: JUMP
000002db: JUMPDEST
000002dc: CALLVALUE
000002dd: DUP1
000002de: ISZERO
000002df: PUSH2 0x02e7
000002e2: JUMPI
000002e3: PUSH1 0x00
000002e5: DUP1
000002e6: REVERT
000002e7: JUMPDEST
000002e8: POP
000002e9: PUSH2 0x0214
000002ec: PUSH2 0x0a69
000002ef: JUMP
000002f0: JUMPDEST
000002f1: CALLVALUE
000002f2: DUP1
000002f3: ISZERO
000002f4: PUSH2 0x02fc
000002f7: JUMPI
000002f8: PUSH1 0x00
000002fa: DUP1
000002fb: REVERT
000002fc: JUMPDEST
000002fd: POP
000002fe: PUSH2 0x0305
00000301: PUSH2 0x0a79
00000304: JUMP
00000305: JUMPDEST
00000306: PUSH1 0x40
00000308: DUP1
00000309: MLOAD
0000030a: PUSH1 0x20
0000030c: DUP1
0000030d: DUP3
0000030e: MSTORE
0000030f: DUP4
00000310: MLOAD
00000311: DUP2
00000312: DUP4
00000313: ADD
00000314: MSTORE
00000315: DUP4
00000316: MLOAD
00000317: SWAP2
00000318: SWAP3
00000319: DUP4
0000031a: SWAP3
0000031b: SWAP1
0000031c: DUP4
0000031d: ADD
0000031e: SWAP2
0000031f: DUP6
00000320: DUP2
00000321: ADD
00000322: SWAP2
00000323: MUL
00000324: DUP1
00000325: DUP4
00000326: DUP4
00000327: PUSH1 0x00
00000329: JUMPDEST
0000032a: DUP4
0000032b: DUP2
0000032c: LT
0000032d: ISZERO
0000032e: PUSH2 0x0341
00000331: JUMPI
00000332: DUP2
00000333: DUP2
00000334: ADD
00000335: MLOAD
00000336: DUP4
00000337: DUP3
00000338: ADD
00000339: MSTORE
0000033a: PUSH1 0x20
0000033c: ADD
0000033d: PUSH2 0x0329
00000340: JUMP
00000341: JUMPDEST
00000342: POP
00000343: POP
00000344: POP
00000345: POP
00000346: SWAP1
00000347: POP
00000348: ADD
00000349: SWAP3
0000034a: POP
0000034b: POP
0000034c: POP
0000034d: PUSH1 0x40
0000034f: MLOAD
00000350: DUP1
00000351: SWAP2
00000352: SUB
00000353: SWAP1
00000354: RETURN
00000355: JUMPDEST
00000356: CALLVALUE
00000357: DUP1
00000358: ISZERO
00000359: PUSH2 0x0361
0000035c: JUMPI
0000035d: PUSH1 0x00
0000035f: DUP1
00000360: REVERT
00000361: JUMPDEST
00000362: POP
00000363: PUSH2 0x01ed
00000366: PUSH2 0x0af1
00000369: JUMP
0000036a: JUMPDEST
0000036b: CALLVALUE
0000036c: DUP1
0000036d: ISZERO
0000036e: PUSH2 0x0376
00000371: JUMPI
00000372: PUSH1 0x00
00000374: DUP1
00000375: REVERT
00000376: JUMPDEST
00000377: POP
00000378: PUSH2 0x01ed
0000037b: PUSH1 0x01
0000037d: PUSH1 0xa0
0000037f: PUSH1 0x02
00000381: EXP
00000382: SUB
00000383: PUSH1 0x04
00000385: CALLDATALOAD
00000386: AND
00000387: PUSH2 0x0c95
0000038a: JUMP
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 0x027c
0000039c: PUSH2 0x0cdd
0000039f: JUMP
000003a0: JUMPDEST
000003a1: CALLVALUE
000003a2: DUP1
000003a3: ISZERO
000003a4: PUSH2 0x03ac
000003a7: JUMPI
000003a8: PUSH1 0x00
000003aa: DUP1
000003ab: REVERT
000003ac: JUMPDEST
000003ad: POP
000003ae: PUSH2 0x01ed
000003b1: PUSH1 0x04
000003b3: CALLDATALOAD
000003b4: PUSH2 0x0d49
000003b7: JUMP
000003b8: JUMPDEST
000003b9: CALLVALUE
000003ba: DUP1
000003bb: ISZERO
000003bc: PUSH2 0x03c4
000003bf: JUMPI
000003c0: PUSH1 0x00
000003c2: DUP1
000003c3: REVERT
000003c4: JUMPDEST
000003c5: POP
000003c6: PUSH2 0x027c
000003c9: PUSH2 0x0d5b
000003cc: JUMP
000003cd: JUMPDEST
000003ce: CALLVALUE
000003cf: DUP1
000003d0: ISZERO
000003d1: PUSH2 0x03d9
000003d4: JUMPI
000003d5: PUSH1 0x00
000003d7: DUP1
000003d8: REVERT
000003d9: JUMPDEST
000003da: POP
000003db: PUSH2 0x0214
000003de: PUSH1 0x01
000003e0: PUSH1 0xa0
000003e2: PUSH1 0x02
000003e4: EXP
000003e5: SUB
000003e6: PUSH1 0x04
000003e8: CALLDATALOAD
000003e9: AND
000003ea: PUSH2 0x0dd6
000003ed: JUMP
000003ee: JUMPDEST
000003ef: CALLVALUE
000003f0: DUP1
000003f1: ISZERO
000003f2: PUSH2 0x03fa
000003f5: JUMPI
000003f6: PUSH1 0x00
000003f8: DUP1
000003f9: REVERT
000003fa: JUMPDEST
000003fb: POP
000003fc: PUSH2 0x0403
000003ff: PUSH2 0x0edd
00000402: JUMP
00000403: JUMPDEST
00000404: PUSH1 0x40
00000406: DUP1
00000407: MLOAD
00000408: PUSH1 0x01
0000040a: PUSH1 0xa0
0000040c: PUSH1 0x02
0000040e: EXP
0000040f: SUB
00000410: SWAP1
00000411: SWAP3
00000412: AND
00000413: DUP3
00000414: MSTORE
00000415: MLOAD
00000416: SWAP1
00000417: DUP2
00000418: SWAP1
00000419: SUB
0000041a: PUSH1 0x20
0000041c: ADD
0000041d: SWAP1
0000041e: RETURN
0000041f: JUMPDEST
00000420: CALLVALUE
00000421: DUP1
00000422: ISZERO
00000423: PUSH2 0x042b
00000426: JUMPI
00000427: PUSH1 0x00
00000429: DUP1
0000042a: REVERT
0000042b: JUMPDEST
0000042c: POP
0000042d: PUSH2 0x01ed
00000430: PUSH2 0x0eec
00000433: JUMP
00000434: JUMPDEST
00000435: CALLVALUE
00000436: DUP1
00000437: ISZERO
00000438: PUSH2 0x0440
0000043b: JUMPI
0000043c: PUSH1 0x00
0000043e: DUP1
0000043f: REVERT
00000440: JUMPDEST
00000441: POP
00000442: PUSH2 0x01ed
00000445: PUSH1 0x01
00000447: PUSH1 0xa0
00000449: PUSH1 0x02
0000044b: EXP
0000044c: SUB
0000044d: PUSH1 0x04
0000044f: CALLDATALOAD
00000450: AND
00000451: PUSH1 0x24
00000453: CALLDATALOAD
00000454: PUSH2 0x0ef2
00000457: JUMP
00000458: JUMPDEST
00000459: CALLVALUE
0000045a: DUP1
0000045b: ISZERO
0000045c: PUSH2 0x0464
0000045f: JUMPI
00000460: PUSH1 0x00
00000462: DUP1
00000463: REVERT
00000464: JUMPDEST
00000465: POP
00000466: PUSH2 0x01ed
00000469: PUSH1 0x01
0000046b: PUSH1 0xa0
0000046d: PUSH1 0x02
0000046f: EXP
00000470: SUB
00000471: PUSH1 0x04
00000473: CALLDATALOAD
00000474: AND
00000475: PUSH2 0x0f0f
00000478: JUMP
00000479: JUMPDEST
0000047a: CALLVALUE
0000047b: DUP1
0000047c: ISZERO
0000047d: PUSH2 0x0485
00000480: JUMPI
00000481: PUSH1 0x00
00000483: DUP1
00000484: REVERT
00000485: JUMPDEST
00000486: POP
00000487: PUSH2 0x01ed
0000048a: PUSH1 0x01
0000048c: PUSH1 0xa0
0000048e: PUSH1 0x02
00000490: EXP
00000491: SUB
00000492: PUSH1 0x04
00000494: CALLDATALOAD
00000495: AND
00000496: PUSH2 0x10ff
00000499: JUMP
0000049a: JUMPDEST
0000049b: CALLVALUE
0000049c: DUP1
0000049d: ISZERO
0000049e: PUSH2 0x04a6
000004a1: JUMPI
000004a2: PUSH1 0x00
000004a4: DUP1
000004a5: REVERT
000004a6: JUMPDEST
000004a7: POP
000004a8: PUSH2 0x01ed
000004ab: PUSH1 0x01
000004ad: PUSH1 0xa0
000004af: PUSH1 0x02
000004b1: EXP
000004b2: SUB
000004b3: PUSH1 0x04
000004b5: CALLDATALOAD
000004b6: AND
000004b7: PUSH2 0x1111
000004ba: JUMP
000004bb: JUMPDEST
000004bc: PUSH2 0x0214
000004bf: PUSH2 0x122f
000004c2: JUMP
000004c3: JUMPDEST
000004c4: CALLVALUE
000004c5: DUP1
000004c6: ISZERO
000004c7: PUSH2 0x04cf
000004ca: JUMPI
000004cb: PUSH1 0x00
000004cd: DUP1
000004ce: REVERT
000004cf: JUMPDEST
000004d0: POP
000004d1: PUSH2 0x0214
000004d4: PUSH1 0x01
000004d6: PUSH1 0xa0
000004d8: PUSH1 0x02
000004da: EXP
000004db: SUB
000004dc: PUSH1 0x04
000004de: CALLDATALOAD
000004df: AND
000004e0: PUSH2 0x12bb
000004e3: JUMP
000004e4: JUMPDEST
000004e5: CALLVALUE
000004e6: DUP1
000004e7: ISZERO
000004e8: PUSH2 0x04f0
000004eb: JUMPI
000004ec: PUSH1 0x00
000004ee: DUP1
000004ef: REVERT
000004f0: JUMPDEST
000004f1: POP
000004f2: PUSH2 0x0214
000004f5: PUSH1 0x01
000004f7: PUSH1 0xa0
000004f9: PUSH1 0x02
000004fb: EXP
000004fc: SUB
000004fd: PUSH1 0x04
000004ff: CALLDATALOAD
00000500: AND
00000501: PUSH1 0x24
00000503: CALLDATALOAD
00000504: PUSH2 0x13b2
00000507: JUMP
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 0x01ed
00000519: PUSH1 0x04
0000051b: CALLDATALOAD
0000051c: PUSH2 0x149a
0000051f: JUMP
00000520: JUMPDEST
00000521: CALLVALUE
00000522: DUP1
00000523: ISZERO
00000524: PUSH2 0x052c
00000527: JUMPI
00000528: PUSH1 0x00
0000052a: DUP1
0000052b: REVERT
0000052c: JUMPDEST
0000052d: POP
0000052e: PUSH2 0x0214
00000531: PUSH1 0x01
00000533: PUSH1 0xa0
00000535: PUSH1 0x02
00000537: EXP
00000538: SUB
00000539: PUSH1 0x04
0000053b: CALLDATALOAD
0000053c: DUP2
0000053d: AND
0000053e: SWAP1
0000053f: PUSH1 0x24
00000541: CALLDATALOAD
00000542: AND
00000543: PUSH1 0x44
00000545: CALLDATALOAD
00000546: PUSH2 0x14ac
00000549: JUMP
0000054a: JUMPDEST
0000054b: CALLVALUE
0000054c: DUP1
0000054d: ISZERO
0000054e: PUSH2 0x0556
00000551: JUMPI
00000552: PUSH1 0x00
00000554: DUP1
00000555: REVERT
00000556: JUMPDEST
00000557: POP
00000558: PUSH2 0x0214
0000055b: PUSH1 0x01
0000055d: PUSH1 0xa0
0000055f: PUSH1 0x02
00000561: EXP
00000562: SUB
00000563: PUSH1 0x04
00000565: CALLDATALOAD
00000566: AND
00000567: PUSH2 0x16ef
0000056a: JUMP
0000056b: JUMPDEST
0000056c: CALLVALUE
0000056d: DUP1
0000056e: ISZERO
0000056f: PUSH2 0x0577
00000572: JUMPI
00000573: PUSH1 0x00
00000575: DUP1
00000576: REVERT
00000577: JUMPDEST
00000578: POP
00000579: PUSH2 0x0305
0000057c: PUSH2 0x1704
0000057f: JUMP
00000580: JUMPDEST
00000581: CALLVALUE
00000582: DUP1
00000583: ISZERO
00000584: PUSH2 0x058c
00000587: JUMPI
00000588: PUSH1 0x00
0000058a: DUP1
0000058b: REVERT
0000058c: JUMPDEST
0000058d: POP
0000058e: PUSH2 0x0305
00000591: PUSH1 0x01
00000593: PUSH1 0xa0
00000595: PUSH1 0x02
00000597: EXP
00000598: SUB
00000599: PUSH1 0x04
0000059b: CALLDATALOAD
0000059c: AND
0000059d: PUSH2 0x1776
000005a0: JUMP
000005a1: JUMPDEST
000005a2: CALLVALUE
000005a3: DUP1
000005a4: ISZERO
000005a5: PUSH2 0x05ad
000005a8: JUMPI
000005a9: PUSH1 0x00
000005ab: DUP1
000005ac: REVERT
000005ad: JUMPDEST
000005ae: POP
000005af: PUSH2 0x01ed
000005b2: PUSH2 0x18d8
000005b5: JUMP
000005b6: JUMPDEST
000005b7: CALLVALUE
000005b8: DUP1
000005b9: ISZERO
000005ba: PUSH2 0x05c2
000005bd: JUMPI
000005be: PUSH1 0x00
000005c0: DUP1
000005c1: REVERT
000005c2: JUMPDEST
000005c3: POP
000005c4: PUSH2 0x01ed
000005c7: PUSH2 0x19d1
000005ca: JUMP
000005cb: JUMPDEST
000005cc: CALLVALUE
000005cd: DUP1
000005ce: ISZERO
000005cf: PUSH2 0x05d7
000005d2: JUMPI
000005d3: PUSH1 0x00
000005d5: DUP1
000005d6: REVERT
000005d7: JUMPDEST
000005d8: POP
000005d9: PUSH2 0x027c
000005dc: PUSH1 0x01
000005de: PUSH1 0xa0
000005e0: PUSH1 0x02
000005e2: EXP
000005e3: SUB
000005e4: PUSH1 0x04
000005e6: CALLDATALOAD
000005e7: AND
000005e8: PUSH2 0x19d7
000005eb: JUMP
000005ec: JUMPDEST
000005ed: PUSH2 0x0214
000005f0: PUSH2 0x0615
000005f3: JUMP
000005f4: JUMPDEST
000005f5: CALLVALUE
000005f6: DUP1
000005f7: ISZERO
000005f8: PUSH2 0x0600
000005fb: JUMPI
000005fc: PUSH1 0x00
000005fe: DUP1
000005ff: REVERT
00000600: JUMPDEST
00000601: POP
00000602: PUSH2 0x0214
00000605: PUSH1 0x01
00000607: PUSH1 0xa0
00000609: PUSH1 0x02
0000060b: EXP
0000060c: SUB
0000060d: PUSH1 0x04
0000060f: CALLDATALOAD
00000610: AND
00000611: PUSH2 0x19fa
00000614: JUMP
00000615: JUMPDEST
00000616: PUSH1 0x03
00000618: SLOAD
00000619: PUSH1 0x00
0000061b: SWAP1
0000061c: PUSH1 0xff
0000061e: AND
0000061f: ISZERO
00000620: PUSH2 0x0628
00000623: JUMPI
00000624: PUSH1 0x00
00000626: DUP1
00000627: REVERT
00000628: JUMPDEST
00000629: PUSH1 0x00
0000062b: SLOAD
0000062c: PUSH1 0x01
0000062e: PUSH1 0xa0
00000630: PUSH1 0x02
00000632: EXP
00000633: SUB
00000634: AND
00000635: CALLER
00000636: EQ
00000637: PUSH2 0x063f
0000063a: JUMPI
0000063b: PUSH1 0x00
0000063d: DUP1
0000063e: REVERT
0000063f: JUMPDEST
00000640: PUSH1 0x00
00000642: SLOAD
00000643: PUSH1 0xa0
00000645: PUSH1 0x02
00000647: EXP
00000648: SWAP1
00000649: DIV
0000064a: PUSH1 0xff
0000064c: AND
0000064d: ISZERO
0000064e: PUSH2 0x0656
00000651: JUMPI
00000652: PUSH1 0x00
00000654: DUP1
00000655: REVERT
00000656: JUMPDEST
00000657: PUSH1 0x01
00000659: DUP1
0000065a: SLOAD
0000065b: PUSH1 0x00
0000065d: SWAP1
0000065e: DUP2
0000065f: MSTORE
00000660: PUSH1 0x04
00000662: PUSH1 0x20
00000664: SWAP1
00000665: DUP2
00000666: MSTORE
00000667: PUSH1 0x40
00000669: DUP1
0000066a: DUP4
0000066b: KECCAK256
0000066c: CALLVALUE
0000066d: SWAP1
0000066e: SSTORE
0000066f: DUP4
00000670: SLOAD
00000671: DUP4
00000672: MSTORE
00000673: PUSH1 0x05
00000675: SWAP1
00000676: SWAP2
00000677: MSTORE
00000678: SWAP1
00000679: KECCAK256
0000067a: TIMESTAMP
0000067b: SWAP1
0000067c: SSTORE
0000067d: DUP1
0000067e: SLOAD
0000067f: PUSH2 0x068d
00000682: SWAP2
00000683: PUSH4 0xffffffff
00000688: PUSH2 0x1b21
0000068b: AND
0000068c: JUMP
0000068d: JUMPDEST
0000068e: PUSH1 0x01
00000690: DUP2
00000691: DUP2
00000692: SSTORE
00000693: PUSH1 0x0d
00000695: SWAP2
00000696: PUSH1 0x00
00000698: SWAP2
00000699: PUSH2 0x06a8
0000069c: SWAP2
0000069d: SWAP1
0000069e: PUSH4 0xffffffff
000006a3: PUSH2 0x1b2e
000006a6: AND
000006a7: JUMP
000006a8: JUMPDEST
000006a9: DUP2
000006aa: MSTORE
000006ab: PUSH1 0x20
000006ad: DUP1
000006ae: DUP3
000006af: ADD
000006b0: SWAP3
000006b1: SWAP1
000006b2: SWAP3
000006b3: MSTORE
000006b4: PUSH1 0x40
000006b6: SWAP1
000006b7: DUP2
000006b8: ADD
000006b9: PUSH1 0x00
000006bb: SWAP1
000006bc: DUP2
000006bd: KECCAK256
000006be: SLOAD
000006bf: PUSH1 0x01
000006c1: DUP1
000006c2: SLOAD
000006c3: DUP4
000006c4: MSTORE
000006c5: PUSH1 0x0d
000006c7: SWAP1
000006c8: SWAP5
000006c9: MSTORE
000006ca: SWAP2
000006cb: SWAP1
000006cc: KECCAK256
000006cd: SSTORE
000006ce: DUP1
000006cf: SLOAD
000006d0: PUSH2 0x06de
000006d3: SWAP2
000006d4: PUSH4 0xffffffff
000006d9: PUSH2 0x1b2e
000006dc: AND
000006dd: JUMP
000006de: JUMPDEST
000006df: PUSH1 0x40
000006e1: DUP1
000006e2: MLOAD
000006e3: CALLVALUE
000006e4: DUP2
000006e5: MSTORE
000006e6: SWAP1
000006e7: MLOAD
000006e8: CALLER
000006e9: SWAP2
000006ea: PUSH32 0xdf9a51129930649214df58f542322c245372c6f2fa6fc3c9b40d927c597cd230
0000070b: SWAP2
0000070c: SWAP1
0000070d: DUP2
0000070e: SWAP1
0000070f: SUB
00000710: PUSH1 0x20
00000712: ADD
00000713: SWAP1
00000714: LOG3
00000715: POP
00000716: PUSH1 0x01
00000718: SWAP1
00000719: JUMP
0000071a: JUMPDEST
0000071b: PUSH1 0x0a
0000071d: PUSH1 0x20
0000071f: MSTORE
00000720: PUSH1 0x00
00000722: SWAP1
00000723: DUP2
00000724: MSTORE
00000725: PUSH1 0x40
00000727: SWAP1
00000728: KECCAK256
00000729: SLOAD
0000072a: DUP2
0000072b: JUMP
0000072c: JUMPDEST
0000072d: PUSH1 0x03
0000072f: SLOAD
00000730: PUSH1 0xff
00000732: AND
00000733: DUP2
00000734: JUMP
00000735: JUMPDEST
00000736: PUSH1 0x0e
00000738: SLOAD
00000739: SWAP1
0000073a: JUMP
0000073b: JUMPDEST
0000073c: PUSH1 0x03
0000073e: SLOAD
0000073f: PUSH1 0x00
00000741: SWAP1
00000742: DUP2
00000743: SWAP1
00000744: DUP2
00000745: SWAP1
00000746: PUSH1 0xff
00000748: AND
00000749: ISZERO
0000074a: ISZERO
0000074b: PUSH2 0x0753
0000074e: JUMPI
0000074f: PUSH1 0x00
00000751: DUP1
00000752: REVERT
00000753: JUMPDEST
00000754: CALLER
00000755: PUSH1 0x00
00000757: SWAP1
00000758: DUP2
00000759: MSTORE
0000075a: PUSH1 0x07
0000075c: PUSH1 0x20
0000075e: MSTORE
0000075f: PUSH1 0x40
00000761: SWAP1
00000762: KECCAK256
00000763: SLOAD
00000764: PUSH1 0xff
00000766: AND
00000767: ISZERO
00000768: PUSH2 0x0770
0000076b: JUMPI
0000076c: PUSH1 0x00
0000076e: DUP1
0000076f: REVERT
00000770: JUMPDEST
00000771: PUSH1 0x01
00000773: SLOAD
00000774: CALLER
00000775: PUSH1 0x00
00000777: SWAP1
00000778: DUP2
00000779: MSTORE
0000077a: PUSH1 0x09
0000077c: PUSH1 0x20
0000077e: MSTORE
0000077f: PUSH1 0x40
00000781: SWAP1
00000782: KECCAK256
00000783: SLOAD
00000784: LT
00000785: ISZERO
00000786: PUSH2 0x0794
00000789: JUMPI
0000078a: PUSH2 0x0792
0000078d: CALLER
0000078e: PUSH2 0x1b40
00000791: JUMP
00000792: JUMPDEST
00000793: POP
00000794: JUMPDEST
00000795: CALLER
00000796: PUSH1 0x00
00000798: SWAP1
00000799: DUP2
0000079a: MSTORE
0000079b: PUSH1 0x08
0000079d: PUSH1 0x20
0000079f: SWAP1
000007a0: DUP2
000007a1: MSTORE
000007a2: PUSH1 0x40
000007a4: DUP1
000007a5: DUP4
000007a6: KECCAK256
000007a7: PUSH1 0x01
000007a9: SLOAD
000007aa: DUP5
000007ab: MSTORE
000007ac: SWAP1
000007ad: SWAP2
000007ae: MSTORE
000007af: SWAP1
000007b0: KECCAK256
000007b1: SLOAD
000007b2: PUSH1 0x06
000007b4: SLOAD
000007b5: PUSH2 0x07c3
000007b8: SWAP2
000007b9: PUSH4 0xffffffff
000007be: PUSH2 0x1bd7
000007c1: AND
000007c2: JUMP
000007c3: JUMPDEST
000007c4: SWAP2
000007c5: POP
000007c6: PUSH2 0x07ff
000007c9: PUSH1 0x0d
000007cb: PUSH1 0x00
000007cd: PUSH2 0x07e1
000007d0: PUSH1 0x01
000007d2: DUP1
000007d3: SLOAD
000007d4: PUSH2 0x1b2e
000007d7: SWAP1
000007d8: SWAP2
000007d9: SWAP1
000007da: PUSH4 0xffffffff
000007df: AND
000007e0: JUMP
000007e1: JUMPDEST
000007e2: DUP2
000007e3: MSTORE
000007e4: PUSH1 0x20
000007e6: ADD
000007e7: SWAP1
000007e8: DUP2
000007e9: MSTORE
000007ea: PUSH1 0x20
000007ec: ADD
000007ed: PUSH1 0x00
000007ef: KECCAK256
000007f0: SLOAD
000007f1: DUP4
000007f2: PUSH2 0x1c00
000007f5: SWAP1
000007f6: SWAP2
000007f7: SWAP1
000007f8: PUSH4 0xffffffff
000007fd: AND
000007fe: JUMP
000007ff: JUMPDEST
00000800: CALLER
00000801: PUSH1 0x00
00000803: DUP2
00000804: DUP2
00000805: MSTORE
00000806: PUSH1 0x07
00000808: PUSH1 0x20
0000080a: MSTORE
0000080b: PUSH1 0x40
0000080d: DUP1
0000080e: DUP3
0000080f: KECCAK256
00000810: DUP1
00000811: SLOAD
00000812: PUSH1 0xff
00000814: NOT
00000815: AND
00000816: PUSH1 0x01
00000818: OR
00000819: SWAP1
0000081a: SSTORE
0000081b: MLOAD
0000081c: SWAP3
0000081d: SWAP4
0000081e: POP
0000081f: SWAP1
00000820: SWAP2
00000821: DUP4
00000822: ISZERO
00000823: PUSH2 0x08fc
00000826: MUL
00000827: SWAP2
00000828: DUP5
00000829: SWAP2
0000082a: SWAP1
0000082b: DUP2
0000082c: DUP2
0000082d: DUP2
0000082e: DUP6
0000082f: DUP9
00000830: DUP9
00000831: CALL
00000832: SWAP4
00000833: POP
00000834: POP
00000835: POP
00000836: POP
00000837: ISZERO
00000838: DUP1
00000839: ISZERO
0000083a: PUSH2 0x0847
0000083d: JUMPI
0000083e: RETURNDATASIZE
0000083f: PUSH1 0x00
00000841: DUP1
00000842: RETURNDATACOPY
00000843: RETURNDATASIZE
00000844: PUSH1 0x00
00000846: REVERT
00000847: JUMPDEST
00000848: POP
00000849: POP
0000084a: POP
0000084b: SWAP1
0000084c: JUMP
0000084d: JUMPDEST
0000084e: PUSH1 0x0e
00000850: SLOAD
00000851: DUP2
00000852: JUMP
00000853: JUMPDEST
00000854: PUSH1 0x00
00000856: SLOAD
00000857: PUSH1 0x01
00000859: PUSH1 0xa0
0000085b: PUSH1 0x02
0000085d: EXP
0000085e: SUB
0000085f: AND
00000860: CALLER
00000861: EQ
00000862: PUSH2 0x086a
00000865: JUMPI
00000866: PUSH1 0x00
00000868: DUP1
00000869: REVERT
0000086a: JUMPDEST
0000086b: PUSH1 0x00
0000086d: SLOAD
0000086e: PUSH1 0xa0
00000870: PUSH1 0x02
00000872: EXP
00000873: SWAP1
00000874: DIV
00000875: PUSH1 0xff
00000877: AND
00000878: ISZERO
00000879: ISZERO
0000087a: PUSH2 0x0882
0000087d: JUMPI
0000087e: PUSH1 0x00
00000880: DUP1
00000881: REVERT
00000882: JUMPDEST
00000883: PUSH1 0x00
00000885: DUP1
00000886: SLOAD
00000887: PUSH21 0xff0000000000000000000000000000000000000000
0000089d: NOT
0000089e: AND
0000089f: DUP2
000008a0: SSTORE
000008a1: PUSH1 0x40
000008a3: MLOAD
000008a4: PUSH32 0x7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b33
000008c5: SWAP2
000008c6: SWAP1
000008c7: LOG1
000008c8: JUMP
000008c9: JUMPDEST
000008ca: PUSH1 0x00
000008cc: DUP1
000008cd: SLOAD
000008ce: PUSH1 0x01
000008d0: PUSH1 0xa0
000008d2: PUSH1 0x02
000008d4: EXP
000008d5: SUB
000008d6: AND
000008d7: CALLER
000008d8: EQ
000008d9: PUSH2 0x08e1
000008dc: JUMPI
000008dd: PUSH1 0x00
000008df: DUP1
000008e0: REVERT
000008e1: JUMPDEST
000008e2: PUSH1 0x01
000008e4: SLOAD
000008e5: ISZERO
000008e6: PUSH2 0x08ee
000008e9: JUMPI
000008ea: PUSH1 0x00
000008ec: DUP1
000008ed: REVERT
000008ee: JUMPDEST
000008ef: PUSH1 0x01
000008f1: PUSH1 0xa0
000008f3: PUSH1 0x02
000008f5: EXP
000008f6: SUB
000008f7: DUP4
000008f8: AND
000008f9: PUSH1 0x00
000008fb: SWAP1
000008fc: DUP2
000008fd: MSTORE
000008fe: PUSH1 0x08
00000900: PUSH1 0x20
00000902: SWAP1
00000903: DUP2
00000904: MSTORE
00000905: PUSH1 0x40
00000907: DUP1
00000908: DUP4
00000909: KECCAK256
0000090a: DUP4
0000090b: DUP1
0000090c: MSTORE
0000090d: SWAP1
0000090e: SWAP2
0000090f: MSTORE
00000910: SWAP1
00000911: KECCAK256
00000912: SLOAD
00000913: PUSH2 0x0922
00000916: SWAP1
00000917: DUP4
00000918: PUSH4 0xffffffff
0000091d: PUSH2 0x1b21
00000920: AND
00000921: JUMP
00000922: JUMPDEST
00000923: PUSH1 0x01
00000925: PUSH1 0xa0
00000927: PUSH1 0x02
00000929: EXP
0000092a: SUB
0000092b: DUP5
0000092c: AND
0000092d: PUSH1 0x00
0000092f: SWAP1
00000930: DUP2
00000931: MSTORE
00000932: PUSH1 0x08
00000934: PUSH1 0x20
00000936: SWAP1
00000937: DUP2
00000938: MSTORE
00000939: PUSH1 0x40
0000093b: DUP1
0000093c: DUP4
0000093d: KECCAK256
0000093e: DUP4
0000093f: DUP1
00000940: MSTORE
00000941: DUP3
00000942: MSTORE
00000943: SWAP1
00000944: SWAP2
00000945: KECCAK256
00000946: SWAP2
00000947: SWAP1
00000948: SWAP2
00000949: SSTORE
0000094a: PUSH1 0x0d
0000094c: SWAP1
0000094d: MSTORE
0000094e: PUSH32 0x81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee
0000096f: SLOAD
00000970: PUSH2 0x097f
00000973: SWAP1
00000974: DUP4
00000975: PUSH4 0xffffffff
0000097a: PUSH2 0x1b21
0000097d: AND
0000097e: JUMP
0000097f: JUMPDEST
00000980: PUSH1 0x00
00000982: DUP1
00000983: MSTORE
00000984: PUSH1 0x0d
00000986: PUSH1 0x20
00000988: MSTORE
00000989: PUSH32 0x81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee
000009aa: DUP2
000009ab: SWAP1
000009ac: SSTORE
000009ad: PUSH1 0x0e
000009af: SSTORE
000009b0: POP
000009b1: PUSH1 0x01
000009b3: JUMPDEST
000009b4: SWAP3
000009b5: SWAP2
000009b6: POP
000009b7: POP
000009b8: JUMP
000009b9: JUMPDEST
000009ba: PUSH1 0x02
000009bc: SLOAD
000009bd: DUP2
000009be: JUMP
000009bf: JUMPDEST
000009c0: PUSH1 0x01
000009c2: PUSH1 0xa0
000009c4: PUSH1 0x02
000009c6: EXP
000009c7: SUB
000009c8: DUP3
000009c9: AND
000009ca: PUSH1 0x00
000009cc: SWAP1
000009cd: DUP2
000009ce: MSTORE
000009cf: PUSH1 0x0b
000009d1: PUSH1 0x20
000009d3: MSTORE
000009d4: PUSH1 0x40
000009d6: DUP2
000009d7: KECCAK256
000009d8: SLOAD
000009d9: DUP2
000009da: SWAP1
000009db: DUP2
000009dc: SWAP1
000009dd: PUSH1 0xff
000009df: AND
000009e0: ISZERO
000009e1: ISZERO
000009e2: PUSH2 0x09ee
000009e5: JUMPI
000009e6: PUSH1 0x00
000009e8: SWAP3
000009e9: POP
000009ea: PUSH2 0x0a61
000009ed: JUMP
000009ee: JUMPDEST
000009ef: POP
000009f0: PUSH1 0x00
000009f2: SWAP1
000009f3: POP
000009f4: DUP1
000009f5: JUMPDEST
000009f6: PUSH1 0x01
000009f8: PUSH1 0xa0
000009fa: PUSH1 0x02
000009fc: EXP
000009fd: SUB
000009fe: DUP6
000009ff: AND
00000a00: PUSH1 0x00
00000a02: SWAP1
00000a03: DUP2
00000a04: MSTORE
00000a05: PUSH1 0x0c
00000a07: PUSH1 0x20
00000a09: MSTORE
00000a0a: PUSH1 0x40
00000a0c: SWAP1
00000a0d: KECCAK256
00000a0e: SLOAD
00000a0f: DUP2
00000a10: LT
00000a11: ISZERO
00000a12: PUSH2 0x0a5d
00000a15: JUMPI
00000a16: PUSH1 0x01
00000a18: PUSH1 0xa0
00000a1a: PUSH1 0x02
00000a1c: EXP
00000a1d: SUB
00000a1e: DUP6
00000a1f: AND
00000a20: PUSH1 0x00
00000a22: SWAP1
00000a23: DUP2
00000a24: MSTORE
00000a25: PUSH1 0x0c
00000a27: PUSH1 0x20
00000a29: MSTORE
00000a2a: PUSH1 0x40
00000a2c: SWAP1
00000a2d: KECCAK256
00000a2e: DUP1
00000a2f: SLOAD
00000a30: DUP6
00000a31: SWAP2
00000a32: SWAP1
00000a33: DUP4
00000a34: SWAP1
00000a35: DUP2
00000a36: LT
00000a37: PUSH2 0x0a3c
00000a3a: JUMPI
00000a3b: INVALID
00000a3c: JUMPDEST
00000a3d: SWAP1
00000a3e: PUSH1 0x00
00000a40: MSTORE
00000a41: PUSH1 0x20
00000a43: PUSH1 0x00
00000a45: KECCAK256
00000a46: ADD
00000a47: SLOAD
00000a48: GT
00000a49: ISZERO
00000a4a: PUSH2 0x0a52
00000a4d: JUMPI
00000a4e: PUSH2 0x0a5d
00000a51: JUMP
00000a52: JUMPDEST
00000a53: SWAP1
00000a54: ISZERO
00000a55: SWAP1
00000a56: PUSH1 0x01
00000a58: ADD
00000a59: PUSH2 0x09f5
00000a5c: JUMP
00000a5d: JUMPDEST
00000a5e: DUP2
00000a5f: SWAP3
00000a60: POP
00000a61: JUMPDEST
00000a62: POP
00000a63: POP
00000a64: SWAP3
00000a65: SWAP2
00000a66: POP
00000a67: POP
00000a68: JUMP
00000a69: JUMPDEST
00000a6a: PUSH1 0x00
00000a6c: SLOAD
00000a6d: PUSH1 0xa0
00000a6f: PUSH1 0x02
00000a71: EXP
00000a72: SWAP1
00000a73: DIV
00000a74: PUSH1 0xff
00000a76: AND
00000a77: DUP2
00000a78: JUMP
00000a79: JUMPDEST
00000a7a: PUSH1 0x60
00000a7c: DUP1
00000a7d: PUSH1 0x00
00000a7f: PUSH1 0x01
00000a81: SLOAD
00000a82: PUSH1 0x40
00000a84: MLOAD
00000a85: SWAP1
00000a86: DUP1
00000a87: DUP3
00000a88: MSTORE
00000a89: DUP1
00000a8a: PUSH1 0x20
00000a8c: MUL
00000a8d: PUSH1 0x20
00000a8f: ADD
00000a90: DUP3
00000a91: ADD
00000a92: PUSH1 0x40
00000a94: MSTORE
00000a95: DUP1
00000a96: ISZERO
00000a97: PUSH2 0x0aaa
00000a9a: JUMPI
00000a9b: DUP2
00000a9c: PUSH1 0x20
00000a9e: ADD
00000a9f: PUSH1 0x20
00000aa1: DUP3
00000aa2: MUL
00000aa3: DUP1
00000aa4: CODESIZE
00000aa5: DUP4
00000aa6: CODECOPY
00000aa7: ADD
00000aa8: SWAP1
00000aa9: POP
00000aaa: JUMPDEST
00000aab: POP
00000aac: SWAP2
00000aad: POP
00000aae: PUSH1 0x00
00000ab0: SWAP1
00000ab1: POP
00000ab2: JUMPDEST
00000ab3: PUSH1 0x01
00000ab5: SLOAD
00000ab6: DUP2
00000ab7: LT
00000ab8: ISZERO
00000ab9: PUSH2 0x0aeb
00000abc: JUMPI
00000abd: PUSH1 0x00
00000abf: DUP2
00000ac0: DUP2
00000ac1: MSTORE
00000ac2: PUSH1 0x04
00000ac4: PUSH1 0x20
00000ac6: MSTORE
00000ac7: PUSH1 0x40
00000ac9: SWAP1
00000aca: KECCAK256
00000acb: SLOAD
00000acc: DUP3
00000acd: MLOAD
00000ace: DUP4
00000acf: SWAP1
00000ad0: DUP4
00000ad1: SWAP1
00000ad2: DUP2
00000ad3: LT
00000ad4: PUSH2 0x0ad9
00000ad7: JUMPI
00000ad8: INVALID
00000ad9: JUMPDEST
00000ada: PUSH1 0x20
00000adc: SWAP1
00000add: DUP2
00000ade: MUL
00000adf: SWAP1
00000ae0: SWAP2
00000ae1: ADD
00000ae2: ADD
00000ae3: MSTORE
00000ae4: PUSH1 0x01
00000ae6: ADD
00000ae7: PUSH2 0x0ab2
00000aea: JUMP
00000aeb: JUMPDEST
00000aec: POP
00000aed: SWAP2
00000aee: SWAP1
00000aef: POP
00000af0: JUMP
00000af1: JUMPDEST
00000af2: PUSH1 0x00
00000af4: DUP1
00000af5: SLOAD
00000af6: DUP2
00000af7: SWAP1
00000af8: DUP2
00000af9: SWAP1
00000afa: DUP2
00000afb: SWAP1
00000afc: PUSH1 0xa0
00000afe: PUSH1 0x02
00000b00: EXP
00000b01: SWAP1
00000b02: DIV
00000b03: PUSH1 0xff
00000b05: AND
00000b06: ISZERO
00000b07: PUSH2 0x0b0f
00000b0a: JUMPI
00000b0b: PUSH1 0x00
00000b0d: DUP1
00000b0e: REVERT
00000b0f: JUMPDEST
00000b10: PUSH1 0x01
00000b12: SLOAD
00000b13: CALLER
00000b14: PUSH1 0x00
00000b16: SWAP1
00000b17: DUP2
00000b18: MSTORE
00000b19: PUSH1 0x0a
00000b1b: PUSH1 0x20
00000b1d: MSTORE
00000b1e: PUSH1 0x40
00000b20: SWAP1
00000b21: KECCAK256
00000b22: SLOAD
00000b23: LT
00000b24: PUSH2 0x0b2c
00000b27: JUMPI
00000b28: PUSH1 0x00
00000b2a: DUP1
00000b2b: REVERT
00000b2c: JUMPDEST
00000b2d: PUSH1 0x01
00000b2f: SLOAD
00000b30: CALLER
00000b31: PUSH1 0x00
00000b33: SWAP1
00000b34: DUP2
00000b35: MSTORE
00000b36: PUSH1 0x09
00000b38: PUSH1 0x20
00000b3a: MSTORE
00000b3b: PUSH1 0x40
00000b3d: DUP2
00000b3e: KECCAK256
00000b3f: SLOAD
00000b40: SWAP1
00000b41: SWAP5
00000b42: POP
00000b43: LT
00000b44: ISZERO
00000b45: PUSH2 0x0b53
00000b48: JUMPI
00000b49: PUSH2 0x0b51
00000b4c: CALLER
00000b4d: PUSH2 0x1b40
00000b50: JUMP
00000b51: JUMPDEST
00000b52: POP
00000b53: JUMPDEST
00000b54: CALLER
00000b55: PUSH1 0x00
00000b57: SWAP1
00000b58: DUP2
00000b59: MSTORE
00000b5a: PUSH1 0x0a
00000b5c: PUSH1 0x20
00000b5e: MSTORE
00000b5f: PUSH1 0x40
00000b61: SWAP1
00000b62: KECCAK256
00000b63: SLOAD
00000b64: SWAP2
00000b65: POP
00000b66: JUMPDEST
00000b67: PUSH1 0x01
00000b69: SLOAD
00000b6a: DUP3
00000b6b: LT
00000b6c: ISZERO
00000b6d: PUSH2 0x0c0a
00000b70: JUMPI
00000b71: CALLER
00000b72: PUSH1 0x00
00000b74: SWAP1
00000b75: DUP2
00000b76: MSTORE
00000b77: PUSH1 0x08
00000b79: PUSH1 0x20
00000b7b: SWAP1
00000b7c: DUP2
00000b7d: MSTORE
00000b7e: PUSH1 0x40
00000b80: DUP1
00000b81: DUP4
00000b82: KECCAK256
00000b83: DUP6
00000b84: DUP5
00000b85: MSTORE
00000b86: SWAP1
00000b87: SWAP2
00000b88: MSTORE
00000b89: DUP2
00000b8a: KECCAK256
00000b8b: SLOAD
00000b8c: GT
00000b8d: DUP1
00000b8e: ISZERO
00000b8f: PUSH2 0x0b9f
00000b92: JUMPI
00000b93: POP
00000b94: PUSH2 0x0b9d
00000b97: CALLER
00000b98: DUP4
00000b99: PUSH2 0x09bf
00000b9c: JUMP
00000b9d: JUMPDEST
00000b9e: ISZERO
00000b9f: JUMPDEST
00000ba0: ISZERO
00000ba1: PUSH2 0x0bff
00000ba4: JUMPI
00000ba5: CALLER
00000ba6: PUSH1 0x00
00000ba8: SWAP1
00000ba9: DUP2
00000baa: MSTORE
00000bab: PUSH1 0x08
00000bad: PUSH1 0x20
00000baf: SWAP1
00000bb0: DUP2
00000bb1: MSTORE
00000bb2: PUSH1 0x40
00000bb4: DUP1
00000bb5: DUP4
00000bb6: KECCAK256
00000bb7: DUP6
00000bb8: DUP5
00000bb9: MSTORE
00000bba: DUP3
00000bbb: MSTORE
00000bbc: DUP1
00000bbd: DUP4
00000bbe: KECCAK256
00000bbf: SLOAD
00000bc0: PUSH1 0x04
00000bc2: SWAP1
00000bc3: SWAP3
00000bc4: MSTORE
00000bc5: SWAP1
00000bc6: SWAP2
00000bc7: KECCAK256
00000bc8: SLOAD
00000bc9: PUSH2 0x0bd7
00000bcc: SWAP2
00000bcd: PUSH4 0xffffffff
00000bd2: PUSH2 0x1bd7
00000bd5: AND
00000bd6: JUMP
00000bd7: JUMPDEST
00000bd8: PUSH1 0x00
00000bda: DUP4
00000bdb: DUP2
00000bdc: MSTORE
00000bdd: PUSH1 0x0d
00000bdf: PUSH1 0x20
00000be1: MSTORE
00000be2: PUSH1 0x40
00000be4: SWAP1
00000be5: KECCAK256
00000be6: SLOAD
00000be7: SWAP1
00000be8: SWAP2
00000be9: POP
00000bea: PUSH2 0x0bfa
00000bed: SWAP1
00000bee: DUP3
00000bef: SWAP1
00000bf0: PUSH4 0xffffffff
00000bf5: PUSH2 0x1c00
00000bf8: AND
00000bf9: JUMP
00000bfa: JUMPDEST
00000bfb: DUP4
00000bfc: ADD
00000bfd: SWAP3
00000bfe: POP
00000bff: JUMPDEST
00000c00: PUSH1 0x01
00000c02: SWAP1
00000c03: SWAP2
00000c04: ADD
00000c05: SWAP1
00000c06: PUSH2 0x0b66
00000c09: JUMP
00000c0a: JUMPDEST
00000c0b: PUSH1 0x01
00000c0d: SLOAD
00000c0e: CALLER
00000c0f: PUSH1 0x00
00000c11: SWAP1
00000c12: DUP2
00000c13: MSTORE
00000c14: PUSH1 0x0a
00000c16: PUSH1 0x20
00000c18: MSTORE
00000c19: PUSH1 0x40
00000c1b: DUP2
00000c1c: KECCAK256
00000c1d: SWAP2
00000c1e: SWAP1
00000c1f: SWAP2
00000c20: SSTORE
00000c21: DUP4
00000c22: GT
00000c23: ISZERO
00000c24: PUSH2 0x0c8d
00000c27: JUMPI
00000c28: PUSH1 0x40
00000c2a: MLOAD
00000c2b: CALLER
00000c2c: SWAP1
00000c2d: DUP5
00000c2e: ISZERO
00000c2f: PUSH2 0x08fc
00000c32: MUL
00000c33: SWAP1
00000c34: DUP6
00000c35: SWAP1
00000c36: PUSH1 0x00
00000c38: DUP2
00000c39: DUP2
00000c3a: DUP2
00000c3b: DUP6
00000c3c: DUP9
00000c3d: DUP9
00000c3e: CALL
00000c3f: SWAP4
00000c40: POP
00000c41: POP
00000c42: POP
00000c43: POP
00000c44: ISZERO
00000c45: DUP1
00000c46: ISZERO
00000c47: PUSH2 0x0c54
00000c4a: JUMPI
00000c4b: RETURNDATASIZE
00000c4c: PUSH1 0x00
00000c4e: DUP1
00000c4f: RETURNDATACOPY
00000c50: RETURNDATASIZE
00000c51: PUSH1 0x00
00000c53: REVERT
00000c54: JUMPDEST
00000c55: POP
00000c56: PUSH1 0x40
00000c58: DUP1
00000c59: MLOAD
00000c5a: DUP5
00000c5b: DUP2
00000c5c: MSTORE
00000c5d: SWAP1
00000c5e: MLOAD
00000c5f: DUP4
00000c60: SWAP2
00000c61: CALLER
00000c62: SWAP2
00000c63: PUSH32 0x987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a
00000c84: SWAP2
00000c85: DUP2
00000c86: SWAP1
00000c87: SUB
00000c88: PUSH1 0x20
00000c8a: ADD
00000c8b: SWAP1
00000c8c: LOG3
00000c8d: JUMPDEST
00000c8e: POP
00000c8f: SWAP1
00000c90: SWAP3
00000c91: SWAP2
00000c92: POP
00000c93: POP
00000c94: JUMP
00000c95: JUMPDEST
00000c96: PUSH1 0x03
00000c98: SLOAD
00000c99: PUSH1 0x00
00000c9b: SWAP1
00000c9c: PUSH1 0xff
00000c9e: AND
00000c9f: ISZERO
00000ca0: PUSH2 0x0cab
00000ca3: JUMPI
00000ca4: POP
00000ca5: PUSH1 0x00
00000ca7: PUSH2 0x0cd8
00000caa: JUMP
00000cab: JUMPDEST
00000cac: POP
00000cad: PUSH1 0x01
00000caf: PUSH1 0xa0
00000cb1: PUSH1 0x02
00000cb3: EXP
00000cb4: SUB
00000cb5: DUP2
00000cb6: AND
00000cb7: PUSH1 0x00
00000cb9: SWAP1
00000cba: DUP2
00000cbb: MSTORE
00000cbc: PUSH1 0x08
00000cbe: PUSH1 0x20
00000cc0: SWAP1
00000cc1: DUP2
00000cc2: MSTORE
00000cc3: PUSH1 0x40
00000cc5: DUP1
00000cc6: DUP4
00000cc7: KECCAK256
00000cc8: PUSH1 0x09
00000cca: DUP4
00000ccb: MSTORE
00000ccc: DUP2
00000ccd: DUP5
00000cce: KECCAK256
00000ccf: SLOAD
00000cd0: DUP5
00000cd1: MSTORE
00000cd2: SWAP1
00000cd3: SWAP2
00000cd4: MSTORE
00000cd5: SWAP1
00000cd6: KECCAK256
00000cd7: SLOAD
00000cd8: JUMPDEST
00000cd9: SWAP2
00000cda: SWAP1
00000cdb: POP
00000cdc: JUMP
00000cdd: JUMPDEST
00000cde: PUSH1 0x00
00000ce0: SLOAD
00000ce1: PUSH1 0x01
00000ce3: PUSH1 0xa0
00000ce5: PUSH1 0x02
00000ce7: EXP
00000ce8: SUB
00000ce9: AND
00000cea: CALLER
00000ceb: EQ
00000cec: PUSH2 0x0cf4
00000cef: JUMPI
00000cf0: PUSH1 0x00
00000cf2: DUP1
00000cf3: REVERT
00000cf4: JUMPDEST
00000cf5: PUSH1 0x00
00000cf7: DUP1
00000cf8: SLOAD
00000cf9: PUSH1 0x40
00000cfb: MLOAD
00000cfc: PUSH1 0x01
00000cfe: PUSH1 0xa0
00000d00: PUSH1 0x02
00000d02: EXP
00000d03: SUB
00000d04: SWAP1
00000d05: SWAP2
00000d06: AND
00000d07: SWAP2
00000d08: PUSH32 0xf8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c64820
00000d29: SWAP2
00000d2a: LOG2
00000d2b: PUSH1 0x00
00000d2d: DUP1
00000d2e: SLOAD
00000d2f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000d44: NOT
00000d45: AND
00000d46: SWAP1
00000d47: SSTORE
00000d48: JUMP
00000d49: JUMPDEST
00000d4a: PUSH1 0x04
00000d4c: PUSH1 0x20
00000d4e: MSTORE
00000d4f: PUSH1 0x00
00000d51: SWAP1
00000d52: DUP2
00000d53: MSTORE
00000d54: PUSH1 0x40
00000d56: SWAP1
00000d57: KECCAK256
00000d58: SLOAD
00000d59: DUP2
00000d5a: JUMP
00000d5b: JUMPDEST
00000d5c: PUSH1 0x00
00000d5e: SLOAD
00000d5f: PUSH1 0x01
00000d61: PUSH1 0xa0
00000d63: PUSH1 0x02
00000d65: EXP
00000d66: SUB
00000d67: AND
00000d68: CALLER
00000d69: EQ
00000d6a: PUSH2 0x0d72
00000d6d: JUMPI
00000d6e: PUSH1 0x00
00000d70: DUP1
00000d71: REVERT
00000d72: JUMPDEST
00000d73: PUSH1 0x00
00000d75: SLOAD
00000d76: PUSH1 0xa0
00000d78: PUSH1 0x02
00000d7a: EXP
00000d7b: SWAP1
00000d7c: DIV
00000d7d: PUSH1 0xff
00000d7f: AND
00000d80: ISZERO
00000d81: PUSH2 0x0d89
00000d84: JUMPI
00000d85: PUSH1 0x00
00000d87: DUP1
00000d88: REVERT
00000d89: JUMPDEST
00000d8a: PUSH1 0x00
00000d8c: DUP1
00000d8d: SLOAD
00000d8e: PUSH21 0xff0000000000000000000000000000000000000000
00000da4: NOT
00000da5: AND
00000da6: PUSH1 0xa0
00000da8: PUSH1 0x02
00000daa: EXP
00000dab: OR
00000dac: DUP2
00000dad: SSTORE
00000dae: PUSH1 0x40
00000db0: MLOAD
00000db1: PUSH32 0x6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff625
00000dd2: SWAP2
00000dd3: SWAP1
00000dd4: LOG1
00000dd5: JUMP
00000dd6: JUMPDEST
00000dd7: PUSH1 0x00
00000dd9: DUP1
00000dda: SLOAD
00000ddb: PUSH1 0x01
00000ddd: PUSH1 0xa0
00000ddf: PUSH1 0x02
00000de1: EXP
00000de2: SUB
00000de3: AND
00000de4: CALLER
00000de5: EQ
00000de6: PUSH2 0x0dee
00000de9: JUMPI
00000dea: PUSH1 0x00
00000dec: DUP1
00000ded: REVERT
00000dee: JUMPDEST
00000def: PUSH2 0x0dfa
00000df2: DUP3
00000df3: PUSH1 0x01
00000df5: SLOAD
00000df6: PUSH2 0x09bf
00000df9: JUMP
00000dfa: JUMPDEST
00000dfb: ISZERO
00000dfc: PUSH2 0x0e04
00000dff: JUMPI
00000e00: PUSH1 0x00
00000e02: DUP1
00000e03: REVERT
00000e04: JUMPDEST
00000e05: PUSH1 0x01
00000e07: SLOAD
00000e08: PUSH1 0x01
00000e0a: PUSH1 0xa0
00000e0c: PUSH1 0x02
00000e0e: EXP
00000e0f: SUB
00000e10: DUP4
00000e11: AND
00000e12: PUSH1 0x00
00000e14: SWAP1
00000e15: DUP2
00000e16: MSTORE
00000e17: PUSH1 0x09
00000e19: PUSH1 0x20
00000e1b: MSTORE
00000e1c: PUSH1 0x40
00000e1e: SWAP1
00000e1f: KECCAK256
00000e20: SLOAD
00000e21: LT
00000e22: ISZERO
00000e23: PUSH2 0x0e31
00000e26: JUMPI
00000e27: PUSH2 0x0e2f
00000e2a: DUP3
00000e2b: PUSH2 0x1b40
00000e2e: JUMP
00000e2f: JUMPDEST
00000e30: POP
00000e31: JUMPDEST
00000e32: PUSH2 0x0e5b
00000e35: PUSH2 0x0e3d
00000e38: DUP4
00000e39: PUSH2 0x0c95
00000e3c: JUMP
00000e3d: JUMPDEST
00000e3e: PUSH1 0x01
00000e40: SLOAD
00000e41: PUSH1 0x00
00000e43: SWAP1
00000e44: DUP2
00000e45: MSTORE
00000e46: PUSH1 0x0d
00000e48: PUSH1 0x20
00000e4a: MSTORE
00000e4b: PUSH1 0x40
00000e4d: SWAP1
00000e4e: KECCAK256
00000e4f: SLOAD
00000e50: SWAP1
00000e51: PUSH4 0xffffffff
00000e56: PUSH2 0x1b2e
00000e59: AND
00000e5a: JUMP
00000e5b: JUMPDEST
00000e5c: PUSH1 0x01
00000e5e: DUP1
00000e5f: SLOAD
00000e60: PUSH1 0x00
00000e62: SWAP1
00000e63: DUP2
00000e64: MSTORE
00000e65: PUSH1 0x0d
00000e67: PUSH1 0x20
00000e69: SWAP1
00000e6a: DUP2
00000e6b: MSTORE
00000e6c: PUSH1 0x40
00000e6e: DUP1
00000e6f: DUP4
00000e70: KECCAK256
00000e71: SWAP5
00000e72: SWAP1
00000e73: SWAP5
00000e74: SSTORE
00000e75: PUSH1 0x01
00000e77: PUSH1 0xa0
00000e79: PUSH1 0x02
00000e7b: EXP
00000e7c: SUB
00000e7d: DUP7
00000e7e: AND
00000e7f: DUP1
00000e80: DUP4
00000e81: MSTORE
00000e82: PUSH1 0x0b
00000e84: DUP3
00000e85: MSTORE
00000e86: DUP5
00000e87: DUP4
00000e88: KECCAK256
00000e89: DUP1
00000e8a: SLOAD
00000e8b: PUSH1 0xff
00000e8d: NOT
00000e8e: AND
00000e8f: DUP6
00000e90: OR
00000e91: SWAP1
00000e92: SSTORE
00000e93: PUSH1 0x0c
00000e95: DUP3
00000e96: MSTORE
00000e97: DUP5
00000e98: DUP4
00000e99: KECCAK256
00000e9a: DUP5
00000e9b: SLOAD
00000e9c: DUP2
00000e9d: SLOAD
00000e9e: DUP1
00000e9f: DUP8
00000ea0: ADD
00000ea1: DUP4
00000ea2: SSTORE
00000ea3: SWAP2
00000ea4: DUP6
00000ea5: MSTORE
00000ea6: SWAP3
00000ea7: DUP5
00000ea8: KECCAK256
00000ea9: ADD
00000eaa: SWAP2
00000eab: SWAP1
00000eac: SWAP2
00000ead: SSTORE
00000eae: SWAP2
00000eaf: SLOAD
00000eb0: SWAP3
00000eb1: MLOAD
00000eb2: PUSH32 0x9f1ec8c880f76798e7b793325d625e9b60e4082a553c98f42b6cda368dd60008
00000ed3: SWAP2
00000ed4: SWAP1
00000ed5: LOG3
00000ed6: POP
00000ed7: PUSH1 0x01
00000ed9: SWAP2
00000eda: SWAP1
00000edb: POP
00000edc: JUMP
00000edd: JUMPDEST
00000ede: PUSH1 0x00
00000ee0: SLOAD
00000ee1: PUSH1 0x01
00000ee3: PUSH1 0xa0
00000ee5: PUSH1 0x02
00000ee7: EXP
00000ee8: SUB
00000ee9: AND
00000eea: DUP2
00000eeb: JUMP
00000eec: JUMPDEST
00000eed: PUSH1 0x06
00000eef: SLOAD
00000ef0: DUP2
00000ef1: JUMP
00000ef2: JUMPDEST
00000ef3: PUSH1 0x08
00000ef5: PUSH1 0x20
00000ef7: SWAP1
00000ef8: DUP2
00000ef9: MSTORE
00000efa: PUSH1 0x00
00000efc: SWAP3
00000efd: DUP4
00000efe: MSTORE
00000eff: PUSH1 0x40
00000f01: DUP1
00000f02: DUP5
00000f03: KECCAK256
00000f04: SWAP1
00000f05: SWAP2
00000f06: MSTORE
00000f07: SWAP1
00000f08: DUP3
00000f09: MSTORE
00000f0a: SWAP1
00000f0b: KECCAK256
00000f0c: SLOAD
00000f0d: DUP2
00000f0e: JUMP
00000f0f: JUMPDEST
00000f10: PUSH1 0x00
00000f12: DUP1
00000f13: SLOAD
00000f14: DUP2
00000f15: SWAP1
00000f16: DUP2
00000f17: SWAP1
00000f18: DUP2
00000f19: SWAP1
00000f1a: PUSH1 0x01
00000f1c: PUSH1 0xa0
00000f1e: PUSH1 0x02
00000f20: EXP
00000f21: SUB
00000f22: AND
00000f23: CALLER
00000f24: EQ
00000f25: PUSH2 0x0f2d
00000f28: JUMPI
00000f29: PUSH1 0x00
00000f2b: DUP1
00000f2c: REVERT
00000f2d: JUMPDEST
00000f2e: PUSH1 0x01
00000f30: SLOAD
00000f31: PUSH1 0x01
00000f33: PUSH1 0xa0
00000f35: PUSH1 0x02
00000f37: EXP
00000f38: SUB
00000f39: DUP7
00000f3a: AND
00000f3b: PUSH1 0x00
00000f3d: SWAP1
00000f3e: DUP2
00000f3f: MSTORE
00000f40: PUSH1 0x0a
00000f42: PUSH1 0x20
00000f44: MSTORE
00000f45: PUSH1 0x40
00000f47: SWAP1
00000f48: KECCAK256
00000f49: SLOAD
00000f4a: LT
00000f4b: PUSH2 0x0f53
00000f4e: JUMPI
00000f4f: PUSH1 0x00
00000f51: DUP1
00000f52: REVERT
00000f53: JUMPDEST
00000f54: PUSH1 0x01
00000f56: SLOAD
00000f57: PUSH1 0x01
00000f59: PUSH1 0xa0
00000f5b: PUSH1 0x02
00000f5d: EXP
00000f5e: SUB
00000f5f: DUP7
00000f60: AND
00000f61: PUSH1 0x00
00000f63: SWAP1
00000f64: DUP2
00000f65: MSTORE
00000f66: PUSH1 0x09
00000f68: PUSH1 0x20
00000f6a: MSTORE
00000f6b: PUSH1 0x40
00000f6d: DUP2
00000f6e: KECCAK256
00000f6f: SLOAD
00000f70: SWAP1
00000f71: SWAP5
00000f72: POP
00000f73: LT
00000f74: ISZERO
00000f75: PUSH2 0x0f83
00000f78: JUMPI
00000f79: PUSH2 0x0f81
00000f7c: DUP6
00000f7d: PUSH2 0x1b40
00000f80: JUMP
00000f81: JUMPDEST
00000f82: POP
00000f83: JUMPDEST
00000f84: PUSH1 0x01
00000f86: PUSH1 0xa0
00000f88: PUSH1 0x02
00000f8a: EXP
00000f8b: SUB
00000f8c: DUP6
00000f8d: AND
00000f8e: PUSH1 0x00
00000f90: SWAP1
00000f91: DUP2
00000f92: MSTORE
00000f93: PUSH1 0x0a
00000f95: PUSH1 0x20
00000f97: MSTORE
00000f98: PUSH1 0x40
00000f9a: SWAP1
00000f9b: KECCAK256
00000f9c: SLOAD
00000f9d: SWAP2
00000f9e: POP
00000f9f: JUMPDEST
00000fa0: PUSH1 0x01
00000fa2: SLOAD
00000fa3: DUP3
00000fa4: LT
00000fa5: ISZERO
00000fa6: PUSH2 0x1055
00000fa9: JUMPI
00000faa: PUSH1 0x01
00000fac: PUSH1 0xa0
00000fae: PUSH1 0x02
00000fb0: EXP
00000fb1: SUB
00000fb2: DUP6
00000fb3: AND
00000fb4: PUSH1 0x00
00000fb6: SWAP1
00000fb7: DUP2
00000fb8: MSTORE
00000fb9: PUSH1 0x08
00000fbb: PUSH1 0x20
00000fbd: SWAP1
00000fbe: DUP2
00000fbf: MSTORE
00000fc0: PUSH1 0x40
00000fc2: DUP1
00000fc3: DUP4
00000fc4: KECCAK256
00000fc5: DUP6
00000fc6: DUP5
00000fc7: MSTORE
00000fc8: SWAP1
00000fc9: SWAP2
00000fca: MSTORE
00000fcb: DUP2
00000fcc: KECCAK256
00000fcd: SLOAD
00000fce: GT
00000fcf: DUP1
00000fd0: ISZERO
00000fd1: PUSH2 0x0fe1
00000fd4: JUMPI
00000fd5: POP
00000fd6: PUSH2 0x0fdf
00000fd9: DUP6
00000fda: DUP4
00000fdb: PUSH2 0x09bf
00000fde: JUMP
00000fdf: JUMPDEST
00000fe0: ISZERO
00000fe1: JUMPDEST
00000fe2: ISZERO
00000fe3: PUSH2 0x104a
00000fe6: JUMPI
00000fe7: PUSH1 0x01
00000fe9: PUSH1 0xa0
00000feb: PUSH1 0x02
00000fed: EXP
00000fee: SUB
00000fef: DUP6
00000ff0: AND
00000ff1: PUSH1 0x00
00000ff3: SWAP1
00000ff4: DUP2
00000ff5: MSTORE
00000ff6: PUSH1 0x08
00000ff8: PUSH1 0x20
00000ffa: SWAP1
00000ffb: DUP2
00000ffc: MSTORE
00000ffd: PUSH1 0x40
00000fff: DUP1
00001000: DUP4
00001001: KECCAK256
00001002: DUP6
00001003: DUP5
00001004: MSTORE
00001005: DUP3
00001006: MSTORE
00001007: DUP1
00001008: DUP4
00001009: KECCAK256
0000100a: SLOAD
0000100b: PUSH1 0x04
0000100d: SWAP1
0000100e: SWAP3
0000100f: MSTORE
00001010: SWAP1
00001011: SWAP2
00001012: KECCAK256
00001013: SLOAD
00001014: PUSH2 0x1022
00001017: SWAP2
00001018: PUSH4 0xffffffff
0000101d: PUSH2 0x1bd7
00001020: AND
00001021: JUMP
00001022: JUMPDEST
00001023: PUSH1 0x00
00001025: DUP4
00001026: DUP2
00001027: MSTORE
00001028: PUSH1 0x0d
0000102a: PUSH1 0x20
0000102c: MSTORE
0000102d: PUSH1 0x40
0000102f: SWAP1
00001030: KECCAK256
00001031: SLOAD
00001032: SWAP1
00001033: SWAP2
00001034: POP
00001035: PUSH2 0x1045
00001038: SWAP1
00001039: DUP3
0000103a: SWAP1
0000103b: PUSH4 0xffffffff
00001040: PUSH2 0x1c00
00001043: AND
00001044: JUMP
00001045: JUMPDEST
00001046: DUP4
00001047: ADD
00001048: SWAP3
00001049: POP
0000104a: JUMPDEST
0000104b: PUSH1 0x01
0000104d: SWAP1
0000104e: SWAP2
0000104f: ADD
00001050: SWAP1
00001051: PUSH2 0x0f9f
00001054: JUMP
00001055: JUMPDEST
00001056: PUSH1 0x01
00001058: SLOAD
00001059: PUSH1 0x01
0000105b: PUSH1 0xa0
0000105d: PUSH1 0x02
0000105f: EXP
00001060: SUB
00001061: DUP7
00001062: AND
00001063: PUSH1 0x00
00001065: SWAP1
00001066: DUP2
00001067: MSTORE
00001068: PUSH1 0x0a
0000106a: PUSH1 0x20
0000106c: MSTORE
0000106d: PUSH1 0x40
0000106f: DUP2
00001070: KECCAK256
00001071: SWAP2
00001072: SWAP1
00001073: SWAP2
00001074: SSTORE
00001075: DUP4
00001076: GT
00001077: ISZERO
00001078: PUSH2 0x10f3
0000107b: JUMPI
0000107c: PUSH1 0x40
0000107e: MLOAD
0000107f: PUSH1 0x01
00001081: PUSH1 0xa0
00001083: PUSH1 0x02
00001085: EXP
00001086: SUB
00001087: DUP7
00001088: AND
00001089: SWAP1
0000108a: DUP5
0000108b: ISZERO
0000108c: PUSH2 0x08fc
0000108f: MUL
00001090: SWAP1
00001091: DUP6
00001092: SWAP1
00001093: PUSH1 0x00
00001095: DUP2
00001096: DUP2
00001097: DUP2
00001098: DUP6
00001099: DUP9
0000109a: DUP9
0000109b: CALL
0000109c: SWAP4
0000109d: POP
0000109e: POP
0000109f: POP
000010a0: POP
000010a1: ISZERO
000010a2: DUP1
000010a3: ISZERO
000010a4: PUSH2 0x10b1
000010a7: JUMPI
000010a8: RETURNDATASIZE
000010a9: PUSH1 0x00
000010ab: DUP1
000010ac: RETURNDATACOPY
000010ad: RETURNDATASIZE
000010ae: PUSH1 0x00
000010b0: REVERT
000010b1: JUMPDEST
000010b2: POP
000010b3: PUSH1 0x40
000010b5: DUP1
000010b6: MLOAD
000010b7: DUP5
000010b8: DUP2
000010b9: MSTORE
000010ba: SWAP1
000010bb: MLOAD
000010bc: DUP4
000010bd: SWAP2
000010be: PUSH1 0x01
000010c0: PUSH1 0xa0
000010c2: PUSH1 0x02
000010c4: EXP
000010c5: SUB
000010c6: DUP9
000010c7: AND
000010c8: SWAP2
000010c9: PUSH32 0x987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a
000010ea: SWAP2
000010eb: DUP2
000010ec: SWAP1
000010ed: SUB
000010ee: PUSH1 0x20
000010f0: ADD
000010f1: SWAP1
000010f2: LOG3
000010f3: JUMPDEST
000010f4: DUP3
000010f5: SWAP4
000010f6: POP
000010f7: JUMPDEST
000010f8: POP
000010f9: POP
000010fa: POP
000010fb: SWAP2
000010fc: SWAP1
000010fd: POP
000010fe: JUMP
000010ff: JUMPDEST
00001100: PUSH1 0x09
00001102: PUSH1 0x20
00001104: MSTORE
00001105: PUSH1 0x00
00001107: SWAP1
00001108: DUP2
00001109: MSTORE
0000110a: PUSH1 0x40
0000110c: SWAP1
0000110d: KECCAK256
0000110e: SLOAD
0000110f: DUP2
00001110: JUMP
00001111: JUMPDEST
00001112: PUSH1 0x01
00001114: PUSH1 0xa0
00001116: PUSH1 0x02
00001118: EXP
00001119: SUB
0000111a: DUP2
0000111b: AND
0000111c: PUSH1 0x00
0000111e: SWAP1
0000111f: DUP2
00001120: MSTORE
00001121: PUSH1 0x0a
00001123: PUSH1 0x20
00001125: MSTORE
00001126: PUSH1 0x40
00001128: DUP2
00001129: KECCAK256
0000112a: SLOAD
0000112b: DUP2
0000112c: SWAP1
0000112d: DUP2
0000112e: SWAP1
0000112f: DUP2
00001130: DUP1
00001131: JUMPDEST
00001132: PUSH1 0x01
00001134: SLOAD
00001135: DUP4
00001136: LT
00001137: ISZERO
00001138: PUSH2 0x1224
0000113b: JUMPI
0000113c: PUSH1 0x01
0000113e: PUSH1 0xa0
00001140: PUSH1 0x02
00001142: EXP
00001143: SUB
00001144: DUP8
00001145: AND
00001146: PUSH1 0x00
00001148: SWAP1
00001149: DUP2
0000114a: MSTORE
0000114b: PUSH1 0x09
0000114d: PUSH1 0x20
0000114f: MSTORE
00001150: PUSH1 0x40
00001152: SWAP1
00001153: KECCAK256
00001154: SLOAD
00001155: DUP4
00001156: GT
00001157: ISZERO
00001158: PUSH2 0x118d
0000115b: JUMPI
0000115c: PUSH1 0x01
0000115e: PUSH1 0xa0
00001160: PUSH1 0x02
00001162: EXP
00001163: SUB
00001164: DUP8
00001165: AND
00001166: PUSH1 0x00
00001168: SWAP1
00001169: DUP2
0000116a: MSTORE
0000116b: PUSH1 0x08
0000116d: PUSH1 0x20
0000116f: SWAP1
00001170: DUP2
00001171: MSTORE
00001172: PUSH1 0x40
00001174: DUP1
00001175: DUP4
00001176: KECCAK256
00001177: PUSH1 0x09
00001179: DUP4
0000117a: MSTORE
0000117b: DUP2
0000117c: DUP5
0000117d: KECCAK256
0000117e: SLOAD
0000117f: DUP5
00001180: MSTORE
00001181: SWAP1
00001182: SWAP2
00001183: MSTORE
00001184: SWAP1
00001185: KECCAK256
00001186: SLOAD
00001187: SWAP4
00001188: POP
00001189: PUSH2 0x11b4
0000118c: JUMP
0000118d: JUMPDEST
0000118e: PUSH1 0x01
00001190: PUSH1 0xa0
00001192: PUSH1 0x02
00001194: EXP
00001195: SUB
00001196: DUP8
00001197: AND
00001198: PUSH1 0x00
0000119a: SWAP1
0000119b: DUP2
0000119c: MSTORE
0000119d: PUSH1 0x08
0000119f: PUSH1 0x20
000011a1: SWAP1
000011a2: DUP2
000011a3: MSTORE
000011a4: PUSH1 0x40
000011a6: DUP1
000011a7: DUP4
000011a8: KECCAK256
000011a9: DUP7
000011aa: DUP5
000011ab: MSTORE
000011ac: SWAP1
000011ad: SWAP2
000011ae: MSTORE
000011af: SWAP1
000011b0: KECCAK256
000011b1: SLOAD
000011b2: SWAP4
000011b3: POP
000011b4: JUMPDEST
000011b5: PUSH1 0x00
000011b7: DUP5
000011b8: GT
000011b9: DUP1
000011ba: ISZERO
000011bb: PUSH2 0x11cb
000011be: JUMPI
000011bf: POP
000011c0: PUSH2 0x11c9
000011c3: DUP8
000011c4: DUP5
000011c5: PUSH2 0x09bf
000011c8: JUMP
000011c9: JUMPDEST
000011ca: ISZERO
000011cb: JUMPDEST
000011cc: ISZERO
000011cd: PUSH2 0x1219
000011d0: JUMPI
000011d1: PUSH1 0x00
000011d3: DUP4
000011d4: DUP2
000011d5: MSTORE
000011d6: PUSH1 0x04
000011d8: PUSH1 0x20
000011da: MSTORE
000011db: PUSH1 0x40
000011dd: SWAP1
000011de: KECCAK256
000011df: SLOAD
000011e0: PUSH2 0x11ef
000011e3: SWAP1
000011e4: DUP6
000011e5: PUSH4 0xffffffff
000011ea: PUSH2 0x1bd7
000011ed: AND
000011ee: JUMP
000011ef: JUMPDEST
000011f0: PUSH1 0x00
000011f2: DUP5
000011f3: DUP2
000011f4: MSTORE
000011f5: PUSH1 0x0d
000011f7: PUSH1 0x20
000011f9: MSTORE
000011fa: PUSH1 0x40
000011fc: SWAP1
000011fd: KECCAK256
000011fe: SLOAD
000011ff: SWAP1
00001200: SWAP3
00001201: POP
00001202: PUSH2 0x1212
00001205: SWAP1
00001206: DUP4
00001207: SWAP1
00001208: PUSH4 0xffffffff
0000120d: PUSH2 0x1c00
00001210: AND
00001211: JUMP
00001212: JUMPDEST
00001213: SWAP5
00001214: DUP6
00001215: ADD
00001216: SWAP5
00001217: SWAP1
00001218: POP
00001219: JUMPDEST
0000121a: PUSH1 0x01
0000121c: SWAP1
0000121d: SWAP3
0000121e: ADD
0000121f: SWAP2
00001220: PUSH2 0x1131
00001223: JUMP
00001224: JUMPDEST
00001225: POP
00001226: SWAP3
00001227: SWAP6
00001228: SWAP5
00001229: POP
0000122a: POP
0000122b: POP
0000122c: POP
0000122d: POP
0000122e: JUMP
0000122f: JUMPDEST
00001230: PUSH1 0x00
00001232: DUP1
00001233: SLOAD
00001234: PUSH1 0x01
00001236: PUSH1 0xa0
00001238: PUSH1 0x02
0000123a: EXP
0000123b: SUB
0000123c: AND
0000123d: CALLER
0000123e: EQ
0000123f: PUSH2 0x1247
00001242: JUMPI
00001243: PUSH1 0x00
00001245: DUP1
00001246: REVERT
00001247: JUMPDEST
00001248: PUSH1 0x03
0000124a: SLOAD
0000124b: PUSH1 0xff
0000124d: AND
0000124e: ISZERO
0000124f: PUSH2 0x1257
00001252: JUMPI
00001253: PUSH1 0x00
00001255: DUP1
00001256: REVERT
00001257: JUMPDEST
00001258: PUSH1 0x02
0000125a: SLOAD
0000125b: TIMESTAMP
0000125c: GT
0000125d: PUSH2 0x1265
00001260: JUMPI
00001261: PUSH1 0x00
00001263: DUP1
00001264: REVERT
00001265: JUMPDEST
00001266: CALLVALUE
00001267: PUSH1 0x06
00001269: DUP2
0000126a: SWAP1
0000126b: SSTORE
0000126c: PUSH1 0x01
0000126e: DUP1
0000126f: SLOAD
00001270: DUP1
00001271: DUP3
00001272: ADD
00001273: SWAP1
00001274: SWAP2
00001275: SSTORE
00001276: PUSH1 0x40
00001278: DUP1
00001279: MLOAD
0000127a: SWAP3
0000127b: DUP4
0000127c: MSTORE
0000127d: MLOAD
0000127e: SWAP1
0000127f: SWAP2
00001280: CALLER
00001281: SWAP2
00001282: PUSH32 0xdf9a51129930649214df58f542322c245372c6f2fa6fc3c9b40d927c597cd230
000012a3: SWAP2
000012a4: DUP2
000012a5: SWAP1
000012a6: SUB
000012a7: PUSH1 0x20
000012a9: ADD
000012aa: SWAP1
000012ab: LOG3
000012ac: PUSH1 0x03
000012ae: DUP1
000012af: SLOAD
000012b0: PUSH1 0xff
000012b2: NOT
000012b3: AND
000012b4: PUSH1 0x01
000012b6: OR
000012b7: SWAP1
000012b8: SSTORE
000012b9: SWAP1
000012ba: JUMP
000012bb: JUMPDEST
000012bc: PUSH1 0x00
000012be: DUP1
000012bf: SLOAD
000012c0: PUSH1 0x01
000012c2: PUSH1 0xa0
000012c4: PUSH1 0x02
000012c6: EXP
000012c7: SUB
000012c8: AND
000012c9: CALLER
000012ca: EQ
000012cb: PUSH2 0x12d3
000012ce: JUMPI
000012cf: PUSH1 0x00
000012d1: DUP1
000012d2: REVERT
000012d3: JUMPDEST
000012d4: PUSH2 0x12df
000012d7: DUP3
000012d8: PUSH1 0x01
000012da: SLOAD
000012db: PUSH2 0x09bf
000012de: JUMP
000012df: JUMPDEST
000012e0: ISZERO
000012e1: ISZERO
000012e2: PUSH2 0x12ea
000012e5: JUMPI
000012e6: PUSH1 0x00
000012e8: DUP1
000012e9: REVERT
000012ea: JUMPDEST
000012eb: PUSH1 0x01
000012ed: SLOAD
000012ee: PUSH1 0x01
000012f0: PUSH1 0xa0
000012f2: PUSH1 0x02
000012f4: EXP
000012f5: SUB
000012f6: DUP4
000012f7: AND
000012f8: PUSH1 0x00
000012fa: SWAP1
000012fb: DUP2
000012fc: MSTORE
000012fd: PUSH1 0x09
000012ff: PUSH1 0x20
00001301: MSTORE
00001302: PUSH1 0x40
00001304: SWAP1
00001305: KECCAK256
00001306: SLOAD
00001307: LT
00001308: ISZERO
00001309: PUSH2 0x1317
0000130c: JUMPI
0000130d: PUSH2 0x1315
00001310: DUP3
00001311: PUSH2 0x1b40
00001314: JUMP
00001315: JUMPDEST
00001316: POP
00001317: JUMPDEST
00001318: PUSH2 0x1341
0000131b: PUSH2 0x1323
0000131e: DUP4
0000131f: PUSH2 0x0c95
00001322: JUMP
00001323: JUMPDEST
00001324: PUSH1 0x01
00001326: SLOAD
00001327: PUSH1 0x00
00001329: SWAP1
0000132a: DUP2
0000132b: MSTORE
0000132c: PUSH1 0x0d
0000132e: PUSH1 0x20
00001330: MSTORE
00001331: PUSH1 0x40
00001333: SWAP1
00001334: KECCAK256
00001335: SLOAD
00001336: SWAP1
00001337: PUSH4 0xffffffff
0000133c: PUSH2 0x1b21
0000133f: AND
00001340: JUMP
00001341: JUMPDEST
00001342: PUSH1 0x01
00001344: DUP1
00001345: SLOAD
00001346: PUSH1 0x00
00001348: SWAP1
00001349: DUP2
0000134a: MSTORE
0000134b: PUSH1 0x0d
0000134d: PUSH1 0x20
0000134f: SWAP1
00001350: DUP2
00001351: MSTORE
00001352: PUSH1 0x40
00001354: DUP1
00001355: DUP4
00001356: KECCAK256
00001357: SWAP5
00001358: SWAP1
00001359: SWAP5
0000135a: SSTORE
0000135b: PUSH1 0x01
0000135d: PUSH1 0xa0
0000135f: PUSH1 0x02
00001361: EXP
00001362: SUB
00001363: DUP7
00001364: AND
00001365: DUP1
00001366: DUP4
00001367: MSTORE
00001368: PUSH1 0x0c
0000136a: DUP3
0000136b: MSTORE
0000136c: DUP5
0000136d: DUP4
0000136e: KECCAK256
0000136f: DUP5
00001370: SLOAD
00001371: DUP2
00001372: SLOAD
00001373: DUP1
00001374: DUP8
00001375: ADD
00001376: DUP4
00001377: SSTORE
00001378: SWAP2
00001379: DUP6
0000137a: MSTORE
0000137b: SWAP3
0000137c: DUP5
0000137d: KECCAK256
0000137e: ADD
0000137f: SWAP2
00001380: SWAP1
00001381: SWAP2
00001382: SSTORE
00001383: SWAP2
00001384: SLOAD
00001385: SWAP3
00001386: MLOAD
00001387: PUSH32 0x0f0bc5b519ddefdd8e5f9e6423433aa2b869738de2ae34d58ebc796fc749fa0d
000013a8: SWAP2
000013a9: SWAP1
000013aa: LOG3
000013ab: POP
000013ac: PUSH1 0x01
000013ae: SWAP2
000013af: SWAP1
000013b0: POP
000013b1: JUMP
000013b2: JUMPDEST
000013b3: PUSH1 0x00
000013b5: DUP1
000013b6: SLOAD
000013b7: DUP2
000013b8: SWAP1
000013b9: DUP2
000013ba: SWAP1
000013bb: DUP2
000013bc: SWAP1
000013bd: PUSH1 0xa0
000013bf: PUSH1 0x02
000013c1: EXP
000013c2: SWAP1
000013c3: DIV
000013c4: PUSH1 0xff
000013c6: AND
000013c7: ISZERO
000013c8: PUSH2 0x13d0
000013cb: JUMPI
000013cc: PUSH1 0x00
000013ce: DUP1
000013cf: REVERT
000013d0: JUMPDEST
000013d1: PUSH1 0x01
000013d3: PUSH1 0xa0
000013d5: PUSH1 0x02
000013d7: EXP
000013d8: SUB
000013d9: DUP7
000013da: AND
000013db: PUSH1 0x00
000013dd: SWAP1
000013de: DUP2
000013df: MSTORE
000013e0: PUSH1 0x09
000013e2: PUSH1 0x20
000013e4: MSTORE
000013e5: PUSH1 0x40
000013e7: SWAP1
000013e8: KECCAK256
000013e9: SLOAD
000013ea: DUP6
000013eb: GT
000013ec: PUSH2 0x13f4
000013ef: JUMPI
000013f0: PUSH1 0x00
000013f2: DUP1
000013f3: REVERT
000013f4: JUMPDEST
000013f5: PUSH1 0x01
000013f7: SLOAD
000013f8: DUP6
000013f9: GT
000013fa: ISZERO
000013fb: PUSH2 0x1403
000013fe: JUMPI
000013ff: PUSH1 0x00
00001401: DUP1
00001402: REVERT
00001403: JUMPDEST
00001404: PUSH1 0x01
00001406: PUSH1 0xa0
00001408: PUSH1 0x02
0000140a: EXP
0000140b: SUB
0000140c: DUP7
0000140d: AND
0000140e: PUSH1 0x00
00001410: SWAP1
00001411: DUP2
00001412: MSTORE
00001413: PUSH1 0x09
00001415: PUSH1 0x20
00001417: SWAP1
00001418: DUP2
00001419: MSTORE
0000141a: PUSH1 0x40
0000141c: DUP1
0000141d: DUP4
0000141e: KECCAK256
0000141f: SLOAD
00001420: PUSH1 0x08
00001422: DUP4
00001423: MSTORE
00001424: DUP2
00001425: DUP5
00001426: KECCAK256
00001427: DUP2
00001428: DUP6
00001429: MSTORE
0000142a: SWAP1
0000142b: SWAP3
0000142c: MSTORE
0000142d: SWAP1
0000142e: SWAP2
0000142f: KECCAK256
00001430: SLOAD
00001431: SWAP1
00001432: SWAP4
00001433: POP
00001434: SWAP2
00001435: POP
00001436: DUP2
00001437: ISZERO
00001438: PUSH2 0x1476
0000143b: JUMPI
0000143c: POP
0000143d: PUSH1 0x01
0000143f: DUP3
00001440: ADD
00001441: JUMPDEST
00001442: DUP5
00001443: DUP2
00001444: GT
00001445: PUSH2 0x1476
00001448: JUMPI
00001449: PUSH1 0x01
0000144b: PUSH1 0xa0
0000144d: PUSH1 0x02
0000144f: EXP
00001450: SUB
00001451: DUP7
00001452: AND
00001453: PUSH1 0x00
00001455: SWAP1
00001456: DUP2
00001457: MSTORE
00001458: PUSH1 0x08
0000145a: PUSH1 0x20
0000145c: SWAP1
0000145d: DUP2
0000145e: MSTORE
0000145f: PUSH1 0x40
00001461: DUP1
00001462: DUP4
00001463: KECCAK256
00001464: DUP5
00001465: DUP5
00001466: MSTORE
00001467: SWAP1
00001468: SWAP2
00001469: MSTORE
0000146a: SWAP1
0000146b: KECCAK256
0000146c: DUP3
0000146d: SWAP1
0000146e: SSTORE
0000146f: PUSH1 0x01
00001471: ADD
00001472: PUSH2 0x1441
00001475: JUMP
00001476: JUMPDEST
00001477: POP
00001478: POP
00001479: POP
0000147a: POP
0000147b: PUSH1 0x01
0000147d: PUSH1 0xa0
0000147f: PUSH1 0x02
00001481: EXP
00001482: SUB
00001483: SWAP2
00001484: SWAP1
00001485: SWAP2
00001486: AND
00001487: PUSH1 0x00
00001489: SWAP1
0000148a: DUP2
0000148b: MSTORE
0000148c: PUSH1 0x09
0000148e: PUSH1 0x20
00001490: MSTORE
00001491: PUSH1 0x40
00001493: SWAP1
00001494: KECCAK256
00001495: SSTORE
00001496: PUSH1 0x01
00001498: SWAP1
00001499: JUMP
0000149a: JUMPDEST
0000149b: PUSH1 0x05
0000149d: PUSH1 0x20
0000149f: MSTORE
000014a0: PUSH1 0x00
000014a2: SWAP1
000014a3: DUP2
000014a4: MSTORE
000014a5: PUSH1 0x40
000014a7: SWAP1
000014a8: KECCAK256
000014a9: SLOAD
000014aa: DUP2
000014ab: JUMP
000014ac: JUMPDEST
000014ad: PUSH1 0x03
000014af: SLOAD
000014b0: PUSH1 0x00
000014b2: SWAP1
000014b3: DUP2
000014b4: SWAP1
000014b5: DUP2
000014b6: SWAP1
000014b7: DUP2
000014b8: SWAP1
000014b9: PUSH1 0xff
000014bb: AND
000014bc: ISZERO
000014bd: PUSH2 0x14c5
000014c0: JUMPI
000014c1: PUSH1 0x00
000014c3: DUP1
000014c4: REVERT
000014c5: JUMPDEST
000014c6: PUSH1 0x00
000014c8: SLOAD
000014c9: PUSH1 0x01
000014cb: PUSH1 0xa0
000014cd: PUSH1 0x02
000014cf: EXP
000014d0: SUB
000014d1: AND
000014d2: CALLER
000014d3: EQ
000014d4: PUSH2 0x14dc
000014d7: JUMPI
000014d8: PUSH1 0x00
000014da: DUP1
000014db: REVERT
000014dc: JUMPDEST
000014dd: PUSH1 0x00
000014df: SLOAD
000014e0: PUSH1 0xa0
000014e2: PUSH1 0x02
000014e4: EXP
000014e5: SWAP1
000014e6: DIV
000014e7: PUSH1 0xff
000014e9: AND
000014ea: ISZERO
000014eb: PUSH2 0x14f3
000014ee: JUMPI
000014ef: PUSH1 0x00
000014f1: DUP1
000014f2: REVERT
000014f3: JUMPDEST
000014f4: PUSH1 0x01
000014f6: PUSH1 0xa0
000014f8: PUSH1 0x02
000014fa: EXP
000014fb: SUB
000014fc: DUP7
000014fd: AND
000014fe: ISZERO
000014ff: ISZERO
00001500: PUSH2 0x1508
00001503: JUMPI
00001504: PUSH1 0x00
00001506: DUP1
00001507: REVERT
00001508: JUMPDEST
00001509: PUSH1 0x01
0000150b: PUSH1 0xa0
0000150d: PUSH1 0x02
0000150f: EXP
00001510: SUB
00001511: DUP8
00001512: AND
00001513: PUSH1 0x00
00001515: SWAP1
00001516: DUP2
00001517: MSTORE
00001518: PUSH1 0x09
0000151a: PUSH1 0x20
0000151c: SWAP1
0000151d: DUP2
0000151e: MSTORE
0000151f: PUSH1 0x40
00001521: DUP1
00001522: DUP4
00001523: KECCAK256
00001524: SLOAD
00001525: PUSH1 0x08
00001527: DUP4
00001528: MSTORE
00001529: DUP2
0000152a: DUP5
0000152b: KECCAK256
0000152c: DUP2
0000152d: DUP6
0000152e: MSTORE
0000152f: SWAP1
00001530: SWAP3
00001531: MSTORE
00001532: SWAP1
00001533: SWAP2
00001534: KECCAK256
00001535: SLOAD
00001536: SWAP1
00001537: SWAP4
00001538: POP
00001539: DUP6
0000153a: GT
0000153b: ISZERO
0000153c: PUSH2 0x1544
0000153f: JUMPI
00001540: PUSH1 0x00
00001542: DUP1
00001543: REVERT
00001544: JUMPDEST
00001545: PUSH1 0x01
00001547: SLOAD
00001548: DUP4
00001549: LT
0000154a: ISZERO
0000154b: PUSH2 0x1559
0000154e: JUMPI
0000154f: PUSH2 0x1557
00001552: DUP8
00001553: PUSH2 0x1b40
00001556: JUMP
00001557: JUMPDEST
00001558: POP
00001559: JUMPDEST
0000155a: PUSH1 0x01
0000155c: SLOAD
0000155d: PUSH1 0x01
0000155f: PUSH1 0xa0
00001561: PUSH1 0x02
00001563: EXP
00001564: SUB
00001565: DUP8
00001566: AND
00001567: PUSH1 0x00
00001569: SWAP1
0000156a: DUP2
0000156b: MSTORE
0000156c: PUSH1 0x09
0000156e: PUSH1 0x20
00001570: MSTORE
00001571: PUSH1 0x40
00001573: SWAP1
00001574: KECCAK256
00001575: SLOAD
00001576: LT
00001577: ISZERO
00001578: PUSH2 0x1586
0000157b: JUMPI
0000157c: PUSH2 0x1584
0000157f: DUP7
00001580: PUSH2 0x1b40
00001583: JUMP
00001584: JUMPDEST
00001585: POP
00001586: JUMPDEST
00001587: PUSH1 0x01
00001589: PUSH1 0xa0
0000158b: PUSH1 0x02
0000158d: EXP
0000158e: SUB
0000158f: DUP8
00001590: AND
00001591: PUSH1 0x00
00001593: SWAP1
00001594: DUP2
00001595: MSTORE
00001596: PUSH1 0x08
00001598: PUSH1 0x20
0000159a: SWAP1
0000159b: DUP2
0000159c: MSTORE
0000159d: PUSH1 0x40
0000159f: DUP1
000015a0: DUP4
000015a1: KECCAK256
000015a2: PUSH1 0x01
000015a4: SLOAD
000015a5: DUP5
000015a6: MSTORE
000015a7: SWAP1
000015a8: SWAP2
000015a9: MSTORE
000015aa: SWAP1
000015ab: KECCAK256
000015ac: SLOAD
000015ad: PUSH2 0x15bc
000015b0: SWAP1
000015b1: DUP7
000015b2: PUSH4 0xffffffff
000015b7: PUSH2 0x1b2e
000015ba: AND
000015bb: JUMP
000015bc: JUMPDEST
000015bd: PUSH1 0x01
000015bf: PUSH1 0xa0
000015c1: PUSH1 0x02
000015c3: EXP
000015c4: SUB
000015c5: DUP1
000015c6: DUP10
000015c7: AND
000015c8: PUSH1 0x00
000015ca: SWAP1
000015cb: DUP2
000015cc: MSTORE
000015cd: PUSH1 0x08
000015cf: PUSH1 0x20
000015d1: DUP2
000015d2: DUP2
000015d3: MSTORE
000015d4: PUSH1 0x40
000015d6: DUP1
000015d7: DUP5
000015d8: KECCAK256
000015d9: PUSH1 0x01
000015db: DUP1
000015dc: SLOAD
000015dd: DUP7
000015de: MSTORE
000015df: SWAP1
000015e0: DUP4
000015e1: MSTORE
000015e2: DUP2
000015e3: DUP6
000015e4: KECCAK256
000015e5: SWAP7
000015e6: SWAP1
000015e7: SWAP7
000015e8: SSTORE
000015e9: SWAP4
000015ea: DUP12
000015eb: AND
000015ec: DUP4
000015ed: MSTORE
000015ee: SWAP1
000015ef: DUP2
000015f0: MSTORE
000015f1: DUP3
000015f2: DUP3
000015f3: KECCAK256
000015f4: SWAP4
000015f5: SLOAD
000015f6: DUP3
000015f7: MSTORE
000015f8: SWAP3
000015f9: SWAP1
000015fa: SWAP3
000015fb: MSTORE
000015fc: SWAP1
000015fd: KECCAK256
000015fe: SLOAD
000015ff: PUSH2 0x160e
00001602: SWAP1
00001603: DUP7
00001604: PUSH4 0xffffffff
00001609: PUSH2 0x1b21
0000160c: AND
0000160d: JUMP
0000160e: JUMPDEST
0000160f: PUSH1 0x01
00001611: PUSH1 0xa0
00001613: PUSH1 0x02
00001615: EXP
00001616: SUB
00001617: DUP8
00001618: AND
00001619: PUSH1 0x00
0000161b: SWAP1
0000161c: DUP2
0000161d: MSTORE
0000161e: PUSH1 0x08
00001620: PUSH1 0x20
00001622: SWAP1
00001623: DUP2
00001624: MSTORE
00001625: PUSH1 0x40
00001627: DUP1
00001628: DUP4
00001629: KECCAK256
0000162a: PUSH1 0x01
0000162c: DUP1
0000162d: SLOAD
0000162e: DUP6
0000162f: MSTORE
00001630: SWAP3
00001631: MSTORE
00001632: SWAP1
00001633: SWAP2
00001634: KECCAK256
00001635: SWAP2
00001636: SWAP1
00001637: SWAP2
00001638: SSTORE
00001639: SLOAD
0000163a: PUSH2 0x1644
0000163d: SWAP1
0000163e: DUP9
0000163f: SWAP1
00001640: PUSH2 0x09bf
00001643: JUMP
00001644: JUMPDEST
00001645: SWAP2
00001646: POP
00001647: PUSH2 0x1652
0000164a: DUP7
0000164b: PUSH1 0x01
0000164d: SLOAD
0000164e: PUSH2 0x09bf
00001651: JUMP
00001652: JUMPDEST
00001653: SWAP1
00001654: POP
00001655: DUP2
00001656: DUP1
00001657: ISZERO
00001658: PUSH2 0x165f
0000165b: JUMPI
0000165c: POP
0000165d: DUP1
0000165e: ISZERO
0000165f: JUMPDEST
00001660: ISZERO
00001661: PUSH2 0x169d
00001664: JUMPI
00001665: PUSH1 0x01
00001667: SLOAD
00001668: PUSH1 0x00
0000166a: SWAP1
0000166b: DUP2
0000166c: MSTORE
0000166d: PUSH1 0x0d
0000166f: PUSH1 0x20
00001671: MSTORE
00001672: PUSH1 0x40
00001674: SWAP1
00001675: KECCAK256
00001676: SLOAD
00001677: PUSH2 0x1686
0000167a: SWAP1
0000167b: DUP7
0000167c: PUSH4 0xffffffff
00001681: PUSH2 0x1b21
00001684: AND
00001685: JUMP
00001686: JUMPDEST
00001687: PUSH1 0x01
00001689: SLOAD
0000168a: PUSH1 0x00
0000168c: SWAP1
0000168d: DUP2
0000168e: MSTORE
0000168f: PUSH1 0x0d
00001691: PUSH1 0x20
00001693: MSTORE
00001694: PUSH1 0x40
00001696: SWAP1
00001697: KECCAK256
00001698: SSTORE
00001699: PUSH2 0x16e2
0000169c: JUMP
0000169d: JUMPDEST
0000169e: DUP2
0000169f: ISZERO
000016a0: DUP1
000016a1: ISZERO
000016a2: PUSH2 0x16a8
000016a5: JUMPI
000016a6: POP
000016a7: DUP1
000016a8: JUMPDEST
000016a9: ISZERO
000016aa: PUSH2 0x16e2
000016ad: JUMPI
000016ae: PUSH1 0x01
000016b0: SLOAD
000016b1: PUSH1 0x00
000016b3: SWAP1
000016b4: DUP2
000016b5: MSTORE
000016b6: PUSH1 0x0d
000016b8: PUSH1 0x20
000016ba: MSTORE
000016bb: PUSH1 0x40
000016bd: SWAP1
000016be: KECCAK256
000016bf: SLOAD
000016c0: PUSH2 0x16cf
000016c3: SWAP1
000016c4: DUP7
000016c5: PUSH4 0xffffffff
000016ca: PUSH2 0x1b2e
000016cd: AND
000016ce: JUMP
000016cf: JUMPDEST
000016d0: PUSH1 0x01
000016d2: SLOAD
000016d3: PUSH1 0x00
000016d5: SWAP1
000016d6: DUP2
000016d7: MSTORE
000016d8: PUSH1 0x0d
000016da: PUSH1 0x20
000016dc: MSTORE
000016dd: PUSH1 0x40
000016df: SWAP1
000016e0: KECCAK256
000016e1: SSTORE
000016e2: JUMPDEST
000016e3: POP
000016e4: PUSH1 0x01
000016e6: SWAP7
000016e7: SWAP6
000016e8: POP
000016e9: POP
000016ea: POP
000016eb: POP
000016ec: POP
000016ed: POP
000016ee: JUMP
000016ef: JUMPDEST
000016f0: PUSH1 0x07
000016f2: PUSH1 0x20
000016f4: MSTORE
000016f5: PUSH1 0x00
000016f7: SWAP1
000016f8: DUP2
000016f9: MSTORE
000016fa: PUSH1 0x40
000016fc: SWAP1
000016fd: KECCAK256
000016fe: SLOAD
000016ff: PUSH1 0xff
00001701: AND
00001702: DUP2
00001703: JUMP
00001704: JUMPDEST
00001705: PUSH1 0x60
00001707: DUP1
00001708: PUSH1 0x00
0000170a: PUSH1 0x01
0000170c: SLOAD
0000170d: PUSH1 0x40
0000170f: MLOAD
00001710: SWAP1
00001711: DUP1
00001712: DUP3
00001713: MSTORE
00001714: DUP1
00001715: PUSH1 0x20
00001717: MUL
00001718: PUSH1 0x20
0000171a: ADD
0000171b: DUP3
0000171c: ADD
0000171d: PUSH1 0x40
0000171f: MSTORE
00001720: DUP1
00001721: ISZERO
00001722: PUSH2 0x1735
00001725: JUMPI
00001726: DUP2
00001727: PUSH1 0x20
00001729: ADD
0000172a: PUSH1 0x20
0000172c: DUP3
0000172d: MUL
0000172e: DUP1
0000172f: CODESIZE
00001730: DUP4
00001731: CODECOPY
00001732: ADD
00001733: SWAP1
00001734: POP
00001735: JUMPDEST
00001736: POP
00001737: SWAP2
00001738: POP
00001739: PUSH1 0x00
0000173b: SWAP1
0000173c: POP
0000173d: JUMPDEST
0000173e: PUSH1 0x01
00001740: SLOAD
00001741: DUP2
00001742: LT
00001743: ISZERO
00001744: PUSH2 0x0aeb
00001747: JUMPI
00001748: PUSH1 0x00
0000174a: DUP2
0000174b: DUP2
0000174c: MSTORE
0000174d: PUSH1 0x05
0000174f: PUSH1 0x20
00001751: MSTORE
00001752: PUSH1 0x40
00001754: SWAP1
00001755: KECCAK256
00001756: SLOAD
00001757: DUP3
00001758: MLOAD
00001759: DUP4
0000175a: SWAP1
0000175b: DUP4
0000175c: SWAP1
0000175d: DUP2
0000175e: LT
0000175f: PUSH2 0x1764
00001762: JUMPI
00001763: INVALID
00001764: JUMPDEST
00001765: PUSH1 0x20
00001767: SWAP1
00001768: DUP2
00001769: MUL
0000176a: SWAP1
0000176b: SWAP2
0000176c: ADD
0000176d: ADD
0000176e: MSTORE
0000176f: PUSH1 0x01
00001771: ADD
00001772: PUSH2 0x173d
00001775: JUMP
00001776: JUMPDEST
00001777: PUSH1 0x60
00001779: DUP1
0000177a: PUSH1 0x00
0000177c: DUP1
0000177d: PUSH1 0x01
0000177f: SLOAD
00001780: PUSH1 0x40
00001782: MLOAD
00001783: SWAP1
00001784: DUP1
00001785: DUP3
00001786: MSTORE
00001787: DUP1
00001788: PUSH1 0x20
0000178a: MUL
0000178b: PUSH1 0x20
0000178d: ADD
0000178e: DUP3
0000178f: ADD
00001790: PUSH1 0x40
00001792: MSTORE
00001793: DUP1
00001794: ISZERO
00001795: PUSH2 0x17a8
00001798: JUMPI
00001799: DUP2
0000179a: PUSH1 0x20
0000179c: ADD
0000179d: PUSH1 0x20
0000179f: DUP3
000017a0: MUL
000017a1: DUP1
000017a2: CODESIZE
000017a3: DUP4
000017a4: CODECOPY
000017a5: ADD
000017a6: SWAP1
000017a7: POP
000017a8: JUMPDEST
000017a9: POP
000017aa: SWAP3
000017ab: POP
000017ac: PUSH1 0x00
000017ae: SWAP2
000017af: POP
000017b0: JUMPDEST
000017b1: PUSH1 0x01
000017b3: SLOAD
000017b4: DUP3
000017b5: LT
000017b6: ISZERO
000017b7: PUSH2 0x10f3
000017ba: JUMPI
000017bb: PUSH1 0x01
000017bd: PUSH1 0xa0
000017bf: PUSH1 0x02
000017c1: EXP
000017c2: SUB
000017c3: DUP6
000017c4: AND
000017c5: PUSH1 0x00
000017c7: SWAP1
000017c8: DUP2
000017c9: MSTORE
000017ca: PUSH1 0x09
000017cc: PUSH1 0x20
000017ce: MSTORE
000017cf: PUSH1 0x40
000017d1: SWAP1
000017d2: KECCAK256
000017d3: SLOAD
000017d4: DUP3
000017d5: GT
000017d6: ISZERO
000017d7: PUSH2 0x181d
000017da: JUMPI
000017db: PUSH1 0x01
000017dd: PUSH1 0xa0
000017df: PUSH1 0x02
000017e1: EXP
000017e2: SUB
000017e3: DUP6
000017e4: AND
000017e5: PUSH1 0x00
000017e7: SWAP1
000017e8: DUP2
000017e9: MSTORE
000017ea: PUSH1 0x08
000017ec: PUSH1 0x20
000017ee: SWAP1
000017ef: DUP2
000017f0: MSTORE
000017f1: PUSH1 0x40
000017f3: DUP1
000017f4: DUP4
000017f5: KECCAK256
000017f6: DUP6
000017f7: DUP5
000017f8: MSTORE
000017f9: DUP3
000017fa: MSTORE
000017fb: DUP1
000017fc: DUP4
000017fd: KECCAK256
000017fe: SLOAD
000017ff: PUSH1 0x04
00001801: SWAP1
00001802: SWAP3
00001803: MSTORE
00001804: SWAP1
00001805: SWAP2
00001806: KECCAK256
00001807: SLOAD
00001808: PUSH2 0x1816
0000180b: SWAP2
0000180c: PUSH4 0xffffffff
00001811: PUSH2 0x1bd7
00001814: AND
00001815: JUMP
00001816: JUMPDEST
00001817: SWAP1
00001818: POP
00001819: PUSH2 0x1866
0000181c: JUMP
0000181d: JUMPDEST
0000181e: PUSH1 0x01
00001820: PUSH1 0xa0
00001822: PUSH1 0x02
00001824: EXP
00001825: SUB
00001826: DUP6
00001827: AND
00001828: PUSH1 0x00
0000182a: SWAP1
0000182b: DUP2
0000182c: MSTORE
0000182d: PUSH1 0x08
0000182f: PUSH1 0x20
00001831: SWAP1
00001832: DUP2
00001833: MSTORE
00001834: PUSH1 0x40
00001836: DUP1
00001837: DUP4
00001838: KECCAK256
00001839: PUSH1 0x09
0000183b: DUP4
0000183c: MSTORE
0000183d: DUP2
0000183e: DUP5
0000183f: KECCAK256
00001840: SLOAD
00001841: DUP5
00001842: MSTORE
00001843: DUP3
00001844: MSTORE
00001845: DUP1
00001846: DUP4
00001847: KECCAK256
00001848: SLOAD
00001849: DUP6
0000184a: DUP5
0000184b: MSTORE
0000184c: PUSH1 0x04
0000184e: SWAP1
0000184f: SWAP3
00001850: MSTORE
00001851: SWAP1
00001852: SWAP2
00001853: KECCAK256
00001854: SLOAD
00001855: PUSH2 0x1863
00001858: SWAP2
00001859: PUSH4 0xffffffff
0000185e: PUSH2 0x1bd7
00001861: AND
00001862: JUMP
00001863: JUMPDEST
00001864: SWAP1
00001865: POP
00001866: JUMPDEST
00001867: PUSH2 0x1870
0000186a: DUP6
0000186b: DUP4
0000186c: PUSH2 0x09bf
0000186f: JUMP
00001870: JUMPDEST
00001871: ISZERO
00001872: PUSH2 0x1894
00001875: JUMPI
00001876: PUSH1 0x00
00001878: DUP4
00001879: DUP4
0000187a: DUP2
0000187b: MLOAD
0000187c: DUP2
0000187d: LT
0000187e: ISZERO
0000187f: ISZERO
00001880: PUSH2 0x1885
00001883: JUMPI
00001884: INVALID
00001885: JUMPDEST
00001886: PUSH1 0x20
00001888: SWAP1
00001889: DUP2
0000188a: MUL
0000188b: SWAP1
0000188c: SWAP2
0000188d: ADD
0000188e: ADD
0000188f: MSTORE
00001890: PUSH2 0x18cd
00001893: JUMP
00001894: JUMPDEST
00001895: PUSH1 0x00
00001897: DUP3
00001898: DUP2
00001899: MSTORE
0000189a: PUSH1 0x0d
0000189c: PUSH1 0x20
0000189e: MSTORE
0000189f: PUSH1 0x40
000018a1: SWAP1
000018a2: KECCAK256
000018a3: SLOAD
000018a4: PUSH2 0x18b4
000018a7: SWAP1
000018a8: DUP3
000018a9: SWAP1
000018aa: PUSH4 0xffffffff
000018af: PUSH2 0x1c00
000018b2: AND
000018b3: JUMP
000018b4: JUMPDEST
000018b5: DUP4
000018b6: DUP4
000018b7: DUP2
000018b8: MLOAD
000018b9: DUP2
000018ba: LT
000018bb: ISZERO
000018bc: ISZERO
000018bd: PUSH2 0x18c2
000018c0: JUMPI
000018c1: INVALID
000018c2: JUMPDEST
000018c3: PUSH1 0x20
000018c5: SWAP1
000018c6: DUP2
000018c7: MUL
000018c8: SWAP1
000018c9: SWAP2
000018ca: ADD
000018cb: ADD
000018cc: MSTORE
000018cd: JUMPDEST
000018ce: PUSH1 0x01
000018d0: SWAP1
000018d1: SWAP2
000018d2: ADD
000018d3: SWAP1
000018d4: PUSH2 0x17b0
000018d7: JUMP
000018d8: JUMPDEST
000018d9: CALLER
000018da: PUSH1 0x00
000018dc: SWAP1
000018dd: DUP2
000018de: MSTORE
000018df: PUSH1 0x0a
000018e1: PUSH1 0x20
000018e3: MSTORE
000018e4: PUSH1 0x40
000018e6: DUP2
000018e7: KECCAK256
000018e8: SLOAD
000018e9: DUP2
000018ea: SWAP1
000018eb: DUP2
000018ec: SWAP1
000018ed: DUP2
000018ee: DUP1
000018ef: JUMPDEST
000018f0: PUSH1 0x01
000018f2: SLOAD
000018f3: DUP4
000018f4: LT
000018f5: ISZERO
000018f6: PUSH2 0x19c7
000018f9: JUMPI
000018fa: CALLER
000018fb: PUSH1 0x00
000018fd: SWAP1
000018fe: DUP2
000018ff: MSTORE
00001900: PUSH1 0x09
00001902: PUSH1 0x20
00001904: MSTORE
00001905: PUSH1 0x40
00001907: SWAP1
00001908: KECCAK256
00001909: SLOAD
0000190a: DUP4
0000190b: GT
0000190c: ISZERO
0000190d: PUSH2 0x1939
00001910: JUMPI
00001911: CALLER
00001912: PUSH1 0x00
00001914: SWAP1
00001915: DUP2
00001916: MSTORE
00001917: PUSH1 0x08
00001919: PUSH1 0x20
0000191b: SWAP1
0000191c: DUP2
0000191d: MSTORE
0000191e: PUSH1 0x40
00001920: DUP1
00001921: DUP4
00001922: KECCAK256
00001923: PUSH1 0x09
00001925: DUP4
00001926: MSTORE
00001927: DUP2
00001928: DUP5
00001929: KECCAK256
0000192a: SLOAD
0000192b: DUP5
0000192c: MSTORE
0000192d: SWAP1
0000192e: SWAP2
0000192f: MSTORE
00001930: SWAP1
00001931: KECCAK256
00001932: SLOAD
00001933: SWAP4
00001934: POP
00001935: PUSH2 0x1957
00001938: JUMP
00001939: JUMPDEST
0000193a: CALLER
0000193b: PUSH1 0x00
0000193d: SWAP1
0000193e: DUP2
0000193f: MSTORE
00001940: PUSH1 0x08
00001942: PUSH1 0x20
00001944: SWAP1
00001945: DUP2
00001946: MSTORE
00001947: PUSH1 0x40
00001949: DUP1
0000194a: DUP4
0000194b: KECCAK256
0000194c: DUP7
0000194d: DUP5
0000194e: MSTORE
0000194f: SWAP1
00001950: SWAP2
00001951: MSTORE
00001952: SWAP1
00001953: KECCAK256
00001954: SLOAD
00001955: SWAP4
00001956: POP
00001957: JUMPDEST
00001958: PUSH1 0x00
0000195a: DUP5
0000195b: GT
0000195c: DUP1
0000195d: ISZERO
0000195e: PUSH2 0x196e
00001961: JUMPI
00001962: POP
00001963: PUSH2 0x196c
00001966: CALLER
00001967: DUP5
00001968: PUSH2 0x09bf
0000196b: JUMP
0000196c: JUMPDEST
0000196d: ISZERO
0000196e: JUMPDEST
0000196f: ISZERO
00001970: PUSH2 0x19bc
00001973: JUMPI
00001974: PUSH1 0x00
00001976: DUP4
00001977: DUP2
00001978: MSTORE
00001979: PUSH1 0x04
0000197b: PUSH1 0x20
0000197d: MSTORE
0000197e: PUSH1 0x40
00001980: SWAP1
00001981: KECCAK256
00001982: SLOAD
00001983: PUSH2 0x1992
00001986: SWAP1
00001987: DUP6
00001988: PUSH4 0xffffffff
0000198d: PUSH2 0x1bd7
00001990: AND
00001991: JUMP
00001992: JUMPDEST
00001993: PUSH1 0x00
00001995: DUP5
00001996: DUP2
00001997: MSTORE
00001998: PUSH1 0x0d
0000199a: PUSH1 0x20
0000199c: MSTORE
0000199d: PUSH1 0x40
0000199f: SWAP1
000019a0: KECCAK256
000019a1: SLOAD
000019a2: SWAP1
000019a3: SWAP3
000019a4: POP
000019a5: PUSH2 0x19b5
000019a8: SWAP1
000019a9: DUP4
000019aa: SWAP1
000019ab: PUSH4 0xffffffff
000019b0: PUSH2 0x1c00
000019b3: AND
000019b4: JUMP
000019b5: JUMPDEST
000019b6: SWAP5
000019b7: DUP6
000019b8: ADD
000019b9: SWAP5
000019ba: SWAP1
000019bb: POP
000019bc: JUMPDEST
000019bd: PUSH1 0x01
000019bf: SWAP1
000019c0: SWAP3
000019c1: ADD
000019c2: SWAP2
000019c3: PUSH2 0x18ef
000019c6: JUMP
000019c7: JUMPDEST
000019c8: POP
000019c9: SWAP3
000019ca: SWAP5
000019cb: SWAP4
000019cc: POP
000019cd: POP
000019ce: POP
000019cf: POP
000019d0: JUMP
000019d1: JUMPDEST
000019d2: PUSH1 0x01
000019d4: SLOAD
000019d5: DUP2
000019d6: JUMP
000019d7: JUMPDEST
000019d8: PUSH1 0x00
000019da: SLOAD
000019db: PUSH1 0x01
000019dd: PUSH1 0xa0
000019df: PUSH1 0x02
000019e1: EXP
000019e2: SUB
000019e3: AND
000019e4: CALLER
000019e5: EQ
000019e6: PUSH2 0x19ee
000019e9: JUMPI
000019ea: PUSH1 0x00
000019ec: DUP1
000019ed: REVERT
000019ee: JUMPDEST
000019ef: PUSH2 0x19f7
000019f2: DUP2
000019f3: PUSH2 0x1c15
000019f6: JUMP
000019f7: JUMPDEST
000019f8: POP
000019f9: JUMP
000019fa: JUMPDEST
000019fb: PUSH1 0x00
000019fd: DUP1
000019fe: SLOAD
000019ff: DUP2
00001a00: SWAP1
00001a01: DUP2
00001a02: SWAP1
00001a03: PUSH1 0x01
00001a05: PUSH1 0xa0
00001a07: PUSH1 0x02
00001a09: EXP
00001a0a: SUB
00001a0b: AND
00001a0c: CALLER
00001a0d: EQ
00001a0e: PUSH2 0x1a16
00001a11: JUMPI
00001a12: PUSH1 0x00
00001a14: DUP1
00001a15: REVERT
00001a16: JUMPDEST
00001a17: PUSH1 0x03
00001a19: SLOAD
00001a1a: PUSH1 0xff
00001a1c: AND
00001a1d: ISZERO
00001a1e: ISZERO
00001a1f: PUSH2 0x1a27
00001a22: JUMPI
00001a23: PUSH1 0x00
00001a25: DUP1
00001a26: REVERT
00001a27: JUMPDEST
00001a28: PUSH1 0x01
00001a2a: PUSH1 0xa0
00001a2c: PUSH1 0x02
00001a2e: EXP
00001a2f: SUB
00001a30: DUP5
00001a31: AND
00001a32: PUSH1 0x00
00001a34: SWAP1
00001a35: DUP2
00001a36: MSTORE
00001a37: PUSH1 0x07
00001a39: PUSH1 0x20
00001a3b: MSTORE
00001a3c: PUSH1 0x40
00001a3e: SWAP1
00001a3f: KECCAK256
00001a40: SLOAD
00001a41: PUSH1 0xff
00001a43: AND
00001a44: ISZERO
00001a45: PUSH2 0x1a4d
00001a48: JUMPI
00001a49: PUSH1 0x00
00001a4b: DUP1
00001a4c: REVERT
00001a4d: JUMPDEST
00001a4e: PUSH1 0x01
00001a50: SLOAD
00001a51: PUSH1 0x01
00001a53: PUSH1 0xa0
00001a55: PUSH1 0x02
00001a57: EXP
00001a58: SUB
00001a59: DUP6
00001a5a: AND
00001a5b: PUSH1 0x00
00001a5d: SWAP1
00001a5e: DUP2
00001a5f: MSTORE
00001a60: PUSH1 0x09
00001a62: PUSH1 0x20
00001a64: MSTORE
00001a65: PUSH1 0x40
00001a67: SWAP1
00001a68: KECCAK256
00001a69: SLOAD
00001a6a: LT
00001a6b: ISZERO
00001a6c: PUSH2 0x1a7a
00001a6f: JUMPI
00001a70: PUSH2 0x1a78
00001a73: DUP5
00001a74: PUSH2 0x1b40
00001a77: JUMP
00001a78: JUMPDEST
00001a79: POP
00001a7a: JUMPDEST
00001a7b: PUSH1 0x01
00001a7d: PUSH1 0xa0
00001a7f: PUSH1 0x02
00001a81: EXP
00001a82: SUB
00001a83: DUP5
00001a84: AND
00001a85: PUSH1 0x00
00001a87: SWAP1
00001a88: DUP2
00001a89: MSTORE
00001a8a: PUSH1 0x08
00001a8c: PUSH1 0x20
00001a8e: SWAP1
00001a8f: DUP2
00001a90: MSTORE
00001a91: PUSH1 0x40
00001a93: DUP1
00001a94: DUP4
00001a95: KECCAK256
00001a96: PUSH1 0x01
00001a98: SLOAD
00001a99: DUP5
00001a9a: MSTORE
00001a9b: SWAP1
00001a9c: SWAP2
00001a9d: MSTORE
00001a9e: SWAP1
00001a9f: KECCAK256
00001aa0: SLOAD
00001aa1: PUSH1 0x06
00001aa3: SLOAD
00001aa4: PUSH2 0x1ab2
00001aa7: SWAP2
00001aa8: PUSH4 0xffffffff
00001aad: PUSH2 0x1bd7
00001ab0: AND
00001ab1: JUMP
00001ab2: JUMPDEST
00001ab3: SWAP2
00001ab4: POP
00001ab5: PUSH2 0x1ad0
00001ab8: PUSH1 0x0d
00001aba: PUSH1 0x00
00001abc: PUSH2 0x07e1
00001abf: PUSH1 0x01
00001ac1: DUP1
00001ac2: SLOAD
00001ac3: PUSH2 0x1b2e
00001ac6: SWAP1
00001ac7: SWAP2
00001ac8: SWAP1
00001ac9: PUSH4 0xffffffff
00001ace: AND
00001acf: JUMP
00001ad0: JUMPDEST
00001ad1: PUSH1 0x01
00001ad3: PUSH1 0xa0
00001ad5: PUSH1 0x02
00001ad7: EXP
00001ad8: SUB
00001ad9: DUP6
00001ada: AND
00001adb: PUSH1 0x00
00001add: DUP2
00001ade: DUP2
00001adf: MSTORE
00001ae0: PUSH1 0x07
00001ae2: PUSH1 0x20
00001ae4: MSTORE
00001ae5: PUSH1 0x40
00001ae7: DUP1
00001ae8: DUP3
00001ae9: KECCAK256
00001aea: DUP1
00001aeb: SLOAD
00001aec: PUSH1 0xff
00001aee: NOT
00001aef: AND
00001af0: PUSH1 0x01
00001af2: OR
00001af3: SWAP1
00001af4: SSTORE
00001af5: MLOAD
00001af6: SWAP3
00001af7: SWAP4
00001af8: POP
00001af9: SWAP1
00001afa: SWAP2
00001afb: DUP4
00001afc: ISZERO
00001afd: PUSH2 0x08fc
00001b00: MUL
00001b01: SWAP2
00001b02: DUP5
00001b03: SWAP2
00001b04: SWAP1
00001b05: DUP2
00001b06: DUP2
00001b07: DUP2
00001b08: DUP6
00001b09: DUP9
00001b0a: DUP9
00001b0b: CALL
00001b0c: SWAP4
00001b0d: POP
00001b0e: POP
00001b0f: POP
00001b10: POP
00001b11: ISZERO
00001b12: DUP1
00001b13: ISZERO
00001b14: PUSH2 0x10f7
00001b17: JUMPI
00001b18: RETURNDATASIZE
00001b19: PUSH1 0x00
00001b1b: DUP1
00001b1c: RETURNDATACOPY
00001b1d: RETURNDATASIZE
00001b1e: PUSH1 0x00
00001b20: REVERT
00001b21: JUMPDEST
00001b22: DUP2
00001b23: DUP2
00001b24: ADD
00001b25: DUP3
00001b26: DUP2
00001b27: LT
00001b28: ISZERO
00001b29: PUSH2 0x09b3
00001b2c: JUMPI
00001b2d: INVALID
00001b2e: JUMPDEST
00001b2f: PUSH1 0x00
00001b31: DUP3
00001b32: DUP3
00001b33: GT
00001b34: ISZERO
00001b35: PUSH2 0x1b3a
00001b38: JUMPI
00001b39: INVALID
00001b3a: JUMPDEST
00001b3b: POP
00001b3c: SWAP1
00001b3d: SUB
00001b3e: SWAP1
00001b3f: JUMP
00001b40: JUMPDEST
00001b41: PUSH1 0x01
00001b43: PUSH1 0xa0
00001b45: PUSH1 0x02
00001b47: EXP
00001b48: SUB
00001b49: DUP2
00001b4a: AND
00001b4b: PUSH1 0x00
00001b4d: SWAP1
00001b4e: DUP2
00001b4f: MSTORE
00001b50: PUSH1 0x09
00001b52: PUSH1 0x20
00001b54: SWAP1
00001b55: DUP2
00001b56: MSTORE
00001b57: PUSH1 0x40
00001b59: DUP1
00001b5a: DUP4
00001b5b: KECCAK256
00001b5c: SLOAD
00001b5d: PUSH1 0x08
00001b5f: DUP4
00001b60: MSTORE
00001b61: DUP2
00001b62: DUP5
00001b63: KECCAK256
00001b64: DUP2
00001b65: DUP6
00001b66: MSTORE
00001b67: SWAP1
00001b68: SWAP3
00001b69: MSTORE
00001b6a: DUP3
00001b6b: KECCAK256
00001b6c: SLOAD
00001b6d: DUP3
00001b6e: DUP2
00001b6f: ISZERO
00001b70: PUSH2 0x1bb0
00001b73: JUMPI
00001b74: POP
00001b75: PUSH1 0x01
00001b77: DUP3
00001b78: ADD
00001b79: JUMPDEST
00001b7a: PUSH1 0x01
00001b7c: SLOAD
00001b7d: DUP2
00001b7e: GT
00001b7f: PUSH2 0x1bb0
00001b82: JUMPI
00001b83: PUSH1 0x01
00001b85: PUSH1 0xa0
00001b87: PUSH1 0x02
00001b89: EXP
00001b8a: SUB
00001b8b: DUP6
00001b8c: AND
00001b8d: PUSH1 0x00
00001b8f: SWAP1
00001b90: DUP2
00001b91: MSTORE
00001b92: PUSH1 0x08
00001b94: PUSH1 0x20
00001b96: SWAP1
00001b97: DUP2
00001b98: MSTORE
00001b99: PUSH1 0x40
00001b9b: DUP1
00001b9c: DUP4
00001b9d: KECCAK256
00001b9e: DUP5
00001b9f: DUP5
00001ba0: MSTORE
00001ba1: SWAP1
00001ba2: SWAP2
00001ba3: MSTORE
00001ba4: SWAP1
00001ba5: KECCAK256
00001ba6: DUP3
00001ba7: SWAP1
00001ba8: SSTORE
00001ba9: PUSH1 0x01
00001bab: ADD
00001bac: PUSH2 0x1b79
00001baf: JUMP
00001bb0: JUMPDEST
00001bb1: PUSH1 0x01
00001bb3: DUP1
00001bb4: SLOAD
00001bb5: PUSH1 0x01
00001bb7: PUSH1 0xa0
00001bb9: PUSH1 0x02
00001bbb: EXP
00001bbc: SUB
00001bbd: DUP8
00001bbe: AND
00001bbf: PUSH1 0x00
00001bc1: SWAP1
00001bc2: DUP2
00001bc3: MSTORE
00001bc4: PUSH1 0x09
00001bc6: PUSH1 0x20
00001bc8: MSTORE
00001bc9: PUSH1 0x40
00001bcb: SWAP1
00001bcc: KECCAK256
00001bcd: SSTORE
00001bce: SWAP4
00001bcf: POP
00001bd0: POP
00001bd1: POP
00001bd2: POP
00001bd3: SWAP2
00001bd4: SWAP1
00001bd5: POP
00001bd6: JUMP
00001bd7: JUMPDEST
00001bd8: PUSH1 0x00
00001bda: DUP3
00001bdb: ISZERO
00001bdc: ISZERO
00001bdd: PUSH2 0x1be8
00001be0: JUMPI
00001be1: POP
00001be2: PUSH1 0x00
00001be4: PUSH2 0x09b3
00001be7: JUMP
00001be8: JUMPDEST
00001be9: POP
00001bea: DUP2
00001beb: DUP2
00001bec: MUL
00001bed: DUP2
00001bee: DUP4
00001bef: DUP3
00001bf0: DUP2
00001bf1: ISZERO
00001bf2: ISZERO
00001bf3: PUSH2 0x1bf8
00001bf6: JUMPI
00001bf7: INVALID
00001bf8: JUMPDEST
00001bf9: DIV
00001bfa: EQ
00001bfb: PUSH2 0x09b3
00001bfe: JUMPI
00001bff: INVALID
00001c00: JUMPDEST
00001c01: PUSH1 0x00
00001c03: DUP2
00001c04: DUP4
00001c05: DUP2
00001c06: ISZERO
00001c07: ISZERO
00001c08: PUSH2 0x1c0d
00001c0b: JUMPI
00001c0c: INVALID
00001c0d: JUMPDEST
00001c0e: DIV
00001c0f: SWAP4
00001c10: SWAP3
00001c11: POP
00001c12: POP
00001c13: POP
00001c14: JUMP
00001c15: JUMPDEST
00001c16: PUSH1 0x01
00001c18: PUSH1 0xa0
00001c1a: PUSH1 0x02
00001c1c: EXP
00001c1d: SUB
00001c1e: DUP2
00001c1f: AND
00001c20: ISZERO
00001c21: ISZERO
00001c22: PUSH2 0x1c2a
00001c25: JUMPI
00001c26: PUSH1 0x00
00001c28: DUP1
00001c29: REVERT
00001c2a: JUMPDEST
00001c2b: PUSH1 0x00
00001c2d: DUP1
00001c2e: SLOAD
00001c2f: PUSH1 0x40
00001c31: MLOAD
00001c32: PUSH1 0x01
00001c34: PUSH1 0xa0
00001c36: PUSH1 0x02
00001c38: EXP
00001c39: SUB
00001c3a: DUP1
00001c3b: DUP6
00001c3c: AND
00001c3d: SWAP4
00001c3e: SWAP3
00001c3f: AND
00001c40: SWAP2
00001c41: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
00001c62: SWAP2
00001c63: LOG3
00001c64: PUSH1 0x00
00001c66: DUP1
00001c67: SLOAD
00001c68: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001c7d: NOT
00001c7e: AND
00001c7f: PUSH1 0x01
00001c81: PUSH1 0xa0
00001c83: PUSH1 0x02
00001c85: EXP
00001c86: SUB
00001c87: SWAP3
00001c88: SWAP1
00001c89: SWAP3
00001c8a: AND
00001c8b: SWAP2
00001c8c: SWAP1
00001c8d: SWAP2
00001c8e: OR
00001c8f: SWAP1
00001c90: SSTORE
00001c91: JUMP
00001c92: STOP
00001c93: LOG1
00001c94: PUSH6 0x627a7a723058
00001c9b: KECCAK256
00001c9c: UNKNOWN(0x25)
00001c9d: UNKNOWN(0xD1)
00001c9e: MUL
00001c9f: MSTORE8
00001ca0: LOG2
00001ca1: UNKNOWN(0xB9)
00001ca2: UNKNOWN(0xD4)
00001ca3: PUSH29

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high other detector Untrusted CALL target/value reachable 60 no no
view
trace_id: 0x366fbc6c55e165a990b2e92c2ef51089eb01bfc8c6601851008c56426f6b924d
call_targets: 0xfab13ff1654d3dab5df238c2dd3a3be92bac39b5
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x366fbc6c55e165a990b2e92c2ef51089eb01bfc8c6601851008c56426f6b924d",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xfab13ff1654d3dab5df238c2dd3a3be92bac39b5"
    ],
    "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": "0x03170581",
            "selector": "0x03170581",
            "calldata_variants": [
                "0x03170581",
                "0x031705810000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x12fa6feb",
            "selector": "0x12fa6feb",
            "calldata_variants": [
                "0x12fa6feb",
                "0x12fa6feb0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x18160ddd",
            "selector": "0x18160ddd",
            "calldata_variants": [
                "0x18160ddd",
                "0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x1dae27b3",
            "selector": "0x1dae27b3",
            "calldata_variants": [
                "0x1dae27b3",
                "0x1dae27b30000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x324536eb",
            "selector": "0x324536eb",
            "calldata_variants": [
                "0x324536eb",
                "0x324536eb0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x3f4ba83a",
            "selector": "0x3f4ba83a",
            "calldata_variants": [
                "0x3f4ba83a",
                "0x3f4ba83a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x40c10f19",
            "selector": "0x40c10f19",
            "calldata_variants": [
                "0x40c10f19",
                "0x40c10f190000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x41e11c59",
            "selector": "0x41e11c59",
            "calldata_variants": [
                "0x41e11c59",
                "0x41e11c590000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 2097,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 3134,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 4251,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 4,
    "guards_detected": [],
    "untrusted_call_count": 4
}
high other detector ETH value transfer possible 55 no no
view
trace_id: 0x366fbc6c55e165a990b2e92c2ef51089eb01bfc8c6601851008c56426f6b924d
call_targets: 0xfab13ff1654d3dab5df238c2dd3a3be92bac39b5
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x366fbc6c55e165a990b2e92c2ef51089eb01bfc8c6601851008c56426f6b924d",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xfab13ff1654d3dab5df238c2dd3a3be92bac39b5"
    ],
    "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": "0x03170581",
            "selector": "0x03170581",
            "calldata_variants": [
                "0x03170581",
                "0x031705810000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x12fa6feb",
            "selector": "0x12fa6feb",
            "calldata_variants": [
                "0x12fa6feb",
                "0x12fa6feb0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x18160ddd",
            "selector": "0x18160ddd",
            "calldata_variants": [
                "0x18160ddd",
                "0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x1dae27b3",
            "selector": "0x1dae27b3",
            "calldata_variants": [
                "0x1dae27b3",
                "0x1dae27b30000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x324536eb",
            "selector": "0x324536eb",
            "calldata_variants": [
                "0x324536eb",
                "0x324536eb0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x3f4ba83a",
            "selector": "0x3f4ba83a",
            "calldata_variants": [
                "0x3f4ba83a",
                "0x3f4ba83a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x40c10f19",
            "selector": "0x40c10f19",
            "calldata_variants": [
                "0x40c10f19",
                "0x40c10f190000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x41e11c59",
            "selector": "0x41e11c59",
            "calldata_variants": [
                "0x41e11c59",
                "0x41e11c590000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 2097,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 3134,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 4251,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 4,
    "guards_detected": []
}