26b7fed9-25c2-4ac8-9db3-1f30d9967af4
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 31476 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 77482 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 77483 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 77484 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 77485 | capability.graph | complete | 1 / 3 | 1 week ago |
| 77486 | detector.run | complete | 1 / 3 | 1 week ago |
| 77487 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:503394] OpenAI Codex v0.77.0 (research preview)
[codex:503394] --------
[codex:503394] workdir: /tmp/codex-multi-2bmql4tr
[codex:503394] model: gpt-5.2-codex
[codex:503394] provider: openai
[codex:503394] approval: never
[codex:503394] sandbox: read-only
[codex:503394] reasoning effort: xhigh
[codex:503394] reasoning summaries: auto
[codex:503394] session id: 019b860c-f8a8-7d53-acbd-9201abb6450d
[codex:503394] --------
[codex:503394] user
[codex:503394] 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:503394]
[codex:503394] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:503394]
[codex:503394] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:503394] - Gas inefficiency, code quality, or best practices
[codex:503394] - Theoretical vulnerabilities without a clear extraction path
[codex:503394] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:503394] - Issues requiring social engineering or off-chain coordination
[codex:503394]
[codex:503394] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:503394] - CALL/DELEGATECALL with controllable destination or calldata
[codex:503394] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:503394] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:503394] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:503394] - External calls before state updates (reentrancy)
[codex:503394] - SELFDESTRUCT with controllable beneficiary
[codex:503394] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:503394]
[codex:503394] For each finding, you MUST explain:
[codex:503394] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:503394] 2. The concrete sequence of transactions to extract value
[codex:503394] 3. Why you believe this is exploitable (not just suspicious)
[codex:503394]
[codex:503394] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:503394] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:503394]
[codex:503394] Output MUST be valid JSON matching the provided schema.
[codex:503394] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:503394] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:503394] mcp startup: no servers
[codex:503394]
[codex:503394] thinking
[codex:503394] **Preparing to analyze bytecode**
[codex:503394] exec
[codex:503394] /bin/bash -lc ls in /tmp/codex-multi-2bmql4tr succeeded in 5ms:
[codex:503394] BYTECODE_BUNDLE.txt
[codex:503394] codex-output-schema.json
[codex:503394] exec
[codex:503394] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-2bmql4tr succeeded in 5ms:
[codex:503394] Runtime bytecode bundle for best-effort auditing.
[codex:503394] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:503394]
[codex:503394] FILE: runtime_bytecode.hex
[codex:503394] 0x6080604052600436106102bb5760003560e01c80636be13c921161016e578063ca44f465116100cb578063d50fd1f41161007f578063dc5724e411610064578063dc5724e4146106f1578063fb80c74714610711578063fc0a7f0314610731576102bb565b8063d50fd1f4146106bc578063d6cd9473146106dc576102bb565b8063d0e30db0116100b0578063d0e30db014610674578063d121b6961461067c578063d29ab55b1461069c576102bb565b8063ca44f4651461064a578063d01342961461065f576102bb565b80638456cb5911610122578063a971a0ad11610107578063a971a0ad146105ea578063bb5f747b1461060a578063bba157581461062a576102bb565b80638456cb59146105b557806397833876146105ca576102bb565b80637362d9c8116101535780637362d9c81461055557806382dc1ec4146105755780638345383214610595576102bb565b80636be13c921461052b5780636ef8d66d14610540576102bb565b8063291d95491161021c5780634c5a628c116101d05780635c975abb116101b55780635c975abb146104e1578063638900e1146104f657806365481ff71461050b576102bb565b80634c5a628c146104b75780635c60da1b146104cc576102bb565b80633af32abf116102015780633af32abf146104625780633f4ba83a1461048257806346fbf68e14610497576102bb565b8063291d95491461042257806335c80c8c14610442576102bb565b80631761d7ce116102735780632299bda6116102585780632299bda6146103b5578063243aa7c9146103e257806326f589ff14610402576102bb565b80631761d7ce1461035d5780631f61aebe14610393576102bb565b80630c660be4116102a45780630c660be4146102fd57806310154bad1461031d57806311eaf6011461033d576102bb565b806306087e5b146102bd5780630ad3aa19146102dd575b005b3480156102c957600080fd5b506102bb6102d8366004612278565b610751565b3480156102e957600080fd5b506102bb6102f836600461234d565b610790565b34801561030957600080fd5b506102bb61031836600461246e565b610ade565b34801561032957600080fd5b506102bb610338366004612278565b610b12565b34801561034957600080fd5b506102bb610358366004612296565b610b45565b34801561036957600080fd5b5061037d610378366004612278565b611062565b60405161038a9190612fcb565b60405180910390f35b34801561039f57600080fd5b506103a8611077565b60405161038a91906131a8565b3480156103c157600080fd5b506103d56103d0366004612576565b61107d565b60405161038a9190612ef5565b3480156103ee57600080fd5b506102bb6103fd3660046124d7565b6110a4565b34801561040e57600080fd5b506102bb61041d3660046123f5565b611152565b34801561042e57600080fd5b506102bb61043d366004612278565b6113e5565b34801561044e57600080fd5b5061037d61045d366004612278565b611415565b34801561046e57600080fd5b5061037d61047d366004612278565b61146e565b34801561048e57600080fd5b506102bb611487565b3480156104a357600080fd5b5061037d6104b2366004612278565b61151a565b3480156104c357600080fd5b506102bb61152d565b3480156104d857600080fd5b506103d561153f565b3480156104ed57600080fd5b5061037d611564565b34801561050257600080fd5b506103a861156e565b34801561051757600080fd5b506102bb6105263660046123b2565b611574565b34801561053757600080fd5b506103d56115c3565b34801561054c57600080fd5b506102bb6115d2565b34801561056157600080fd5b506102bb610570366004612278565b6115e2565b34801561058157600080fd5b506102bb610590366004612278565b611612565b3480156105a157600080fd5b506102bb6105b0366004612278565b611642565b3480156105c157600080fd5b506102bb611679565b3480156105d657600080fd5b506102bb6105e5366004612278565b6116f9565b3480156105f657600080fd5b506103a8610605366004612278565b6117b5565b34801561061657600080fd5b5061037d610625366004612278565b6117c7565b34801561063657600080fd5b506102bb61064536600461250c565b6117da565b34801561065657600080fd5b506102bb611882565b34801561066b57600080fd5b506103d56118a7565b6102bb61153d565b34801561068857600080fd5b506103a8610697366004612278565b6118b6565b3480156106a857600080fd5b506102bb6106b7366004612278565b6118c8565b3480156106c857600080fd5b506103a86106d7366004612278565b61191a565b3480156106e857600080fd5b506102bb61192c565b3480156106fd57600080fd5b506102bb61070c366004612278565b61193c565b34801561071d57600080fd5b5061037d61072c366004612541565b611965565b34801561073d57600080fd5b506103d561074c366004612576565b611985565b610759611992565b6107616119b7565b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60005460ff16156107bc5760405162461bcd60e51b81526004016107b390613148565b60405180910390fd5b6000805460ff191660011790556107d1611882565b6001600160a01b0383166000908152600d60205260409020546108065760405162461bcd60e51b81526004016107b390613098565b6001600160a01b0383166000908152600a6020526040902054821461083d5760405162461bcd60e51b81526004016107b390613108565b61087330848460405160200161085593929190612e66565b604051602081830303815290604052805190602001208260006119db565b6001600160a01b0383166000818152600a602052604090208054600101905561095c576001600160a01b0383166000908152600d6020526040902054471115610957576001600160a01b0383166000908152600d60205260408120546108e090479063ffffffff611bf016565b600b546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561091b573d6000803e3d6000fd5b5080837f186661f41f6b7bc56a92ba66079ddc8d68c4d85ad16470441dd2e6e8f36a44588660405161094d9190612ef5565b60405180910390a3505b610acf565b6040516370a0823160e01b815283906000906001600160a01b038316906370a082319061098d903090600401612f03565b60206040518083038186803b1580156109a557600080fd5b505afa1580156109b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109dd9190810190612594565b6001600160a01b0386166000908152600d6020526040902054909150811115610acc576001600160a01b0385166000908152600d6020526040812054610a2a90839063ffffffff611bf016565b600b5460405163a9059cbb60e01b81529192506001600160a01b038086169263a9059cbb92610a5f9216908590600401612f76565b600060405180830381600087803b158015610a7957600080fd5b505af1158015610a8d573d6000803e3d6000fd5b5050505080857f186661f41f6b7bc56a92ba66079ddc8d68c4d85ad16470441dd2e6e8f36a445888604051610ac29190612ef5565b60405180910390a3505b50505b50506000805460ff1916905550565b610ae6611992565b8151610af990600590602085019061202c565b508051610b0d90600690602084019061202c565b505050565b610b1d610625611c39565b610b395760405162461bcd60e51b81526004016107b390613128565b610b4281611c3d565b50565b60005460ff1615610b685760405162461bcd60e51b81526004016107b390613148565b6000805460ff19166001179055610b7d611c85565b600782604051610b8d9190612dc5565b9081526040519081900360200190205460ff1615610bbd5760405162461bcd60e51b81526004016107b3906130b8565b610be4610bc8611caa565b3088888888886040516020016108559796959493929190612e71565b836001600160a01b038716610cf55783471015610c135760405162461bcd60e51b81526004016107b3906130a8565b6001600160a01b03851660009081526008602052604090205460ff1615610cb4576040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038616906347e7ef24908690610c7d908a908390600401612f76565b6000604051808303818588803b158015610c9657600080fd5b505af1158015610caa573d6000803e3d6000fd5b5050505050610cf0565b6040516001600160a01b0387169085156108fc029086906000818181858888f19350505050158015610cea573d6000803e3d6000fd5b50600090505b610fc8565b6040516370a0823160e01b8152879085906001600160a01b038316906370a0823190610d25903090600401612f03565b60206040518083038186803b158015610d3d57600080fd5b505afa158015610d51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d759190810190612594565b1015610d935760405162461bcd60e51b81526004016107b3906130a8565b6001600160a01b03861660009081526008602052604090205460ff1615610f61576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063095ea7b390610dfb9089908990600401612f76565b600060405180830381600087803b158015610e1557600080fd5b505af1158015610e29573d6000803e3d6000fd5b50506040517f9d5755820000000000000000000000000000000000000000000000000000000081526001600160a01b0389169250639d5755829150610e76908a9089908d90600401612f84565b600060405180830381600087803b158015610e9057600080fd5b505af1158015610ea4573d6000803e3d6000fd5b50506040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b038416925063dd62ed3e9150610eef9030908a90600401612f11565b60206040518083038186803b158015610f0757600080fd5b505afa158015610f1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f3f9190810190612594565b15610f5c5760405162461bcd60e51b81526004016107b390613058565b610fc6565b60405163a9059cbb60e01b81526001600160a01b0382169063a9059cbb90610f8f908a908990600401612f76565b600060405180830381600087803b158015610fa957600080fd5b505af1158015610fbd573d6000803e3d6000fd5b50505050600091505b505b6001600784604051610fda9190612dc5565b908152602001604051809103902060006101000a81548160ff021916908315150217905550806001600160a01b031684876001600160a01b03167ff6b095aebfbfb6ed6beca6ffab1699c95c32480f70b07621f92d7ccdf844089488878c60405161104793929190612f2c565b60405180910390a450506000805460ff191690555050505050565b60086020526000908152604090205460ff1681565b60095481565b6005818154811061108a57fe5b6000918252602090912001546001600160a01b0316905081565b6110ac611992565b6110b46119b7565b600e54600f546040516110f9926110db9230926001600160a01b0390921691602001612dd1565b604051602081830303815290604052805190602001208260016119db565b600f80546001019055600e54611117906001600160a01b0316611cae565b600e546040516001600160a01b03909116907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60005460ff16156111755760405162461bcd60e51b81526004016107b390613148565b6000805460ff1916600117905561118a611882565b60095482146111ab5760405162461bcd60e51b81526004016107b390613108565b6111c5308585856040516020016110db9493929190612e13565b81837f50fb1e062911f806ffb200f762d478c835a88d333a8dd543dccaedf3444dded5866040516111f69190612fac565b60405180910390a36009805460010190556001600160a01b0384166112aa57600b546001600160a01b0316318311156112415760405162461bcd60e51b81526004016107b390613028565b600b5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906112739030908790600401612f5b565b600060405180830381600087803b15801561128d57600080fd5b505af11580156112a1573d6000803e3d6000fd5b505050506113d5565b600b546040516370a0823160e01b815285916000916001600160a01b03808516926370a08231926112e19290911690600401612f03565b60206040518083038186803b1580156112f957600080fd5b505afa15801561130d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113319190810190612594565b9050848110156113535760405162461bcd60e51b81526004016107b390613028565b600b546040517ff640d5080000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063f640d508906113a090309089908b90600401612f84565b600060405180830381600087803b1580156113ba57600080fd5b505af11580156113ce573d6000803e3d6000fd5b5050505050505b50506000805460ff191690555050565b6113f0610625611c39565b61140c5760405162461bcd60e51b81526004016107b390613128565b610b4281611cf7565b6000805b60055481101561146757826001600160a01b03166005828154811061143a57fe5b6000918252602090912001546001600160a01b0316141561145f576001915050611469565b600101611419565b505b919050565b600061148160048363ffffffff611d3f16565b92915050565b6114926104b2611c39565b6114ae5760405162461bcd60e51b81526004016107b390613078565b60025460ff166114d05760405162461bcd60e51b81526004016107b390613038565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611503611c39565b6040516115109190612f03565b60405180910390a1565b600061148160018363ffffffff611d3f16565b61153d611538611c39565b611d87565b565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60025460ff165b90565b600f5481565b61157c611992565b80821061159b5760405162461bcd60e51b81526004016107b390613088565b6001600160a01b039092166000908152600c6020908152604080832093909355600d90522055565b600b546001600160a01b031690565b61153d6115dd611c39565b611dcf565b6115ed610625611c39565b6116095760405162461bcd60e51b81526004016107b390613128565b610b4281611e17565b61161d6104b2611c39565b6116395760405162461bcd60e51b81526004016107b390613078565b610b4281611e5f565b61164a611992565b600e805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6116846104b2611c39565b6116a05760405162461bcd60e51b81526004016107b390613078565b60025460ff16156116c35760405162461bcd60e51b81526004016107b3906130c8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611503611c39565b611701611992565b6117096119b7565b61171b816001600160a01b0316611ea7565b6117375760405162461bcd60e51b81526004016107b390613198565b600b546040517f5bb478080000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690635bb4780890611780908490600401612ef5565b600060405180830381600087803b15801561179a57600080fd5b505af11580156117ae573d6000803e3d6000fd5b5050505050565b600d6020526000908152604090205481565b600061148160038363ffffffff611d3f16565b6117e2611992565b6117ea6119b7565b60005b815181101561187e57600782828151811061180457fe5b60200260200101516040516118199190612dc5565b9081526040519081900360200190205460ff16611876576001600783838151811061184057fe5b60200260200101516040516118559190612dc5565b908152604051908190036020019020805491151560ff199092169190911790555b6001016117ed565b5050565b61188b33611415565b61153d5760405162461bcd60e51b81526004016107b390613168565b600e546001600160a01b031681565b600a6020526000908152604090205481565b6001600160a01b0381166118ee5760405162461bcd60e51b81526004016107b3906130f8565b6118f6611992565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b600c6020526000908152604090205481565b61153d611937611c39565b611cf7565b611944611992565b6001600160a01b03166000908152600860205260409020805460ff19169055565b805160208183018101805160078252928201919093012091525460ff1681565b6006818154811061108a57fe5b61199b336117c7565b61153d5760405162461bcd60e51b81526004016107b390613138565b6119bf611564565b61153d5760405162461bcd60e51b81526004016107b390613188565b60055460028102600381066119f357600390046119fb565b600390046001015b835181811080611a0a57508281115b15611a275760405162461bcd60e51b81526004016107b390613068565b606081604051908082528060200260200182016040528015611a53578160200160208202803883390190505b50905060005b82811015611ab0576000611a8089898481518110611a7357fe5b6020026020010151611ee3565b905080838381518110611a8f57fe5b6001600160a01b039092166020928302919091019091015250600101611a59565b50600085611b415760005b85811015611b3b57600060058281548110611ad257fe5b60009182526020822001546001600160a01b031691505b85811015611b3157848181518110611afd57fe5b60200260200101516001600160a01b0316826001600160a01b03161415611b2957836001019350611b31565b600101611ae9565b5050600101611abb565b50611bc6565b60005b85811015611bc457600060068281548110611b5b57fe5b60009182526020822001546001600160a01b031691505b85811015611bba57848181518110611b8657fe5b60200260200101516001600160a01b0316826001600160a01b03161415611bb257836001019350611bba565b600101611b72565b5050600101611b44565b505b83811015611be65760405162461bcd60e51b81526004016107b390613158565b5050505050505050565b6000611c3283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f6c565b9392505050565b3390565b611c4e60048263ffffffff611f9816565b6040516001600160a01b038216907fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f90600090a250565b611c8d611564565b1561153d5760405162461bcd60e51b81526004016107b390613178565b4690565b611cb781611ea7565b611cd35760405162461bcd60e51b81526004016107b3906130d8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b611d0860048263ffffffff611fe416565b6040516001600160a01b038216907f270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b690600090a250565b60006001600160a01b038216611d675760405162461bcd60e51b81526004016107b390613118565b506001600160a01b03166000908152602091909152604090205460ff1690565b611d9860038263ffffffff611fe416565b6040516001600160a01b038216907f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16590600090a250565b611de060018263ffffffff611fe416565b6040516001600160a01b038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b611e2860038263ffffffff611f9816565b6040516001600160a01b038216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b611e7060018263ffffffff611f9816565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590611edb5750808214155b949350505050565b60008151604114611ef357600080fd5b60208201516040830151604184015160ff16601b811015611f1257601b015b60018682858560405160008152602001604052604051611f359493929190612fd9565b6020604051602081039080840390855afa158015611f57573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b60008184841115611f905760405162461bcd60e51b81526004016107b39190613017565b505050900390565b611fa28282611d3f565b15611fbf5760405162461bcd60e51b81526004016107b390613048565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b611fee8282611d3f565b61200a5760405162461bcd60e51b81526004016107b3906130e8565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b82805482825590600052602060002090810192821561208e579160200282015b8281111561208e578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0390911617825560209092019160019091019061204c565b5061209a92915061209e565b5090565b61156b91905b8082111561209a57805473ffffffffffffffffffffffffffffffffffffffff191681556001016120a4565b8035611481816132c3565b600082601f8301126120eb57600080fd5b81356120fe6120f9826131dd565b6131b6565b9150818183526020840193506020810190508385602084028201111561212357600080fd5b60005b8381101561214f578161213988826120cf565b8452506020928301929190910190600101612126565b5050505092915050565b600082601f83011261216a57600080fd5b81356121786120f9826131dd565b81815260209384019390925082018360005b8381101561214f57813586016121a08882612213565b845250602092830192919091019060010161218a565b600082601f8301126121c757600080fd5b81356121d56120f9826131dd565b81815260209384019390925082018360005b8381101561214f57813586016121fd8882612213565b84525060209283019291909101906001016121e7565b600082601f83011261222457600080fd5b81356122326120f9826131fe565b9150808252602083016020830185838301111561224e57600080fd5b612259838284613266565b50505092915050565b8035611481816132d7565b8051611481816132d7565b60006020828403121561228a57600080fd5b6000611edb84846120cf565b60008060008060008060c087890312156122af57600080fd5b60006122bb89896120cf565b96505060206122cc89828a016120cf565b95505060406122dd89828a016120cf565b94505060606122ee89828a01612262565b935050608087013567ffffffffffffffff81111561230b57600080fd5b61231789828a01612213565b92505060a087013567ffffffffffffffff81111561233457600080fd5b61234089828a01612159565b9150509295509295509295565b60008060006060848603121561236257600080fd5b600061236e86866120cf565b935050602061237f86828701612262565b925050604084013567ffffffffffffffff81111561239c57600080fd5b6123a886828701612159565b9150509250925092565b6000806000606084860312156123c757600080fd5b60006123d386866120cf565b93505060206123e486828701612262565b92505060406123a886828701612262565b6000806000806080858703121561240b57600080fd5b600061241787876120cf565b945050602061242887828801612262565b935050604061243987828801612262565b925050606085013567ffffffffffffffff81111561245657600080fd5b61246287828801612159565b91505092959194509250565b6000806040838503121561248157600080fd5b823567ffffffffffffffff81111561249857600080fd5b6124a4858286016120da565b925050602083013567ffffffffffffffff8111156124c157600080fd5b6124cd858286016120da565b9150509250929050565b6000602082840312156124e957600080fd5b813567ffffffffffffffff81111561250057600080fd5b611edb84828501612159565b60006020828403121561251e57600080fd5b813567ffffffffffffffff81111561253557600080fd5b611edb848285016121b6565b60006020828403121561255357600080fd5b813567ffffffffffffffff81111561256a57600080fd5b611edb84828501612213565b60006020828403121561258857600080fd5b6000611edb8484612262565b6000602082840312156125a657600080fd5b6000611edb848461226d565b6125bb81613255565b82525050565b6125bb81613233565b6125bb6125d682613233565b6132a2565b6125bb8161323e565b6125bb8161156b565b60006125f882613226565b612602818561322a565b9350612612818560208601613272565b61261b816132b3565b9093019392505050565b600061263082613226565b61263a8185611469565b935061264a818560208601613272565b9290920192915050565b6000612661600783611469565b7f7570677261646500000000000000000000000000000000000000000000000000815260070192915050565b600061269a60238361322a565b7f636f6c642077616c6c65742062616c616e636520697320696e7375666669636981527f656e740000000000000000000000000000000000000000000000000000000000602082015260400192915050565b60006126f960148361322a565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000815260200192915050565b6000612732601f8361322a565b7f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500815260200192915050565b600061276b60238361322a565b7f616c6c6f77616e6365206166746572206465706f736974206973206e6f74207a81527f65726f0000000000000000000000000000000000000000000000000000000000602082015260400192915050565b60006127ca60118361322a565b7f7369676e617475726520696e76616c6964000000000000000000000000000000815260200192915050565b600061280360308361322a565b7f506175736572526f6c653a2063616c6c657220646f6573206e6f74206861766581527f207468652050617573657220726f6c6500000000000000000000000000000000602082015260400192915050565b6000612862600f8361322a565b7f696e636f727265637420626f756e640000000000000000000000000000000000815260200192915050565b600061289b60098361322a565b6810dbdb19151bd21bdd60ba1b815260200192915050565b60006128c0600983611469565b6810dbdb19151bd21bdd60ba1b815260090192915050565b60006128e5600983611469565b7f486f74546f436f6c640000000000000000000000000000000000000000000000815260090192915050565b600061291e600c8361322a565b7f756e7361666520746f6b656e0000000000000000000000000000000000000000815260200192915050565b6000612957601f8361322a565b7f686f742077616c6c65742062616c616e636520696e73756666696369656e7400815260200192915050565b600061299060178361322a565b7f66696e6973686564206275726e206f7065726174696f6e000000000000000000815260200192915050565b60006129c960108361322a565b7f5061757361626c653a2070617573656400000000000000000000000000000000815260200192915050565b6000612a0260148361322a565b7f6e6f6e2d636f6e74726163742061646472657373000000000000000000000000815260200192915050565b6000612a3b60218361322a565b7f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c81527f6500000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000612a9a60178361322a565b7f72656c617965722061646472657373206973207a65726f000000000000000000815260200192915050565b6000612ad3600f8361322a565b7f696e636f7272656374206e6f6e63650000000000000000000000000000000000815260200192915050565b6000612b0c60228361322a565b7f526f6c65733a206163636f756e7420697320746865207a65726f20616464726581527f7373000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000612b6b60408361322a565b7f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732081527f6e6f742068617665207468652057686974656c69737441646d696e20726f6c65602082015260400192915050565b6000612bca602c8361322a565b7f63616c6c657220646f6573206e6f742068617665207468652057686974656c6981527f737441646d696e20726f6c650000000000000000000000000000000000000000602082015260400192915050565b6000612c2960128361322a565b7f5245454e5452414e43595f494c4c4547414c0000000000000000000000000000815260200192915050565b6000612c6260178361322a565b7f696e73756666696369656e74207369676e617475726573000000000000000000815260200192915050565b6000612c9b600d8361322a565b7f6e6f7420637573746f6469616e00000000000000000000000000000000000000815260200192915050565b6000612cd460068361322a565b7f7061757365640000000000000000000000000000000000000000000000000000815260200192915050565b6000612d0d600a8361322a565b7f6e6f742070617573656400000000000000000000000000000000000000000000815260200192915050565b6000612d46600483611469565b7f6275726e00000000000000000000000000000000000000000000000000000000815260040192915050565b6000612d7f60198361322a565b7f5f666163746f7279206d75737420626520636f6e747261637400000000000000815260200192915050565b6125bb612db78261156b565b61156b565b6125bb8161324f565b6000611c328284612625565b6000612ddc82612654565b9150612de882866125ca565b601482019150612df882856125ca565b601482019150612e088284612dab565b506020019392505050565b6000612e1e826128b3565b9150612e2a82876125ca565b601482019150612e3a82866125ca565b601482019150612e4a8285612dab565b602082019150612e5a8284612dab565b50602001949350505050565b6000612ddc826128d8565b6000612e7d828a612dab565b602082019150612e8c82612d39565b9150612e9882896125ca565b601482019150612ea882886125ca565b601482019150612eb882876125ca565b601482019150612ec882866125ca565b601482019150612ed88285612dab565b602082019150612ee88284612625565b9998505050505050505050565b6020810161148182846125c1565b6020810161148182846125b2565b60408101612f1f82856125b2565b611c3260208301846125b2565b60608101612f3a82866125b2565b8181036020830152612f4c81856125ed565b9050611edb60408301846125c1565b60408101612f6982856125c1565b611c3260208301846125e4565b60408101612f6982856125b2565b60608101612f9282866125b2565b612f9f60208301856125e4565b611edb60408301846125c1565b60408101612fba82846125c1565b8181036020830152611c328161288e565b6020810161148182846125db565b60808101612fe782876125e4565b612ff46020830186612dbc565b61300160408301856125e4565b61300e60608301846125e4565b95945050505050565b60208082528101611c3281846125ed565b602080825281016114818161268d565b60208082528101611481816126ec565b6020808252810161148181612725565b602080825281016114818161275e565b60208082528101611481816127bd565b60208082528101611481816127f6565b6020808252810161148181612855565b6020808252810161148181612911565b602080825281016114818161294a565b6020808252810161148181612983565b60208082528101611481816129bc565b60208082528101611481816129f5565b6020808252810161148181612a2e565b6020808252810161148181612a8d565b6020808252810161148181612ac6565b6020808252810161148181612aff565b6020808252810161148181612b5e565b6020808252810161148181612bbd565b6020808252810161148181612c1c565b6020808252810161148181612c55565b6020808252810161148181612c8e565b6020808252810161148181612cc7565b6020808252810161148181612d00565b6020808252810161148181612d72565b6020810161148182846125e4565b60405181810167ffffffffffffffff811182821017156131d557600080fd5b604052919050565b600067ffffffffffffffff8211156131f457600080fd5b5060209081020190565b600067ffffffffffffffff82111561321557600080fd5b506020601f91909101601f19160190565b5190565b90815260200190565b600061148182613243565b151590565b6001600160a01b031690565b60ff1690565b600061148182600061148182613233565b82818337506000910152565b60005b8381101561328d578181015183820152602001613275565b8381111561329c576000848401525b50505050565b6000611481826000611481826132bd565b601f01601f191690565b60601b90565b6132cc81613233565b8114610b4257600080fd5b6132cc8161156b56fea365627a7a72315820c7e73d186d5a2dfd47dda30b5cea910993863de3ca732494b9ca51ac08b9678e6c6578706572696d656e74616cf564736f6c63430005100040
[codex:503394]
[codex:503394] thinking
[codex:503394] **Analyzing bytecode for exploit paths**
[codex:503394]
[codex:503394] I'm planning to parse the smart contract bytecode searching for specific opcodes like DELEGATECALL, CALL, and SELFDESTRUCT that could indicate vulnerabilities. I'll use heuristics and a Python disassembler script to identify potential exploit paths, focusing on upgradeability and unauthorized calls, while ensuring to only report concrete exploit findings.
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] from binascii import unhexlify
[codex:503394] import re
[codex:503394]
[codex:503394] hexdata = open('BYTECODE_BUNDLE.txt').read()
[codex:503394] # extract hex after 0x
[codex:503394] m = re.search(r'0x([0-9a-fA-F]+)', hexdata)
[codex:503394] code_hex = m.group(1)
[codex:503394] code = unhexlify(code_hex)
[codex:503394]
[codex:503394] # simple opcode map
[codex:503394] ops = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:503394] # add others
[codex:503394] opnames = {
[codex:503394] 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:503394] 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:503394] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:503394] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:503394] 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:503394] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:503394] }
[codex:503394]
[codex:503394] ops.update(opnames)
[codex:503394]
[codex:503394] # disassemble and record calls
[codex:503394] calls = []
[codex:503394] selfdestructs = []
[codex:503394] stores = []
[codex:503394]
[codex:503394] pc=0
[codex:503394] while pc < len(code):
[codex:503394] op = code[pc]
[codex:503394] opname = ops.get(op, f'OP{op:02x}')
[codex:503394] if opname.startswith('PUSH'):
[codex:503394] n = op-0x5f
[codex:503394] data = code[pc+1:pc+1+n]
[codex:503394] pc_next = pc+1+n
[codex:503394] else:
[codex:503394] data = b''
[codex:503394] pc_next = pc+1
[codex:503394] # record
[codex:503394] if op in (0xf1,0xf2,0xf4,0xfa,0xff):
[codex:503394] calls.append((pc, opname))
[codex:503394] if op==0x55:
[codex:503394] stores.append(pc)
[codex:503394] pc = pc_next
[codex:503394]
[codex:503394] print('code length', len(code))
[codex:503394] print('CALL/DELEGATECALL/STATICCALL/SELFDESTRUCT:', calls[:20], '... total', len(calls))
[codex:503394] print('SELFDESTRUCTs', [pc for pc,op in calls if op=='SELFDESTRUCT'])
[codex:503394] print('SSTORE count', len(stores))
[codex:503394]
[codex:503394] # list all DELEGATECALL offsets
[codex:503394] print('DELEGATECALL offsets', [pc for pc,op in calls if op=='DELEGATECALL'])
[codex:503394] print('CALL offsets', [pc for pc,op in calls if op=='CALL'][:20])
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr succeeded in 33ms:
[codex:503394] code length 13091
[codex:503394] CALL/DELEGATECALL/STATICCALL/SELFDESTRUCT: [(2309, 'CALL'), (2472, 'STATICCALL'), (2684, 'CALL'), (3225, 'CALL'), (3284, 'CALL'), (3392, 'STATICCALL'), (3608, 'CALL'), (3731, 'CALL'), (3850, 'STATICCALL'), (4012, 'CALL'), (4752, 'CALL'), (4860, 'STATICCALL'), (5053, 'CALL'), (6045, 'CALL'), (8006, 'STATICCALL')] ... total 15
[codex:503394] SELFDESTRUCTs []
[codex:503394] SSTORE count 25
[codex:503394] DELEGATECALL offsets []
[codex:503394] CALL offsets [2309, 2684, 3225, 3284, 3608, 3731, 4012, 4752, 5053, 6045]
[codex:503394]
[codex:503394] thinking
[codex:503394] **Examining upgrade and access control patterns**
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] from binascii import unhexlify
[codex:503394] import re
[codex:503394] hexdata = open('BYTECODE_BUNDLE.txt').read()
[codex:503394] code_hex = re.search(r'0x([0-9a-fA-F]+)', hexdata).group(1)
[codex:503394] code = unhexlify(code_hex)
[codex:503394]
[codex:503394] ops = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:503394] opnames = {
[codex:503394] 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:503394] 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:503394] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:503394] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:503394] 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:503394] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:503394] }
[codex:503394] ops.update(opnames)
[codex:503394]
[codex:503394] # Build disassembly list with pc
[codex:503394] pc=0
[codex:503394] insts=[]
[codex:503394] while pc < len(code):
[codex:503394] op=code[pc]
[codex:503394] opname=ops.get(op, f'OP{op:02x}')
[codex:503394] if opname.startswith('PUSH'):
[codex:503394] n=op-0x5f
[codex:503394] data=code[pc+1:pc+1+n]
[codex:503394] insts.append((pc,opname,data.hex()))
[codex:503394] pc+=1+n
[codex:503394] else:
[codex:503394] insts.append((pc,opname,None))
[codex:503394] pc+=1
[codex:503394]
[codex:503394] call_pcs=[2309,2684,3225,3284,3608,3731,4012,4752,5053,6045]
[codex:503394]
[codex:503394] # print window around each call
[codex:503394] for target in call_pcs:
[codex:503394] print('\\n=== around', target, '===')
[codex:503394] # find index
[codex:503394] idx = next(i for i,(pc,_,_) in enumerate(insts) if pc==target)
[codex:503394] for pc,op,arg in insts[max(0,idx-10):idx+10]:
[codex:503394] if arg is None:
[codex:503394] print(f'{pc:04x}: {op}')
[codex:503394] else:
[codex:503394] print(f'{pc:04x}: {op} 0x{arg}')
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr succeeded in 32ms:
[codex:503394]
[codex:503394] === around 2309 ===
[codex:503394] 08fa: OP90
[codex:503394] 08fb: OP83
[codex:503394] 08fc: OP90
[codex:503394] 08fd: PUSH1 0x00
[codex:503394] 08ff: OP81
[codex:503394] 0900: OP81
[codex:503394] 0901: OP81
[codex:503394] 0902: OP85
[codex:503394] 0903: OP88
[codex:503394] 0904: OP88
[codex:503394] 0905: CALL
[codex:503394] 0906: OP93
[codex:503394] 0907: POP
[codex:503394] 0908: POP
[codex:503394] 0909: POP
[codex:503394] 090a: POP
[codex:503394] 090b: ISZERO
[codex:503394] 090c: OP80
[codex:503394]
[codex:503394] thinking
[codex:503394] **Improving opcode mapping for analysis**
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] from binascii import unhexlify
[codex:503394] import re
[codex:503394]
[codex:503394] hexdata = open('BYTECODE_BUNDLE.txt').read()
[codex:503394] code_hex = re.search(r'0x([0-9a-fA-F]+)', hexdata).group(1)
[codex:503394] code = unhexlify(code_hex)
[codex:503394]
[codex:503394] ops = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:503394] ops.update({i: f'DUP{i-0x7f}' for i in range(0x80,0x90)})
[codex:503394] ops.update({i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
[codex:503394] ops.update({i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
[codex:503394]
[codex:503394] opnames = {
[codex:503394] 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:503394] 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:503394] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:503394] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:503394] 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:503394] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:503394] }
[codex:503394]
[codex:503394] ops.update(opnames)
[codex:503394]
[codex:503394] # Build disassembly list with pc
[codex:503394] pc=0
[codex:503394] insts=[]
[codex:503394] while pc < len(code):
[codex:503394] op=code[pc]
[codex:503394] opname=ops.get(op, f'OP{op:02x}')
[codex:503394] if opname.startswith('PUSH'):
[codex:503394] n=op-0x5f
[codex:503394] data=code[pc+1:pc+1+n]
[codex:503394] insts.append((pc,opname,data.hex()))
[codex:503394] pc+=1+n
[codex:503394] else:
[codex:503394] insts.append((pc,opname,None))
[codex:503394] pc+=1
[codex:503394]
[codex:503394] call_pcs=[2309,2684,3225,3284,3608,3731,4012,4752,5053,6045]
[codex:503394]
[codex:503394] # function to print window
[codex:503394]
[codex:503394] def print_window(target, before=20, after=20):
[codex:503394] idx = next(i for i,(pc,_,_) in enumerate(insts) if pc==target)
[codex:503394] for pc,op,arg in insts[max(0,idx-before):idx+after]:
[codex:503394] if arg is None:
[codex:503394] print(f'{pc:04x}: {op}')
[codex:503394] else:
[codex:503394] print(f'{pc:04x}: {op} 0x{arg}')
[codex:503394]
[codex:503394] for target in call_pcs:
[codex:503394] print('\\n=== around', hex(target), '===')
[codex:503394] print_window(target)
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr succeeded in 32ms:
[codex:503394]
[codex:503394] === around 0x905 ===
[codex:503394] 08ec: PUSH1 0x01
[codex:503394] 08ee: PUSH1 0xa0
[codex:503394] 08f0: SHL
[codex:503394] 08f1: SUB
[codex:503394] 08f2: AND
[codex:503394] 08f3: SWAP1
[codex:503394] 08f4: DUP3
[codex:503394] 08f5: ISZERO
[codex:503394] 08f6: PUSH2 0x08fc
[codex:503394] 08f9: MUL
[codex:503394] 08fa: SWAP1
[codex:503394] 08fb: DUP4
[codex:503394] 08fc: SWAP1
[codex:503394] 08fd: PUSH1 0x00
[codex:503394] 08ff: DUP2
[codex:503394] 0900: DUP2
[codex:503394] 0901: DUP2
[codex:503394] 0902: DUP6
[codex:503394]
[codex:503394] thinking
[codex:503394] **Analyzing CALL patterns and access controls**
[codex:503394]
[codex:503394] I'm investigating CALL opcodes to infer if ETH value is transferred, checking for zero or non-zero values via stack or CALLVALUE/SELFBALANCE usage. I want to identify if any external functions use CALLER to send tokens or ETH without proper access control, especially in likely withdraw functions, by examining opcode patterns like CALLER and SLOAD and their context. This approach should help find potential exploits or confirm none exist.
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] from binascii import unhexlify
[codex:503394] import re
[codex:503394] hexdata = open('BYTECODE_BUNDLE.txt').read()
[codex:503394] code_hex = re.search(r'0x([0-9a-fA-F]+)', hexdata).group(1)
[codex:503394] code = unhexlify(code_hex)
[codex:503394]
[codex:503394] # disassemble with pc
[codex:503394] ops = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:503394] ops.update({i: f'DUP{i-0x7f}' for i in range(0x80,0x90)})
[codex:503394] ops.update({i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
[codex:503394] ops.update({i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
[codex:503394]
[codex:503394] opnames = {
[codex:503394] 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:503394] 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:503394] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:503394] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:503394] 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:503394] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:503394] }
[codex:503394] ops.update(opnames)
[codex:503394]
[codex:503394] insts=[]
[codex:503394] pc=0
[codex:503394] while pc < len(code):
[codex:503394] op=code[pc]
[codex:503394] opname=ops.get(op, f'OP{op:02x}')
[codex:503394] if opname.startswith('PUSH'):
[codex:503394] n=op-0x5f
[codex:503394] data=code[pc+1:pc+1+n]
[codex:503394] insts.append((pc,opname,data.hex()))
[codex:503394] pc+=1+n
[codex:503394] else:
[codex:503394] insts.append((pc,opname,None))
[codex:503394] pc+=1
[codex:503394]
[codex:503394] # find CALLER occurrences and print small context
[codex:503394] for i,(pc,op,arg) in enumerate(insts):
[codex:503394] if op=='CALLER':
[codex:503394] print('\\nCALLER at', hex(pc))
[codex:503394] for pc2,op2,arg2 in insts[max(0,i-5):i+10]:
[codex:503394] if arg2 is None:
[codex:503394] print(f'{pc2:04x}: {op2}')
[codex:503394] else:
[codex:503394] print(f'{pc2:04x}: {op2} 0x{arg2}')
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr succeeded in 33ms:
[codex:503394]
[codex:503394] CALLER at 0x1886
[codex:503394] 187f: POP
[codex:503394] 1880: POP
[codex:503394] 1881: JUMP
[codex:503394] 1882: JUMPDEST
[codex:503394] 1883: PUSH2 0x188b
[codex:503394] 1886: CALLER
[codex:503394] 1887: PUSH2 0x1415
[codex:503394] 188a: JUMP
[codex:503394] 188b: JUMPDEST
[codex:503394] 188c: PUSH2 0x153d
[codex:503394] 188f: JUMPI
[codex:503394] 1890: PUSH1 0x40
[codex:503394] 1892: MLOAD
[codex:503394] 1893: PUSH3 0x461bcd
[codex:503394] 1897: PUSH1 0xe5
[codex:503394]
[codex:503394] CALLER at 0x1996
[codex:503394] 198d: PUSH2 0x108a
[codex:503394]
[codex:503394] thinking
[codex:503394] **Analyzing CALLER usage in functions**
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] from binascii import unhexlify
[codex:503394] import re
[codex:503394] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:503394] code_hex=re.search(r'0x([0-9a-fA-F]+)',hexdata).group(1)
[codex:503394] code=unhexlify(code_hex)
[codex:503394]
[codex:503394] ops={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:503394] ops.update({i: f'DUP{i-0x7f}' for i in range(0x80,0x90)})
[codex:503394] ops.update({i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
[codex:503394] ops.update({i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
[codex:503394]
[codex:503394] opnames={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:503394] ops.update(opnames)
[codex:503394]
[codex:503394] # disassemble
[codex:503394] insts=[]
[codex:503394] pc=0
[codex:503394] while pc < len(code):
[codex:503394] op=code[pc]
[codex:503394] opname=ops.get(op,f'OP{op:02x}')
[codex:503394] if opname.startswith('PUSH'):
[codex:503394] n=op-0x5f
[codex:503394] data=code[pc+1:pc+1+n]
[codex:503394] insts.append((pc,opname,data.hex()))
[codex:503394] pc+=1+n
[codex:503394] else:
[codex:503394] insts.append((pc,opname,None))
[codex:503394] pc+=1
[codex:503394]
[codex:503394] # function to print window
[codex:503394]
[codex:503394] def print_window(target, before=20, after=30):
[codex:503394] idx=next(i for i,(pc,_,_) in enumerate(insts) if pc==target)
[codex:503394] for pc,op,arg in insts[max(0,idx-before):idx+after]:
[codex:503394] if arg is None:
[codex:503394] print(f'{pc:04x}: {op}')
[codex:503394] else:
[codex:503394] print(f'{pc:04x}: {op} 0x{arg}')
[codex:503394]
[codex:503394] print_window(0x1415)
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr succeeded in 30ms:
[codex:503394] 13f1: PUSH2 0x140c
[codex:503394] 13f4: JUMPI
[codex:503394] 13f5: PUSH1 0x40
[codex:503394] 13f7: MLOAD
[codex:503394] 13f8: PUSH3 0x461bcd
[codex:503394] 13fc: PUSH1 0xe5
[codex:503394] 13fe: SHL
[codex:503394] 13ff: DUP2
[codex:503394] 1400: MSTORE
[codex:503394] 1401: PUSH1 0x04
[codex:503394] 1403: ADD
[codex:503394] 1404: PUSH2 0x07b3
[codex:503394] 1407: SWAP1
[codex:503394] 1408: PUSH2 0x3128
[codex:503394] 140b: JUMP
[codex:503394] 140c: JUMPDEST
[codex:503394] 140d: PUSH2 0x0b42
[codex:503394] 1410: DUP2
[codex:503394] 1411: PUSH2 0x1cf7
[codex:503394] 1414: JUMP
[codex:503394]
[codex:503394] thinking
[codex:503394] **Analyzing internal array lookup function**
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] from binascii import unhexlify
[codex:503394] import re
[codex:503394] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:503394] code_hex=re.search(r'0x([0-9a-fA-F]+)',hexdata).group(1)
[codex:503394] code=unhexlify(code_hex)
[codex:503394]
[codex:503394] ops={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:503394] ops.update({i: f'DUP{i-0x7f}' for i in range(0x80,0x90)})
[codex:503394] ops.update({i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
[codex:503394] ops.update({i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
[codex:503394]
[codex:503394] opnames={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:503394] ops.update(opnames)
[codex:503394]
[codex:503394] insts=[]
[codex:503394] pc=0
[codex:503394] while pc < len(code):
[codex:503394] op=code[pc]
[codex:503394] opname=ops.get(op,f'OP{op:02x}')
[codex:503394] if opname.startswith('PUSH'):
[codex:503394] n=op-0x5f
[codex:503394] data=code[pc+1:pc+1+n]
[codex:503394] insts.append((pc,opname,data.hex()))
[codex:503394] pc+=1+n
[codex:503394] else:
[codex:503394] insts.append((pc,opname,None))
[codex:503394] pc+=1
[codex:503394]
[codex:503394]
[codex:503394] def print_window(target, before=20, after=30):
[codex:503394] idx=next(i for i,(pc,_,_) in enumerate(insts) if pc==target)
[codex:503394] for pc,op,arg in insts[max(0,idx-before):idx+after]:
[codex:503394] if arg is None:
[codex:503394] print(f'{pc:04x}: {op}')
[codex:503394] else:
[codex:503394] print(f'{pc:04x}: {op} 0x{arg}')
[codex:503394]
[codex:503394] print_window(0x17c7)
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr succeeded in 37ms:
[codex:503394] 17af: POP
[codex:503394] 17b0: POP
[codex:503394] 17b1: POP
[codex:503394] 17b2: POP
[codex:503394] 17b3: POP
[codex:503394] 17b4: JUMP
[codex:503394] 17b5: JUMPDEST
[codex:503394] 17b6: PUSH1 0x0d
[codex:503394] 17b8: PUSH1 0x20
[codex:503394] 17ba: MSTORE
[codex:503394] 17bb: PUSH1 0x00
[codex:503394] 17bd: SWAP1
[codex:503394] 17be: DUP2
[codex:503394] 17bf: MSTORE
[codex:503394] 17c0: PUSH1 0x40
[codex:503394] 17c2: SWAP1
[codex:503394] 17c3: SHA3
[codex:503394] 17c4: SLOAD
[codex:503394] 17c5: DUP2
[codex:503394] 17c6: JUMP
[codex:503394]
[codex:503394] thinking
[codex:503394] **Analyzing potential token transfer functions**
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] import re
[codex:503394] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:503394] code_hex=re.search(r'0x([0-9a-fA-F]+)',hexdata).group(1)
[codex:503394] for sel in ['a9059cbb','095ea7b3','23b872dd','70a08231','dd62ed3e','f640d508','9d575582','5bb47808']:
[codex:503394] print(sel, 'found at', [m.start() for m in re.finditer(sel, code_hex)])
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr succeeded in 24ms:
[codex:503394] a9059cbb found at [5220, 5270, 7884, 7926, 9362, 9406]
[codex:503394] 095ea7b3 found at [7026, 7118]
[codex:503394] 23b872dd found at []
[codex:503394] 70a08231 found at [4802, 4854, 6644, 6694, 9572, 9626]
[codex:503394] dd62ed3e found at [7510, 7604]
[codex:503394] f640d508 found at [9910, 10004]
[codex:503394] 9d575582 found at [7264, 7358]
[codex:503394] 5bb47808 found at [11902, 11996]
[codex:503394]
[codex:503394] thinking
[codex:503394] **Analyzing token transfer selectors**
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] from binascii import unhexlify
[codex:503394] import re
[codex:503394] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:503394] code_hex=re.search(r'0x([0-9a-fA-F]+)',hexdata).group(1)
[codex:503394] code=unhexlify(code_hex)
[codex:503394]
[codex:503394] # simple scan for pattern: PUSH4 <sel> EQ PUSH2 <dest> JUMPI
[codex:503394] # We'll disassemble and then look for PUSH4 followed by EQ, PUSH2, JUMPI in instruction stream.
[codex:503394]
[codex:503394] ops = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:503394] ops.update({i: f'DUP{i-0x7f}' for i in range(0x80,0x90)})
[codex:503394] ops.update({i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
[codex:503394] ops.update({i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
[codex:503394]
[codex:503394] opnames={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:503394] ops.update(opnames)
[codex:503394]
[codex:503394] # disassemble
[codex:503394] insts=[]
[codex:503394] pc=0
[codex:503394] while pc < len(code):
[codex:503394] op=code[pc]
[codex:503394] opname=ops.get(op,f'OP{op:02x}')
[codex:503394] if opname.startswith('PUSH'):
[codex:503394] n=op-0x5f
[codex:503394] data=code[pc+1:pc+1+n]
[codex:503394] insts.append((pc,opname,data.hex()))
[codex:503394] pc+=1+n
[codex:503394] else:
[codex:503394] insts.append((pc,opname,None))
[codex:503394] pc+=1
[codex:503394]
[codex:503394] # scan for PUSH4 selector pattern
[codex:503394] for i in range(len(insts)-4):
[codex:503394] pc,op,arg = insts[i]
[codex:503394] if op=='PUSH4':
[codex:503394] if insts[i+1][1]=='EQ' and insts[i+2][1]=='PUSH2' and insts[i+3][1]=='JUMPI':
[codex:503394] sel = arg
[codex:503394] dest = insts[i+2][2]
[codex:503394] print(f'selector 0x{sel} -> 0x{dest}')
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr succeeded in 35ms:
[codex:503394] selector 0xdc5724e4 -> 0x06f1
[codex:503394] selector 0xfb80c747 -> 0x0711
[codex:503394] selector 0xfc0a7f03 -> 0x0731
[codex:503394] selector 0xd50fd1f4 -> 0x06bc
[codex:503394] selector 0xd6cd9473 -> 0x06dc
[codex:503394] selector 0xd0e30db0 -> 0x0674
[codex:503394] selector 0xd121b696 -> 0x067c
[codex:503394] selector 0xd29ab55b -> 0x069c
[codex:503394] selector 0xca44f465 -> 0x064a
[codex:503394] selector 0xd0134296 -> 0x065f
[codex:503394] selector 0xa971a0ad -> 0x05ea
[codex:503394] selector 0xbb5f747b -> 0x060a
[codex:503394] selector 0xbba15758 -> 0x062a
[codex:503394] selector 0x8456cb59 -> 0x05b5
[codex:503394] selector 0x97833876 -> 0x05ca
[codex:503394] selector 0x7362d9c8 -> 0x0555
[codex:503394] selector 0x82dc1ec4 -> 0x0575
[codex:503394] selector 0x83453832 -> 0x0595
[codex:503394] selector 0x6be13c92 -> 0x052b
[codex:503394] selector 0x6ef8d66d -> 0x0540
[codex:503394]
[codex:503394] thinking
[codex:503394] **Analyzing function entries for token transfers**
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] from binascii import unhexlify
[codex:503394] import re
[codex:503394] hexdata=open('BYTECODE_BUNDLE.txt').read();
[codex:503394] code_hex=re.search(r'0x([0-9a-fA-F]+)', hexdata).group(1)
[codex:503394] code=unhexlify(code_hex)
[codex:503394]
[codex:503394] # disassemble to find CALLVALUE
[codex:503394] ops={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:503394] ops.update({i: f'DUP{i-0x7f}' for i in range(0x80,0x90)})
[codex:503394] ops.update({i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
[codex:503394] ops.update({i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
[codex:503394]
[codex:503394] opnames={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:503394] ops.update(opnames)
[codex:503394]
[codex:503394] insts=[]
[codex:503394] pc=0
[codex:503394] while pc < len(code):
[codex:503394] op=code[pc]
[codex:503394] opname=ops.get(op, f'OP{op:02x}')
[codex:503394] if opname.startswith('PUSH'):
[codex:503394] n=op-0x5f
[codex:503394] pc+=1+n
[codex:503394] else:
[codex:503394] if opname=='CALLVALUE':
[codex:503394] print('CALLVALUE at', hex(pc))
[codex:503394] pc+=1
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr succeeded in 29ms:
[codex:503394] CALLVALUE at 0x2be
[codex:503394] CALLVALUE at 0x2de
[codex:503394] CALLVALUE at 0x2fe
[codex:503394] CALLVALUE at 0x31e
[codex:503394] CALLVALUE at 0x33e
[codex:503394] CALLVALUE at 0x35e
[codex:503394] CALLVALUE at 0x394
[codex:503394] CALLVALUE at 0x3b6
[codex:503394] CALLVALUE at 0x3e3
[codex:503394] CALLVALUE at 0x403
[codex:503394] CALLVALUE at 0x423
[codex:503394] CALLVALUE at 0x443
[codex:503394] CALLVALUE at 0x463
[codex:503394] CALLVALUE at 0x483
[codex:503394] CALLVALUE at 0x498
[codex:503394] CALLVALUE at 0x4b8
[codex:503394] CALLVALUE at 0x4cd
[codex:503394] CALLVALUE at 0x4e2
[codex:503394] CALLVALUE at 0x4f7
[codex:503394] CALLVALUE at 0x50c
[codex:503394]
[codex:503394] thinking
[codex:503394] **Analyzing call value usage and upgrade safety**
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] from binascii import unhexlify
[codex:503394] import re
[codex:503394] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:503394] code_hex=re.search(r'0x([0-9a-fA-F]+)', hexdata).group(1)
[codex:503394] code=unhexlify(code_hex)
[codex:503394]
[codex:503394] needle=bytes.fromhex('360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc')
[codex:503394] idxs=[]
[codex:503394] start=0
[codex:503394] while True:
[codex:503394] i=code.find(needle,start)
[codex:503394] if i==-1: break
[codex:503394] idxs.append(i)
[codex:503394] start=i+1
[codex:503394] print('occurrences', idxs)
[codex:503394] # print around
[codex:503394] for i in idxs:
[codex:503394] print('around', hex(i))
[codex:503394] # print 40 bytes before/after
[codex:503394] print(code[i-20:i+60].hex())
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr succeeded in 26ms:
[codex:503394] occurrences [5441, 7381]
[codex:503394] around 0x1541
[codex:503394] 5b61153d611538611c39565b611d87565b565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60025460ff165b90565b600f5481565b61157c611992565b
[codex:503394] around 0x1cd5
[codex:503394] 1bcd60e51b81526004016107b3906130d8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b611d0860048263ffffffff611fe416565b6040516001600160
[codex:503394]
[codex:503394] thinking
[codex:503394] **Examining bytecode instructions**
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] from binascii import unhexlify
[codex:503394] import re
[codex:503394] hexdata=open('BYTECODE_BUNDLE.txt').read();
[codex:503394] code_hex=re.search(r'0x([0-9a-fA-F]+)', hexdata).group(1)
[codex:503394] code=unhexlify(code_hex)
[codex:503394]
[codex:503394] # disasm
[codex:503394] ops={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:503394] ops.update({i: f'DUP{i-0x7f}' for i in range(0x80,0x90)})
[codex:503394] ops.update({i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
[codex:503394] ops.update({i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
[codex:503394]
[codex:503394] opnames={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:503394] ops.update(opnames)
[codex:503394]
[codex:503394] insts=[]
[codex:503394] pc=0
[codex:503394] while pc < len(code):
[codex:503394] op=code[pc]; opname=ops.get(op,f'OP{op:02x}')
[codex:503394] if opname.startswith('PUSH'):
[codex:503394] n=op-0x5f; data=code[pc+1:pc+1+n]
[codex:503394] insts.append((pc,opname,data.hex()))
[codex:503394] pc+=1+n
[codex:503394] else:
[codex:503394] insts.append((pc,opname,None)); pc+=1
[codex:503394]
[codex:503394] # print around 0x153d
[codex:503394]
[codex:503394] def print_window(target, before=15, after=15):
[codex:503394] idx=next(i for i,(pc,_,_) in enumerate(insts) if pc==target)
[codex:503394] for pc,op,arg in insts[max(0,idx-before):idx+after]:
[codex:503394] if arg is None:
[codex:503394] print(f'{pc:04x}: {op}')
[codex:503394] else:
[codex:503394] print(f'{pc:04x}: {op} 0x{arg}')
[codex:503394]
[codex:503394] print_window(0x153d)
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr succeeded in 33ms:
[codex:503394] 151d: PUSH2 0x1481
[codex:503394] 1520: PUSH1 0x01
[codex:503394] 1522: DUP4
[codex:503394] 1523: PUSH4 0xffffffff
[codex:503394] 1528: PUSH2 0x1d3f
[codex:503394] 152b: AND
[codex:503394] 152c: JUMP
[codex:503394] 152d: JUMPDEST
[codex:503394] 152e: PUSH2 0x153d
[codex:503394] 1531: PUSH2 0x1538
[codex:503394] 1534: PUSH2 0x1c39
[codex:503394] 1537: JUMP
[codex:503394] 1538: JUMPDEST
[codex:503394] 1539: PUSH2 0x1d87
[codex:503394] 153c: JUMP
[codex:503394] 153d: JUMPDEST
[codex:503394] 153e: JUMP
[codex:503394] 153f: JUMPDEST
[codex:503394] 1540: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc
[codex:503394] 1561: SLOAD
[codex:503394]
[codex:503394] thinking
[codex:503394] **Inspecting contract storage access**
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] from binascii import unhexlify
[codex:503394] import re
[codex:503394] hexdata=open('BYTECODE_BUNDLE.txt').read();
[codex:503394] code_hex=re.search(r'0x([0-9a-fA-F]+)', hexdata).group(1)
[codex:503394] code=unhexlify(code_hex)
[codex:503394]
[codex:503394] # disasm
[codex:503394] ops={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:503394] ops.update({i: f'DUP{i-0x7f}' for i in range(0x80,0x90)})
[codex:503394] ops.update({i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
[codex:503394] ops.update({i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
[codex:503394]
[codex:503394] opnames={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:503394] ops.update(opnames)
[codex:503394]
[codex:503394] # disassemble
[codex:503394] insts=[]
[codex:503394] pc=0
[codex:503394] while pc < len(code):
[codex:503394] op=code[pc]; opname=ops.get(op,f'OP{op:02x}')
[codex:503394] if opname.startswith('PUSH'):
[codex:503394] n=op-0x5f; data=code[pc+1:pc+1+n]
[codex:503394] insts.append((pc,opname,data.hex()))
[codex:503394] pc+=1+n
[codex:503394] else:
[codex:503394] insts.append((pc,opname,None)); pc+=1
[codex:503394]
[codex:503394]
[codex:503394] def print_window(target, before=20, after=30):
[codex:503394] idx=next(i for i,(pc,_,_) in enumerate(insts) if pc==target)
[codex:503394] for pc,op,arg in insts[max(0,idx-before):idx+after]:
[codex:503394] if arg is None:
[codex:503394] print(f'{pc:04x}: {op}')
[codex:503394] else:
[codex:503394] print(f'{pc:04x}: {op} 0x{arg}')
[codex:503394]
[codex:503394] print_window(0x1cd5)
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr exited 1 in 39ms:
[codex:503394] Traceback (most recent call last):
[codex:503394] File "<stdin>", line 37, in <module>
[codex:503394] File "<stdin>", line 30, in print_window
[codex:503394] StopIteration
[codex:503394]
[codex:503394] thinking
[codex:503394] **Locating precise PUSH32 instruction**
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] from binascii import unhexlify
[codex:503394] import re
[codex:503394] hexdata=open('BYTECODE_BUNDLE.txt').read();
[codex:503394] code_hex=re.search(r'0x([0-9a-fA-F]+)', hexdata).group(1)
[codex:503394] code=unhexlify(code_hex)
[codex:503394]
[codex:503394] needle=bytes.fromhex('360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc')
[codex:503394] # find pc of PUSH32 start
[codex:503394] for i in range(len(code)):
[codex:503394] if code[i:i+32]==needle:
[codex:503394] # check if previous byte is PUSH32 opcode (0x7f)
[codex:503394] if i>0 and code[i-1]==0x7f:
[codex:503394] print('PUSH32 at pc', hex(i-1))
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr succeeded in 29ms:
[codex:503394] PUSH32 at pc 0x1540
[codex:503394] PUSH32 at pc 0x1cd4
[codex:503394]
[codex:503394] thinking
[codex:503394] **Disassembling around address 0x1cd4**
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] from binascii import unhexlify
[codex:503394] import re
[codex:503394] hexdata=open('BYTECODE_BUNDLE.txt').read();
[codex:503394] code_hex=re.search(r'0x([0-9a-fA-F]+)', hexdata).group(1)
[codex:503394] code=unhexlify(code_hex)
[codex:503394]
[codex:503394] ops={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:503394] ops.update({i: f'DUP{i-0x7f}' for i in range(0x80,0x90)})
[codex:503394] ops.update({i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
[codex:503394] ops.update({i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
[codex:503394]
[codex:503394] opnames={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:503394] ops.update(opnames)
[codex:503394]
[codex:503394] # disassemble
[codex:503394] insts=[]
[codex:503394] pc=0
[codex:503394] while pc < len(code):
[codex:503394] op=code[pc]; opname=ops.get(op,f'OP{op:02x}')
[codex:503394] if opname.startswith('PUSH'):
[codex:503394] n=op-0x5f; data=code[pc+1:pc+1+n]
[codex:503394] insts.append((pc,opname,data.hex()))
[codex:503394] pc+=1+n
[codex:503394] else:
[codex:503394] insts.append((pc,opname,None)); pc+=1
[codex:503394]
[codex:503394] # print window around 0x1cd4
[codex:503394]
[codex:503394] def print_window(target, before=25, after=25):
[codex:503394] idx=next(i for i,(pc,_,_) in enumerate(insts) if pc==target)
[codex:503394] for pc,op,arg in insts[max(0,idx-before):idx+after]:
[codex:503394] if arg is None:
[codex:503394] print(f'{pc:04x}: {op}')
[codex:503394] else:
[codex:503394] print(f'{pc:04x}: {op} 0x{arg}')
[codex:503394]
[codex:503394] print_window(0x1cd4)
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr succeeded in 31ms:
[codex:503394] 1cab: CHAINID
[codex:503394] 1cac: SWAP1
[codex:503394] 1cad: JUMP
[codex:503394] 1cae: JUMPDEST
[codex:503394] 1caf: PUSH2 0x1cb7
[codex:503394] 1cb2: DUP2
[codex:503394] 1cb3: PUSH2 0x1ea7
[codex:503394] 1cb6: JUMP
[codex:503394] 1cb7: JUMPDEST
[codex:503394] 1cb8: PUSH2 0x1cd3
[codex:503394] 1cbb: JUMPI
[codex:503394] 1cbc: PUSH1 0x40
[codex:503394] 1cbe: MLOAD
[codex:503394] 1cbf: PUSH3 0x461bcd
[codex:503394] 1cc3: PUSH1 0xe5
[codex:503394] 1cc5: SHL
[codex:503394] 1cc6: DUP2
[codex:503394] 1cc7: MSTORE
[codex:503394] 1cc8: PUSH1 0x04
[codex:503394] 1cca: ADD
[codex:503394]
[codex:503394] thinking
[codex:503394] **Analyzing access control check function**
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] from binascii import unhexlify
[codex:503394] import re
[codex:503394] hexdata=open('BYTECODE_BUNDLE.txt').read();
[codex:503394] code_hex=re.search(r'0x([0-9a-fA-F]+)', hexdata).group(1)
[codex:503394] code=unhexlify(code_hex)
[codex:503394]
[codex:503394] # disasm
[codex:503394] ops={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:503394] ops.update({i: f'DUP{i-0x7f}' for i in range(0x80,0x90)})
[codex:503394] ops.update({i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
[codex:503394] ops.update({i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
[codex:503394]
[codex:503394] opnames={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:503394] ops.update(opnames)
[codex:503394]
[codex:503394] # disassemble
[codex:503394] insts=[]
[codex:503394] pc=0
[codex:503394] while pc < len(code):
[codex:503394] op=code[pc]; opname=ops.get(op,f'OP{op:02x}')
[codex:503394] if opname.startswith('PUSH'):
[codex:503394] n=op-0x5f; data=code[pc+1:pc+1+n]
[codex:503394] insts.append((pc,opname,data.hex()))
[codex:503394] pc+=1+n
[codex:503394] else:
[codex:503394] insts.append((pc,opname,None)); pc+=1
[codex:503394]
[codex:503394] # find JUMPDEST at 0x1ea7
[codex:503394]
[codex:503394] def print_window(target, before=20, after=30):
[codex:503394] idx=next(i for i,(pc,_,_) in enumerate(insts) if pc==target)
[codex:503394] for pc,op,arg in insts[max(0,idx-before):idx+after]:
[codex:503394] if arg is None:
[codex:503394] print(f'{pc:04x}: {op}')
[codex:503394] else:
[codex:503394] print(f'{pc:04x}: {op} 0x{arg}')
[codex:503394]
[codex:503394] print_window(0x1ea7)
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr succeeded in 31ms:
[codex:503394] 1e6e: AND
[codex:503394] 1e6f: JUMP
[codex:503394] 1e70: JUMPDEST
[codex:503394] 1e71: PUSH1 0x40
[codex:503394] 1e73: MLOAD
[codex:503394] 1e74: PUSH1 0x01
[codex:503394] 1e76: PUSH1 0x01
[codex:503394] 1e78: PUSH1 0xa0
[codex:503394] 1e7a: SHL
[codex:503394] 1e7b: SUB
[codex:503394] 1e7c: DUP3
[codex:503394] 1e7d: AND
[codex:503394] 1e7e: SWAP1
[codex:503394] 1e7f: PUSH32 0x6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f8
[codex:503394] 1ea0: SWAP1
[codex:503394] 1ea1: PUSH1 0x00
[codex:503394] 1ea3: SWAP1
[codex:503394] 1ea4: LOG2
[codex:503394] 1ea5: POP
[codex:503394] 1ea6: JUMP
[codex:503394]
[codex:503394] thinking
[codex:503394] **Analyzing contract detection and upgrade functions**
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] import hashlib
[codex:503394] sig='implementation()'
[codex:503394] sel=hashlib.new('sha3_256', sig.encode()).hexdigest()[:8]
[codex:503394] print(sel)
[codex:503394]
[codex:503394] sig2='upgradeTo(address)'
[codex:503394] sel2=hashlib.new('sha3_256', sig2.encode()).hexdigest()[:8]
[codex:503394] print('upgradeTo', sel2)
[codex:503394]
[codex:503394] sig3='admin()'
[codex:503394] sel3=hashlib.new('sha3_256', sig3.encode()).hexdigest()[:8]
[codex:503394] print('admin', sel3)
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr succeeded in 22ms:
[codex:503394] f5d97006
[codex:503394] upgradeTo 6b59108d
[codex:503394] admin eb8325fb
[codex:503394]
[codex:503394] thinking
[codex:503394] **Evaluating keccak hash options**
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] try:
[codex:503394] import sha3
[codex:503394] k=sha3.keccak_256()
[codex:503394] k.update(b'upgradeTo(address)')
[codex:503394] print(k.hexdigest()[:8])
[codex:503394] except Exception as e:
[codex:503394] print('sha3 module not available', e)
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr succeeded in 19ms:
[codex:503394] sha3 module not available No module named 'sha3'
[codex:503394]
[codex:503394] thinking
[codex:503394] **Analyzing upgrade access control checks**
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] from binascii import unhexlify
[codex:503394] import re
[codex:503394] hexdata=open('BYTECODE_BUNDLE.txt').read();
[codex:503394] code_hex=re.search(r'0x([0-9a-fA-F]+)', hexdata).group(1)
[codex:503394] code=unhexlify(code_hex)
[codex:503394]
[codex:503394] # disassemble to find PUSH2 0x1cae or JUMPDEST at 0x1cae
[codex:503394] ops={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:503394] ops.update({i: f'DUP{i-0x7f}' for i in range(0x80,0x90)})
[codex:503394] ops.update({i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
[codex:503394] ops.update({i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
[codex:503394]
[codex:503394] opnames={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:503394] ops.update(opnames)
[codex:503394]
[codex:503394] insts=[]
[codex:503394] pc=0
[codex:503394] while pc < len(code):
[codex:503394] op=code[pc]; opname=ops.get(op,f'OP{op:02x}')
[codex:503394] if opname.startswith('PUSH'):
[codex:503394] n=op-0x5f; data=code[pc+1:pc+1+n]
[codex:503394] insts.append((pc,opname,data.hex()))
[codex:503394] pc+=1+n
[codex:503394] else:
[codex:503394] insts.append((pc,opname,None)); pc+=1
[codex:503394]
[codex:503394] # find PUSH2 0x1cae
[codex:503394] for pc,op,arg in insts:
[codex:503394] if op=='PUSH2' and arg=='1cae':
[codex:503394] print('PUSH2 0x1cae at', hex(pc))
[codex:503394]
[codex:503394] # find JUMPDEST at 0x1cae
[codex:503394] for pc,op,arg in insts:
[codex:503394] if pc==0x1cae:
[codex:503394] print('at 0x1cae', op, arg)
[codex:503394] break
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr succeeded in 33ms:
[codex:503394] PUSH2 0x1cae at 0x1113
[codex:503394] at 0x1cae JUMPDEST None
[codex:503394]
[codex:503394] thinking
[codex:503394] **Inspecting jump to upgrade function**
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] from binascii import unhexlify
[codex:503394] import re
[codex:503394] hexdata=open('BYTECODE_BUNDLE.txt').read();
[codex:503394] code_hex=re.search(r'0x([0-9a-fA-F]+)', hexdata).group(1)
[codex:503394] code=unhexlify(code_hex)
[codex:503394]
[codex:503394] ops={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:503394] ops.update({i: f'DUP{i-0x7f}' for i in range(0x80,0x90)})
[codex:503394] ops.update({i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
[codex:503394] ops.update({i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
[codex:503394]
[codex:503394] opnames={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:503394] ops.update(opnames)
[codex:503394]
[codex:503394] insts=[]
[codex:503394] pc=0
[codex:503394] while pc < len(code):
[codex:503394] op=code[pc]; opname=ops.get(op,f'OP{op:02x}')
[codex:503394] if opname.startswith('PUSH'):
[codex:503394] n=op-0x5f; data=code[pc+1:pc+1+n]
[codex:503394] insts.append((pc,opname,data.hex()))
[codex:503394] pc+=1+n
[codex:503394] else:
[codex:503394] insts.append((pc,opname,None)); pc+=1
[codex:503394]
[codex:503394] # print around 0x1113
[codex:503394]
[codex:503394] def print_window(target, before=20, after=30):
[codex:503394] idx=next(i for i,(pc,_,_) in enumerate(insts) if pc==target)
[codex:503394] for pc,op,arg in insts[max(0,idx-before):idx+after]:
[codex:503394] if arg is None:
[codex:503394] print(f'{pc:04x}: {op}')
[codex:503394] else:
[codex:503394] print(f'{pc:04x}: {op} 0x{arg}')
[codex:503394]
[codex:503394] print_window(0x1113)
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr succeeded in 31ms:
[codex:503394] 10f5: PUSH2 0x19db
[codex:503394] 10f8: JUMP
[codex:503394] 10f9: JUMPDEST
[codex:503394] 10fa: PUSH1 0x0f
[codex:503394] 10fc: DUP1
[codex:503394] 10fd: SLOAD
[codex:503394] 10fe: PUSH1 0x01
[codex:503394] 1100: ADD
[codex:503394] 1101: SWAP1
[codex:503394] 1102: SSTORE
[codex:503394] 1103: PUSH1 0x0e
[codex:503394] 1105: SLOAD
[codex:503394] 1106: PUSH2 0x1117
[codex:503394] 1109: SWAP1
[codex:503394] 110a: PUSH1 0x01
[codex:503394] 110c: PUSH1 0x01
[codex:503394] 110e: PUSH1 0xa0
[codex:503394] 1110: SHL
[codex:503394] 1111: SUB
[codex:503394] 1112: AND
[codex:503394]
[codex:503394] thinking
[codex:503394] **Analyzing upgrade and transfer mechanisms**
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] from binascii import unhexlify
[codex:503394] import re
[codex:503394] hexdata=open('BYTECODE_BUNDLE.txt').read();
[codex:503394] code_hex=re.search(r'0x([0-9a-fA-F]+)', hexdata).group(1)
[codex:503394] code=unhexlify(code_hex)
[codex:503394]
[codex:503394] ops={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:503394] ops.update({i: f'DUP{i-0x7f}' for i in range(0x80,0x90)})
[codex:503394] ops.update({i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
[codex:503394] ops.update({i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
[codex:503394]
[codex:503394] opnames={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:503394] ops.update(opnames)
[codex:503394]
[codex:503394] insts=[]
[codex:503394] pc=0
[codex:503394] while pc < len(code):
[codex:503394] op=code[pc]; opname=ops.get(op,f'OP{op:02x}')
[codex:503394] if opname.startswith('PUSH'):
[codex:503394] n=op-0x5f; data=code[pc+1:pc+1+n]
[codex:503394] insts.append((pc,opname,data.hex()))
[codex:503394] pc+=1+n
[codex:503394] else:
[codex:503394] insts.append((pc,opname,None)); pc+=1
[codex:503394]
[codex:503394] # print window around 0x0850-0x0950
[codex:503394] for pc,op,arg in insts:
[codex:503394] if 0x0840 <= pc <= 0x0960:
[codex:503394] if arg is None:
[codex:503394] print(f'{pc:04x}: {op}')
[codex:503394] else:
[codex:503394] print(f'{pc:04x}: {op} 0x{arg}')
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr succeeded in 32ms:
[codex:503394] 0841: ADDRESS
[codex:503394] 0842: DUP5
[codex:503394] 0843: DUP5
[codex:503394] 0844: PUSH1 0x40
[codex:503394] 0846: MLOAD
[codex:503394] 0847: PUSH1 0x20
[codex:503394] 0849: ADD
[codex:503394] 084a: PUSH2 0x0855
[codex:503394] 084d: SWAP4
[codex:503394] 084e: SWAP3
[codex:503394] 084f: SWAP2
[codex:503394] 0850: SWAP1
[codex:503394] 0851: PUSH2 0x2e66
[codex:503394] 0854: JUMP
[codex:503394] 0855: JUMPDEST
[codex:503394] 0856: PUSH1 0x40
[codex:503394] 0858: MLOAD
[codex:503394] 0859: PUSH1 0x20
[codex:503394] 085b: DUP2
[codex:503394] 085c: DUP4
[codex:503394]
[codex:503394] thinking
[codex:503394] **Analyzing internal ETH transfer logic**
[codex:503394]
[codex:503394] This complex analysis breaks down an internal function around 0x0751 that sends ETH to a cold wallet address stored in slot 0x0b, using balance checks and possibly safe math calls. I'm trying to link this internal code to an external function at selector 0x06087e5b, which appears to call it and may be unprotected—this could hint at a vulnerability if there’s no access control guarding the transfer. I’m also mapping jumps and storage layout to better understand the flow and permissions related to this ETH movement.
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] from binascii import unhexlify
[codex:503394] import re
[codex:503394] hexdata=open('BYTECODE_BUNDLE.txt').read();
[codex:503394] code_hex=re.search(r'0x([0-9a-fA-F]+)', hexdata).group(1)
[codex:503394] code=unhexlify(code_hex)
[codex:503394]
[codex:503394] ops={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:503394] ops.update({i: f'DUP{i-0x7f}' for i in range(0x80,0x90)})
[codex:503394] ops.update({i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
[codex:503394] ops.update({i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
[codex:503394]
[codex:503394] opnames={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:503394] ops.update(opnames)
[codex:503394]
[codex:503394] insts=[]
[codex:503394] pc=0
[codex:503394] while pc < len(code):
[codex:503394] op=code[pc]; opname=ops.get(op,f'OP{op:02x}')
[codex:503394] if opname.startswith('PUSH'):
[codex:503394] n=op-0x5f; data=code[pc+1:pc+1+n]
[codex:503394] insts.append((pc,opname,data.hex()))
[codex:503394] pc+=1+n
[codex:503394] else:
[codex:503394] insts.append((pc,opname,None)); pc+=1
[codex:503394]
[codex:503394] # print around 0x0751
[codex:503394]
[codex:503394] def print_window(target, before=20, after=20):
[codex:503394] idx=next(i for i,(pc,_,_) in enumerate(insts) if pc==target)
[codex:503394] for pc,op,arg in insts[max(0,idx-before):idx+after]:
[codex:503394] if arg is None:
[codex:503394] print(f'{pc:04x}: {op}')
[codex:503394] else:
[codex:503394] print(f'{pc:04x}: {op} 0x{arg}')
[codex:503394]
[codex:503394] print_window(0x0751)
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr succeeded in 31ms:
[codex:503394] 0731: JUMPDEST
[codex:503394] 0732: CALLVALUE
[codex:503394] 0733: DUP1
[codex:503394] 0734: ISZERO
[codex:503394] 0735: PUSH2 0x073d
[codex:503394] 0738: JUMPI
[codex:503394] 0739: PUSH1 0x00
[codex:503394] 073b: DUP1
[codex:503394] 073c: REVERT
[codex:503394] 073d: JUMPDEST
[codex:503394] 073e: POP
[codex:503394] 073f: PUSH2 0x03d5
[codex:503394] 0742: PUSH2 0x074c
[codex:503394] 0745: CALLDATASIZE
[codex:503394] 0746: PUSH1 0x04
[codex:503394] 0748: PUSH2 0x2576
[codex:503394] 074b: JUMP
[codex:503394] 074c: JUMPDEST
[codex:503394] 074d: PUSH2 0x1985
[codex:503394] 0750: JUMP
[codex:503394]
[codex:503394] thinking
[codex:503394] **Examining internal function calls and access control**
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] from binascii import unhexlify
[codex:503394] import re
[codex:503394] hexdata=open('BYTECODE_BUNDLE.txt').read();
[codex:503394] code_hex=re.search(r'0x([0-9a-fA-F]+)', hexdata).group(1)
[codex:503394] code=unhexlify(code_hex)
[codex:503394]
[codex:503394] ops={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:503394] ops.update({i: f'DUP{i-0x7f}' for i in range(0x80,0x90)})
[codex:503394] ops.update({i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
[codex:503394] ops.update({i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
[codex:503394]
[codex:503394] opnames={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:503394] ops.update(opnames)
[codex:503394]
[codex:503394] insts=[]
[codex:503394] pc=0
[codex:503394] while pc < len(code):
[codex:503394] op=code[pc]; opname=ops.get(op,f'OP{op:02x}')
[codex:503394] if opname.startswith('PUSH'):
[codex:503394] n=op-0x5f; data=code[pc+1:pc+1+n]
[codex:503394] insts.append((pc,opname,data.hex()))
[codex:503394] pc+=1+n
[codex:503394] else:
[codex:503394] insts.append((pc,opname,None)); pc+=1
[codex:503394]
[codex:503394]
[codex:503394] def print_window(target, before=15, after=15):
[codex:503394] idx=next(i for i,(pc,_,_) in enumerate(insts) if pc==target)
[codex:503394] for pc,op,arg in insts[max(0,idx-before):idx+after]:
[codex:503394] if arg is None:
[codex:503394] print(f'{pc:04x}: {op}')
[codex:503394] else:
[codex:503394] print(f'{pc:04x}: {op} 0x{arg}')
[codex:503394]
[codex:503394] print_window(0x1992)
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr succeeded in 37ms:
[codex:503394] 197f: SLOAD
[codex:503394] 1980: PUSH1 0xff
[codex:503394] 1982: AND
[codex:503394] 1983: DUP2
[codex:503394] 1984: JUMP
[codex:503394] 1985: JUMPDEST
[codex:503394] 1986: PUSH1 0x06
[codex:503394] 1988: DUP2
[codex:503394] 1989: DUP2
[codex:503394] 198a: SLOAD
[codex:503394] 198b: DUP2
[codex:503394] 198c: LT
[codex:503394] 198d: PUSH2 0x108a
[codex:503394] 1990: JUMPI
[codex:503394] 1991: INVALID
[codex:503394] 1992: JUMPDEST
[codex:503394] 1993: PUSH2 0x199b
[codex:503394] 1996: CALLER
[codex:503394] 1997: PUSH2 0x17c7
[codex:503394] 199a: JUMP
[codex:503394]
[codex:503394] thinking
[codex:503394] **Analyzing access control flow**
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] from binascii import unhexlify
[codex:503394] import re
[codex:503394] hexdata=open('BYTECODE_BUNDLE.txt').read();
[codex:503394] code_hex=re.search(r'0x([0-9a-fA-F]+)', hexdata).group(1)
[codex:503394] code=unhexlify(code_hex)
[codex:503394]
[codex:503394] ops={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:503394] ops.update({i: f'DUP{i-0x7f}' for i in range(0x80,0x90)})
[codex:503394] ops.update({i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
[codex:503394] ops.update({i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
[codex:503394]
[codex:503394] opnames={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:503394] ops.update(opnames)
[codex:503394]
[codex:503394] insts=[]
[codex:503394] pc=0
[codex:503394] while pc < len(code):
[codex:503394] op=code[pc]; opname=ops.get(op,f'OP{op:02x}')
[codex:503394] if opname.startswith('PUSH'):
[codex:503394] n=op-0x5f; data=code[pc+1:pc+1+n]
[codex:503394] insts.append((pc,opname,data.hex()))
[codex:503394] pc+=1+n
[codex:503394] else:
[codex:503394] insts.append((pc,opname,None)); pc+=1
[codex:503394]
[codex:503394]
[codex:503394] def print_window(target, before=10, after=10):
[codex:503394] idx=next(i for i,(pc,_,_) in enumerate(insts) if pc==target)
[codex:503394] for pc,op,arg in insts[max(0,idx-before):idx+after]:
[codex:503394] if arg is None:
[codex:503394] print(f'{pc:04x}: {op}')
[codex:503394] else:
[codex:503394] print(f'{pc:04x}: {op} 0x{arg}')
[codex:503394]
[codex:503394] print_window(0x19b7)
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr succeeded in 31ms:
[codex:503394] 19a7: PUSH1 0xe5
[codex:503394] 19a9: SHL
[codex:503394] 19aa: DUP2
[codex:503394] 19ab: MSTORE
[codex:503394] 19ac: PUSH1 0x04
[codex:503394] 19ae: ADD
[codex:503394] 19af: PUSH2 0x07b3
[codex:503394] 19b2: SWAP1
[codex:503394] 19b3: PUSH2 0x3138
[codex:503394] 19b6: JUMP
[codex:503394] 19b7: JUMPDEST
[codex:503394] 19b8: PUSH2 0x19bf
[codex:503394] 19bb: PUSH2 0x1564
[codex:503394] 19be: JUMP
[codex:503394] 19bf: JUMPDEST
[codex:503394] 19c0: PUSH2 0x153d
[codex:503394] 19c3: JUMPI
[codex:503394] 19c4: PUSH1 0x40
[codex:503394] 19c6: MLOAD
[codex:503394] 19c7: PUSH3 0x461bcd
[codex:503394]
[codex:503394] thinking
[codex:503394] **Analyzing access control and signature validation**
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] from binascii import unhexlify
[codex:503394] import re
[codex:503394] hexdata=open('BYTECODE_BUNDLE.txt').read();
[codex:503394] code_hex=re.search(r'0x([0-9a-fA-F]+)', hexdata).group(1)
[codex:503394] code=unhexlify(code_hex)
[codex:503394]
[codex:503394] ops={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:503394] ops.update({i: f'DUP{i-0x7f}' for i in range(0x80,0x90)})
[codex:503394] ops.update({i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
[codex:503394] ops.update({i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
[codex:503394]
[codex:503394] opnames={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:503394] ops.update(opnames)
[codex:503394]
[codex:503394] insts=[]
[codex:503394] pc=0
[codex:503394] while pc < len(code):
[codex:503394] op=code[pc]; opname=ops.get(op,f'OP{op:02x}')
[codex:503394] if opname.startswith('PUSH'):
[codex:503394] n=op-0x5f; data=code[pc+1:pc+1+n]
[codex:503394] insts.append((pc,opname,data.hex()))
[codex:503394] pc+=1+n
[codex:503394] else:
[codex:503394] insts.append((pc,opname,None)); pc+=1
[codex:503394]
[codex:503394] # find STATICCALLs and print context
[codex:503394] for i,(pc,op,arg) in enumerate(insts):
[codex:503394] if op=='STATICCALL':
[codex:503394] print('\\nSTATICCALL at', hex(pc))
[codex:503394] for pc2,op2,arg2 in insts[max(0,i-10):i+10]:
[codex:503394] if arg2 is None:
[codex:503394] print(f'{pc2:04x}: {op2}')
[codex:503394] else:
[codex:503394] print(f'{pc2:04x}: {op2} 0x{arg2}')
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr succeeded in 33ms:
[codex:503394]
[codex:503394] STATICCALL at 0x9a8
[codex:503394] 099b: DUP1
[codex:503394] 099c: ISZERO
[codex:503394] 099d: PUSH2 0x09a5
[codex:503394] 09a0: JUMPI
[codex:503394] 09a1: PUSH1 0x00
[codex:503394] 09a3: DUP1
[codex:503394] 09a4: REVERT
[codex:503394] 09a5: JUMPDEST
[codex:503394] 09a6: POP
[codex:503394] 09a7: GAS
[codex:503394] 09a8: STATICCALL
[codex:503394] 09a9: ISZERO
[codex:503394] 09aa: DUP1
[codex:503394] 09ab: ISZERO
[codex:503394] 09ac: PUSH2 0x09b9
[codex:503394] 09af: JUMPI
[codex:503394] 09b0: RETURNDATASIZE
[codex:503394] 09b1: PUSH1 0x00
[codex:503394]
[codex:503394] thinking
[codex:503394] **Investigating staticcall to ecrecover**
[codex:503394] exec
[codex:503394] /bin/bash -lc "python - <<'PY'
[codex:503394] from binascii import unhexlify
[codex:503394] import re
[codex:503394] hexdata=open('BYTECODE_BUNDLE.txt').read();
[codex:503394] code_hex=re.search(r'0x([0-9a-fA-F]+)', hexdata).group(1)
[codex:503394] code=unhexlify(code_hex)
[codex:503394]
[codex:503394] ops={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:503394] ops.update({i: f'DUP{i-0x7f}' for i in range(0x80,0x90)})
[codex:503394] ops.update({i: f'SWAP{i-0x8f}' for i in range(0x90,0xa0)})
[codex:503394] ops.update({i: f'LOG{i-0xa0}' for i in range(0xa0,0xa5)})
[codex:503394]
[codex:503394] opnames={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:503394] ops.update(opnames)
[codex:503394]
[codex:503394] insts=[]
[codex:503394] pc=0
[codex:503394] while pc < len(code):
[codex:503394] op=code[pc]; opname=ops.get(op,f'OP{op:02x}')
[codex:503394] if opname.startswith('PUSH'):
[codex:503394] n=op-0x5f; data=code[pc+1:pc+1+n]
[codex:503394] insts.append((pc,opname,data.hex()))
[codex:503394] pc+=1+n
[codex:503394] else:
[codex:503394] insts.append((pc,opname,None)); pc+=1
[codex:503394]
[codex:503394] # print around 0x1f20-0x1f70
[codex:503394] for pc,op,arg in insts:
[codex:503394] if 0x1f20 <= pc <= 0x1f80:
[codex:503394] if arg is None:
[codex:503394] print(f'{pc:04x}: {op}')
[codex:503394] else:
[codex:503394] print(f'{pc:04x}: {op} 0x{arg}')
[codex:503394] PY" in /tmp/codex-multi-2bmql4tr succeeded in 201ms:
[codex:503394] 1f20: PUSH1 0x20
[codex:503394] 1f22: ADD
[codex:503394] 1f23: PUSH1 0x40
[codex:503394] 1f25: MSTORE
[codex:503394] 1f26: PUSH1 0x40
[codex:503394] 1f28: MLOAD
[codex:503394] 1f29: PUSH2 0x1f35
[codex:503394] 1f2c: SWAP5
[codex:503394] 1f2d: SWAP4
[codex:503394] 1f2e: SWAP3
[codex:503394] 1f2f: SWAP2
[codex:503394] 1f30: SWAP1
[codex:503394] 1f31: PUSH2 0x2fd9
[codex:503394] 1f34: JUMP
[codex:503394] 1f35: JUMPDEST
[codex:503394] 1f36: PUSH1 0x20
[codex:503394] 1f38: PUSH1 0x40
[codex:503394] 1f3a: MLOAD
[codex:503394] 1f3b: PUSH1 0x20
[codex:503394] 1f3d: DUP2
[codex:503394]
[codex:503394] thinking
[codex:503394] **Determining exploitability conclusions**
[codex:503394] codex
[codex:503394] {"no_findings":true,"summary":"Completed bytecode-only review of BYTECODE_BUNDLE.txt; no concrete, exploitably profitable path is provable from the runtime bytecode alone (no delegatecall/selfdestruct, upgrade/write paths appear guarded, and external calls look like guarded token/ETH operations).","findings":[]}
[codex:503394] tokens used
[codex:503394] 161,143
[codex:503394] {"no_findings":true,"summary":"Completed bytecode-only review of BYTECODE_BUNDLE.txt; no concrete, exploitably profitable path is provable from the runtime bytecode alone (no delegatecall/selfdestruct, upgrade/write paths appear guarded, and external calls look like guarded token/ETH operations).","findings":[]}
{
"codex": {
"ran_at": "2026-01-03T22:58:38.594670+00:00",
"returncode": 0
},
"summary": "Completed bytecode-only review of BYTECODE_BUNDLE.txt; no concrete, exploitably profitable path is provable from the runtime bytecode alone (no delegatecall/selfdestruct, upgrade/write paths appear guarded, and external calls look like guarded token/ETH operations).",
"raw_final": {
"summary": "Completed bytecode-only review of BYTECODE_BUNDLE.txt; no concrete, exploitably profitable path is provable from the runtime bytecode alone (no delegatecall/selfdestruct, upgrade/write paths appear guarded, and external calls look like guarded token/ETH operations).",
"findings": [],
"no_findings": true
},
"no_findings": true,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x02bb 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0x6be13c92 00000019: GT 0000001a: PUSH2 0x016e 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0xca44f465 00000024: GT 00000025: PUSH2 0x00cb 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0xd50fd1f4 0000002f: GT 00000030: PUSH2 0x007f 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0xdc5724e4 0000003a: GT 0000003b: PUSH2 0x0064 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xdc5724e4 00000045: EQ 00000046: PUSH2 0x06f1 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xfb80c747 00000050: EQ 00000051: PUSH2 0x0711 00000054: JUMPI 00000055: DUP1 00000056: PUSH4 0xfc0a7f03 0000005b: EQ 0000005c: PUSH2 0x0731 0000005f: JUMPI 00000060: PUSH2 0x02bb 00000063: JUMP 00000064: JUMPDEST 00000065: DUP1 00000066: PUSH4 0xd50fd1f4 0000006b: EQ 0000006c: PUSH2 0x06bc 0000006f: JUMPI 00000070: DUP1 00000071: PUSH4 0xd6cd9473 00000076: EQ 00000077: PUSH2 0x06dc 0000007a: JUMPI 0000007b: PUSH2 0x02bb 0000007e: JUMP 0000007f: JUMPDEST 00000080: DUP1 00000081: PUSH4 0xd0e30db0 00000086: GT 00000087: PUSH2 0x00b0 0000008a: JUMPI 0000008b: DUP1 0000008c: PUSH4 0xd0e30db0 00000091: EQ 00000092: PUSH2 0x0674 00000095: JUMPI 00000096: DUP1 00000097: PUSH4 0xd121b696 0000009c: EQ 0000009d: PUSH2 0x067c 000000a0: JUMPI 000000a1: DUP1 000000a2: PUSH4 0xd29ab55b 000000a7: EQ 000000a8: PUSH2 0x069c 000000ab: JUMPI 000000ac: PUSH2 0x02bb 000000af: JUMP 000000b0: JUMPDEST 000000b1: DUP1 000000b2: PUSH4 0xca44f465 000000b7: EQ 000000b8: PUSH2 0x064a 000000bb: JUMPI 000000bc: DUP1 000000bd: PUSH4 0xd0134296 000000c2: EQ 000000c3: PUSH2 0x065f 000000c6: JUMPI 000000c7: PUSH2 0x02bb 000000ca: JUMP 000000cb: JUMPDEST 000000cc: DUP1 000000cd: PUSH4 0x8456cb59 000000d2: GT 000000d3: PUSH2 0x0122 000000d6: JUMPI 000000d7: DUP1 000000d8: PUSH4 0xa971a0ad 000000dd: GT 000000de: PUSH2 0x0107 000000e1: JUMPI 000000e2: DUP1 000000e3: PUSH4 0xa971a0ad 000000e8: EQ 000000e9: PUSH2 0x05ea 000000ec: JUMPI 000000ed: DUP1 000000ee: PUSH4 0xbb5f747b 000000f3: EQ 000000f4: PUSH2 0x060a 000000f7: JUMPI 000000f8: DUP1 000000f9: PUSH4 0xbba15758 000000fe: EQ 000000ff: PUSH2 0x062a 00000102: JUMPI 00000103: PUSH2 0x02bb 00000106: JUMP 00000107: JUMPDEST 00000108: DUP1 00000109: PUSH4 0x8456cb59 0000010e: EQ 0000010f: PUSH2 0x05b5 00000112: JUMPI 00000113: DUP1 00000114: PUSH4 0x97833876 00000119: EQ 0000011a: PUSH2 0x05ca 0000011d: JUMPI 0000011e: PUSH2 0x02bb 00000121: JUMP 00000122: JUMPDEST 00000123: DUP1 00000124: PUSH4 0x7362d9c8 00000129: GT 0000012a: PUSH2 0x0153 0000012d: JUMPI 0000012e: DUP1 0000012f: PUSH4 0x7362d9c8 00000134: EQ 00000135: PUSH2 0x0555 00000138: JUMPI 00000139: DUP1 0000013a: PUSH4 0x82dc1ec4 0000013f: EQ 00000140: PUSH2 0x0575 00000143: JUMPI 00000144: DUP1 00000145: PUSH4 0x83453832 0000014a: EQ 0000014b: PUSH2 0x0595 0000014e: JUMPI 0000014f: PUSH2 0x02bb 00000152: JUMP 00000153: JUMPDEST 00000154: DUP1 00000155: PUSH4 0x6be13c92 0000015a: EQ 0000015b: PUSH2 0x052b 0000015e: JUMPI 0000015f: DUP1 00000160: PUSH4 0x6ef8d66d 00000165: EQ 00000166: PUSH2 0x0540 00000169: JUMPI 0000016a: PUSH2 0x02bb 0000016d: JUMP 0000016e: JUMPDEST 0000016f: DUP1 00000170: PUSH4 0x291d9549 00000175: GT 00000176: PUSH2 0x021c 00000179: JUMPI 0000017a: DUP1 0000017b: PUSH4 0x4c5a628c 00000180: GT 00000181: PUSH2 0x01d0 00000184: JUMPI 00000185: DUP1 00000186: PUSH4 0x5c975abb 0000018b: GT 0000018c: PUSH2 0x01b5 0000018f: JUMPI 00000190: DUP1 00000191: PUSH4 0x5c975abb 00000196: EQ 00000197: PUSH2 0x04e1 0000019a: JUMPI 0000019b: DUP1 0000019c: PUSH4 0x638900e1 000001a1: EQ 000001a2: PUSH2 0x04f6 000001a5: JUMPI 000001a6: DUP1 000001a7: PUSH4 0x65481ff7 000001ac: EQ 000001ad: PUSH2 0x050b 000001b0: JUMPI 000001b1: PUSH2 0x02bb 000001b4: JUMP 000001b5: JUMPDEST 000001b6: DUP1 000001b7: PUSH4 0x4c5a628c 000001bc: EQ 000001bd: PUSH2 0x04b7 000001c0: JUMPI 000001c1: DUP1 000001c2: PUSH4 0x5c60da1b 000001c7: EQ 000001c8: PUSH2 0x04cc 000001cb: JUMPI 000001cc: PUSH2 0x02bb 000001cf: JUMP 000001d0: JUMPDEST 000001d1: DUP1 000001d2: PUSH4 0x3af32abf 000001d7: GT 000001d8: PUSH2 0x0201 000001db: JUMPI 000001dc: DUP1 000001dd: PUSH4 0x3af32abf 000001e2: EQ 000001e3: PUSH2 0x0462 000001e6: JUMPI 000001e7: DUP1 000001e8: PUSH4 0x3f4ba83a 000001ed: EQ 000001ee: PUSH2 0x0482 000001f1: JUMPI 000001f2: DUP1 000001f3: PUSH4 0x46fbf68e 000001f8: EQ 000001f9: PUSH2 0x0497 000001fc: JUMPI 000001fd: PUSH2 0x02bb 00000200: JUMP 00000201: JUMPDEST 00000202: DUP1 00000203: PUSH4 0x291d9549 00000208: EQ 00000209: PUSH2 0x0422 0000020c: JUMPI 0000020d: DUP1 0000020e: PUSH4 0x35c80c8c 00000213: EQ 00000214: PUSH2 0x0442 00000217: JUMPI 00000218: PUSH2 0x02bb 0000021b: JUMP 0000021c: JUMPDEST 0000021d: DUP1 0000021e: PUSH4 0x1761d7ce 00000223: GT 00000224: PUSH2 0x0273 00000227: JUMPI 00000228: DUP1 00000229: PUSH4 0x2299bda6 0000022e: GT 0000022f: PUSH2 0x0258 00000232: JUMPI 00000233: DUP1 00000234: PUSH4 0x2299bda6 00000239: EQ 0000023a: PUSH2 0x03b5 0000023d: JUMPI 0000023e: DUP1 0000023f: PUSH4 0x243aa7c9 00000244: EQ 00000245: PUSH2 0x03e2 00000248: JUMPI 00000249: DUP1 0000024a: PUSH4 0x26f589ff 0000024f: EQ 00000250: PUSH2 0x0402 00000253: JUMPI 00000254: PUSH2 0x02bb 00000257: JUMP 00000258: JUMPDEST 00000259: DUP1 0000025a: PUSH4 0x1761d7ce 0000025f: EQ 00000260: PUSH2 0x035d 00000263: JUMPI 00000264: DUP1 00000265: PUSH4 0x1f61aebe 0000026a: EQ 0000026b: PUSH2 0x0393 0000026e: JUMPI 0000026f: PUSH2 0x02bb 00000272: JUMP 00000273: JUMPDEST 00000274: DUP1 00000275: PUSH4 0x0c660be4 0000027a: GT 0000027b: PUSH2 0x02a4 0000027e: JUMPI 0000027f: DUP1 00000280: PUSH4 0x0c660be4 00000285: EQ 00000286: PUSH2 0x02fd 00000289: JUMPI 0000028a: DUP1 0000028b: PUSH4 0x10154bad 00000290: EQ 00000291: PUSH2 0x031d 00000294: JUMPI 00000295: DUP1 00000296: PUSH4 0x11eaf601 0000029b: EQ 0000029c: PUSH2 0x033d 0000029f: JUMPI 000002a0: PUSH2 0x02bb 000002a3: JUMP 000002a4: JUMPDEST 000002a5: DUP1 000002a6: PUSH4 0x06087e5b 000002ab: EQ 000002ac: PUSH2 0x02bd 000002af: JUMPI 000002b0: DUP1 000002b1: PUSH4 0x0ad3aa19 000002b6: EQ 000002b7: PUSH2 0x02dd 000002ba: JUMPI 000002bb: JUMPDEST 000002bc: STOP 000002bd: JUMPDEST 000002be: CALLVALUE 000002bf: DUP1 000002c0: ISZERO 000002c1: PUSH2 0x02c9 000002c4: JUMPI 000002c5: PUSH1 0x00 000002c7: DUP1 000002c8: REVERT 000002c9: JUMPDEST 000002ca: POP 000002cb: PUSH2 0x02bb 000002ce: PUSH2 0x02d8 000002d1: CALLDATASIZE 000002d2: PUSH1 0x04 000002d4: PUSH2 0x2278 000002d7: JUMP 000002d8: JUMPDEST 000002d9: PUSH2 0x0751 000002dc: JUMP 000002dd: JUMPDEST 000002de: CALLVALUE 000002df: DUP1 000002e0: ISZERO 000002e1: PUSH2 0x02e9 000002e4: JUMPI 000002e5: PUSH1 0x00 000002e7: DUP1 000002e8: REVERT 000002e9: JUMPDEST 000002ea: POP 000002eb: PUSH2 0x02bb 000002ee: PUSH2 0x02f8 000002f1: CALLDATASIZE 000002f2: PUSH1 0x04 000002f4: PUSH2 0x234d 000002f7: JUMP 000002f8: JUMPDEST 000002f9: PUSH2 0x0790 000002fc: JUMP 000002fd: JUMPDEST 000002fe: CALLVALUE 000002ff: DUP1 00000300: ISZERO 00000301: PUSH2 0x0309 00000304: JUMPI 00000305: PUSH1 0x00 00000307: DUP1 00000308: REVERT 00000309: JUMPDEST 0000030a: POP 0000030b: PUSH2 0x02bb 0000030e: PUSH2 0x0318 00000311: CALLDATASIZE 00000312: PUSH1 0x04 00000314: PUSH2 0x246e 00000317: JUMP 00000318: JUMPDEST 00000319: PUSH2 0x0ade 0000031c: JUMP 0000031d: JUMPDEST 0000031e: CALLVALUE 0000031f: DUP1 00000320: ISZERO 00000321: PUSH2 0x0329 00000324: JUMPI 00000325: PUSH1 0x00 00000327: DUP1 00000328: REVERT 00000329: JUMPDEST 0000032a: POP 0000032b: PUSH2 0x02bb 0000032e: PUSH2 0x0338 00000331: CALLDATASIZE 00000332: PUSH1 0x04 00000334: PUSH2 0x2278 00000337: JUMP 00000338: JUMPDEST 00000339: PUSH2 0x0b12 0000033c: JUMP 0000033d: JUMPDEST 0000033e: CALLVALUE 0000033f: DUP1 00000340: ISZERO 00000341: PUSH2 0x0349 00000344: JUMPI 00000345: PUSH1 0x00 00000347: DUP1 00000348: REVERT 00000349: JUMPDEST 0000034a: POP 0000034b: PUSH2 0x02bb 0000034e: PUSH2 0x0358 00000351: CALLDATASIZE 00000352: PUSH1 0x04 00000354: PUSH2 0x2296 00000357: JUMP 00000358: JUMPDEST 00000359: PUSH2 0x0b45 0000035c: JUMP 0000035d: JUMPDEST 0000035e: CALLVALUE 0000035f: DUP1 00000360: ISZERO 00000361: PUSH2 0x0369 00000364: JUMPI 00000365: PUSH1 0x00 00000367: DUP1 00000368: REVERT 00000369: JUMPDEST 0000036a: POP 0000036b: PUSH2 0x037d 0000036e: PUSH2 0x0378 00000371: CALLDATASIZE 00000372: PUSH1 0x04 00000374: PUSH2 0x2278 00000377: JUMP 00000378: JUMPDEST 00000379: PUSH2 0x1062 0000037c: JUMP 0000037d: JUMPDEST 0000037e: PUSH1 0x40 00000380: MLOAD 00000381: PUSH2 0x038a 00000384: SWAP2 00000385: SWAP1 00000386: PUSH2 0x2fcb 00000389: JUMP 0000038a: JUMPDEST 0000038b: PUSH1 0x40 0000038d: MLOAD 0000038e: DUP1 0000038f: SWAP2 00000390: SUB 00000391: SWAP1 00000392: RETURN 00000393: JUMPDEST 00000394: CALLVALUE 00000395: DUP1 00000396: ISZERO 00000397: PUSH2 0x039f 0000039a: JUMPI 0000039b: PUSH1 0x00 0000039d: DUP1 0000039e: REVERT 0000039f: JUMPDEST 000003a0: POP 000003a1: PUSH2 0x03a8 000003a4: PUSH2 0x1077 000003a7: JUMP 000003a8: JUMPDEST 000003a9: PUSH1 0x40 000003ab: MLOAD 000003ac: PUSH2 0x038a 000003af: SWAP2 000003b0: SWAP1 000003b1: PUSH2 0x31a8 000003b4: JUMP 000003b5: JUMPDEST 000003b6: CALLVALUE 000003b7: DUP1 000003b8: ISZERO 000003b9: PUSH2 0x03c1 000003bc: JUMPI 000003bd: PUSH1 0x00 000003bf: DUP1 000003c0: REVERT 000003c1: JUMPDEST 000003c2: POP 000003c3: PUSH2 0x03d5 000003c6: PUSH2 0x03d0 000003c9: CALLDATASIZE 000003ca: PUSH1 0x04 000003cc: PUSH2 0x2576 000003cf: JUMP 000003d0: JUMPDEST 000003d1: PUSH2 0x107d 000003d4: JUMP 000003d5: JUMPDEST 000003d6: PUSH1 0x40 000003d8: MLOAD 000003d9: PUSH2 0x038a 000003dc: SWAP2 000003dd: SWAP1 000003de: PUSH2 0x2ef5 000003e1: JUMP 000003e2: JUMPDEST 000003e3: CALLVALUE 000003e4: DUP1 000003e5: ISZERO 000003e6: PUSH2 0x03ee 000003e9: JUMPI 000003ea: PUSH1 0x00 000003ec: DUP1 000003ed: REVERT 000003ee: JUMPDEST 000003ef: POP 000003f0: PUSH2 0x02bb 000003f3: PUSH2 0x03fd 000003f6: CALLDATASIZE 000003f7: PUSH1 0x04 000003f9: PUSH2 0x24d7 000003fc: JUMP 000003fd: JUMPDEST 000003fe: PUSH2 0x10a4 00000401: JUMP 00000402: JUMPDEST 00000403: CALLVALUE 00000404: DUP1 00000405: ISZERO 00000406: PUSH2 0x040e 00000409: JUMPI 0000040a: PUSH1 0x00 0000040c: DUP1 0000040d: REVERT 0000040e: JUMPDEST 0000040f: POP 00000410: PUSH2 0x02bb 00000413: PUSH2 0x041d 00000416: CALLDATASIZE 00000417: PUSH1 0x04 00000419: PUSH2 0x23f5 0000041c: JUMP 0000041d: JUMPDEST 0000041e: PUSH2 0x1152 00000421: JUMP 00000422: JUMPDEST 00000423: CALLVALUE 00000424: DUP1 00000425: ISZERO 00000426: PUSH2 0x042e 00000429: JUMPI 0000042a: PUSH1 0x00 0000042c: DUP1 0000042d: REVERT 0000042e: JUMPDEST 0000042f: POP 00000430: PUSH2 0x02bb 00000433: PUSH2 0x043d 00000436: CALLDATASIZE 00000437: PUSH1 0x04 00000439: PUSH2 0x2278 0000043c: JUMP 0000043d: JUMPDEST 0000043e: PUSH2 0x13e5 00000441: JUMP 00000442: JUMPDEST 00000443: CALLVALUE 00000444: DUP1 00000445: ISZERO 00000446: PUSH2 0x044e 00000449: JUMPI 0000044a: PUSH1 0x00 0000044c: DUP1 0000044d: REVERT 0000044e: JUMPDEST 0000044f: POP 00000450: PUSH2 0x037d 00000453: PUSH2 0x045d 00000456: CALLDATASIZE 00000457: PUSH1 0x04 00000459: PUSH2 0x2278 0000045c: JUMP 0000045d: JUMPDEST 0000045e: PUSH2 0x1415 00000461: JUMP 00000462: JUMPDEST 00000463: CALLVALUE 00000464: DUP1 00000465: ISZERO 00000466: PUSH2 0x046e 00000469: JUMPI 0000046a: PUSH1 0x00 0000046c: DUP1 0000046d: REVERT 0000046e: JUMPDEST 0000046f: POP 00000470: PUSH2 0x037d 00000473: PUSH2 0x047d 00000476: CALLDATASIZE 00000477: PUSH1 0x04 00000479: PUSH2 0x2278 0000047c: JUMP 0000047d: JUMPDEST 0000047e: PUSH2 0x146e 00000481: JUMP 00000482: JUMPDEST 00000483: CALLVALUE 00000484: DUP1 00000485: ISZERO 00000486: PUSH2 0x048e 00000489: JUMPI 0000048a: PUSH1 0x00 0000048c: DUP1 0000048d: REVERT 0000048e: JUMPDEST 0000048f: POP 00000490: PUSH2 0x02bb 00000493: PUSH2 0x1487 00000496: JUMP 00000497: JUMPDEST 00000498: CALLVALUE 00000499: DUP1 0000049a: ISZERO 0000049b: PUSH2 0x04a3 0000049e: JUMPI 0000049f: PUSH1 0x00 000004a1: DUP1 000004a2: REVERT 000004a3: JUMPDEST 000004a4: POP 000004a5: PUSH2 0x037d 000004a8: PUSH2 0x04b2 000004ab: CALLDATASIZE 000004ac: PUSH1 0x04 000004ae: PUSH2 0x2278 000004b1: JUMP 000004b2: JUMPDEST 000004b3: PUSH2 0x151a 000004b6: JUMP 000004b7: JUMPDEST 000004b8: CALLVALUE 000004b9: DUP1 000004ba: ISZERO 000004bb: PUSH2 0x04c3 000004be: JUMPI 000004bf: PUSH1 0x00 000004c1: DUP1 000004c2: REVERT 000004c3: JUMPDEST 000004c4: POP 000004c5: PUSH2 0x02bb 000004c8: PUSH2 0x152d 000004cb: JUMP 000004cc: JUMPDEST 000004cd: CALLVALUE 000004ce: DUP1 000004cf: ISZERO 000004d0: PUSH2 0x04d8 000004d3: JUMPI 000004d4: PUSH1 0x00 000004d6: DUP1 000004d7: REVERT 000004d8: JUMPDEST 000004d9: POP 000004da: PUSH2 0x03d5 000004dd: PUSH2 0x153f 000004e0: JUMP 000004e1: JUMPDEST 000004e2: CALLVALUE 000004e3: DUP1 000004e4: ISZERO 000004e5: PUSH2 0x04ed 000004e8: JUMPI 000004e9: PUSH1 0x00 000004eb: DUP1 000004ec: REVERT 000004ed: JUMPDEST 000004ee: POP 000004ef: PUSH2 0x037d 000004f2: PUSH2 0x1564 000004f5: JUMP 000004f6: JUMPDEST 000004f7: CALLVALUE 000004f8: DUP1 000004f9: ISZERO 000004fa: PUSH2 0x0502 000004fd: JUMPI 000004fe: PUSH1 0x00 00000500: DUP1 00000501: REVERT 00000502: JUMPDEST 00000503: POP 00000504: PUSH2 0x03a8 00000507: PUSH2 0x156e 0000050a: JUMP 0000050b: JUMPDEST 0000050c: CALLVALUE 0000050d: DUP1 0000050e: ISZERO 0000050f: PUSH2 0x0517 00000512: JUMPI 00000513: PUSH1 0x00 00000515: DUP1 00000516: REVERT 00000517: JUMPDEST 00000518: POP 00000519: PUSH2 0x02bb 0000051c: PUSH2 0x0526 0000051f: CALLDATASIZE 00000520: PUSH1 0x04 00000522: PUSH2 0x23b2 00000525: JUMP 00000526: JUMPDEST 00000527: PUSH2 0x1574 0000052a: JUMP 0000052b: JUMPDEST 0000052c: CALLVALUE 0000052d: DUP1 0000052e: ISZERO 0000052f: PUSH2 0x0537 00000532: JUMPI 00000533: PUSH1 0x00 00000535: DUP1 00000536: REVERT 00000537: JUMPDEST 00000538: POP 00000539: PUSH2 0x03d5 0000053c: PUSH2 0x15c3 0000053f: JUMP 00000540: JUMPDEST 00000541: CALLVALUE 00000542: DUP1 00000543: ISZERO 00000544: PUSH2 0x054c 00000547: JUMPI 00000548: PUSH1 0x00 0000054a: DUP1 0000054b: REVERT 0000054c: JUMPDEST 0000054d: POP 0000054e: PUSH2 0x02bb 00000551: PUSH2 0x15d2 00000554: JUMP 00000555: JUMPDEST 00000556: CALLVALUE 00000557: DUP1 00000558: ISZERO 00000559: PUSH2 0x0561 0000055c: JUMPI 0000055d: PUSH1 0x00 0000055f: DUP1 00000560: REVERT 00000561: JUMPDEST 00000562: POP 00000563: PUSH2 0x02bb 00000566: PUSH2 0x0570 00000569: CALLDATASIZE 0000056a: PUSH1 0x04 0000056c: PUSH2 0x2278 0000056f: JUMP 00000570: JUMPDEST 00000571: PUSH2 0x15e2 00000574: JUMP 00000575: JUMPDEST 00000576: CALLVALUE 00000577: DUP1 00000578: ISZERO 00000579: PUSH2 0x0581 0000057c: JUMPI 0000057d: PUSH1 0x00 0000057f: DUP1 00000580: REVERT 00000581: JUMPDEST 00000582: POP 00000583: PUSH2 0x02bb 00000586: PUSH2 0x0590 00000589: CALLDATASIZE 0000058a: PUSH1 0x04 0000058c: PUSH2 0x2278 0000058f: JUMP 00000590: JUMPDEST 00000591: PUSH2 0x1612 00000594: JUMP 00000595: JUMPDEST 00000596: CALLVALUE 00000597: DUP1 00000598: ISZERO 00000599: PUSH2 0x05a1 0000059c: JUMPI 0000059d: PUSH1 0x00 0000059f: DUP1 000005a0: REVERT 000005a1: JUMPDEST 000005a2: POP 000005a3: PUSH2 0x02bb 000005a6: PUSH2 0x05b0 000005a9: CALLDATASIZE 000005aa: PUSH1 0x04 000005ac: PUSH2 0x2278 000005af: JUMP 000005b0: JUMPDEST 000005b1: PUSH2 0x1642 000005b4: JUMP 000005b5: JUMPDEST 000005b6: CALLVALUE 000005b7: DUP1 000005b8: ISZERO 000005b9: PUSH2 0x05c1 000005bc: JUMPI 000005bd: PUSH1 0x00 000005bf: DUP1 000005c0: REVERT 000005c1: JUMPDEST 000005c2: POP 000005c3: PUSH2 0x02bb 000005c6: PUSH2 0x1679 000005c9: JUMP 000005ca: JUMPDEST 000005cb: CALLVALUE 000005cc: DUP1 000005cd: ISZERO 000005ce: PUSH2 0x05d6 000005d1: JUMPI 000005d2: PUSH1 0x00 000005d4: DUP1 000005d5: REVERT 000005d6: JUMPDEST 000005d7: POP 000005d8: PUSH2 0x02bb 000005db: PUSH2 0x05e5 000005de: CALLDATASIZE 000005df: PUSH1 0x04 000005e1: PUSH2 0x2278 000005e4: JUMP 000005e5: JUMPDEST 000005e6: PUSH2 0x16f9 000005e9: JUMP 000005ea: JUMPDEST 000005eb: CALLVALUE 000005ec: DUP1 000005ed: ISZERO 000005ee: PUSH2 0x05f6 000005f1: JUMPI 000005f2: PUSH1 0x00 000005f4: DUP1 000005f5: REVERT 000005f6: JUMPDEST 000005f7: POP 000005f8: PUSH2 0x03a8 000005fb: PUSH2 0x0605 000005fe: CALLDATASIZE 000005ff: PUSH1 0x04 00000601: PUSH2 0x2278 00000604: JUMP 00000605: JUMPDEST 00000606: PUSH2 0x17b5 00000609: JUMP 0000060a: JUMPDEST 0000060b: CALLVALUE 0000060c: DUP1 0000060d: ISZERO 0000060e: PUSH2 0x0616 00000611: JUMPI 00000612: PUSH1 0x00 00000614: DUP1 00000615: REVERT 00000616: JUMPDEST 00000617: POP 00000618: PUSH2 0x037d 0000061b: PUSH2 0x0625 0000061e: CALLDATASIZE 0000061f: PUSH1 0x04 00000621: PUSH2 0x2278 00000624: JUMP 00000625: JUMPDEST 00000626: PUSH2 0x17c7 00000629: JUMP 0000062a: JUMPDEST 0000062b: CALLVALUE 0000062c: DUP1 0000062d: ISZERO 0000062e: PUSH2 0x0636 00000631: JUMPI 00000632: PUSH1 0x00 00000634: DUP1 00000635: REVERT 00000636: JUMPDEST 00000637: POP 00000638: PUSH2 0x02bb 0000063b: PUSH2 0x0645 0000063e: CALLDATASIZE 0000063f: PUSH1 0x04 00000641: PUSH2 0x250c 00000644: JUMP 00000645: JUMPDEST 00000646: PUSH2 0x17da 00000649: JUMP 0000064a: JUMPDEST 0000064b: CALLVALUE 0000064c: DUP1 0000064d: ISZERO 0000064e: PUSH2 0x0656 00000651: JUMPI 00000652: PUSH1 0x00 00000654: DUP1 00000655: REVERT 00000656: JUMPDEST 00000657: POP 00000658: PUSH2 0x02bb 0000065b: PUSH2 0x1882 0000065e: JUMP 0000065f: JUMPDEST 00000660: CALLVALUE 00000661: DUP1 00000662: ISZERO 00000663: PUSH2 0x066b 00000666: JUMPI 00000667: PUSH1 0x00 00000669: DUP1 0000066a: REVERT 0000066b: JUMPDEST 0000066c: POP 0000066d: PUSH2 0x03d5 00000670: PUSH2 0x18a7 00000673: JUMP 00000674: JUMPDEST 00000675: PUSH2 0x02bb 00000678: PUSH2 0x153d 0000067b: JUMP 0000067c: JUMPDEST 0000067d: CALLVALUE 0000067e: DUP1 0000067f: ISZERO 00000680: PUSH2 0x0688 00000683: JUMPI 00000684: PUSH1 0x00 00000686: DUP1 00000687: REVERT 00000688: JUMPDEST 00000689: POP 0000068a: PUSH2 0x03a8 0000068d: PUSH2 0x0697 00000690: CALLDATASIZE 00000691: PUSH1 0x04 00000693: PUSH2 0x2278 00000696: JUMP 00000697: JUMPDEST 00000698: PUSH2 0x18b6 0000069b: JUMP 0000069c: JUMPDEST 0000069d: CALLVALUE 0000069e: DUP1 0000069f: ISZERO 000006a0: PUSH2 0x06a8 000006a3: JUMPI 000006a4: PUSH1 0x00 000006a6: DUP1 000006a7: REVERT 000006a8: JUMPDEST 000006a9: POP 000006aa: PUSH2 0x02bb 000006ad: PUSH2 0x06b7 000006b0: CALLDATASIZE 000006b1: PUSH1 0x04 000006b3: PUSH2 0x2278 000006b6: JUMP 000006b7: JUMPDEST 000006b8: PUSH2 0x18c8 000006bb: JUMP 000006bc: JUMPDEST 000006bd: CALLVALUE 000006be: DUP1 000006bf: ISZERO 000006c0: PUSH2 0x06c8 000006c3: JUMPI 000006c4: PUSH1 0x00 000006c6: DUP1 000006c7: REVERT 000006c8: JUMPDEST 000006c9: POP 000006ca: PUSH2 0x03a8 000006cd: PUSH2 0x06d7 000006d0: CALLDATASIZE 000006d1: PUSH1 0x04 000006d3: PUSH2 0x2278 000006d6: JUMP 000006d7: JUMPDEST 000006d8: PUSH2 0x191a 000006db: JUMP 000006dc: JUMPDEST 000006dd: CALLVALUE 000006de: DUP1 000006df: ISZERO 000006e0: PUSH2 0x06e8 000006e3: JUMPI 000006e4: PUSH1 0x00 000006e6: DUP1 000006e7: REVERT 000006e8: JUMPDEST 000006e9: POP 000006ea: PUSH2 0x02bb 000006ed: PUSH2 0x192c 000006f0: JUMP 000006f1: JUMPDEST 000006f2: CALLVALUE 000006f3: DUP1 000006f4: ISZERO 000006f5: PUSH2 0x06fd 000006f8: JUMPI 000006f9: PUSH1 0x00 000006fb: DUP1 000006fc: REVERT 000006fd: JUMPDEST 000006fe: POP 000006ff: PUSH2 0x02bb 00000702: PUSH2 0x070c 00000705: CALLDATASIZE 00000706: PUSH1 0x04 00000708: PUSH2 0x2278 0000070b: JUMP 0000070c: JUMPDEST 0000070d: PUSH2 0x193c 00000710: JUMP 00000711: JUMPDEST 00000712: CALLVALUE 00000713: DUP1 00000714: ISZERO 00000715: PUSH2 0x071d 00000718: JUMPI 00000719: PUSH1 0x00 0000071b: DUP1 0000071c: REVERT 0000071d: JUMPDEST 0000071e: POP 0000071f: PUSH2 0x037d 00000722: PUSH2 0x072c 00000725: CALLDATASIZE 00000726: PUSH1 0x04 00000728: PUSH2 0x2541 0000072b: JUMP 0000072c: JUMPDEST 0000072d: PUSH2 0x1965 00000730: JUMP 00000731: JUMPDEST 00000732: CALLVALUE 00000733: DUP1 00000734: ISZERO 00000735: PUSH2 0x073d 00000738: JUMPI 00000739: PUSH1 0x00 0000073b: DUP1 0000073c: REVERT 0000073d: JUMPDEST 0000073e: POP 0000073f: PUSH2 0x03d5 00000742: PUSH2 0x074c 00000745: CALLDATASIZE 00000746: PUSH1 0x04 00000748: PUSH2 0x2576 0000074b: JUMP 0000074c: JUMPDEST 0000074d: PUSH2 0x1985 00000750: JUMP 00000751: JUMPDEST 00000752: PUSH2 0x0759 00000755: PUSH2 0x1992 00000758: JUMP 00000759: JUMPDEST 0000075a: PUSH2 0x0761 0000075d: PUSH2 0x19b7 00000760: JUMP 00000761: JUMPDEST 00000762: PUSH1 0x0b 00000764: DUP1 00000765: SLOAD 00000766: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000077b: NOT 0000077c: AND 0000077d: PUSH1 0x01 0000077f: PUSH1 0x01 00000781: PUSH1 0xa0 00000783: SHL 00000784: SUB 00000785: SWAP3 00000786: SWAP1 00000787: SWAP3 00000788: AND 00000789: SWAP2 0000078a: SWAP1 0000078b: SWAP2 0000078c: OR 0000078d: SWAP1 0000078e: SSTORE 0000078f: JUMP 00000790: JUMPDEST 00000791: PUSH1 0x00 00000793: SLOAD 00000794: PUSH1 0xff 00000796: AND 00000797: ISZERO 00000798: PUSH2 0x07bc 0000079b: JUMPI 0000079c: PUSH1 0x40 0000079e: MLOAD 0000079f: PUSH3 0x461bcd 000007a3: PUSH1 0xe5 000007a5: SHL 000007a6: DUP2 000007a7: MSTORE 000007a8: PUSH1 0x04 000007aa: ADD 000007ab: PUSH2 0x07b3 000007ae: SWAP1 000007af: PUSH2 0x3148 000007b2: JUMP 000007b3: JUMPDEST 000007b4: PUSH1 0x40 000007b6: MLOAD 000007b7: DUP1 000007b8: SWAP2 000007b9: SUB 000007ba: SWAP1 000007bb: REVERT 000007bc: JUMPDEST 000007bd: PUSH1 0x00 000007bf: DUP1 000007c0: SLOAD 000007c1: PUSH1 0xff 000007c3: NOT 000007c4: AND 000007c5: PUSH1 0x01 000007c7: OR 000007c8: SWAP1 000007c9: SSTORE 000007ca: PUSH2 0x07d1 000007cd: PUSH2 0x1882 000007d0: JUMP 000007d1: JUMPDEST 000007d2: PUSH1 0x01 000007d4: PUSH1 0x01 000007d6: PUSH1 0xa0 000007d8: SHL 000007d9: SUB 000007da: DUP4 000007db: AND 000007dc: PUSH1 0x00 000007de: SWAP1 000007df: DUP2 000007e0: MSTORE 000007e1: PUSH1 0x0d 000007e3: PUSH1 0x20 000007e5: MSTORE 000007e6: PUSH1 0x40 000007e8: SWAP1 000007e9: KECCAK256 000007ea: SLOAD 000007eb: PUSH2 0x0806 000007ee: JUMPI 000007ef: PUSH1 0x40 000007f1: MLOAD 000007f2: PUSH3 0x461bcd 000007f6: PUSH1 0xe5 000007f8: SHL 000007f9: DUP2 000007fa: MSTORE 000007fb: PUSH1 0x04 000007fd: ADD 000007fe: PUSH2 0x07b3 00000801: SWAP1 00000802: PUSH2 0x3098 00000805: JUMP 00000806: JUMPDEST 00000807: PUSH1 0x01 00000809: PUSH1 0x01 0000080b: PUSH1 0xa0 0000080d: SHL 0000080e: SUB 0000080f: DUP4 00000810: AND 00000811: PUSH1 0x00 00000813: SWAP1 00000814: DUP2 00000815: MSTORE 00000816: PUSH1 0x0a 00000818: PUSH1 0x20 0000081a: MSTORE 0000081b: PUSH1 0x40 0000081d: SWAP1 0000081e: KECCAK256 0000081f: SLOAD 00000820: DUP3 00000821: EQ 00000822: PUSH2 0x083d 00000825: JUMPI 00000826: PUSH1 0x40 00000828: MLOAD 00000829: PUSH3 0x461bcd 0000082d: PUSH1 0xe5 0000082f: SHL 00000830: DUP2 00000831: MSTORE 00000832: PUSH1 0x04 00000834: ADD 00000835: PUSH2 0x07b3 00000838: SWAP1 00000839: PUSH2 0x3108 0000083c: JUMP 0000083d: JUMPDEST 0000083e: PUSH2 0x0873 00000841: ADDRESS 00000842: DUP5 00000843: DUP5 00000844: PUSH1 0x40 00000846: MLOAD 00000847: PUSH1 0x20 00000849: ADD 0000084a: PUSH2 0x0855 0000084d: SWAP4 0000084e: SWAP3 0000084f: SWAP2 00000850: SWAP1 00000851: PUSH2 0x2e66 00000854: JUMP 00000855: JUMPDEST 00000856: PUSH1 0x40 00000858: MLOAD 00000859: PUSH1 0x20 0000085b: DUP2 0000085c: DUP4 0000085d: SUB 0000085e: SUB 0000085f: DUP2 00000860: MSTORE 00000861: SWAP1 00000862: PUSH1 0x40 00000864: MSTORE 00000865: DUP1 00000866: MLOAD 00000867: SWAP1 00000868: PUSH1 0x20 0000086a: ADD 0000086b: KECCAK256 0000086c: DUP3 0000086d: PUSH1 0x00 0000086f: PUSH2 0x19db 00000872: JUMP 00000873: JUMPDEST 00000874: PUSH1 0x01 00000876: PUSH1 0x01 00000878: PUSH1 0xa0 0000087a: SHL 0000087b: SUB 0000087c: DUP4 0000087d: AND 0000087e: PUSH1 0x00 00000880: DUP2 00000881: DUP2 00000882: MSTORE 00000883: PUSH1 0x0a 00000885: PUSH1 0x20 00000887: MSTORE 00000888: PUSH1 0x40 0000088a: SWAP1 0000088b: KECCAK256 0000088c: DUP1 0000088d: SLOAD 0000088e: PUSH1 0x01 00000890: ADD 00000891: SWAP1 00000892: SSTORE 00000893: PUSH2 0x095c 00000896: JUMPI 00000897: PUSH1 0x01 00000899: PUSH1 0x01 0000089b: PUSH1 0xa0 0000089d: SHL 0000089e: SUB 0000089f: DUP4 000008a0: AND 000008a1: PUSH1 0x00 000008a3: SWAP1 000008a4: DUP2 000008a5: MSTORE 000008a6: PUSH1 0x0d 000008a8: PUSH1 0x20 000008aa: MSTORE 000008ab: PUSH1 0x40 000008ad: SWAP1 000008ae: KECCAK256 000008af: SLOAD 000008b0: SELFBALANCE 000008b1: GT 000008b2: ISZERO 000008b3: PUSH2 0x0957 000008b6: JUMPI 000008b7: PUSH1 0x01 000008b9: PUSH1 0x01 000008bb: PUSH1 0xa0 000008bd: SHL 000008be: SUB 000008bf: DUP4 000008c0: AND 000008c1: PUSH1 0x00 000008c3: SWAP1 000008c4: DUP2 000008c5: MSTORE 000008c6: PUSH1 0x0d 000008c8: PUSH1 0x20 000008ca: MSTORE 000008cb: PUSH1 0x40 000008cd: DUP2 000008ce: KECCAK256 000008cf: SLOAD 000008d0: PUSH2 0x08e0 000008d3: SWAP1 000008d4: SELFBALANCE 000008d5: SWAP1 000008d6: PUSH4 0xffffffff 000008db: PUSH2 0x1bf0 000008de: AND 000008df: JUMP 000008e0: JUMPDEST 000008e1: PUSH1 0x0b 000008e3: SLOAD 000008e4: PUSH1 0x40 000008e6: MLOAD 000008e7: SWAP2 000008e8: SWAP3 000008e9: POP 000008ea: PUSH1 0x01 000008ec: PUSH1 0x01 000008ee: PUSH1 0xa0 000008f0: SHL 000008f1: SUB 000008f2: AND 000008f3: SWAP1 000008f4: DUP3 000008f5: ISZERO 000008f6: PUSH2 0x08fc 000008f9: MUL 000008fa: SWAP1 000008fb: DUP4 000008fc: SWAP1 000008fd: PUSH1 0x00 000008ff: DUP2 00000900: DUP2 00000901: DUP2 00000902: DUP6 00000903: DUP9 00000904: DUP9 00000905: CALL 00000906: SWAP4 00000907: POP 00000908: POP 00000909: POP 0000090a: POP 0000090b: ISZERO 0000090c: DUP1 0000090d: ISZERO 0000090e: PUSH2 0x091b 00000911: JUMPI 00000912: RETURNDATASIZE 00000913: PUSH1 0x00 00000915: DUP1 00000916: RETURNDATACOPY 00000917: RETURNDATASIZE 00000918: PUSH1 0x00 0000091a: REVERT 0000091b: JUMPDEST 0000091c: POP 0000091d: DUP1 0000091e: DUP4 0000091f: PUSH32 0x186661f41f6b7bc56a92ba66079ddc8d68c4d85ad16470441dd2e6e8f36a4458 00000940: DUP7 00000941: PUSH1 0x40 00000943: MLOAD 00000944: PUSH2 0x094d 00000947: SWAP2 00000948: SWAP1 00000949: PUSH2 0x2ef5 0000094c: JUMP 0000094d: JUMPDEST 0000094e: PUSH1 0x40 00000950: MLOAD 00000951: DUP1 00000952: SWAP2 00000953: SUB 00000954: SWAP1 00000955: LOG3 00000956: POP 00000957: JUMPDEST 00000958: PUSH2 0x0acf 0000095b: JUMP 0000095c: JUMPDEST 0000095d: PUSH1 0x40 0000095f: MLOAD 00000960: PUSH4 0x70a08231 00000965: PUSH1 0xe0 00000967: SHL 00000968: DUP2 00000969: MSTORE 0000096a: DUP4 0000096b: SWAP1 0000096c: PUSH1 0x00 0000096e: SWAP1 0000096f: PUSH1 0x01 00000971: PUSH1 0x01 00000973: PUSH1 0xa0 00000975: SHL 00000976: SUB 00000977: DUP4 00000978: AND 00000979: SWAP1 0000097a: PUSH4 0x70a08231 0000097f: SWAP1 00000980: PUSH2 0x098d 00000983: SWAP1 00000984: ADDRESS 00000985: SWAP1 00000986: PUSH1 0x04 00000988: ADD 00000989: PUSH2 0x2f03 0000098c: JUMP 0000098d: JUMPDEST 0000098e: PUSH1 0x20 00000990: PUSH1 0x40 00000992: MLOAD 00000993: DUP1 00000994: DUP4 00000995: SUB 00000996: DUP2 00000997: DUP7 00000998: DUP1 00000999: EXTCODESIZE 0000099a: ISZERO 0000099b: DUP1 0000099c: ISZERO 0000099d: PUSH2 0x09a5 000009a0: JUMPI 000009a1: PUSH1 0x00 000009a3: DUP1 000009a4: REVERT 000009a5: JUMPDEST 000009a6: POP 000009a7: GAS 000009a8: STATICCALL 000009a9: ISZERO 000009aa: DUP1 000009ab: ISZERO 000009ac: PUSH2 0x09b9 000009af: JUMPI 000009b0: RETURNDATASIZE 000009b1: PUSH1 0x00 000009b3: DUP1 000009b4: RETURNDATACOPY 000009b5: RETURNDATASIZE 000009b6: PUSH1 0x00 000009b8: REVERT 000009b9: JUMPDEST 000009ba: POP 000009bb: POP 000009bc: POP 000009bd: POP 000009be: PUSH1 0x40 000009c0: MLOAD 000009c1: RETURNDATASIZE 000009c2: PUSH1 0x1f 000009c4: NOT 000009c5: PUSH1 0x1f 000009c7: DUP3 000009c8: ADD 000009c9: AND 000009ca: DUP3 000009cb: ADD 000009cc: DUP1 000009cd: PUSH1 0x40 000009cf: MSTORE 000009d0: POP 000009d1: PUSH2 0x09dd 000009d4: SWAP2 000009d5: SWAP1 000009d6: DUP2 000009d7: ADD 000009d8: SWAP1 000009d9: PUSH2 0x2594 000009dc: JUMP 000009dd: JUMPDEST 000009de: PUSH1 0x01 000009e0: PUSH1 0x01 000009e2: PUSH1 0xa0 000009e4: SHL 000009e5: SUB 000009e6: DUP7 000009e7: AND 000009e8: PUSH1 0x00 000009ea: SWAP1 000009eb: DUP2 000009ec: MSTORE 000009ed: PUSH1 0x0d 000009ef: PUSH1 0x20 000009f1: MSTORE 000009f2: PUSH1 0x40 000009f4: SWAP1 000009f5: KECCAK256 000009f6: SLOAD 000009f7: SWAP1 000009f8: SWAP2 000009f9: POP 000009fa: DUP2 000009fb: GT 000009fc: ISZERO 000009fd: PUSH2 0x0acc 00000a00: JUMPI 00000a01: PUSH1 0x01 00000a03: PUSH1 0x01 00000a05: PUSH1 0xa0 00000a07: SHL 00000a08: SUB 00000a09: DUP6 00000a0a: AND 00000a0b: PUSH1 0x00 00000a0d: SWAP1 00000a0e: DUP2 00000a0f: MSTORE 00000a10: PUSH1 0x0d 00000a12: PUSH1 0x20 00000a14: MSTORE 00000a15: PUSH1 0x40 00000a17: DUP2 00000a18: KECCAK256 00000a19: SLOAD 00000a1a: PUSH2 0x0a2a 00000a1d: SWAP1 00000a1e: DUP4 00000a1f: SWAP1 00000a20: PUSH4 0xffffffff 00000a25: PUSH2 0x1bf0 00000a28: AND 00000a29: JUMP 00000a2a: JUMPDEST 00000a2b: PUSH1 0x0b 00000a2d: SLOAD 00000a2e: PUSH1 0x40 00000a30: MLOAD 00000a31: PUSH4 0xa9059cbb 00000a36: PUSH1 0xe0 00000a38: SHL 00000a39: DUP2 00000a3a: MSTORE 00000a3b: SWAP2 00000a3c: SWAP3 00000a3d: POP 00000a3e: PUSH1 0x01 00000a40: PUSH1 0x01 00000a42: PUSH1 0xa0 00000a44: SHL 00000a45: SUB 00000a46: DUP1 00000a47: DUP7 00000a48: AND 00000a49: SWAP3 00000a4a: PUSH4 0xa9059cbb 00000a4f: SWAP3 00000a50: PUSH2 0x0a5f 00000a53: SWAP3 00000a54: AND 00000a55: SWAP1 00000a56: DUP6 00000a57: SWAP1 00000a58: PUSH1 0x04 00000a5a: ADD 00000a5b: PUSH2 0x2f76 00000a5e: JUMP 00000a5f: JUMPDEST 00000a60: PUSH1 0x00 00000a62: PUSH1 0x40 00000a64: MLOAD 00000a65: DUP1 00000a66: DUP4 00000a67: SUB 00000a68: DUP2 00000a69: PUSH1 0x00 00000a6b: DUP8 00000a6c: DUP1 00000a6d: EXTCODESIZE 00000a6e: ISZERO 00000a6f: DUP1 00000a70: ISZERO 00000a71: PUSH2 0x0a79 00000a74: JUMPI 00000a75: PUSH1 0x00 00000a77: DUP1 00000a78: REVERT 00000a79: JUMPDEST 00000a7a: POP 00000a7b: GAS 00000a7c: CALL 00000a7d: ISZERO 00000a7e: DUP1 00000a7f: ISZERO 00000a80: PUSH2 0x0a8d 00000a83: JUMPI 00000a84: RETURNDATASIZE 00000a85: PUSH1 0x00 00000a87: DUP1 00000a88: RETURNDATACOPY 00000a89: RETURNDATASIZE 00000a8a: PUSH1 0x00 00000a8c: REVERT 00000a8d: JUMPDEST 00000a8e: POP 00000a8f: POP 00000a90: POP 00000a91: POP 00000a92: DUP1 00000a93: DUP6 00000a94: PUSH32 0x186661f41f6b7bc56a92ba66079ddc8d68c4d85ad16470441dd2e6e8f36a4458 00000ab5: DUP9 00000ab6: PUSH1 0x40 00000ab8: MLOAD 00000ab9: PUSH2 0x0ac2 00000abc: SWAP2 00000abd: SWAP1 00000abe: PUSH2 0x2ef5 00000ac1: JUMP 00000ac2: JUMPDEST 00000ac3: PUSH1 0x40 00000ac5: MLOAD 00000ac6: DUP1 00000ac7: SWAP2 00000ac8: SUB 00000ac9: SWAP1 00000aca: LOG3 00000acb: POP 00000acc: JUMPDEST 00000acd: POP 00000ace: POP 00000acf: JUMPDEST 00000ad0: POP 00000ad1: POP 00000ad2: PUSH1 0x00 00000ad4: DUP1 00000ad5: SLOAD 00000ad6: PUSH1 0xff 00000ad8: NOT 00000ad9: AND 00000ada: SWAP1 00000adb: SSTORE 00000adc: POP 00000add: JUMP 00000ade: JUMPDEST 00000adf: PUSH2 0x0ae6 00000ae2: PUSH2 0x1992 00000ae5: JUMP 00000ae6: JUMPDEST 00000ae7: DUP2 00000ae8: MLOAD 00000ae9: PUSH2 0x0af9 00000aec: SWAP1 00000aed: PUSH1 0x05 00000aef: SWAP1 00000af0: PUSH1 0x20 00000af2: DUP6 00000af3: ADD 00000af4: SWAP1 00000af5: PUSH2 0x202c 00000af8: JUMP 00000af9: JUMPDEST 00000afa: POP 00000afb: DUP1 00000afc: MLOAD 00000afd: PUSH2 0x0b0d 00000b00: SWAP1 00000b01: PUSH1 0x06 00000b03: SWAP1 00000b04: PUSH1 0x20 00000b06: DUP5 00000b07: ADD 00000b08: SWAP1 00000b09: PUSH2 0x202c 00000b0c: JUMP 00000b0d: JUMPDEST 00000b0e: POP 00000b0f: POP 00000b10: POP 00000b11: JUMP 00000b12: JUMPDEST 00000b13: PUSH2 0x0b1d 00000b16: PUSH2 0x0625 00000b19: PUSH2 0x1c39 00000b1c: JUMP 00000b1d: JUMPDEST 00000b1e: PUSH2 0x0b39 00000b21: JUMPI 00000b22: PUSH1 0x40 00000b24: MLOAD 00000b25: PUSH3 0x461bcd 00000b29: PUSH1 0xe5 00000b2b: SHL 00000b2c: DUP2 00000b2d: MSTORE 00000b2e: PUSH1 0x04 00000b30: ADD 00000b31: PUSH2 0x07b3 00000b34: SWAP1 00000b35: PUSH2 0x3128 00000b38: JUMP 00000b39: JUMPDEST 00000b3a: PUSH2 0x0b42 00000b3d: DUP2 00000b3e: PUSH2 0x1c3d 00000b41: JUMP 00000b42: JUMPDEST 00000b43: POP 00000b44: JUMP 00000b45: JUMPDEST 00000b46: PUSH1 0x00 00000b48: SLOAD 00000b49: PUSH1 0xff 00000b4b: AND 00000b4c: ISZERO 00000b4d: PUSH2 0x0b68 00000b50: JUMPI 00000b51: PUSH1 0x40 00000b53: MLOAD 00000b54: PUSH3 0x461bcd 00000b58: PUSH1 0xe5 00000b5a: SHL 00000b5b: DUP2 00000b5c: MSTORE 00000b5d: PUSH1 0x04 00000b5f: ADD 00000b60: PUSH2 0x07b3 00000b63: SWAP1 00000b64: PUSH2 0x3148 00000b67: JUMP 00000b68: JUMPDEST 00000b69: PUSH1 0x00 00000b6b: DUP1 00000b6c: SLOAD 00000b6d: PUSH1 0xff 00000b6f: NOT 00000b70: AND 00000b71: PUSH1 0x01 00000b73: OR 00000b74: SWAP1 00000b75: SSTORE 00000b76: PUSH2 0x0b7d 00000b79: PUSH2 0x1c85 00000b7c: JUMP 00000b7d: JUMPDEST 00000b7e: PUSH1 0x07 00000b80: DUP3 00000b81: PUSH1 0x40 00000b83: MLOAD 00000b84: PUSH2 0x0b8d 00000b87: SWAP2 00000b88: SWAP1 00000b89: PUSH2 0x2dc5 00000b8c: JUMP 00000b8d: JUMPDEST 00000b8e: SWAP1 00000b8f: DUP2 00000b90: MSTORE 00000b91: PUSH1 0x40 00000b93: MLOAD 00000b94: SWAP1 00000b95: DUP2 00000b96: SWAP1 00000b97: SUB 00000b98: PUSH1 0x20 00000b9a: ADD 00000b9b: SWAP1 00000b9c: KECCAK256 00000b9d: SLOAD 00000b9e: PUSH1 0xff 00000ba0: AND 00000ba1: ISZERO 00000ba2: PUSH2 0x0bbd 00000ba5: JUMPI 00000ba6: PUSH1 0x40 00000ba8: MLOAD 00000ba9: PUSH3 0x461bcd 00000bad: PUSH1 0xe5 00000baf: SHL 00000bb0: DUP2 00000bb1: MSTORE 00000bb2: PUSH1 0x04 00000bb4: ADD 00000bb5: PUSH2 0x07b3 00000bb8: SWAP1 00000bb9: PUSH2 0x30b8 00000bbc: JUMP 00000bbd: JUMPDEST 00000bbe: PUSH2 0x0be4 00000bc1: PUSH2 0x0bc8 00000bc4: PUSH2 0x1caa 00000bc7: JUMP 00000bc8: JUMPDEST 00000bc9: ADDRESS 00000bca: DUP9 00000bcb: DUP9 00000bcc: DUP9 00000bcd: DUP9 00000bce: DUP9 00000bcf: PUSH1 0x40 00000bd1: MLOAD 00000bd2: PUSH1 0x20 00000bd4: ADD 00000bd5: PUSH2 0x0855 00000bd8: SWAP8 00000bd9: SWAP7 00000bda: SWAP6 00000bdb: SWAP5 00000bdc: SWAP4 00000bdd: SWAP3 00000bde: SWAP2 00000bdf: SWAP1 00000be0: PUSH2 0x2e71 00000be3: JUMP 00000be4: JUMPDEST 00000be5: DUP4 00000be6: PUSH1 0x01 00000be8: PUSH1 0x01 00000bea: PUSH1 0xa0 00000bec: SHL 00000bed: SUB 00000bee: DUP8 00000bef: AND 00000bf0: PUSH2 0x0cf5 00000bf3: JUMPI 00000bf4: DUP4 00000bf5: SELFBALANCE 00000bf6: LT 00000bf7: ISZERO 00000bf8: PUSH2 0x0c13 00000bfb: JUMPI 00000bfc: PUSH1 0x40 00000bfe: MLOAD 00000bff: PUSH3 0x461bcd 00000c03: PUSH1 0xe5 00000c05: SHL 00000c06: DUP2 00000c07: MSTORE 00000c08: PUSH1 0x04 00000c0a: ADD 00000c0b: PUSH2 0x07b3 00000c0e: SWAP1 00000c0f: PUSH2 0x30a8 00000c12: JUMP 00000c13: JUMPDEST 00000c14: PUSH1 0x01 00000c16: PUSH1 0x01 00000c18: PUSH1 0xa0 00000c1a: SHL 00000c1b: SUB 00000c1c: DUP6 00000c1d: AND 00000c1e: PUSH1 0x00 00000c20: SWAP1 00000c21: DUP2 00000c22: MSTORE 00000c23: PUSH1 0x08 00000c25: PUSH1 0x20 00000c27: MSTORE 00000c28: PUSH1 0x40 00000c2a: SWAP1 00000c2b: KECCAK256 00000c2c: SLOAD 00000c2d: PUSH1 0xff 00000c2f: AND 00000c30: ISZERO 00000c31: PUSH2 0x0cb4 00000c34: JUMPI 00000c35: PUSH1 0x40 00000c37: MLOAD 00000c38: PUSH32 0x47e7ef2400000000000000000000000000000000000000000000000000000000 00000c59: DUP2 00000c5a: MSTORE 00000c5b: PUSH1 0x01 00000c5d: PUSH1 0x01 00000c5f: PUSH1 0xa0 00000c61: SHL 00000c62: SUB 00000c63: DUP7 00000c64: AND 00000c65: SWAP1 00000c66: PUSH4 0x47e7ef24 00000c6b: SWAP1 00000c6c: DUP7 00000c6d: SWAP1 00000c6e: PUSH2 0x0c7d 00000c71: SWAP1 00000c72: DUP11 00000c73: SWAP1 00000c74: DUP4 00000c75: SWAP1 00000c76: PUSH1 0x04 00000c78: ADD 00000c79: PUSH2 0x2f76 00000c7c: JUMP 00000c7d: JUMPDEST 00000c7e: PUSH1 0x00 00000c80: PUSH1 0x40 00000c82: MLOAD 00000c83: DUP1 00000c84: DUP4 00000c85: SUB 00000c86: DUP2 00000c87: DUP6 00000c88: DUP9 00000c89: DUP1 00000c8a: EXTCODESIZE 00000c8b: ISZERO 00000c8c: DUP1 00000c8d: ISZERO 00000c8e: PUSH2 0x0c96 00000c91: JUMPI 00000c92: PUSH1 0x00 00000c94: DUP1 00000c95: REVERT 00000c96: JUMPDEST 00000c97: POP 00000c98: GAS 00000c99: CALL 00000c9a: ISZERO 00000c9b: DUP1 00000c9c: ISZERO 00000c9d: PUSH2 0x0caa 00000ca0: JUMPI 00000ca1: RETURNDATASIZE 00000ca2: PUSH1 0x00 00000ca4: DUP1 00000ca5: RETURNDATACOPY 00000ca6: RETURNDATASIZE 00000ca7: PUSH1 0x00 00000ca9: REVERT 00000caa: JUMPDEST 00000cab: POP 00000cac: POP 00000cad: POP 00000cae: POP 00000caf: POP 00000cb0: PUSH2 0x0cf0 00000cb3: JUMP 00000cb4: JUMPDEST 00000cb5: PUSH1 0x40 00000cb7: MLOAD 00000cb8: PUSH1 0x01 00000cba: PUSH1 0x01 00000cbc: PUSH1 0xa0 00000cbe: SHL 00000cbf: SUB 00000cc0: DUP8 00000cc1: AND 00000cc2: SWAP1 00000cc3: DUP6 00000cc4: ISZERO 00000cc5: PUSH2 0x08fc 00000cc8: MUL 00000cc9: SWAP1 00000cca: DUP7 00000ccb: SWAP1 00000ccc: PUSH1 0x00 00000cce: DUP2 00000ccf: DUP2 00000cd0: DUP2 00000cd1: DUP6 00000cd2: DUP9 00000cd3: DUP9 00000cd4: CALL 00000cd5: SWAP4 00000cd6: POP 00000cd7: POP 00000cd8: POP 00000cd9: POP 00000cda: ISZERO 00000cdb: DUP1 00000cdc: ISZERO 00000cdd: PUSH2 0x0cea 00000ce0: JUMPI 00000ce1: RETURNDATASIZE 00000ce2: PUSH1 0x00 00000ce4: DUP1 00000ce5: RETURNDATACOPY 00000ce6: RETURNDATASIZE 00000ce7: PUSH1 0x00 00000ce9: REVERT 00000cea: JUMPDEST 00000ceb: POP 00000cec: PUSH1 0x00 00000cee: SWAP1 00000cef: POP 00000cf0: JUMPDEST 00000cf1: PUSH2 0x0fc8 00000cf4: JUMP 00000cf5: JUMPDEST 00000cf6: PUSH1 0x40 00000cf8: MLOAD 00000cf9: PUSH4 0x70a08231 00000cfe: PUSH1 0xe0 00000d00: SHL 00000d01: DUP2 00000d02: MSTORE 00000d03: DUP8 00000d04: SWAP1 00000d05: DUP6 00000d06: SWAP1 00000d07: PUSH1 0x01 00000d09: PUSH1 0x01 00000d0b: PUSH1 0xa0 00000d0d: SHL 00000d0e: SUB 00000d0f: DUP4 00000d10: AND 00000d11: SWAP1 00000d12: PUSH4 0x70a08231 00000d17: SWAP1 00000d18: PUSH2 0x0d25 00000d1b: SWAP1 00000d1c: ADDRESS 00000d1d: SWAP1 00000d1e: PUSH1 0x04 00000d20: ADD 00000d21: PUSH2 0x2f03 00000d24: JUMP 00000d25: JUMPDEST 00000d26: PUSH1 0x20 00000d28: PUSH1 0x40 00000d2a: MLOAD 00000d2b: DUP1 00000d2c: DUP4 00000d2d: SUB 00000d2e: DUP2 00000d2f: DUP7 00000d30: DUP1 00000d31: EXTCODESIZE 00000d32: ISZERO 00000d33: DUP1 00000d34: ISZERO 00000d35: PUSH2 0x0d3d 00000d38: JUMPI 00000d39: PUSH1 0x00 00000d3b: DUP1 00000d3c: REVERT 00000d3d: JUMPDEST 00000d3e: POP 00000d3f: GAS 00000d40: STATICCALL 00000d41: ISZERO 00000d42: DUP1 00000d43: ISZERO 00000d44: PUSH2 0x0d51 00000d47: JUMPI 00000d48: RETURNDATASIZE 00000d49: PUSH1 0x00 00000d4b: DUP1 00000d4c: RETURNDATACOPY 00000d4d: RETURNDATASIZE 00000d4e: PUSH1 0x00 00000d50: REVERT 00000d51: JUMPDEST 00000d52: POP 00000d53: POP 00000d54: POP 00000d55: POP 00000d56: PUSH1 0x40 00000d58: MLOAD 00000d59: RETURNDATASIZE 00000d5a: PUSH1 0x1f 00000d5c: NOT 00000d5d: PUSH1 0x1f 00000d5f: DUP3 00000d60: ADD 00000d61: AND 00000d62: DUP3 00000d63: ADD 00000d64: DUP1 00000d65: PUSH1 0x40 00000d67: MSTORE 00000d68: POP 00000d69: PUSH2 0x0d75 00000d6c: SWAP2 00000d6d: SWAP1 00000d6e: DUP2 00000d6f: ADD 00000d70: SWAP1 00000d71: PUSH2 0x2594 00000d74: JUMP 00000d75: JUMPDEST 00000d76: LT 00000d77: ISZERO 00000d78: PUSH2 0x0d93 00000d7b: JUMPI 00000d7c: PUSH1 0x40 00000d7e: MLOAD 00000d7f: PUSH3 0x461bcd 00000d83: PUSH1 0xe5 00000d85: SHL 00000d86: DUP2 00000d87: MSTORE 00000d88: PUSH1 0x04 00000d8a: ADD 00000d8b: PUSH2 0x07b3 00000d8e: SWAP1 00000d8f: PUSH2 0x30a8 00000d92: JUMP 00000d93: JUMPDEST 00000d94: PUSH1 0x01 00000d96: PUSH1 0x01 00000d98: PUSH1 0xa0 00000d9a: SHL 00000d9b: SUB 00000d9c: DUP7 00000d9d: AND 00000d9e: PUSH1 0x00 00000da0: SWAP1 00000da1: DUP2 00000da2: MSTORE 00000da3: PUSH1 0x08 00000da5: PUSH1 0x20 00000da7: MSTORE 00000da8: PUSH1 0x40 00000daa: SWAP1 00000dab: KECCAK256 00000dac: SLOAD 00000dad: PUSH1 0xff 00000daf: AND 00000db0: ISZERO 00000db1: PUSH2 0x0f61 00000db4: JUMPI 00000db5: PUSH1 0x40 00000db7: MLOAD 00000db8: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000 00000dd9: DUP2 00000dda: MSTORE 00000ddb: PUSH1 0x01 00000ddd: PUSH1 0x01 00000ddf: PUSH1 0xa0 00000de1: SHL 00000de2: SUB 00000de3: DUP3 00000de4: AND 00000de5: SWAP1 00000de6: PUSH4 0x095ea7b3 00000deb: SWAP1 00000dec: PUSH2 0x0dfb 00000def: SWAP1 00000df0: DUP10 00000df1: SWAP1 00000df2: DUP10 00000df3: SWAP1 00000df4: PUSH1 0x04 00000df6: ADD 00000df7: PUSH2 0x2f76 00000dfa: JUMP 00000dfb: JUMPDEST 00000dfc: PUSH1 0x00 00000dfe: PUSH1 0x40 00000e00: MLOAD 00000e01: DUP1 00000e02: DUP4 00000e03: SUB 00000e04: DUP2 00000e05: PUSH1 0x00 00000e07: DUP8 00000e08: DUP1 00000e09: EXTCODESIZE 00000e0a: ISZERO 00000e0b: DUP1 00000e0c: ISZERO 00000e0d: PUSH2 0x0e15 00000e10: JUMPI 00000e11: PUSH1 0x00 00000e13: DUP1 00000e14: REVERT 00000e15: JUMPDEST 00000e16: POP 00000e17: GAS 00000e18: CALL 00000e19: ISZERO 00000e1a: DUP1 00000e1b: ISZERO 00000e1c: PUSH2 0x0e29 00000e1f: JUMPI 00000e20: RETURNDATASIZE 00000e21: PUSH1 0x00 00000e23: DUP1 00000e24: RETURNDATACOPY 00000e25: RETURNDATASIZE 00000e26: PUSH1 0x00 00000e28: REVERT 00000e29: JUMPDEST 00000e2a: POP 00000e2b: POP 00000e2c: PUSH1 0x40 00000e2e: MLOAD 00000e2f: PUSH32 0x9d57558200000000000000000000000000000000000000000000000000000000 00000e50: DUP2 00000e51: MSTORE 00000e52: PUSH1 0x01 00000e54: PUSH1 0x01 00000e56: PUSH1 0xa0 00000e58: SHL 00000e59: SUB 00000e5a: DUP10 00000e5b: AND 00000e5c: SWAP3 00000e5d: POP 00000e5e: PUSH4 0x9d575582 00000e63: SWAP2 00000e64: POP 00000e65: PUSH2 0x0e76 00000e68: SWAP1 00000e69: DUP11 00000e6a: SWAP1 00000e6b: DUP10 00000e6c: SWAP1 00000e6d: DUP14 00000e6e: SWAP1 00000e6f: PUSH1 0x04 00000e71: ADD 00000e72: PUSH2 0x2f84 00000e75: JUMP 00000e76: JUMPDEST 00000e77: PUSH1 0x00 00000e79: PUSH1 0x40 00000e7b: MLOAD 00000e7c: DUP1 00000e7d: DUP4 00000e7e: SUB 00000e7f: DUP2 00000e80: PUSH1 0x00 00000e82: DUP8 00000e83: DUP1 00000e84: EXTCODESIZE 00000e85: ISZERO 00000e86: DUP1 00000e87: ISZERO 00000e88: PUSH2 0x0e90 00000e8b: JUMPI 00000e8c: PUSH1 0x00 00000e8e: DUP1 00000e8f: REVERT 00000e90: JUMPDEST 00000e91: POP 00000e92: GAS 00000e93: CALL 00000e94: ISZERO 00000e95: DUP1 00000e96: ISZERO 00000e97: PUSH2 0x0ea4 00000e9a: JUMPI 00000e9b: RETURNDATASIZE 00000e9c: PUSH1 0x00 00000e9e: DUP1 00000e9f: RETURNDATACOPY 00000ea0: RETURNDATASIZE 00000ea1: PUSH1 0x00 00000ea3: REVERT 00000ea4: JUMPDEST 00000ea5: POP 00000ea6: POP 00000ea7: PUSH1 0x40 00000ea9: MLOAD 00000eaa: PUSH32 0xdd62ed3e00000000000000000000000000000000000000000000000000000000 00000ecb: DUP2 00000ecc: MSTORE 00000ecd: PUSH1 0x01 00000ecf: PUSH1 0x01 00000ed1: PUSH1 0xa0 00000ed3: SHL 00000ed4: SUB 00000ed5: DUP5 00000ed6: AND 00000ed7: SWAP3 00000ed8: POP 00000ed9: PUSH4 0xdd62ed3e 00000ede: SWAP2 00000edf: POP 00000ee0: PUSH2 0x0eef 00000ee3: SWAP1 00000ee4: ADDRESS 00000ee5: SWAP1 00000ee6: DUP11 00000ee7: SWAP1 00000ee8: PUSH1 0x04 00000eea: ADD 00000eeb: PUSH2 0x2f11 00000eee: JUMP 00000eef: JUMPDEST 00000ef0: PUSH1 0x20 00000ef2: PUSH1 0x40 00000ef4: MLOAD 00000ef5: DUP1 00000ef6: DUP4 00000ef7: SUB 00000ef8: DUP2 00000ef9: DUP7 00000efa: DUP1 00000efb: EXTCODESIZE 00000efc: ISZERO 00000efd: DUP1 00000efe: ISZERO 00000eff: PUSH2 0x0f07 00000f02: JUMPI 00000f03: PUSH1 0x00 00000f05: DUP1 00000f06: REVERT 00000f07: JUMPDEST 00000f08: POP 00000f09: GAS 00000f0a: STATICCALL 00000f0b: ISZERO 00000f0c: DUP1 00000f0d: ISZERO 00000f0e: PUSH2 0x0f1b 00000f11: JUMPI 00000f12: RETURNDATASIZE 00000f13: PUSH1 0x00 00000f15: DUP1 00000f16: RETURNDATACOPY 00000f17: RETURNDATASIZE 00000f18: PUSH1 0x00 00000f1a: REVERT 00000f1b: JUMPDEST 00000f1c: POP 00000f1d: POP 00000f1e: POP 00000f1f: POP 00000f20: PUSH1 0x40 00000f22: MLOAD 00000f23: RETURNDATASIZE 00000f24: PUSH1 0x1f 00000f26: NOT 00000f27: PUSH1 0x1f 00000f29: DUP3 00000f2a: ADD 00000f2b: AND 00000f2c: DUP3 00000f2d: ADD 00000f2e: DUP1 00000f2f: PUSH1 0x40 00000f31: MSTORE 00000f32: POP 00000f33: PUSH2 0x0f3f 00000f36: SWAP2 00000f37: SWAP1 00000f38: DUP2 00000f39: ADD 00000f3a: SWAP1 00000f3b: PUSH2 0x2594 00000f3e: JUMP 00000f3f: JUMPDEST 00000f40: ISZERO 00000f41: PUSH2 0x0f5c 00000f44: JUMPI 00000f45: PUSH1 0x40 00000f47: MLOAD 00000f48: PUSH3 0x461bcd 00000f4c: PUSH1 0xe5 00000f4e: SHL 00000f4f: DUP2 00000f50: MSTORE 00000f51: PUSH1 0x04 00000f53: ADD 00000f54: PUSH2 0x07b3 00000f57: SWAP1 00000f58: PUSH2 0x3058 00000f5b: JUMP 00000f5c: JUMPDEST 00000f5d: PUSH2 0x0fc6 00000f60: JUMP 00000f61: JUMPDEST 00000f62: PUSH1 0x40 00000f64: MLOAD 00000f65: PUSH4 0xa9059cbb 00000f6a: PUSH1 0xe0 00000f6c: SHL 00000f6d: DUP2 00000f6e: MSTORE 00000f6f: PUSH1 0x01 00000f71: PUSH1 0x01 00000f73: PUSH1 0xa0 00000f75: SHL 00000f76: SUB 00000f77: DUP3 00000f78: AND 00000f79: SWAP1 00000f7a: PUSH4 0xa9059cbb 00000f7f: SWAP1 00000f80: PUSH2 0x0f8f 00000f83: SWAP1 00000f84: DUP11 00000f85: SWAP1 00000f86: DUP10 00000f87: SWAP1 00000f88: PUSH1 0x04 00000f8a: ADD 00000f8b: PUSH2 0x2f76 00000f8e: JUMP 00000f8f: JUMPDEST 00000f90: PUSH1 0x00 00000f92: PUSH1 0x40 00000f94: MLOAD 00000f95: DUP1 00000f96: DUP4 00000f97: SUB 00000f98: DUP2 00000f99: PUSH1 0x00 00000f9b: DUP8 00000f9c: DUP1 00000f9d: EXTCODESIZE 00000f9e: ISZERO 00000f9f: DUP1 00000fa0: ISZERO 00000fa1: PUSH2 0x0fa9 00000fa4: JUMPI 00000fa5: PUSH1 0x00 00000fa7: DUP1 00000fa8: REVERT 00000fa9: JUMPDEST 00000faa: POP 00000fab: GAS 00000fac: CALL 00000fad: ISZERO 00000fae: DUP1 00000faf: ISZERO 00000fb0: PUSH2 0x0fbd 00000fb3: JUMPI 00000fb4: RETURNDATASIZE 00000fb5: PUSH1 0x00 00000fb7: DUP1 00000fb8: RETURNDATACOPY 00000fb9: RETURNDATASIZE 00000fba: PUSH1 0x00 00000fbc: REVERT 00000fbd: JUMPDEST 00000fbe: POP 00000fbf: POP 00000fc0: POP 00000fc1: POP 00000fc2: PUSH1 0x00 00000fc4: SWAP2 00000fc5: POP 00000fc6: JUMPDEST 00000fc7: POP 00000fc8: JUMPDEST 00000fc9: PUSH1 0x01 00000fcb: PUSH1 0x07 00000fcd: DUP5 00000fce: PUSH1 0x40 00000fd0: MLOAD 00000fd1: PUSH2 0x0fda 00000fd4: SWAP2 00000fd5: SWAP1 00000fd6: PUSH2 0x2dc5 00000fd9: JUMP 00000fda: JUMPDEST 00000fdb: SWAP1 00000fdc: DUP2 00000fdd: MSTORE 00000fde: PUSH1 0x20 00000fe0: ADD 00000fe1: PUSH1 0x40 00000fe3: MLOAD 00000fe4: DUP1 00000fe5: SWAP2 00000fe6: SUB 00000fe7: SWAP1 00000fe8: KECCAK256 00000fe9: PUSH1 0x00 00000feb: PUSH2 0x0100 00000fee: EXP 00000fef: DUP2 00000ff0: SLOAD 00000ff1: DUP2 00000ff2: PUSH1 0xff 00000ff4: MUL 00000ff5: NOT 00000ff6: AND 00000ff7: SWAP1 00000ff8: DUP4 00000ff9: ISZERO 00000ffa: ISZERO 00000ffb: MUL 00000ffc: OR 00000ffd: SWAP1 00000ffe: SSTORE 00000fff: POP 00001000: DUP1 00001001: PUSH1 0x01 00001003: PUSH1 0x01 00001005: PUSH1 0xa0 00001007: SHL 00001008: SUB 00001009: AND 0000100a: DUP5 0000100b: DUP8 0000100c: PUSH1 0x01 0000100e: PUSH1 0x01 00001010: PUSH1 0xa0 00001012: SHL 00001013: SUB 00001014: AND 00001015: PUSH32 0xf6b095aebfbfb6ed6beca6ffab1699c95c32480f70b07621f92d7ccdf8440894 00001036: DUP9 00001037: DUP8 00001038: DUP13 00001039: PUSH1 0x40 0000103b: MLOAD 0000103c: PUSH2 0x1047 0000103f: SWAP4 00001040: SWAP3 00001041: SWAP2 00001042: SWAP1 00001043: PUSH2 0x2f2c 00001046: JUMP 00001047: JUMPDEST 00001048: PUSH1 0x40 0000104a: MLOAD 0000104b: DUP1 0000104c: SWAP2 0000104d: SUB 0000104e: SWAP1 0000104f: LOG4 00001050: POP 00001051: POP 00001052: PUSH1 0x00 00001054: DUP1 00001055: SLOAD 00001056: PUSH1 0xff 00001058: NOT 00001059: AND 0000105a: SWAP1 0000105b: SSTORE 0000105c: POP 0000105d: POP 0000105e: POP 0000105f: POP 00001060: POP 00001061: JUMP 00001062: JUMPDEST 00001063: PUSH1 0x08 00001065: PUSH1 0x20 00001067: MSTORE 00001068: PUSH1 0x00 0000106a: SWAP1 0000106b: DUP2 0000106c: MSTORE 0000106d: PUSH1 0x40 0000106f: SWAP1 00001070: KECCAK256 00001071: SLOAD 00001072: PUSH1 0xff 00001074: AND 00001075: DUP2 00001076: JUMP 00001077: JUMPDEST 00001078: PUSH1 0x09 0000107a: SLOAD 0000107b: DUP2 0000107c: JUMP 0000107d: JUMPDEST 0000107e: PUSH1 0x05 00001080: DUP2 00001081: DUP2 00001082: SLOAD 00001083: DUP2 00001084: LT 00001085: PUSH2 0x108a 00001088: JUMPI 00001089: INVALID 0000108a: JUMPDEST 0000108b: PUSH1 0x00 0000108d: SWAP2 0000108e: DUP3 0000108f: MSTORE 00001090: PUSH1 0x20 00001092: SWAP1 00001093: SWAP2 00001094: KECCAK256 00001095: ADD 00001096: SLOAD 00001097: PUSH1 0x01 00001099: PUSH1 0x01 0000109b: PUSH1 0xa0 0000109d: SHL 0000109e: SUB 0000109f: AND 000010a0: SWAP1 000010a1: POP 000010a2: DUP2 000010a3: JUMP 000010a4: JUMPDEST 000010a5: PUSH2 0x10ac 000010a8: PUSH2 0x1992 000010ab: JUMP 000010ac: JUMPDEST 000010ad: PUSH2 0x10b4 000010b0: PUSH2 0x19b7 000010b3: JUMP 000010b4: JUMPDEST 000010b5: PUSH1 0x0e 000010b7: SLOAD 000010b8: PUSH1 0x0f 000010ba: SLOAD 000010bb: PUSH1 0x40 000010bd: MLOAD 000010be: PUSH2 0x10f9 000010c1: SWAP3 000010c2: PUSH2 0x10db 000010c5: SWAP3 000010c6: ADDRESS 000010c7: SWAP3 000010c8: PUSH1 0x01 000010ca: PUSH1 0x01 000010cc: PUSH1 0xa0 000010ce: SHL 000010cf: SUB 000010d0: SWAP1 000010d1: SWAP3 000010d2: AND 000010d3: SWAP2 000010d4: PUSH1 0x20 000010d6: ADD 000010d7: PUSH2 0x2dd1 000010da: JUMP 000010db: JUMPDEST 000010dc: PUSH1 0x40 000010de: MLOAD 000010df: PUSH1 0x20 000010e1: DUP2 000010e2: DUP4 000010e3: SUB 000010e4: SUB 000010e5: DUP2 000010e6: MSTORE 000010e7: SWAP1 000010e8: PUSH1 0x40 000010ea: MSTORE 000010eb: DUP1 000010ec: MLOAD 000010ed: SWAP1 000010ee: PUSH1 0x20 000010f0: ADD 000010f1: KECCAK256 000010f2: DUP3 000010f3: PUSH1 0x01 000010f5: PUSH2 0x19db 000010f8: JUMP 000010f9: JUMPDEST 000010fa: PUSH1 0x0f 000010fc: DUP1 000010fd: SLOAD 000010fe: PUSH1 0x01 00001100: ADD 00001101: SWAP1 00001102: SSTORE 00001103: PUSH1 0x0e 00001105: SLOAD 00001106: PUSH2 0x1117 00001109: SWAP1 0000110a: PUSH1 0x01 0000110c: PUSH1 0x01 0000110e: PUSH1 0xa0 00001110: SHL 00001111: SUB 00001112: AND 00001113: PUSH2 0x1cae 00001116: JUMP 00001117: JUMPDEST 00001118: PUSH1 0x0e 0000111a: SLOAD 0000111b: PUSH1 0x40 0000111d: MLOAD 0000111e: PUSH1 0x01 00001120: PUSH1 0x01 00001122: PUSH1 0xa0 00001124: SHL 00001125: SUB 00001126: SWAP1 00001127: SWAP2 00001128: AND 00001129: SWAP1 0000112a: PUSH32 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b 0000114b: SWAP1 0000114c: PUSH1 0x00 0000114e: SWAP1 0000114f: LOG2 00001150: POP 00001151: JUMP 00001152: JUMPDEST 00001153: PUSH1 0x00 00001155: SLOAD 00001156: PUSH1 0xff 00001158: AND 00001159: ISZERO 0000115a: PUSH2 0x1175 0000115d: JUMPI 0000115e: PUSH1 0x40 00001160: MLOAD 00001161: PUSH3 0x461bcd 00001165: PUSH1 0xe5 00001167: SHL 00001168: DUP2 00001169: MSTORE 0000116a: PUSH1 0x04 0000116c: ADD 0000116d: PUSH2 0x07b3 00001170: SWAP1 00001171: PUSH2 0x3148 00001174: JUMP 00001175: JUMPDEST 00001176: PUSH1 0x00 00001178: DUP1 00001179: SLOAD 0000117a: PUSH1 0xff 0000117c: NOT 0000117d: AND 0000117e: PUSH1 0x01 00001180: OR 00001181: SWAP1 00001182: SSTORE 00001183: PUSH2 0x118a 00001186: PUSH2 0x1882 00001189: JUMP 0000118a: JUMPDEST 0000118b: PUSH1 0x09 0000118d: SLOAD 0000118e: DUP3 0000118f: EQ 00001190: PUSH2 0x11ab 00001193: JUMPI 00001194: PUSH1 0x40 00001196: MLOAD 00001197: PUSH3 0x461bcd 0000119b: PUSH1 0xe5 0000119d: SHL 0000119e: DUP2 0000119f: MSTORE 000011a0: PUSH1 0x04 000011a2: ADD 000011a3: PUSH2 0x07b3 000011a6: SWAP1 000011a7: PUSH2 0x3108 000011aa: JUMP 000011ab: JUMPDEST 000011ac: PUSH2 0x11c5 000011af: ADDRESS 000011b0: DUP6 000011b1: DUP6 000011b2: DUP6 000011b3: PUSH1 0x40 000011b5: MLOAD 000011b6: PUSH1 0x20 000011b8: ADD 000011b9: PUSH2 0x10db 000011bc: SWAP5 000011bd: SWAP4 000011be: SWAP3 000011bf: SWAP2 000011c0: SWAP1 000011c1: PUSH2 0x2e13 000011c4: JUMP 000011c5: JUMPDEST 000011c6: DUP2 000011c7: DUP4 000011c8: PUSH32 0x50fb1e062911f806ffb200f762d478c835a88d333a8dd543dccaedf3444dded5 000011e9: DUP7 000011ea: PUSH1 0x40 000011ec: MLOAD 000011ed: PUSH2 0x11f6 000011f0: SWAP2 000011f1: SWAP1 000011f2: PUSH2 0x2fac 000011f5: JUMP 000011f6: JUMPDEST 000011f7: PUSH1 0x40 000011f9: MLOAD 000011fa: DUP1 000011fb: SWAP2 000011fc: SUB 000011fd: SWAP1 000011fe: LOG3 000011ff: PUSH1 0x09 00001201: DUP1 00001202: SLOAD 00001203: PUSH1 0x01 00001205: ADD 00001206: SWAP1 00001207: SSTORE 00001208: PUSH1 0x01 0000120a: PUSH1 0x01 0000120c: PUSH1 0xa0 0000120e: SHL 0000120f: SUB 00001210: DUP5 00001211: AND 00001212: PUSH2 0x12aa 00001215: JUMPI 00001216: PUSH1 0x0b 00001218: SLOAD 00001219: PUSH1 0x01 0000121b: PUSH1 0x01 0000121d: PUSH1 0xa0 0000121f: SHL 00001220: SUB 00001221: AND 00001222: BALANCE 00001223: DUP4 00001224: GT 00001225: ISZERO 00001226: PUSH2 0x1241 00001229: JUMPI 0000122a: PUSH1 0x40 0000122c: MLOAD 0000122d: PUSH3 0x461bcd 00001231: PUSH1 0xe5 00001233: SHL 00001234: DUP2 00001235: MSTORE 00001236: PUSH1 0x04 00001238: ADD 00001239: PUSH2 0x07b3 0000123c: SWAP1 0000123d: PUSH2 0x3028 00001240: JUMP 00001241: JUMPDEST 00001242: PUSH1 0x0b 00001244: SLOAD 00001245: PUSH1 0x40 00001247: MLOAD 00001248: PUSH4 0xa9059cbb 0000124d: PUSH1 0xe0 0000124f: SHL 00001250: DUP2 00001251: MSTORE 00001252: PUSH1 0x01 00001254: PUSH1 0x01 00001256: PUSH1 0xa0 00001258: SHL 00001259: SUB 0000125a: SWAP1 0000125b: SWAP2 0000125c: AND 0000125d: SWAP1 0000125e: PUSH4 0xa9059cbb 00001263: SWAP1 00001264: PUSH2 0x1273 00001267: SWAP1 00001268: ADDRESS 00001269: SWAP1 0000126a: DUP8 0000126b: SWAP1 0000126c: PUSH1 0x04 0000126e: ADD 0000126f: PUSH2 0x2f5b 00001272: JUMP 00001273: JUMPDEST 00001274: PUSH1 0x00 00001276: PUSH1 0x40 00001278: MLOAD 00001279: DUP1 0000127a: DUP4 0000127b: SUB 0000127c: DUP2 0000127d: PUSH1 0x00 0000127f: DUP8 00001280: DUP1 00001281: EXTCODESIZE 00001282: ISZERO 00001283: DUP1 00001284: ISZERO 00001285: PUSH2 0x128d 00001288: JUMPI 00001289: PUSH1 0x00 0000128b: DUP1 0000128c: REVERT 0000128d: JUMPDEST 0000128e: POP 0000128f: GAS 00001290: CALL 00001291: ISZERO 00001292: DUP1 00001293: ISZERO 00001294: PUSH2 0x12a1 00001297: JUMPI 00001298: RETURNDATASIZE 00001299: PUSH1 0x00 0000129b: DUP1 0000129c: RETURNDATACOPY 0000129d: RETURNDATASIZE 0000129e: PUSH1 0x00 000012a0: REVERT 000012a1: JUMPDEST 000012a2: POP 000012a3: POP 000012a4: POP 000012a5: POP 000012a6: PUSH2 0x13d5 000012a9: JUMP 000012aa: JUMPDEST 000012ab: PUSH1 0x0b 000012ad: SLOAD 000012ae: PUSH1 0x40 000012b0: MLOAD 000012b1: PUSH4 0x70a08231 000012b6: PUSH1 0xe0 000012b8: SHL 000012b9: DUP2 000012ba: MSTORE 000012bb: DUP6 000012bc: SWAP2 000012bd: PUSH1 0x00 000012bf: SWAP2 000012c0: PUSH1 0x01 000012c2: PUSH1 0x01 000012c4: PUSH1 0xa0 000012c6: SHL 000012c7: SUB 000012c8: DUP1 000012c9: DUP6 000012ca: AND 000012cb: SWAP3 000012cc: PUSH4 0x70a08231 000012d1: SWAP3 000012d2: PUSH2 0x12e1 000012d5: SWAP3 000012d6: SWAP1 000012d7: SWAP2 000012d8: AND 000012d9: SWAP1 000012da: PUSH1 0x04 000012dc: ADD 000012dd: PUSH2 0x2f03 000012e0: JUMP 000012e1: JUMPDEST 000012e2: PUSH1 0x20 000012e4: PUSH1 0x40 000012e6: MLOAD 000012e7: DUP1 000012e8: DUP4 000012e9: SUB 000012ea: DUP2 000012eb: DUP7 000012ec: DUP1 000012ed: EXTCODESIZE 000012ee: ISZERO 000012ef: DUP1 000012f0: ISZERO 000012f1: PUSH2 0x12f9 000012f4: JUMPI 000012f5: PUSH1 0x00 000012f7: DUP1 000012f8: REVERT 000012f9: JUMPDEST 000012fa: POP 000012fb: GAS 000012fc: STATICCALL 000012fd: ISZERO 000012fe: DUP1 000012ff: ISZERO 00001300: PUSH2 0x130d 00001303: JUMPI 00001304: RETURNDATASIZE 00001305: PUSH1 0x00 00001307: DUP1 00001308: RETURNDATACOPY 00001309: RETURNDATASIZE 0000130a: PUSH1 0x00 0000130c: REVERT 0000130d: JUMPDEST 0000130e: POP 0000130f: POP 00001310: POP 00001311: POP 00001312: PUSH1 0x40 00001314: MLOAD 00001315: RETURNDATASIZE 00001316: PUSH1 0x1f 00001318: NOT 00001319: PUSH1 0x1f 0000131b: DUP3 0000131c: ADD 0000131d: AND 0000131e: DUP3 0000131f: ADD 00001320: DUP1 00001321: PUSH1 0x40 00001323: MSTORE 00001324: POP 00001325: PUSH2 0x1331 00001328: SWAP2 00001329: SWAP1 0000132a: DUP2 0000132b: ADD 0000132c: SWAP1 0000132d: PUSH2 0x2594 00001330: JUMP 00001331: JUMPDEST 00001332: SWAP1 00001333: POP 00001334: DUP5 00001335: DUP2 00001336: LT 00001337: ISZERO 00001338: PUSH2 0x1353 0000133b: JUMPI 0000133c: PUSH1 0x40 0000133e: MLOAD 0000133f: PUSH3 0x461bcd 00001343: PUSH1 0xe5 00001345: SHL 00001346: DUP2 00001347: MSTORE 00001348: PUSH1 0x04 0000134a: ADD 0000134b: PUSH2 0x07b3 0000134e: SWAP1 0000134f: PUSH2 0x3028 00001352: JUMP 00001353: JUMPDEST 00001354: PUSH1 0x0b 00001356: SLOAD 00001357: PUSH1 0x40 00001359: MLOAD 0000135a: PUSH32 0xf640d50800000000000000000000000000000000000000000000000000000000 0000137b: DUP2 0000137c: MSTORE 0000137d: PUSH1 0x01 0000137f: PUSH1 0x01 00001381: PUSH1 0xa0 00001383: SHL 00001384: SUB 00001385: SWAP1 00001386: SWAP2 00001387: AND 00001388: SWAP1 00001389: PUSH4 0xf640d508 0000138e: SWAP1 0000138f: PUSH2 0x13a0 00001392: SWAP1 00001393: ADDRESS 00001394: SWAP1 00001395: DUP10 00001396: SWAP1 00001397: DUP12 00001398: SWAP1 00001399: PUSH1 0x04 0000139b: ADD 0000139c: PUSH2 0x2f84 0000139f: JUMP 000013a0: JUMPDEST 000013a1: PUSH1 0x00 000013a3: PUSH1 0x40 000013a5: MLOAD 000013a6: DUP1 000013a7: DUP4 000013a8: SUB 000013a9: DUP2 000013aa: PUSH1 0x00 000013ac: DUP8 000013ad: DUP1 000013ae: EXTCODESIZE 000013af: ISZERO 000013b0: DUP1 000013b1: ISZERO 000013b2: PUSH2 0x13ba 000013b5: JUMPI 000013b6: PUSH1 0x00 000013b8: DUP1 000013b9: REVERT 000013ba: JUMPDEST 000013bb: POP 000013bc: GAS 000013bd: CALL 000013be: ISZERO 000013bf: DUP1 000013c0: ISZERO 000013c1: PUSH2 0x13ce 000013c4: JUMPI 000013c5: RETURNDATASIZE 000013c6: PUSH1 0x00 000013c8: DUP1 000013c9: RETURNDATACOPY 000013ca: RETURNDATASIZE 000013cb: PUSH1 0x00 000013cd: REVERT 000013ce: JUMPDEST 000013cf: POP 000013d0: POP 000013d1: POP 000013d2: POP 000013d3: POP 000013d4: POP 000013d5: JUMPDEST 000013d6: POP 000013d7: POP 000013d8: PUSH1 0x00 000013da: DUP1 000013db: SLOAD 000013dc: PUSH1 0xff 000013de: NOT 000013df: AND 000013e0: SWAP1 000013e1: SSTORE 000013e2: POP 000013e3: POP 000013e4: JUMP 000013e5: JUMPDEST 000013e6: PUSH2 0x13f0 000013e9: PUSH2 0x0625 000013ec: PUSH2 0x1c39 000013ef: JUMP 000013f0: JUMPDEST 000013f1: PUSH2 0x140c 000013f4: JUMPI 000013f5: PUSH1 0x40 000013f7: MLOAD 000013f8: PUSH3 0x461bcd 000013fc: PUSH1 0xe5 000013fe: SHL 000013ff: DUP2 00001400: MSTORE 00001401: PUSH1 0x04 00001403: ADD 00001404: PUSH2 0x07b3 00001407: SWAP1 00001408: PUSH2 0x3128 0000140b: JUMP 0000140c: JUMPDEST 0000140d: PUSH2 0x0b42 00001410: DUP2 00001411: PUSH2 0x1cf7 00001414: JUMP 00001415: JUMPDEST 00001416: PUSH1 0x00 00001418: DUP1 00001419: JUMPDEST 0000141a: PUSH1 0x05 0000141c: SLOAD 0000141d: DUP2 0000141e: LT 0000141f: ISZERO 00001420: PUSH2 0x1467 00001423: JUMPI 00001424: DUP3 00001425: PUSH1 0x01 00001427: PUSH1 0x01 00001429: PUSH1 0xa0 0000142b: SHL 0000142c: SUB 0000142d: AND 0000142e: PUSH1 0x05 00001430: DUP3 00001431: DUP2 00001432: SLOAD 00001433: DUP2 00001434: LT 00001435: PUSH2 0x143a 00001438: JUMPI 00001439: INVALID 0000143a: JUMPDEST 0000143b: PUSH1 0x00 0000143d: SWAP2 0000143e: DUP3 0000143f: MSTORE 00001440: PUSH1 0x20 00001442: SWAP1 00001443: SWAP2 00001444: KECCAK256 00001445: ADD 00001446: SLOAD 00001447: PUSH1 0x01 00001449: PUSH1 0x01 0000144b: PUSH1 0xa0 0000144d: SHL 0000144e: SUB 0000144f: AND 00001450: EQ 00001451: ISZERO 00001452: PUSH2 0x145f 00001455: JUMPI 00001456: PUSH1 0x01 00001458: SWAP2 00001459: POP 0000145a: POP 0000145b: PUSH2 0x1469 0000145e: JUMP 0000145f: JUMPDEST 00001460: PUSH1 0x01 00001462: ADD 00001463: PUSH2 0x1419 00001466: JUMP 00001467: JUMPDEST 00001468: POP 00001469: JUMPDEST 0000146a: SWAP2 0000146b: SWAP1 0000146c: POP 0000146d: JUMP 0000146e: JUMPDEST 0000146f: PUSH1 0x00 00001471: PUSH2 0x1481 00001474: PUSH1 0x04 00001476: DUP4 00001477: PUSH4 0xffffffff 0000147c: PUSH2 0x1d3f 0000147f: AND 00001480: JUMP 00001481: JUMPDEST 00001482: SWAP3 00001483: SWAP2 00001484: POP 00001485: POP 00001486: JUMP 00001487: JUMPDEST 00001488: PUSH2 0x1492 0000148b: PUSH2 0x04b2 0000148e: PUSH2 0x1c39 00001491: JUMP 00001492: JUMPDEST 00001493: PUSH2 0x14ae 00001496: JUMPI 00001497: PUSH1 0x40 00001499: MLOAD 0000149a: PUSH3 0x461bcd 0000149e: PUSH1 0xe5 000014a0: SHL 000014a1: DUP2 000014a2: MSTORE 000014a3: PUSH1 0x04 000014a5: ADD 000014a6: PUSH2 0x07b3 000014a9: SWAP1 000014aa: PUSH2 0x3078 000014ad: JUMP 000014ae: JUMPDEST 000014af: PUSH1 0x02 000014b1: SLOAD 000014b2: PUSH1 0xff 000014b4: AND 000014b5: PUSH2 0x14d0 000014b8: JUMPI 000014b9: PUSH1 0x40 000014bb: MLOAD 000014bc: PUSH3 0x461bcd 000014c0: PUSH1 0xe5 000014c2: SHL 000014c3: DUP2 000014c4: MSTORE 000014c5: PUSH1 0x04 000014c7: ADD 000014c8: PUSH2 0x07b3 000014cb: SWAP1 000014cc: PUSH2 0x3038 000014cf: JUMP 000014d0: JUMPDEST 000014d1: PUSH1 0x02 000014d3: DUP1 000014d4: SLOAD 000014d5: PUSH1 0xff 000014d7: NOT 000014d8: AND 000014d9: SWAP1 000014da: SSTORE 000014db: PUSH32 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa 000014fc: PUSH2 0x1503 000014ff: PUSH2 0x1c39 00001502: JUMP 00001503: JUMPDEST 00001504: PUSH1 0x40 00001506: MLOAD 00001507: PUSH2 0x1510 0000150a: SWAP2 0000150b: SWAP1 0000150c: PUSH2 0x2f03 0000150f: JUMP 00001510: JUMPDEST 00001511: PUSH1 0x40 00001513: MLOAD 00001514: DUP1 00001515: SWAP2 00001516: SUB 00001517: SWAP1 00001518: LOG1 00001519: JUMP 0000151a: JUMPDEST 0000151b: PUSH1 0x00 0000151d: PUSH2 0x1481 00001520: PUSH1 0x01 00001522: DUP4 00001523: PUSH4 0xffffffff 00001528: PUSH2 0x1d3f 0000152b: AND 0000152c: JUMP 0000152d: JUMPDEST 0000152e: PUSH2 0x153d 00001531: PUSH2 0x1538 00001534: PUSH2 0x1c39 00001537: JUMP 00001538: JUMPDEST 00001539: PUSH2 0x1d87 0000153c: JUMP 0000153d: JUMPDEST 0000153e: JUMP 0000153f: JUMPDEST 00001540: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc 00001561: SLOAD 00001562: SWAP1 00001563: JUMP 00001564: JUMPDEST 00001565: PUSH1 0x02 00001567: SLOAD 00001568: PUSH1 0xff 0000156a: AND 0000156b: JUMPDEST 0000156c: SWAP1 0000156d: JUMP 0000156e: JUMPDEST 0000156f: PUSH1 0x0f 00001571: SLOAD 00001572: DUP2 00001573: JUMP 00001574: JUMPDEST 00001575: PUSH2 0x157c 00001578: PUSH2 0x1992 0000157b: JUMP 0000157c: JUMPDEST 0000157d: DUP1 0000157e: DUP3 0000157f: LT 00001580: PUSH2 0x159b 00001583: JUMPI 00001584: PUSH1 0x40 00001586: MLOAD 00001587: PUSH3 0x461bcd 0000158b: PUSH1 0xe5 0000158d: SHL 0000158e: DUP2 0000158f: MSTORE 00001590: PUSH1 0x04 00001592: ADD 00001593: PUSH2 0x07b3 00001596: SWAP1 00001597: PUSH2 0x3088 0000159a: JUMP 0000159b: JUMPDEST 0000159c: PUSH1 0x01 0000159e: PUSH1 0x01 000015a0: PUSH1 0xa0 000015a2: SHL 000015a3: SUB 000015a4: SWAP1 000015a5: SWAP3 000015a6: AND 000015a7: PUSH1 0x00 000015a9: SWAP1 000015aa: DUP2 000015ab: MSTORE 000015ac: PUSH1 0x0c 000015ae: PUSH1 0x20 000015b0: SWAP1 000015b1: DUP2 000015b2: MSTORE 000015b3: PUSH1 0x40 000015b5: DUP1 000015b6: DUP4 000015b7: KECCAK256 000015b8: SWAP4 000015b9: SWAP1 000015ba: SWAP4 000015bb: SSTORE 000015bc: PUSH1 0x0d 000015be: SWAP1 000015bf: MSTORE 000015c0: KECCAK256 000015c1: SSTORE 000015c2: JUMP 000015c3: JUMPDEST 000015c4: PUSH1 0x0b 000015c6: SLOAD 000015c7: PUSH1 0x01 000015c9: PUSH1 0x01 000015cb: PUSH1 0xa0 000015cd: SHL 000015ce: SUB 000015cf: AND 000015d0: SWAP1 000015d1: JUMP 000015d2: JUMPDEST 000015d3: PUSH2 0x153d 000015d6: PUSH2 0x15dd 000015d9: PUSH2 0x1c39 000015dc: JUMP 000015dd: JUMPDEST 000015de: PUSH2 0x1dcf 000015e1: JUMP 000015e2: JUMPDEST 000015e3: PUSH2 0x15ed 000015e6: PUSH2 0x0625 000015e9: PUSH2 0x1c39 000015ec: JUMP 000015ed: JUMPDEST 000015ee: PUSH2 0x1609 000015f1: JUMPI 000015f2: PUSH1 0x40 000015f4: MLOAD 000015f5: PUSH3 0x461bcd 000015f9: PUSH1 0xe5 000015fb: SHL 000015fc: DUP2 000015fd: MSTORE 000015fe: PUSH1 0x04 00001600: ADD 00001601: PUSH2 0x07b3 00001604: SWAP1 00001605: PUSH2 0x3128 00001608: JUMP 00001609: JUMPDEST 0000160a: PUSH2 0x0b42 0000160d: DUP2 0000160e: PUSH2 0x1e17 00001611: JUMP 00001612: JUMPDEST 00001613: PUSH2 0x161d 00001616: PUSH2 0x04b2 00001619: PUSH2 0x1c39 0000161c: JUMP 0000161d: JUMPDEST 0000161e: PUSH2 0x1639 00001621: JUMPI 00001622: PUSH1 0x40 00001624: MLOAD 00001625: PUSH3 0x461bcd 00001629: PUSH1 0xe5 0000162b: SHL 0000162c: DUP2 0000162d: MSTORE 0000162e: PUSH1 0x04 00001630: ADD 00001631: PUSH2 0x07b3 00001634: SWAP1 00001635: PUSH2 0x3078 00001638: JUMP 00001639: JUMPDEST 0000163a: PUSH2 0x0b42 0000163d: DUP2 0000163e: PUSH2 0x1e5f 00001641: JUMP 00001642: JUMPDEST 00001643: PUSH2 0x164a 00001646: PUSH2 0x1992 00001649: JUMP 0000164a: JUMPDEST 0000164b: PUSH1 0x0e 0000164d: DUP1 0000164e: SLOAD 0000164f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001664: NOT 00001665: AND 00001666: PUSH1 0x01 00001668: PUSH1 0x01 0000166a: PUSH1 0xa0 0000166c: SHL 0000166d: SUB 0000166e: SWAP3 0000166f: SWAP1 00001670: SWAP3 00001671: AND 00001672: SWAP2 00001673: SWAP1 00001674: SWAP2 00001675: OR 00001676: SWAP1 00001677: SSTORE 00001678: JUMP 00001679: JUMPDEST 0000167a: PUSH2 0x1684 0000167d: PUSH2 0x04b2 00001680: PUSH2 0x1c39 00001683: JUMP 00001684: JUMPDEST 00001685: PUSH2 0x16a0 00001688: JUMPI 00001689: PUSH1 0x40 0000168b: MLOAD 0000168c: PUSH3 0x461bcd 00001690: PUSH1 0xe5 00001692: SHL 00001693: DUP2 00001694: MSTORE 00001695: PUSH1 0x04 00001697: ADD 00001698: PUSH2 0x07b3 0000169b: SWAP1 0000169c: PUSH2 0x3078 0000169f: JUMP 000016a0: JUMPDEST 000016a1: PUSH1 0x02 000016a3: SLOAD 000016a4: PUSH1 0xff 000016a6: AND 000016a7: ISZERO 000016a8: PUSH2 0x16c3 000016ab: JUMPI 000016ac: PUSH1 0x40 000016ae: MLOAD 000016af: PUSH3 0x461bcd 000016b3: PUSH1 0xe5 000016b5: SHL 000016b6: DUP2 000016b7: MSTORE 000016b8: PUSH1 0x04 000016ba: ADD 000016bb: PUSH2 0x07b3 000016be: SWAP1 000016bf: PUSH2 0x30c8 000016c2: JUMP 000016c3: JUMPDEST 000016c4: PUSH1 0x02 000016c6: DUP1 000016c7: SLOAD 000016c8: PUSH1 0xff 000016ca: NOT 000016cb: AND 000016cc: PUSH1 0x01 000016ce: OR 000016cf: SWAP1 000016d0: SSTORE 000016d1: PUSH32 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258 000016f2: PUSH2 0x1503 000016f5: PUSH2 0x1c39 000016f8: JUMP 000016f9: JUMPDEST 000016fa: PUSH2 0x1701 000016fd: PUSH2 0x1992 00001700: JUMP 00001701: JUMPDEST 00001702: PUSH2 0x1709 00001705: PUSH2 0x19b7 00001708: JUMP 00001709: JUMPDEST 0000170a: PUSH2 0x171b 0000170d: DUP2 0000170e: PUSH1 0x01 00001710: PUSH1 0x01 00001712: PUSH1 0xa0 00001714: SHL 00001715: SUB 00001716: AND 00001717: PUSH2 0x1ea7 0000171a: JUMP 0000171b: JUMPDEST 0000171c: PUSH2 0x1737 0000171f: JUMPI 00001720: PUSH1 0x40 00001722: MLOAD 00001723: PUSH3 0x461bcd 00001727: PUSH1 0xe5 00001729: SHL 0000172a: DUP2 0000172b: MSTORE 0000172c: PUSH1 0x04 0000172e: ADD 0000172f: PUSH2 0x07b3 00001732: SWAP1 00001733: PUSH2 0x3198 00001736: JUMP 00001737: JUMPDEST 00001738: PUSH1 0x0b 0000173a: SLOAD 0000173b: PUSH1 0x40 0000173d: MLOAD 0000173e: PUSH32 0x5bb4780800000000000000000000000000000000000000000000000000000000 0000175f: DUP2 00001760: MSTORE 00001761: PUSH1 0x01 00001763: PUSH1 0x01 00001765: PUSH1 0xa0 00001767: SHL 00001768: SUB 00001769: SWAP1 0000176a: SWAP2 0000176b: AND 0000176c: SWAP1 0000176d: PUSH4 0x5bb47808 00001772: SWAP1 00001773: PUSH2 0x1780 00001776: SWAP1 00001777: DUP5 00001778: SWAP1 00001779: PUSH1 0x04 0000177b: ADD 0000177c: PUSH2 0x2ef5 0000177f: JUMP 00001780: JUMPDEST 00001781: PUSH1 0x00 00001783: PUSH1 0x40 00001785: MLOAD 00001786: DUP1 00001787: DUP4 00001788: SUB 00001789: DUP2 0000178a: PUSH1 0x00 0000178c: DUP8 0000178d: DUP1 0000178e: EXTCODESIZE 0000178f: ISZERO 00001790: DUP1 00001791: ISZERO 00001792: PUSH2 0x179a 00001795: JUMPI 00001796: PUSH1 0x00 00001798: DUP1 00001799: REVERT 0000179a: JUMPDEST 0000179b: POP 0000179c: GAS 0000179d: CALL 0000179e: ISZERO 0000179f: DUP1 000017a0: ISZERO 000017a1: PUSH2 0x17ae 000017a4: JUMPI 000017a5: RETURNDATASIZE 000017a6: PUSH1 0x00 000017a8: DUP1 000017a9: RETURNDATACOPY 000017aa: RETURNDATASIZE 000017ab: PUSH1 0x00 000017ad: REVERT 000017ae: JUMPDEST 000017af: POP 000017b0: POP 000017b1: POP 000017b2: POP 000017b3: POP 000017b4: JUMP 000017b5: JUMPDEST 000017b6: PUSH1 0x0d 000017b8: PUSH1 0x20 000017ba: MSTORE 000017bb: PUSH1 0x00 000017bd: SWAP1 000017be: DUP2 000017bf: MSTORE 000017c0: PUSH1 0x40 000017c2: SWAP1 000017c3: KECCAK256 000017c4: SLOAD 000017c5: DUP2 000017c6: JUMP 000017c7: JUMPDEST 000017c8: PUSH1 0x00 000017ca: PUSH2 0x1481 000017cd: PUSH1 0x03 000017cf: DUP4 000017d0: PUSH4 0xffffffff 000017d5: PUSH2 0x1d3f 000017d8: AND 000017d9: JUMP 000017da: JUMPDEST 000017db: PUSH2 0x17e2 000017de: PUSH2 0x1992 000017e1: JUMP 000017e2: JUMPDEST 000017e3: PUSH2 0x17ea 000017e6: PUSH2 0x19b7 000017e9: JUMP 000017ea: JUMPDEST 000017eb: PUSH1 0x00 000017ed: JUMPDEST 000017ee: DUP2 000017ef: MLOAD 000017f0: DUP2 000017f1: LT 000017f2: ISZERO 000017f3: PUSH2 0x187e 000017f6: JUMPI 000017f7: PUSH1 0x07 000017f9: DUP3 000017fa: DUP3 000017fb: DUP2 000017fc: MLOAD 000017fd: DUP2 000017fe: LT 000017ff: PUSH2 0x1804 00001802: JUMPI 00001803: INVALID 00001804: JUMPDEST 00001805: PUSH1 0x20 00001807: MUL 00001808: PUSH1 0x20 0000180a: ADD 0000180b: ADD 0000180c: MLOAD 0000180d: PUSH1 0x40 0000180f: MLOAD 00001810: PUSH2 0x1819 00001813: SWAP2 00001814: SWAP1 00001815: PUSH2 0x2dc5 00001818: JUMP 00001819: JUMPDEST 0000181a: SWAP1 0000181b: DUP2 0000181c: MSTORE 0000181d: PUSH1 0x40 0000181f: MLOAD 00001820: SWAP1 00001821: DUP2 00001822: SWAP1 00001823: SUB 00001824: PUSH1 0x20 00001826: ADD 00001827: SWAP1 00001828: KECCAK256 00001829: SLOAD 0000182a: PUSH1 0xff 0000182c: AND 0000182d: PUSH2 0x1876 00001830: JUMPI 00001831: PUSH1 0x01 00001833: PUSH1 0x07 00001835: DUP4 00001836: DUP4 00001837: DUP2 00001838: MLOAD 00001839: DUP2 0000183a: LT 0000183b: PUSH2 0x1840 0000183e: JUMPI 0000183f: INVALID 00001840: JUMPDEST 00001841: PUSH1 0x20 00001843: MUL 00001844: PUSH1 0x20 00001846: ADD 00001847: ADD 00001848: MLOAD 00001849: PUSH1 0x40 0000184b: MLOAD 0000184c: PUSH2 0x1855 0000184f: SWAP2 00001850: SWAP1 00001851: PUSH2 0x2dc5 00001854: JUMP 00001855: JUMPDEST 00001856: SWAP1 00001857: DUP2 00001858: MSTORE 00001859: PUSH1 0x40 0000185b: MLOAD 0000185c: SWAP1 0000185d: DUP2 0000185e: SWAP1 0000185f: SUB 00001860: PUSH1 0x20 00001862: ADD 00001863: SWAP1 00001864: KECCAK256 00001865: DUP1 00001866: SLOAD 00001867: SWAP2 00001868: ISZERO 00001869: ISZERO 0000186a: PUSH1 0xff 0000186c: NOT 0000186d: SWAP1 0000186e: SWAP3 0000186f: AND 00001870: SWAP2 00001871: SWAP1 00001872: SWAP2 00001873: OR 00001874: SWAP1 00001875: SSTORE 00001876: JUMPDEST 00001877: PUSH1 0x01 00001879: ADD 0000187a: PUSH2 0x17ed 0000187d: JUMP 0000187e: JUMPDEST 0000187f: POP 00001880: POP 00001881: JUMP 00001882: JUMPDEST 00001883: PUSH2 0x188b 00001886: CALLER 00001887: PUSH2 0x1415 0000188a: JUMP 0000188b: JUMPDEST 0000188c: PUSH2 0x153d 0000188f: JUMPI 00001890: PUSH1 0x40 00001892: MLOAD 00001893: PUSH3 0x461bcd 00001897: PUSH1 0xe5 00001899: SHL 0000189a: DUP2 0000189b: MSTORE 0000189c: PUSH1 0x04 0000189e: ADD 0000189f: PUSH2 0x07b3 000018a2: SWAP1 000018a3: PUSH2 0x3168 000018a6: JUMP 000018a7: JUMPDEST 000018a8: PUSH1 0x0e 000018aa: SLOAD 000018ab: PUSH1 0x01 000018ad: PUSH1 0x01 000018af: PUSH1 0xa0 000018b1: SHL 000018b2: SUB 000018b3: AND 000018b4: DUP2 000018b5: JUMP 000018b6: JUMPDEST 000018b7: PUSH1 0x0a 000018b9: PUSH1 0x20 000018bb: MSTORE 000018bc: PUSH1 0x00 000018be: SWAP1 000018bf: DUP2 000018c0: MSTORE 000018c1: PUSH1 0x40 000018c3: SWAP1 000018c4: KECCAK256 000018c5: SLOAD 000018c6: DUP2 000018c7: JUMP 000018c8: JUMPDEST 000018c9: PUSH1 0x01 000018cb: PUSH1 0x01 000018cd: PUSH1 0xa0 000018cf: SHL 000018d0: SUB 000018d1: DUP2 000018d2: AND 000018d3: PUSH2 0x18ee 000018d6: JUMPI 000018d7: PUSH1 0x40 000018d9: MLOAD 000018da: PUSH3 0x461bcd 000018de: PUSH1 0xe5 000018e0: SHL 000018e1: DUP2 000018e2: MSTORE 000018e3: PUSH1 0x04 000018e5: ADD 000018e6: PUSH2 0x07b3 000018e9: SWAP1 000018ea: PUSH2 0x30f8 000018ed: JUMP 000018ee: JUMPDEST 000018ef: PUSH2 0x18f6 000018f2: PUSH2 0x1992 000018f5: JUMP 000018f6: JUMPDEST 000018f7: PUSH1 0x01 000018f9: PUSH1 0x01 000018fb: PUSH1 0xa0 000018fd: SHL 000018fe: SUB 000018ff: AND 00001900: PUSH1 0x00 00001902: SWAP1 00001903: DUP2 00001904: MSTORE 00001905: PUSH1 0x08 00001907: PUSH1 0x20 00001909: MSTORE 0000190a: PUSH1 0x40 0000190c: SWAP1 0000190d: KECCAK256 0000190e: DUP1 0000190f: SLOAD 00001910: PUSH1 0xff 00001912: NOT 00001913: AND 00001914: PUSH1 0x01 00001916: OR 00001917: SWAP1 00001918: SSTORE 00001919: JUMP 0000191a: JUMPDEST 0000191b: PUSH1 0x0c 0000191d: PUSH1 0x20 0000191f: MSTORE 00001920: PUSH1 0x00 00001922: SWAP1 00001923: DUP2 00001924: MSTORE 00001925: PUSH1 0x40 00001927: SWAP1 00001928: KECCAK256 00001929: SLOAD 0000192a: DUP2 0000192b: JUMP 0000192c: JUMPDEST 0000192d: PUSH2 0x153d 00001930: PUSH2 0x1937 00001933: PUSH2 0x1c39 00001936: JUMP 00001937: JUMPDEST 00001938: PUSH2 0x1cf7 0000193b: JUMP 0000193c: JUMPDEST 0000193d: PUSH2 0x1944 00001940: PUSH2 0x1992 00001943: JUMP 00001944: JUMPDEST 00001945: PUSH1 0x01 00001947: PUSH1 0x01 00001949: PUSH1 0xa0 0000194b: SHL 0000194c: SUB 0000194d: AND 0000194e: PUSH1 0x00 00001950: SWAP1 00001951: DUP2 00001952: MSTORE 00001953: PUSH1 0x08 00001955: PUSH1 0x20 00001957: MSTORE 00001958: PUSH1 0x40 0000195a: SWAP1 0000195b: KECCAK256 0000195c: DUP1 0000195d: SLOAD 0000195e: PUSH1 0xff 00001960: NOT 00001961: AND 00001962: SWAP1 00001963: SSTORE 00001964: JUMP 00001965: JUMPDEST 00001966: DUP1 00001967: MLOAD 00001968: PUSH1 0x20 0000196a: DUP2 0000196b: DUP4 0000196c: ADD 0000196d: DUP2 0000196e: ADD 0000196f: DUP1 00001970: MLOAD 00001971: PUSH1 0x07 00001973: DUP3 00001974: MSTORE 00001975: SWAP3 00001976: DUP3 00001977: ADD 00001978: SWAP2 00001979: SWAP1 0000197a: SWAP4 0000197b: ADD 0000197c: KECCAK256 0000197d: SWAP2 0000197e: MSTORE 0000197f: SLOAD 00001980: PUSH1 0xff 00001982: AND 00001983: DUP2 00001984: JUMP 00001985: JUMPDEST 00001986: PUSH1 0x06 00001988: DUP2 00001989: DUP2 0000198a: SLOAD 0000198b: DUP2 0000198c: LT 0000198d: PUSH2 0x108a 00001990: JUMPI 00001991: INVALID 00001992: JUMPDEST 00001993: PUSH2 0x199b 00001996: CALLER 00001997: PUSH2 0x17c7 0000199a: JUMP 0000199b: JUMPDEST 0000199c: PUSH2 0x153d 0000199f: JUMPI 000019a0: PUSH1 0x40 000019a2: MLOAD 000019a3: PUSH3 0x461bcd 000019a7: PUSH1 0xe5 000019a9: SHL 000019aa: DUP2 000019ab: MSTORE 000019ac: PUSH1 0x04 000019ae: ADD 000019af: PUSH2 0x07b3 000019b2: SWAP1 000019b3: PUSH2 0x3138 000019b6: JUMP 000019b7: JUMPDEST 000019b8: PUSH2 0x19bf 000019bb: PUSH2 0x1564 000019be: JUMP 000019bf: JUMPDEST 000019c0: PUSH2 0x153d 000019c3: JUMPI 000019c4: PUSH1 0x40 000019c6: MLOAD 000019c7: PUSH3 0x461bcd 000019cb: PUSH1 0xe5 000019cd: SHL 000019ce: DUP2 000019cf: MSTORE 000019d0: PUSH1 0x04 000019d2: ADD 000019d3: PUSH2 0x07b3 000019d6: SWAP1 000019d7: PUSH2 0x3188 000019da: JUMP 000019db: JUMPDEST 000019dc: PUSH1 0x05 000019de: SLOAD 000019df: PUSH1 0x02 000019e1: DUP2 000019e2: MUL 000019e3: PUSH1 0x03 000019e5: DUP2 000019e6: MOD 000019e7: PUSH2 0x19f3 000019ea: JUMPI 000019eb: PUSH1 0x03 000019ed: SWAP1 000019ee: DIV 000019ef: PUSH2 0x19fb 000019f2: JUMP 000019f3: JUMPDEST 000019f4: PUSH1 0x03 000019f6: SWAP1 000019f7: DIV 000019f8: PUSH1 0x01 000019fa: ADD 000019fb: JUMPDEST 000019fc: DUP4 000019fd: MLOAD 000019fe: DUP2 000019ff: DUP2 00001a00: LT 00001a01: DUP1 00001a02: PUSH2 0x1a0a 00001a05: JUMPI 00001a06: POP 00001a07: DUP3 00001a08: DUP2 00001a09: GT 00001a0a: JUMPDEST 00001a0b: ISZERO 00001a0c: PUSH2 0x1a27 00001a0f: JUMPI 00001a10: PUSH1 0x40 00001a12: MLOAD 00001a13: PUSH3 0x461bcd 00001a17: PUSH1 0xe5 00001a19: SHL 00001a1a: DUP2 00001a1b: MSTORE 00001a1c: PUSH1 0x04 00001a1e: ADD 00001a1f: PUSH2 0x07b3 00001a22: SWAP1 00001a23: PUSH2 0x3068 00001a26: JUMP 00001a27: JUMPDEST 00001a28: PUSH1 0x60 00001a2a: DUP2 00001a2b: PUSH1 0x40 00001a2d: MLOAD 00001a2e: SWAP1 00001a2f: DUP1 00001a30: DUP3 00001a31: MSTORE 00001a32: DUP1 00001a33: PUSH1 0x20 00001a35: MUL 00001a36: PUSH1 0x20 00001a38: ADD 00001a39: DUP3 00001a3a: ADD 00001a3b: PUSH1 0x40 00001a3d: MSTORE 00001a3e: DUP1 00001a3f: ISZERO 00001a40: PUSH2 0x1a53 00001a43: JUMPI 00001a44: DUP2 00001a45: PUSH1 0x20 00001a47: ADD 00001a48: PUSH1 0x20 00001a4a: DUP3 00001a4b: MUL 00001a4c: DUP1 00001a4d: CODESIZE 00001a4e: DUP4 00001a4f: CODECOPY 00001a50: ADD 00001a51: SWAP1 00001a52: POP 00001a53: JUMPDEST 00001a54: POP 00001a55: SWAP1 00001a56: POP 00001a57: PUSH1 0x00 00001a59: JUMPDEST 00001a5a: DUP3 00001a5b: DUP2 00001a5c: LT 00001a5d: ISZERO 00001a5e: PUSH2 0x1ab0 00001a61: JUMPI 00001a62: PUSH1 0x00 00001a64: PUSH2 0x1a80 00001a67: DUP10 00001a68: DUP10 00001a69: DUP5 00001a6a: DUP2 00001a6b: MLOAD 00001a6c: DUP2 00001a6d: LT 00001a6e: PUSH2 0x1a73 00001a71: JUMPI 00001a72: INVALID 00001a73: JUMPDEST 00001a74: PUSH1 0x20 00001a76: MUL 00001a77: PUSH1 0x20 00001a79: ADD 00001a7a: ADD 00001a7b: MLOAD 00001a7c: PUSH2 0x1ee3 00001a7f: JUMP 00001a80: JUMPDEST 00001a81: SWAP1 00001a82: POP 00001a83: DUP1 00001a84: DUP4 00001a85: DUP4 00001a86: DUP2 00001a87: MLOAD 00001a88: DUP2 00001a89: LT 00001a8a: PUSH2 0x1a8f 00001a8d: JUMPI 00001a8e: INVALID 00001a8f: JUMPDEST 00001a90: PUSH1 0x01 00001a92: PUSH1 0x01 00001a94: PUSH1 0xa0 00001a96: SHL 00001a97: SUB 00001a98: SWAP1 00001a99: SWAP3 00001a9a: AND 00001a9b: PUSH1 0x20 00001a9d: SWAP3 00001a9e: DUP4 00001a9f: MUL 00001aa0: SWAP2 00001aa1: SWAP1 00001aa2: SWAP2 00001aa3: ADD 00001aa4: SWAP1 00001aa5: SWAP2 00001aa6: ADD 00001aa7: MSTORE 00001aa8: POP 00001aa9: PUSH1 0x01 00001aab: ADD 00001aac: PUSH2 0x1a59 00001aaf: JUMP 00001ab0: JUMPDEST 00001ab1: POP 00001ab2: PUSH1 0x00 00001ab4: DUP6 00001ab5: PUSH2 0x1b41 00001ab8: JUMPI 00001ab9: PUSH1 0x00 00001abb: JUMPDEST 00001abc: DUP6 00001abd: DUP2 00001abe: LT 00001abf: ISZERO 00001ac0: PUSH2 0x1b3b 00001ac3: JUMPI 00001ac4: PUSH1 0x00 00001ac6: PUSH1 0x05 00001ac8: DUP3 00001ac9: DUP2 00001aca: SLOAD 00001acb: DUP2 00001acc: LT 00001acd: PUSH2 0x1ad2 00001ad0: JUMPI 00001ad1: INVALID 00001ad2: JUMPDEST 00001ad3: PUSH1 0x00 00001ad5: SWAP2 00001ad6: DUP3 00001ad7: MSTORE 00001ad8: PUSH1 0x20 00001ada: DUP3 00001adb: KECCAK256 00001adc: ADD 00001add: SLOAD 00001ade: PUSH1 0x01 00001ae0: PUSH1 0x01 00001ae2: PUSH1 0xa0 00001ae4: SHL 00001ae5: SUB 00001ae6: AND 00001ae7: SWAP2 00001ae8: POP 00001ae9: JUMPDEST 00001aea: DUP6 00001aeb: DUP2 00001aec: LT 00001aed: ISZERO 00001aee: PUSH2 0x1b31 00001af1: JUMPI 00001af2: DUP5 00001af3: DUP2 00001af4: DUP2 00001af5: MLOAD 00001af6: DUP2 00001af7: LT 00001af8: PUSH2 0x1afd 00001afb: JUMPI 00001afc: INVALID 00001afd: JUMPDEST 00001afe: PUSH1 0x20 00001b00: MUL 00001b01: PUSH1 0x20 00001b03: ADD 00001b04: ADD 00001b05: MLOAD 00001b06: PUSH1 0x01 00001b08: PUSH1 0x01 00001b0a: PUSH1 0xa0 00001b0c: SHL 00001b0d: SUB 00001b0e: AND 00001b0f: DUP3 00001b10: PUSH1 0x01 00001b12: PUSH1 0x01 00001b14: PUSH1 0xa0 00001b16: SHL 00001b17: SUB 00001b18: AND 00001b19: EQ 00001b1a: ISZERO 00001b1b: PUSH2 0x1b29 00001b1e: JUMPI 00001b1f: DUP4 00001b20: PUSH1 0x01 00001b22: ADD 00001b23: SWAP4 00001b24: POP 00001b25: PUSH2 0x1b31 00001b28: JUMP 00001b29: JUMPDEST 00001b2a: PUSH1 0x01 00001b2c: ADD 00001b2d: PUSH2 0x1ae9 00001b30: JUMP 00001b31: JUMPDEST 00001b32: POP 00001b33: POP 00001b34: PUSH1 0x01 00001b36: ADD 00001b37: PUSH2 0x1abb 00001b3a: JUMP 00001b3b: JUMPDEST 00001b3c: POP 00001b3d: PUSH2 0x1bc6 00001b40: JUMP 00001b41: JUMPDEST 00001b42: PUSH1 0x00 00001b44: JUMPDEST 00001b45: DUP6 00001b46: DUP2 00001b47: LT 00001b48: ISZERO 00001b49: PUSH2 0x1bc4 00001b4c: JUMPI 00001b4d: PUSH1 0x00 00001b4f: PUSH1 0x06 00001b51: DUP3 00001b52: DUP2 00001b53: SLOAD 00001b54: DUP2 00001b55: LT 00001b56: PUSH2 0x1b5b 00001b59: JUMPI 00001b5a: INVALID 00001b5b: JUMPDEST 00001b5c: PUSH1 0x00 00001b5e: SWAP2 00001b5f: DUP3 00001b60: MSTORE 00001b61: PUSH1 0x20 00001b63: DUP3 00001b64: KECCAK256 00001b65: ADD 00001b66: SLOAD 00001b67: PUSH1 0x01 00001b69: PUSH1 0x01 00001b6b: PUSH1 0xa0 00001b6d: SHL 00001b6e: SUB 00001b6f: AND 00001b70: SWAP2 00001b71: POP 00001b72: JUMPDEST 00001b73: DUP6 00001b74: DUP2 00001b75: LT 00001b76: ISZERO 00001b77: PUSH2 0x1bba 00001b7a: JUMPI 00001b7b: DUP5 00001b7c: DUP2 00001b7d: DUP2 00001b7e: MLOAD 00001b7f: DUP2 00001b80: LT 00001b81: PUSH2 0x1b86 00001b84: JUMPI 00001b85: INVALID 00001b86: JUMPDEST 00001b87: PUSH1 0x20 00001b89: MUL 00001b8a: PUSH1 0x20 00001b8c: ADD 00001b8d: ADD 00001b8e: MLOAD 00001b8f: PUSH1 0x01 00001b91: PUSH1 0x01 00001b93: PUSH1 0xa0 00001b95: SHL 00001b96: SUB 00001b97: AND 00001b98: DUP3 00001b99: PUSH1 0x01 00001b9b: PUSH1 0x01 00001b9d: PUSH1 0xa0 00001b9f: SHL 00001ba0: SUB 00001ba1: AND 00001ba2: EQ 00001ba3: ISZERO 00001ba4: PUSH2 0x1bb2 00001ba7: JUMPI 00001ba8: DUP4 00001ba9: PUSH1 0x01 00001bab: ADD 00001bac: SWAP4 00001bad: POP 00001bae: PUSH2 0x1bba 00001bb1: JUMP 00001bb2: JUMPDEST 00001bb3: PUSH1 0x01 00001bb5: ADD 00001bb6: PUSH2 0x1b72 00001bb9: JUMP 00001bba: JUMPDEST 00001bbb: POP 00001bbc: POP 00001bbd: PUSH1 0x01 00001bbf: ADD 00001bc0: PUSH2 0x1b44 00001bc3: JUMP 00001bc4: JUMPDEST 00001bc5: POP 00001bc6: JUMPDEST 00001bc7: DUP4 00001bc8: DUP2 00001bc9: LT 00001bca: ISZERO 00001bcb: PUSH2 0x1be6 00001bce: JUMPI 00001bcf: PUSH1 0x40 00001bd1: MLOAD 00001bd2: PUSH3 0x461bcd 00001bd6: PUSH1 0xe5 00001bd8: SHL 00001bd9: DUP2 00001bda: MSTORE 00001bdb: PUSH1 0x04 00001bdd: ADD 00001bde: PUSH2 0x07b3 00001be1: SWAP1 00001be2: PUSH2 0x3158 00001be5: JUMP 00001be6: JUMPDEST 00001be7: POP 00001be8: POP 00001be9: POP 00001bea: POP 00001beb: POP 00001bec: POP 00001bed: POP 00001bee: POP 00001bef: JUMP 00001bf0: JUMPDEST 00001bf1: PUSH1 0x00 00001bf3: PUSH2 0x1c32 00001bf6: DUP4 00001bf7: DUP4 00001bf8: PUSH1 0x40 00001bfa: MLOAD 00001bfb: DUP1 00001bfc: PUSH1 0x40 00001bfe: ADD 00001bff: PUSH1 0x40 00001c01: MSTORE 00001c02: DUP1 00001c03: PUSH1 0x1e 00001c05: DUP2 00001c06: MSTORE 00001c07: PUSH1 0x20 00001c09: ADD 00001c0a: PUSH32 0x536166654d6174683a207375627472616374696f6e206f766572666c6f770000 00001c2b: DUP2 00001c2c: MSTORE 00001c2d: POP 00001c2e: PUSH2 0x1f6c 00001c31: JUMP 00001c32: JUMPDEST 00001c33: SWAP4 00001c34: SWAP3 00001c35: POP 00001c36: POP 00001c37: POP 00001c38: JUMP 00001c39: JUMPDEST 00001c3a: CALLER 00001c3b: SWAP1 00001c3c: JUMP 00001c3d: JUMPDEST 00001c3e: PUSH2 0x1c4e 00001c41: PUSH1 0x04 00001c43: DUP3 00001c44: PUSH4 0xffffffff 00001c49: PUSH2 0x1f98 00001c4c: AND 00001c4d: JUMP 00001c4e: JUMPDEST 00001c4f: PUSH1 0x40 00001c51: MLOAD 00001c52: PUSH1 0x01 00001c54: PUSH1 0x01 00001c56: PUSH1 0xa0 00001c58: SHL 00001c59: SUB 00001c5a: DUP3 00001c5b: AND 00001c5c: SWAP1 00001c5d: PUSH32 0xee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f 00001c7e: SWAP1 00001c7f: PUSH1 0x00 00001c81: SWAP1 00001c82: LOG2 00001c83: POP 00001c84: JUMP 00001c85: JUMPDEST 00001c86: PUSH2 0x1c8d 00001c89: PUSH2 0x1564 00001c8c: JUMP 00001c8d: JUMPDEST 00001c8e: ISZERO 00001c8f: PUSH2 0x153d 00001c92: JUMPI 00001c93: PUSH1 0x40 00001c95: MLOAD 00001c96: PUSH3 0x461bcd 00001c9a: PUSH1 0xe5 00001c9c: SHL 00001c9d: DUP2 00001c9e: MSTORE 00001c9f: PUSH1 0x04 00001ca1: ADD 00001ca2: PUSH2 0x07b3 00001ca5: SWAP1 00001ca6: PUSH2 0x3178 00001ca9: JUMP 00001caa: JUMPDEST 00001cab: CHAINID 00001cac: SWAP1 00001cad: JUMP 00001cae: JUMPDEST 00001caf: PUSH2 0x1cb7 00001cb2: DUP2 00001cb3: PUSH2 0x1ea7 00001cb6: JUMP 00001cb7: JUMPDEST 00001cb8: PUSH2 0x1cd3 00001cbb: JUMPI 00001cbc: PUSH1 0x40 00001cbe: MLOAD 00001cbf: PUSH3 0x461bcd 00001cc3: PUSH1 0xe5 00001cc5: SHL 00001cc6: DUP2 00001cc7: MSTORE 00001cc8: PUSH1 0x04 00001cca: ADD 00001ccb: PUSH2 0x07b3 00001cce: SWAP1 00001ccf: PUSH2 0x30d8 00001cd2: JUMP 00001cd3: JUMPDEST 00001cd4: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc 00001cf5: SSTORE 00001cf6: JUMP 00001cf7: JUMPDEST 00001cf8: PUSH2 0x1d08 00001cfb: PUSH1 0x04 00001cfd: DUP3 00001cfe: PUSH4 0xffffffff 00001d03: PUSH2 0x1fe4 00001d06: AND 00001d07: JUMP 00001d08: JUMPDEST 00001d09: PUSH1 0x40 00001d0b: MLOAD 00001d0c: PUSH1 0x01 00001d0e: PUSH1 0x01 00001d10: PUSH1 0xa0 00001d12: SHL 00001d13: SUB 00001d14: DUP3 00001d15: AND 00001d16: SWAP1 00001d17: PUSH32 0x270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b6 00001d38: SWAP1 00001d39: PUSH1 0x00 00001d3b: SWAP1 00001d3c: LOG2 00001d3d: POP 00001d3e: JUMP 00001d3f: JUMPDEST 00001d40: PUSH1 0x00 00001d42: PUSH1 0x01 00001d44: PUSH1 0x01 00001d46: PUSH1 0xa0 00001d48: SHL 00001d49: SUB 00001d4a: DUP3 00001d4b: AND 00001d4c: PUSH2 0x1d67 00001d4f: JUMPI 00001d50: PUSH1 0x40 00001d52: MLOAD 00001d53: PUSH3 0x461bcd 00001d57: PUSH1 0xe5 00001d59: SHL 00001d5a: DUP2 00001d5b: MSTORE 00001d5c: PUSH1 0x04 00001d5e: ADD 00001d5f: PUSH2 0x07b3 00001d62: SWAP1 00001d63: PUSH2 0x3118 00001d66: JUMP 00001d67: JUMPDEST 00001d68: POP 00001d69: PUSH1 0x01 00001d6b: PUSH1 0x01 00001d6d: PUSH1 0xa0 00001d6f: SHL 00001d70: SUB 00001d71: AND 00001d72: PUSH1 0x00 00001d74: SWAP1 00001d75: DUP2 00001d76: MSTORE 00001d77: PUSH1 0x20 00001d79: SWAP2 00001d7a: SWAP1 00001d7b: SWAP2 00001d7c: MSTORE 00001d7d: PUSH1 0x40 00001d7f: SWAP1 00001d80: KECCAK256 00001d81: SLOAD 00001d82: PUSH1 0xff 00001d84: AND 00001d85: SWAP1 00001d86: JUMP 00001d87: JUMPDEST 00001d88: PUSH2 0x1d98 00001d8b: PUSH1 0x03 00001d8d: DUP3 00001d8e: PUSH4 0xffffffff 00001d93: PUSH2 0x1fe4 00001d96: AND 00001d97: JUMP 00001d98: JUMPDEST 00001d99: PUSH1 0x40 00001d9b: MLOAD 00001d9c: PUSH1 0x01 00001d9e: PUSH1 0x01 00001da0: PUSH1 0xa0 00001da2: SHL 00001da3: SUB 00001da4: DUP3 00001da5: AND 00001da6: SWAP1 00001da7: PUSH32 0x0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e165 00001dc8: SWAP1 00001dc9: PUSH1 0x00 00001dcb: SWAP1 00001dcc: LOG2 00001dcd: POP 00001dce: JUMP 00001dcf: JUMPDEST 00001dd0: PUSH2 0x1de0 00001dd3: PUSH1 0x01 00001dd5: DUP3 00001dd6: PUSH4 0xffffffff 00001ddb: PUSH2 0x1fe4 00001dde: AND 00001ddf: JUMP 00001de0: JUMPDEST 00001de1: PUSH1 0x40 00001de3: MLOAD 00001de4: PUSH1 0x01 00001de6: PUSH1 0x01 00001de8: PUSH1 0xa0 00001dea: SHL 00001deb: SUB 00001dec: DUP3 00001ded: AND 00001dee: SWAP1 00001def: PUSH32 0xcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e 00001e10: SWAP1 00001e11: PUSH1 0x00 00001e13: SWAP1 00001e14: LOG2 00001e15: POP 00001e16: JUMP 00001e17: JUMPDEST 00001e18: PUSH2 0x1e28 00001e1b: PUSH1 0x03 00001e1d: DUP3 00001e1e: PUSH4 0xffffffff 00001e23: PUSH2 0x1f98 00001e26: AND 00001e27: JUMP 00001e28: JUMPDEST 00001e29: PUSH1 0x40 00001e2b: MLOAD 00001e2c: PUSH1 0x01 00001e2e: PUSH1 0x01 00001e30: PUSH1 0xa0 00001e32: SHL 00001e33: SUB 00001e34: DUP3 00001e35: AND 00001e36: SWAP1 00001e37: PUSH32 0x22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd20961299 00001e58: SWAP1 00001e59: PUSH1 0x00 00001e5b: SWAP1 00001e5c: LOG2 00001e5d: POP 00001e5e: JUMP 00001e5f: JUMPDEST 00001e60: PUSH2 0x1e70 00001e63: PUSH1 0x01 00001e65: DUP3 00001e66: PUSH4 0xffffffff 00001e6b: PUSH2 0x1f98 00001e6e: AND 00001e6f: JUMP 00001e70: JUMPDEST 00001e71: PUSH1 0x40 00001e73: MLOAD 00001e74: PUSH1 0x01 00001e76: PUSH1 0x01 00001e78: PUSH1 0xa0 00001e7a: SHL 00001e7b: SUB 00001e7c: DUP3 00001e7d: AND 00001e7e: SWAP1 00001e7f: PUSH32 0x6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f8 00001ea0: SWAP1 00001ea1: PUSH1 0x00 00001ea3: SWAP1 00001ea4: LOG2 00001ea5: POP 00001ea6: JUMP 00001ea7: JUMPDEST 00001ea8: PUSH1 0x00 00001eaa: DUP2 00001eab: EXTCODEHASH 00001eac: PUSH32 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 00001ecd: DUP2 00001ece: ISZERO 00001ecf: DUP1 00001ed0: ISZERO 00001ed1: SWAP1 00001ed2: PUSH2 0x1edb 00001ed5: JUMPI 00001ed6: POP 00001ed7: DUP1 00001ed8: DUP3 00001ed9: EQ 00001eda: ISZERO 00001edb: JUMPDEST 00001edc: SWAP5 00001edd: SWAP4 00001ede: POP 00001edf: POP 00001ee0: POP 00001ee1: POP 00001ee2: JUMP 00001ee3: JUMPDEST 00001ee4: PUSH1 0x00 00001ee6: DUP2 00001ee7: MLOAD 00001ee8: PUSH1 0x41 00001eea: EQ 00001eeb: PUSH2 0x1ef3 00001eee: JUMPI 00001eef: PUSH1 0x00 00001ef1: DUP1 00001ef2: REVERT 00001ef3: JUMPDEST 00001ef4: PUSH1 0x20 00001ef6: DUP3 00001ef7: ADD 00001ef8: MLOAD 00001ef9: PUSH1 0x40 00001efb: DUP4 00001efc: ADD 00001efd: MLOAD 00001efe: PUSH1 0x41 00001f00: DUP5 00001f01: ADD 00001f02: MLOAD 00001f03: PUSH1 0xff 00001f05: AND 00001f06: PUSH1 0x1b 00001f08: DUP2 00001f09: LT 00001f0a: ISZERO 00001f0b: PUSH2 0x1f12 00001f0e: JUMPI 00001f0f: PUSH1 0x1b 00001f11: ADD 00001f12: JUMPDEST 00001f13: PUSH1 0x01 00001f15: DUP7 00001f16: DUP3 00001f17: DUP6 00001f18: DUP6 00001f19: PUSH1 0x40 00001f1b: MLOAD 00001f1c: PUSH1 0x00 00001f1e: DUP2 00001f1f: MSTORE 00001f20: PUSH1 0x20 00001f22: ADD 00001f23: PUSH1 0x40 00001f25: MSTORE 00001f26: PUSH1 0x40 00001f28: MLOAD 00001f29: PUSH2 0x1f35 00001f2c: SWAP5 00001f2d: SWAP4 00001f2e: SWAP3 00001f2f: SWAP2 00001f30: SWAP1 00001f31: PUSH2 0x2fd9 00001f34: JUMP 00001f35: JUMPDEST 00001f36: PUSH1 0x20 00001f38: PUSH1 0x40 00001f3a: MLOAD 00001f3b: PUSH1 0x20 00001f3d: DUP2 00001f3e: SUB 00001f3f: SWAP1 00001f40: DUP1 00001f41: DUP5 00001f42: SUB 00001f43: SWAP1 00001f44: DUP6 00001f45: GAS 00001f46: STATICCALL 00001f47: ISZERO 00001f48: DUP1 00001f49: ISZERO 00001f4a: PUSH2 0x1f57 00001f4d: JUMPI 00001f4e: RETURNDATASIZE 00001f4f: PUSH1 0x00 00001f51: DUP1 00001f52: RETURNDATACOPY 00001f53: RETURNDATASIZE 00001f54: PUSH1 0x00 00001f56: REVERT 00001f57: JUMPDEST 00001f58: POP 00001f59: POP 00001f5a: PUSH1 0x40 00001f5c: MLOAD 00001f5d: PUSH1 0x1f 00001f5f: NOT 00001f60: ADD 00001f61: MLOAD 00001f62: SWAP8 00001f63: SWAP7 00001f64: POP 00001f65: POP 00001f66: POP 00001f67: POP 00001f68: POP 00001f69: POP 00001f6a: POP 00001f6b: JUMP 00001f6c: JUMPDEST 00001f6d: PUSH1 0x00 00001f6f: DUP2 00001f70: DUP5 00001f71: DUP5 00001f72: GT 00001f73: ISZERO 00001f74: PUSH2 0x1f90 00001f77: JUMPI 00001f78: PUSH1 0x40 00001f7a: MLOAD 00001f7b: PUSH3 0x461bcd 00001f7f: PUSH1 0xe5 00001f81: SHL 00001f82: DUP2 00001f83: MSTORE 00001f84: PUSH1 0x04 00001f86: ADD 00001f87: PUSH2 0x07b3 00001f8a: SWAP2 00001f8b: SWAP1 00001f8c: PUSH2 0x3017 00001f8f: JUMP 00001f90: JUMPDEST 00001f91: POP 00001f92: POP 00001f93: POP 00001f94: SWAP1 00001f95: SUB 00001f96: SWAP1 00001f97: JUMP 00001f98: JUMPDEST 00001f99: PUSH2 0x1fa2 00001f9c: DUP3 00001f9d: DUP3 00001f9e: PUSH2 0x1d3f 00001fa1: JUMP 00001fa2: JUMPDEST 00001fa3: ISZERO 00001fa4: PUSH2 0x1fbf 00001fa7: JUMPI 00001fa8: PUSH1 0x40 00001faa: MLOAD 00001fab: PUSH3 0x461bcd 00001faf: PUSH1 0xe5 00001fb1: SHL 00001fb2: DUP2 00001fb3: MSTORE 00001fb4: PUSH1 0x04 00001fb6: ADD 00001fb7: PUSH2 0x07b3 00001fba: SWAP1 00001fbb: PUSH2 0x3048 00001fbe: JUMP 00001fbf: JUMPDEST 00001fc0: PUSH1 0x01 00001fc2: PUSH1 0x01 00001fc4: PUSH1 0xa0 00001fc6: SHL 00001fc7: SUB 00001fc8: AND 00001fc9: PUSH1 0x00 00001fcb: SWAP1 00001fcc: DUP2 00001fcd: MSTORE 00001fce: PUSH1 0x20 00001fd0: SWAP2 00001fd1: SWAP1 00001fd2: SWAP2 00001fd3: MSTORE 00001fd4: PUSH1 0x40 00001fd6: SWAP1 00001fd7: KECCAK256 00001fd8: DUP1 00001fd9: SLOAD 00001fda: PUSH1 0xff 00001fdc: NOT 00001fdd: AND 00001fde: PUSH1 0x01 00001fe0: OR 00001fe1: SWAP1 00001fe2: SSTORE 00001fe3: JUMP 00001fe4: JUMPDEST 00001fe5: PUSH2 0x1fee 00001fe8: DUP3 00001fe9: DUP3 00001fea: PUSH2 0x1d3f 00001fed: JUMP 00001fee: JUMPDEST 00001fef: PUSH2 0x200a 00001ff2: JUMPI 00001ff3: PUSH1 0x40 00001ff5: MLOAD 00001ff6: PUSH3 0x461bcd 00001ffa: PUSH1 0xe5 00001ffc: SHL 00001ffd: DUP2 00001ffe: MSTORE 00001fff: PUSH1 0x04 00002001: ADD 00002002: PUSH2 0x07b3 00002005: SWAP1 00002006: PUSH2 0x30e8 00002009: JUMP 0000200a: JUMPDEST 0000200b: PUSH1 0x01 0000200d: PUSH1 0x01 0000200f: PUSH1 0xa0 00002011: SHL 00002012: SUB 00002013: AND 00002014: PUSH1 0x00 00002016: SWAP1 00002017: DUP2 00002018: MSTORE 00002019: PUSH1 0x20 0000201b: SWAP2 0000201c: SWAP1 0000201d: SWAP2 0000201e: MSTORE 0000201f: PUSH1 0x40 00002021: SWAP1 00002022: KECCAK256 00002023: DUP1 00002024: SLOAD 00002025: PUSH1 0xff 00002027: NOT 00002028: AND 00002029: SWAP1 0000202a: SSTORE 0000202b: JUMP 0000202c: JUMPDEST 0000202d: DUP3 0000202e: DUP1 0000202f: SLOAD 00002030: DUP3 00002031: DUP3 00002032: SSTORE 00002033: SWAP1 00002034: PUSH1 0x00 00002036: MSTORE 00002037: PUSH1 0x20 00002039: PUSH1 0x00 0000203b: KECCAK256 0000203c: SWAP1 0000203d: DUP2 0000203e: ADD 0000203f: SWAP3 00002040: DUP3 00002041: ISZERO 00002042: PUSH2 0x208e 00002045: JUMPI 00002046: SWAP2 00002047: PUSH1 0x20 00002049: MUL 0000204a: DUP3 0000204b: ADD 0000204c: JUMPDEST 0000204d: DUP3 0000204e: DUP2 0000204f: GT 00002050: ISZERO 00002051: PUSH2 0x208e 00002054: JUMPI 00002055: DUP3 00002056: MLOAD 00002057: DUP3 00002058: SLOAD 00002059: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000206e: NOT 0000206f: AND 00002070: PUSH1 0x01 00002072: PUSH1 0x01 00002074: PUSH1 0xa0 00002076: SHL 00002077: SUB 00002078: SWAP1 00002079: SWAP2 0000207a: AND 0000207b: OR 0000207c: DUP3 0000207d: SSTORE 0000207e: PUSH1 0x20 00002080: SWAP1 00002081: SWAP3 00002082: ADD 00002083: SWAP2 00002084: PUSH1 0x01 00002086: SWAP1 00002087: SWAP2 00002088: ADD 00002089: SWAP1 0000208a: PUSH2 0x204c 0000208d: JUMP 0000208e: JUMPDEST 0000208f: POP 00002090: PUSH2 0x209a 00002093: SWAP3 00002094: SWAP2 00002095: POP 00002096: PUSH2 0x209e 00002099: JUMP 0000209a: JUMPDEST 0000209b: POP 0000209c: SWAP1 0000209d: JUMP 0000209e: JUMPDEST 0000209f: PUSH2 0x156b 000020a2: SWAP2 000020a3: SWAP1 000020a4: JUMPDEST 000020a5: DUP1 000020a6: DUP3 000020a7: GT 000020a8: ISZERO 000020a9: PUSH2 0x209a 000020ac: JUMPI 000020ad: DUP1 000020ae: SLOAD 000020af: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000020c4: NOT 000020c5: AND 000020c6: DUP2 000020c7: SSTORE 000020c8: PUSH1 0x01 000020ca: ADD 000020cb: PUSH2 0x20a4 000020ce: JUMP 000020cf: JUMPDEST 000020d0: DUP1 000020d1: CALLDATALOAD 000020d2: PUSH2 0x1481 000020d5: DUP2 000020d6: PUSH2 0x32c3 000020d9: JUMP 000020da: JUMPDEST 000020db: PUSH1 0x00 000020dd: DUP3 000020de: PUSH1 0x1f 000020e0: DUP4 000020e1: ADD 000020e2: SLT 000020e3: PUSH2 0x20eb 000020e6: JUMPI 000020e7: PUSH1 0x00 000020e9: DUP1 000020ea: REVERT 000020eb: JUMPDEST 000020ec: DUP2 000020ed: CALLDATALOAD 000020ee: PUSH2 0x20fe 000020f1: PUSH2 0x20f9 000020f4: DUP3 000020f5: PUSH2 0x31dd 000020f8: JUMP 000020f9: JUMPDEST 000020fa: PUSH2 0x31b6 000020fd: JUMP 000020fe: JUMPDEST 000020ff: SWAP2 00002100: POP 00002101: DUP2 00002102: DUP2 00002103: DUP4 00002104: MSTORE 00002105: PUSH1 0x20 00002107: DUP5 00002108: ADD 00002109: SWAP4 0000210a: POP 0000210b: PUSH1 0x20 0000210d: DUP2 0000210e: ADD 0000210f: SWAP1 00002110: POP 00002111: DUP4 00002112: DUP6 00002113: PUSH1 0x20 00002115: DUP5 00002116: MUL 00002117: DUP3 00002118: ADD 00002119: GT 0000211a: ISZERO 0000211b: PUSH2 0x2123 0000211e: JUMPI 0000211f: PUSH1 0x00 00002121: DUP1 00002122: REVERT 00002123: JUMPDEST 00002124: PUSH1 0x00 00002126: JUMPDEST 00002127: DUP4 00002128: DUP2 00002129: LT 0000212a: ISZERO 0000212b: PUSH2 0x214f 0000212e: JUMPI 0000212f: DUP2 00002130: PUSH2 0x2139 00002133: DUP9 00002134: DUP3 00002135: PUSH2 0x20cf 00002138: JUMP 00002139: JUMPDEST 0000213a: DUP5 0000213b: MSTORE 0000213c: POP 0000213d: PUSH1 0x20 0000213f: SWAP3 00002140: DUP4 00002141: ADD 00002142: SWAP3 00002143: SWAP2 00002144: SWAP1 00002145: SWAP2 00002146: ADD 00002147: SWAP1 00002148: PUSH1 0x01 0000214a: ADD 0000214b: PUSH2 0x2126 0000214e: JUMP 0000214f: JUMPDEST 00002150: POP 00002151: POP 00002152: POP 00002153: POP 00002154: SWAP3 00002155: SWAP2 00002156: POP 00002157: POP 00002158: JUMP 00002159: JUMPDEST 0000215a: PUSH1 0x00 0000215c: DUP3 0000215d: PUSH1 0x1f 0000215f: DUP4 00002160: ADD 00002161: SLT 00002162: PUSH2 0x216a 00002165: JUMPI 00002166: PUSH1 0x00 00002168: DUP1 00002169: REVERT 0000216a: JUMPDEST 0000216b: DUP2 0000216c: CALLDATALOAD 0000216d: PUSH2 0x2178 00002170: PUSH2 0x20f9 00002173: DUP3 00002174: PUSH2 0x31dd 00002177: JUMP 00002178: JUMPDEST 00002179: DUP2 0000217a: DUP2 0000217b: MSTORE 0000217c: PUSH1 0x20 0000217e: SWAP4 0000217f: DUP5 00002180: ADD 00002181: SWAP4 00002182: SWAP1 00002183: SWAP3 00002184: POP 00002185: DUP3 00002186: ADD 00002187: DUP4 00002188: PUSH1 0x00 0000218a: JUMPDEST 0000218b: DUP4 0000218c: DUP2 0000218d: LT 0000218e: ISZERO 0000218f: PUSH2 0x214f 00002192: JUMPI 00002193: DUP2 00002194: CALLDATALOAD 00002195: DUP7 00002196: ADD 00002197: PUSH2 0x21a0 0000219a: DUP9 0000219b: DUP3 0000219c: PUSH2 0x2213 0000219f: JUMP 000021a0: JUMPDEST 000021a1: DUP5 000021a2: MSTORE 000021a3: POP 000021a4: PUSH1 0x20 000021a6: SWAP3 000021a7: DUP4 000021a8: ADD 000021a9: SWAP3 000021aa: SWAP2 000021ab: SWAP1 000021ac: SWAP2 000021ad: ADD 000021ae: SWAP1 000021af: PUSH1 0x01 000021b1: ADD 000021b2: PUSH2 0x218a 000021b5: JUMP 000021b6: JUMPDEST 000021b7: PUSH1 0x00 000021b9: DUP3 000021ba: PUSH1 0x1f 000021bc: DUP4 000021bd: ADD 000021be: SLT 000021bf: PUSH2 0x21c7 000021c2: JUMPI 000021c3: PUSH1 0x00 000021c5: DUP1 000021c6: REVERT 000021c7: JUMPDEST 000021c8: DUP2 000021c9: CALLDATALOAD 000021ca: PUSH2 0x21d5 000021cd: PUSH2 0x20f9 000021d0: DUP3 000021d1: PUSH2 0x31dd 000021d4: JUMP 000021d5: JUMPDEST 000021d6: DUP2 000021d7: DUP2 000021d8: MSTORE 000021d9: PUSH1 0x20 000021db: SWAP4 000021dc: DUP5 000021dd: ADD 000021de: SWAP4 000021df: SWAP1 000021e0: SWAP3 000021e1: POP 000021e2: DUP3 000021e3: ADD 000021e4: DUP4 000021e5: PUSH1 0x00 000021e7: JUMPDEST 000021e8: DUP4 000021e9: DUP2 000021ea: LT 000021eb: ISZERO 000021ec: PUSH2 0x214f 000021ef: JUMPI 000021f0: DUP2 000021f1: CALLDATALOAD 000021f2: DUP7 000021f3: ADD 000021f4: PUSH2 0x21fd 000021f7: DUP9 000021f8: DUP3 000021f9: PUSH2 0x2213 000021fc: JUMP 000021fd: JUMPDEST 000021fe: DUP5 000021ff: MSTORE 00002200: POP 00002201: PUSH1 0x20 00002203: SWAP3 00002204: DUP4 00002205: ADD 00002206: SWAP3 00002207: SWAP2 00002208: SWAP1 00002209: SWAP2 0000220a: ADD 0000220b: SWAP1 0000220c: PUSH1 0x01 0000220e: ADD 0000220f: PUSH2 0x21e7 00002212: JUMP 00002213: JUMPDEST 00002214: PUSH1 0x00 00002216: DUP3 00002217: PUSH1 0x1f 00002219: DUP4 0000221a: ADD 0000221b: SLT 0000221c: PUSH2 0x2224 0000221f: JUMPI 00002220: PUSH1 0x00 00002222: DUP1 00002223: REVERT 00002224: JUMPDEST 00002225: DUP2 00002226: CALLDATALOAD 00002227: PUSH2 0x2232 0000222a: PUSH2 0x20f9 0000222d: DUP3 0000222e: PUSH2 0x31fe 00002231: JUMP 00002232: JUMPDEST 00002233: SWAP2 00002234: POP 00002235: DUP1 00002236: DUP3 00002237: MSTORE 00002238: PUSH1 0x20 0000223a: DUP4 0000223b: ADD 0000223c: PUSH1 0x20 0000223e: DUP4 0000223f: ADD 00002240: DUP6 00002241: DUP4 00002242: DUP4 00002243: ADD 00002244: GT 00002245: ISZERO 00002246: PUSH2 0x224e 00002249: JUMPI 0000224a: PUSH1 0x00 0000224c: DUP1 0000224d: REVERT 0000224e: JUMPDEST 0000224f: PUSH2 0x2259 00002252: DUP4 00002253: DUP3 00002254: DUP5 00002255: PUSH2 0x3266 00002258: JUMP 00002259: JUMPDEST 0000225a: POP 0000225b: POP 0000225c: POP 0000225d: SWAP3 0000225e: SWAP2 0000225f: POP 00002260: POP 00002261: JUMP 00002262: JUMPDEST 00002263: DUP1 00002264: CALLDATALOAD 00002265: PUSH2 0x1481 00002268: DUP2 00002269: PUSH2 0x32d7 0000226c: JUMP 0000226d: JUMPDEST 0000226e: DUP1 0000226f: MLOAD 00002270: PUSH2 0x1481 00002273: DUP2 00002274: PUSH2 0x32d7 00002277: JUMP 00002278: JUMPDEST 00002279: PUSH1 0x00 0000227b: PUSH1 0x20 0000227d: DUP3 0000227e: DUP5 0000227f: SUB 00002280: SLT 00002281: ISZERO 00002282: PUSH2 0x228a 00002285: JUMPI 00002286: PUSH1 0x00 00002288: DUP1 00002289: REVERT 0000228a: JUMPDEST 0000228b: PUSH1 0x00 0000228d: PUSH2 0x1edb 00002290: DUP5 00002291: DUP5 00002292: PUSH2 0x20cf 00002295: JUMP 00002296: JUMPDEST 00002297: PUSH1 0x00 00002299: DUP1 0000229a: PUSH1 0x00 0000229c: DUP1 0000229d: PUSH1 0x00 0000229f: DUP1 000022a0: PUSH1 0xc0 000022a2: DUP8 000022a3: DUP10 000022a4: SUB 000022a5: SLT 000022a6: ISZERO 000022a7: PUSH2 0x22af 000022aa: JUMPI 000022ab: PUSH1 0x00 000022ad: DUP1 000022ae: REVERT 000022af: JUMPDEST 000022b0: PUSH1 0x00 000022b2: PUSH2 0x22bb 000022b5: DUP10 000022b6: DUP10 000022b7: PUSH2 0x20cf 000022ba: JUMP 000022bb: JUMPDEST 000022bc: SWAP7 000022bd: POP 000022be: POP 000022bf: PUSH1 0x20 000022c1: PUSH2 0x22cc 000022c4: DUP10 000022c5: DUP3 000022c6: DUP11 000022c7: ADD 000022c8: PUSH2 0x20cf 000022cb: JUMP 000022cc: JUMPDEST 000022cd: SWAP6 000022ce: POP 000022cf: POP 000022d0: PUSH1 0x40 000022d2: PUSH2 0x22dd 000022d5: DUP10 000022d6: DUP3 000022d7: DUP11 000022d8: ADD 000022d9: PUSH2 0x20cf 000022dc: JUMP 000022dd: JUMPDEST 000022de: SWAP5 000022df: POP 000022e0: POP 000022e1: PUSH1 0x60 000022e3: PUSH2 0x22ee 000022e6: DUP10 000022e7: DUP3 000022e8: DUP11 000022e9: ADD 000022ea: PUSH2 0x2262 000022ed: JUMP 000022ee: JUMPDEST 000022ef: SWAP4 000022f0: POP 000022f1: POP 000022f2: PUSH1 0x80 000022f4: DUP8 000022f5: ADD 000022f6: CALLDATALOAD 000022f7: PUSH8 0xffffffffffffffff 00002300: DUP2 00002301: GT 00002302: ISZERO 00002303: PUSH2 0x230b 00002306: JUMPI 00002307: PUSH1 0x00 00002309: DUP1 0000230a: REVERT 0000230b: JUMPDEST 0000230c: PUSH2 0x2317 0000230f: DUP10 00002310: DUP3 00002311: DUP11 00002312: ADD 00002313: PUSH2 0x2213 00002316: JUMP 00002317: JUMPDEST 00002318: SWAP3 00002319: POP 0000231a: POP 0000231b: PUSH1 0xa0 0000231d: DUP8 0000231e: ADD 0000231f: CALLDATALOAD 00002320: PUSH8 0xffffffffffffffff 00002329: DUP2 0000232a: GT 0000232b: ISZERO 0000232c: PUSH2 0x2334 0000232f: JUMPI 00002330: PUSH1 0x00 00002332: DUP1 00002333: REVERT 00002334: JUMPDEST 00002335: PUSH2 0x2340 00002338: DUP10 00002339: DUP3 0000233a: DUP11 0000233b: ADD 0000233c: PUSH2 0x2159 0000233f: JUMP 00002340: JUMPDEST 00002341: SWAP2 00002342: POP 00002343: POP 00002344: SWAP3 00002345: SWAP6 00002346: POP 00002347: SWAP3 00002348: SWAP6 00002349: POP 0000234a: SWAP3 0000234b: SWAP6 0000234c: JUMP 0000234d: JUMPDEST 0000234e: PUSH1 0x00 00002350: DUP1 00002351: PUSH1 0x00 00002353: PUSH1 0x60 00002355: DUP5 00002356: DUP7 00002357: SUB 00002358: SLT 00002359: ISZERO 0000235a: PUSH2 0x2362 0000235d: JUMPI 0000235e: PUSH1 0x00 00002360: DUP1 00002361: REVERT 00002362: JUMPDEST 00002363: PUSH1 0x00 00002365: PUSH2 0x236e 00002368: DUP7 00002369: DUP7 0000236a: PUSH2 0x20cf 0000236d: JUMP 0000236e: JUMPDEST 0000236f: SWAP4 00002370: POP 00002371: POP 00002372: PUSH1 0x20 00002374: PUSH2 0x237f 00002377: DUP7 00002378: DUP3 00002379: DUP8 0000237a: ADD 0000237b: PUSH2 0x2262 0000237e: JUMP 0000237f: JUMPDEST 00002380: SWAP3 00002381: POP 00002382: POP 00002383: PUSH1 0x40 00002385: DUP5 00002386: ADD 00002387: CALLDATALOAD 00002388: PUSH8 0xffffffffffffffff 00002391: DUP2 00002392: GT 00002393: ISZERO 00002394: PUSH2 0x239c 00002397: JUMPI 00002398: PUSH1 0x00 0000239a: DUP1 0000239b: REVERT 0000239c: JUMPDEST 0000239d: PUSH2 0x23a8 000023a0: DUP7 000023a1: DUP3 000023a2: DUP8 000023a3: ADD 000023a4: PUSH2 0x2159 000023a7: JUMP 000023a8: JUMPDEST 000023a9: SWAP2 000023aa: POP 000023ab: POP 000023ac: SWAP3 000023ad: POP 000023ae: SWAP3 000023af: POP 000023b0: SWAP3 000023b1: JUMP 000023b2: JUMPDEST 000023b3: PUSH1 0x00 000023b5: DUP1 000023b6: PUSH1 0x00 000023b8: PUSH1 0x60 000023ba: DUP5 000023bb: DUP7 000023bc: SUB 000023bd: SLT 000023be: ISZERO 000023bf: PUSH2 0x23c7 000023c2: JUMPI 000023c3: PUSH1 0x00 000023c5: DUP1 000023c6: REVERT 000023c7: JUMPDEST 000023c8: PUSH1 0x00 000023ca: PUSH2 0x23d3 000023cd: DUP7 000023ce: DUP7 000023cf: PUSH2 0x20cf 000023d2: JUMP 000023d3: JUMPDEST 000023d4: SWAP4 000023d5: POP 000023d6: POP 000023d7: PUSH1 0x20 000023d9: PUSH2 0x23e4 000023dc: DUP7 000023dd: DUP3 000023de: DUP8 000023df: ADD 000023e0: PUSH2 0x2262 000023e3: JUMP 000023e4: JUMPDEST 000023e5: SWAP3 000023e6: POP 000023e7: POP 000023e8: PUSH1 0x40 000023ea: PUSH2 0x23a8 000023ed: DUP7 000023ee: DUP3 000023ef: DUP8 000023f0: ADD 000023f1: PUSH2 0x2262 000023f4: JUMP 000023f5: JUMPDEST 000023f6: PUSH1 0x00 000023f8: DUP1 000023f9: PUSH1 0x00 000023fb: DUP1 000023fc: PUSH1 0x80 000023fe: DUP6 000023ff: DUP8 00002400: SUB 00002401: SLT 00002402: ISZERO 00002403: PUSH2 0x240b 00002406: JUMPI 00002407: PUSH1 0x00 00002409: DUP1 0000240a: REVERT 0000240b: JUMPDEST 0000240c: PUSH1 0x00 0000240e: PUSH2 0x2417 00002411: DUP8 00002412: DUP8 00002413: PUSH2 0x20cf 00002416: JUMP 00002417: JUMPDEST 00002418: SWAP5 00002419: POP 0000241a: POP 0000241b: PUSH1 0x20 0000241d: PUSH2 0x2428 00002420: DUP8 00002421: DUP3 00002422: DUP9 00002423: ADD 00002424: PUSH2 0x2262 00002427: JUMP 00002428: JUMPDEST 00002429: SWAP4 0000242a: POP 0000242b: POP 0000242c: PUSH1 0x40 0000242e: PUSH2 0x2439 00002431: DUP8 00002432: DUP3 00002433: DUP9 00002434: ADD 00002435: PUSH2 0x2262 00002438: JUMP 00002439: JUMPDEST 0000243a: SWAP3 0000243b: POP 0000243c: POP 0000243d: PUSH1 0x60 0000243f: DUP6 00002440: ADD 00002441: CALLDATALOAD 00002442: PUSH8 0xffffffffffffffff 0000244b: DUP2 0000244c: GT 0000244d: ISZERO 0000244e: PUSH2 0x2456 00002451: JUMPI 00002452: PUSH1 0x00 00002454: DUP1 00002455: REVERT 00002456: JUMPDEST 00002457: PUSH2 0x2462 0000245a: DUP8 0000245b: DUP3 0000245c: DUP9 0000245d: ADD 0000245e: PUSH2 0x2159 00002461: JUMP 00002462: JUMPDEST 00002463: SWAP2 00002464: POP 00002465: POP 00002466: SWAP3 00002467: SWAP6 00002468: SWAP2 00002469: SWAP5 0000246a: POP 0000246b: SWAP3 0000246c: POP 0000246d: JUMP 0000246e: JUMPDEST 0000246f: PUSH1 0x00 00002471: DUP1 00002472: PUSH1 0x40 00002474: DUP4 00002475: DUP6 00002476: SUB 00002477: SLT 00002478: ISZERO 00002479: PUSH2 0x2481 0000247c: JUMPI 0000247d: PUSH1 0x00 0000247f: DUP1 00002480: REVERT 00002481: JUMPDEST 00002482: DUP3 00002483: CALLDATALOAD 00002484: PUSH8 0xffffffffffffffff 0000248d: DUP2 0000248e: GT 0000248f: ISZERO 00002490: PUSH2 0x2498 00002493: JUMPI 00002494: PUSH1 0x00 00002496: DUP1 00002497: REVERT 00002498: JUMPDEST 00002499: PUSH2 0x24a4 0000249c: DUP6 0000249d: DUP3 0000249e: DUP7 0000249f: ADD 000024a0: PUSH2 0x20da 000024a3: JUMP 000024a4: JUMPDEST 000024a5: SWAP3 000024a6: POP 000024a7: POP 000024a8: PUSH1 0x20 000024aa: DUP4 000024ab: ADD 000024ac: CALLDATALOAD 000024ad: PUSH8 0xffffffffffffffff 000024b6: DUP2 000024b7: GT 000024b8: ISZERO 000024b9: PUSH2 0x24c1 000024bc: JUMPI 000024bd: PUSH1 0x00 000024bf: DUP1 000024c0: REVERT 000024c1: JUMPDEST 000024c2: PUSH2 0x24cd 000024c5: DUP6 000024c6: DUP3 000024c7: DUP7 000024c8: ADD 000024c9: PUSH2 0x20da 000024cc: JUMP 000024cd: JUMPDEST 000024ce: SWAP2 000024cf: POP 000024d0: POP 000024d1: SWAP3 000024d2: POP 000024d3: SWAP3 000024d4: SWAP1 000024d5: POP 000024d6: JUMP 000024d7: JUMPDEST 000024d8: PUSH1 0x00 000024da: PUSH1 0x20 000024dc: DUP3 000024dd: DUP5 000024de: SUB 000024df: SLT 000024e0: ISZERO 000024e1: PUSH2 0x24e9 000024e4: JUMPI 000024e5: PUSH1 0x00 000024e7: DUP1 000024e8: REVERT 000024e9: JUMPDEST 000024ea: DUP2 000024eb: CALLDATALOAD 000024ec: PUSH8 0xffffffffffffffff 000024f5: DUP2 000024f6: GT 000024f7: ISZERO 000024f8: PUSH2 0x2500 000024fb: JUMPI 000024fc: PUSH1 0x00 000024fe: DUP1 000024ff: REVERT 00002500: JUMPDEST 00002501: PUSH2 0x1edb 00002504: DUP5 00002505: DUP3 00002506: DUP6 00002507: ADD 00002508: PUSH2 0x2159 0000250b: JUMP 0000250c: JUMPDEST 0000250d: PUSH1 0x00 0000250f: PUSH1 0x20 00002511: DUP3 00002512: DUP5 00002513: SUB 00002514: SLT 00002515: ISZERO 00002516: PUSH2 0x251e 00002519: JUMPI 0000251a: PUSH1 0x00 0000251c: DUP1 0000251d: REVERT 0000251e: JUMPDEST 0000251f: DUP2 00002520: CALLDATALOAD 00002521: PUSH8 0xffffffffffffffff 0000252a: DUP2 0000252b: GT 0000252c: ISZERO 0000252d: PUSH2 0x2535 00002530: JUMPI 00002531: PUSH1 0x00 00002533: DUP1 00002534: REVERT 00002535: JUMPDEST 00002536: PUSH2 0x1edb 00002539: DUP5 0000253a: DUP3 0000253b: DUP6 0000253c: ADD 0000253d: PUSH2 0x21b6 00002540: JUMP 00002541: JUMPDEST 00002542: PUSH1 0x00 00002544: PUSH1 0x20 00002546: DUP3 00002547: DUP5 00002548: SUB 00002549: SLT 0000254a: ISZERO 0000254b: PUSH2 0x2553 0000254e: JUMPI 0000254f: PUSH1 0x00 00002551: DUP1 00002552: REVERT 00002553: JUMPDEST 00002554: DUP2 00002555: CALLDATALOAD 00002556: PUSH8 0xffffffffffffffff 0000255f: DUP2 00002560: GT 00002561: ISZERO 00002562: PUSH2 0x256a 00002565: JUMPI 00002566: PUSH1 0x00 00002568: DUP1 00002569: REVERT 0000256a: JUMPDEST 0000256b: PUSH2 0x1edb 0000256e: DUP5 0000256f: DUP3 00002570: DUP6 00002571: ADD 00002572: PUSH2 0x2213 00002575: JUMP 00002576: JUMPDEST 00002577: PUSH1 0x00 00002579: PUSH1 0x20 0000257b: DUP3 0000257c: DUP5 0000257d: SUB 0000257e: SLT 0000257f: ISZERO 00002580: PUSH2 0x2588 00002583: JUMPI 00002584: PUSH1 0x00 00002586: DUP1 00002587: REVERT 00002588: JUMPDEST 00002589: PUSH1 0x00 0000258b: PUSH2 0x1edb 0000258e: DUP5 0000258f: DUP5 00002590: PUSH2 0x2262 00002593: JUMP 00002594: JUMPDEST 00002595: PUSH1 0x00 00002597: PUSH1 0x20 00002599: DUP3 0000259a: DUP5 0000259b: SUB 0000259c: SLT 0000259d: ISZERO 0000259e: PUSH2 0x25a6 000025a1: JUMPI 000025a2: PUSH1 0x00 000025a4: DUP1 000025a5: REVERT 000025a6: JUMPDEST 000025a7: PUSH1 0x00 000025a9: PUSH2 0x1edb 000025ac: DUP5 000025ad: DUP5 000025ae: PUSH2 0x226d 000025b1: JUMP 000025b2: JUMPDEST 000025b3: PUSH2 0x25bb 000025b6: DUP2 000025b7: PUSH2 0x3255 000025ba: JUMP 000025bb: JUMPDEST 000025bc: DUP3 000025bd: MSTORE 000025be: POP 000025bf: POP 000025c0: JUMP 000025c1: JUMPDEST 000025c2: PUSH2 0x25bb 000025c5: DUP2 000025c6: PUSH2 0x3233 000025c9: JUMP 000025ca: JUMPDEST 000025cb: PUSH2 0x25bb 000025ce: PUSH2 0x25d6 000025d1: DUP3 000025d2: PUSH2 0x3233 000025d5: JUMP 000025d6: JUMPDEST 000025d7: PUSH2 0x32a2 000025da: JUMP 000025db: JUMPDEST 000025dc: PUSH2 0x25bb 000025df: DUP2 000025e0: PUSH2 0x323e 000025e3: JUMP 000025e4: JUMPDEST 000025e5: PUSH2 0x25bb 000025e8: DUP2 000025e9: PUSH2 0x156b 000025ec: JUMP 000025ed: JUMPDEST 000025ee: PUSH1 0x00 000025f0: PUSH2 0x25f8 000025f3: DUP3 000025f4: PUSH2 0x3226 000025f7: JUMP 000025f8: JUMPDEST 000025f9: PUSH2 0x2602 000025fc: DUP2 000025fd: DUP6 000025fe: PUSH2 0x322a 00002601: JUMP 00002602: JUMPDEST 00002603: SWAP4 00002604: POP 00002605: PUSH2 0x2612 00002608: DUP2 00002609: DUP6 0000260a: PUSH1 0x20 0000260c: DUP7 0000260d: ADD 0000260e: PUSH2 0x3272 00002611: JUMP 00002612: JUMPDEST 00002613: PUSH2 0x261b 00002616: DUP2 00002617: PUSH2 0x32b3 0000261a: JUMP 0000261b: JUMPDEST 0000261c: SWAP1 0000261d: SWAP4 0000261e: ADD 0000261f: SWAP4 00002620: SWAP3 00002621: POP 00002622: POP 00002623: POP 00002624: JUMP 00002625: JUMPDEST 00002626: PUSH1 0x00 00002628: PUSH2 0x2630 0000262b: DUP3 0000262c: PUSH2 0x3226 0000262f: JUMP 00002630: JUMPDEST 00002631: PUSH2 0x263a 00002634: DUP2 00002635: DUP6 00002636: PUSH2 0x1469 00002639: JUMP 0000263a: JUMPDEST 0000263b: SWAP4 0000263c: POP 0000263d: PUSH2 0x264a 00002640: DUP2 00002641: DUP6 00002642: PUSH1 0x20 00002644: DUP7 00002645: ADD 00002646: PUSH2 0x3272 00002649: JUMP 0000264a: JUMPDEST 0000264b: SWAP3 0000264c: SWAP1 0000264d: SWAP3 0000264e: ADD 0000264f: SWAP3 00002650: SWAP2 00002651: POP 00002652: POP 00002653: JUMP 00002654: JUMPDEST 00002655: PUSH1 0x00 00002657: PUSH2 0x2661 0000265a: PUSH1 0x07 0000265c: DUP4 0000265d: PUSH2 0x1469 00002660: JUMP 00002661: JUMPDEST 00002662: PUSH32 0x7570677261646500000000000000000000000000000000000000000000000000 00002683: DUP2 00002684: MSTORE 00002685: PUSH1 0x07 00002687: ADD 00002688: SWAP3 00002689: SWAP2 0000268a: POP 0000268b: POP 0000268c: JUMP 0000268d: JUMPDEST 0000268e: PUSH1 0x00 00002690: PUSH2 0x269a 00002693: PUSH1 0x23 00002695: DUP4 00002696: PUSH2 0x322a 00002699: JUMP 0000269a: JUMPDEST 0000269b: PUSH32 0x636f6c642077616c6c65742062616c616e636520697320696e73756666696369 000026bc: DUP2 000026bd: MSTORE 000026be: PUSH32 0x656e740000000000000000000000000000000000000000000000000000000000 000026df: PUSH1 0x20 000026e1: DUP3 000026e2: ADD 000026e3: MSTORE 000026e4: PUSH1 0x40 000026e6: ADD 000026e7: SWAP3 000026e8: SWAP2 000026e9: POP 000026ea: POP 000026eb: JUMP 000026ec: JUMPDEST 000026ed: PUSH1 0x00 000026ef: PUSH2 0x26f9 000026f2: PUSH1 0x14 000026f4: DUP4 000026f5: PUSH2 0x322a 000026f8: JUMP 000026f9: JUMPDEST 000026fa: PUSH32 0x5061757361626c653a206e6f7420706175736564000000000000000000000000 0000271b: DUP2 0000271c: MSTORE 0000271d: PUSH1 0x20 0000271f: ADD 00002720: SWAP3 00002721: SWAP2 00002722: POP 00002723: POP 00002724: JUMP 00002725: JUMPDEST 00002726: PUSH1 0x00 00002728: PUSH2 0x2732 0000272b: PUSH1 0x1f 0000272d: DUP4 0000272e: PUSH2 0x322a 00002731: JUMP 00002732: JUMPDEST 00002733: PUSH32 0x526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500 00002754: DUP2 00002755: MSTORE 00002756: PUSH1 0x20 00002758: ADD 00002759: SWAP3 0000275a: SWAP2 0000275b: POP 0000275c: POP 0000275d: JUMP 0000275e: JUMPDEST 0000275f: PUSH1 0x00 00002761: PUSH2 0x276b 00002764: PUSH1 0x23 00002766: DUP4 00002767: PUSH2 0x322a 0000276a: JUMP 0000276b: JUMPDEST 0000276c: PUSH32 0x616c6c6f77616e6365206166746572206465706f736974206973206e6f74207a 0000278d: DUP2 0000278e: MSTORE 0000278f: PUSH32 0x65726f0000000000000000000000000000000000000000000000000000000000 000027b0: PUSH1 0x20 000027b2: DUP3 000027b3: ADD 000027b4: MSTORE 000027b5: PUSH1 0x40 000027b7: ADD 000027b8: SWAP3 000027b9: SWAP2 000027ba: POP 000027bb: POP 000027bc: JUMP 000027bd: JUMPDEST 000027be: PUSH1 0x00 000027c0: PUSH2 0x27ca 000027c3: PUSH1 0x11 000027c5: DUP4 000027c6: PUSH2 0x322a 000027c9: JUMP 000027ca: JUMPDEST 000027cb: PUSH32 0x7369676e617475726520696e76616c6964000000000000000000000000000000 000027ec: DUP2 000027ed: MSTORE 000027ee: PUSH1 0x20 000027f0: ADD 000027f1: SWAP3 000027f2: SWAP2 000027f3: POP 000027f4: POP 000027f5: JUMP 000027f6: JUMPDEST 000027f7: PUSH1 0x00 000027f9: PUSH2 0x2803 000027fc: PUSH1 0x30 000027fe: DUP4 000027ff: PUSH2 0x322a 00002802: JUMP 00002803: JUMPDEST 00002804: PUSH32 0x506175736572526f6c653a2063616c6c657220646f6573206e6f742068617665 00002825: DUP2 00002826: MSTORE 00002827: PUSH32 0x207468652050617573657220726f6c6500000000000000000000000000000000 00002848: PUSH1 0x20 0000284a: DUP3 0000284b: ADD 0000284c: MSTORE 0000284d: PUSH1 0x40 0000284f: ADD 00002850: SWAP3 00002851: SWAP2 00002852: POP 00002853: POP 00002854: JUMP 00002855: JUMPDEST 00002856: PUSH1 0x00 00002858: PUSH2 0x2862 0000285b: PUSH1 0x0f 0000285d: DUP4 0000285e: PUSH2 0x322a 00002861: JUMP 00002862: JUMPDEST 00002863: PUSH32 0x696e636f727265637420626f756e640000000000000000000000000000000000 00002884: DUP2 00002885: MSTORE 00002886: PUSH1 0x20 00002888: ADD 00002889: SWAP3 0000288a: SWAP2 0000288b: POP 0000288c: POP 0000288d: JUMP 0000288e: JUMPDEST 0000288f: PUSH1 0x00 00002891: PUSH2 0x289b 00002894: PUSH1 0x09 00002896: DUP4 00002897: PUSH2 0x322a 0000289a: JUMP 0000289b: JUMPDEST 0000289c: PUSH9 0x10dbdb19151bd21bdd 000028a6: PUSH1 0xba 000028a8: SHL 000028a9: DUP2 000028aa: MSTORE 000028ab: PUSH1 0x20 000028ad: ADD 000028ae: SWAP3 000028af: SWAP2 000028b0: POP 000028b1: POP 000028b2: JUMP 000028b3: JUMPDEST 000028b4: PUSH1 0x00 000028b6: PUSH2 0x28c0 000028b9: PUSH1 0x09 000028bb: DUP4 000028bc: PUSH2 0x1469 000028bf: JUMP 000028c0: JUMPDEST 000028c1: PUSH9 0x10dbdb19151bd21bdd 000028cb: PUSH1 0xba 000028cd: SHL 000028ce: DUP2 000028cf: MSTORE 000028d0: PUSH1 0x09 000028d2: ADD 000028d3: SWAP3 000028d4: SWAP2 000028d5: POP 000028d6: POP 000028d7: JUMP 000028d8: JUMPDEST 000028d9: PUSH1 0x00 000028db: PUSH2 0x28e5 000028de: PUSH1 0x09 000028e0: DUP4 000028e1: PUSH2 0x1469 000028e4: JUMP 000028e5: JUMPDEST 000028e6: PUSH32 0x486f74546f436f6c640000000000000000000000000000000000000000000000 00002907: DUP2 00002908: MSTORE 00002909: PUSH1 0x09 0000290b: ADD 0000290c: SWAP3 0000290d: SWAP2 0000290e: POP 0000290f: POP 00002910: JUMP 00002911: JUMPDEST 00002912: PUSH1 0x00 00002914: PUSH2 0x291e 00002917: PUSH1 0x0c 00002919: DUP4 0000291a: PUSH2 0x322a 0000291d: JUMP 0000291e: JUMPDEST 0000291f: PUSH32 0x756e7361666520746f6b656e0000000000000000000000000000000000000000 00002940: DUP2 00002941: MSTORE 00002942: PUSH1 0x20 00002944: ADD 00002945: SWAP3 00002946: SWAP2 00002947: POP 00002948: POP 00002949: JUMP 0000294a: JUMPDEST 0000294b: PUSH1 0x00 0000294d: PUSH2 0x2957 00002950: PUSH1 0x1f 00002952: DUP4 00002953: PUSH2 0x322a 00002956: JUMP 00002957: JUMPDEST 00002958: PUSH32 0x686f742077616c6c65742062616c616e636520696e73756666696369656e7400 00002979: DUP2 0000297a: MSTORE 0000297b: PUSH1 0x20 0000297d: ADD 0000297e: SWAP3 0000297f: SWAP2 00002980: POP 00002981: POP 00002982: JUMP 00002983: JUMPDEST 00002984: PUSH1 0x00 00002986: PUSH2 0x2990 00002989: PUSH1 0x17 0000298b: DUP4 0000298c: PUSH2 0x322a 0000298f: JUMP 00002990: JUMPDEST 00002991: PUSH32 0x66696e6973686564206275726e206f7065726174696f6e000000000000000000 000029b2: DUP2 000029b3: MSTORE 000029b4: PUSH1 0x20 000029b6: ADD 000029b7: SWAP3 000029b8: SWAP2 000029b9: POP 000029ba: POP 000029bb: JUMP 000029bc: JUMPDEST 000029bd: PUSH1 0x00 000029bf: PUSH2 0x29c9 000029c2: PUSH1 0x10 000029c4: DUP4 000029c5: PUSH2 0x322a 000029c8: JUMP 000029c9: JUMPDEST 000029ca: PUSH32 0x5061757361626c653a2070617573656400000000000000000000000000000000 000029eb: DUP2 000029ec: MSTORE 000029ed: PUSH1 0x20 000029ef: ADD 000029f0: SWAP3 000029f1: SWAP2 000029f2: POP 000029f3: POP 000029f4: JUMP 000029f5: JUMPDEST 000029f6: PUSH1 0x00 000029f8: PUSH2 0x2a02 000029fb: PUSH1 0x14 000029fd: DUP4 000029fe: PUSH2 0x322a 00002a01: JUMP 00002a02: JUMPDEST 00002a03: PUSH32 0x6e6f6e2d636f6e74726163742061646472657373000000000000000000000000 00002a24: DUP2 00002a25: MSTORE 00002a26: PUSH1 0x20 00002a28: ADD 00002a29: SWAP3 00002a2a: SWAP2 00002a2b: POP 00002a2c: POP 00002a2d: JUMP 00002a2e: JUMPDEST 00002a2f: PUSH1 0x00 00002a31: PUSH2 0x2a3b 00002a34: PUSH1 0x21 00002a36: DUP4 00002a37: PUSH2 0x322a 00002a3a: JUMP 00002a3b: JUMPDEST 00002a3c: PUSH32 0x526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c 00002a5d: DUP2 00002a5e: MSTORE 00002a5f: PUSH32 0x6500000000000000000000000000000000000000000000000000000000000000 00002a80: PUSH1 0x20 00002a82: DUP3 00002a83: ADD 00002a84: MSTORE 00002a85: PUSH1 0x40 00002a87: ADD 00002a88: SWAP3 00002a89: SWAP2 00002a8a: POP 00002a8b: POP 00002a8c: JUMP 00002a8d: JUMPDEST 00002a8e: PUSH1 0x00 00002a90: PUSH2 0x2a9a 00002a93: PUSH1 0x17 00002a95: DUP4 00002a96: PUSH2 0x322a 00002a99: JUMP 00002a9a: JUMPDEST 00002a9b: PUSH32 0x72656c617965722061646472657373206973207a65726f000000000000000000 00002abc: DUP2 00002abd: MSTORE 00002abe: PUSH1 0x20 00002ac0: ADD 00002ac1: SWAP3 00002ac2: SWAP2 00002ac3: POP 00002ac4: POP 00002ac5: JUMP 00002ac6: JUMPDEST 00002ac7: PUSH1 0x00 00002ac9: PUSH2 0x2ad3 00002acc: PUSH1 0x0f 00002ace: DUP4 00002acf: PUSH2 0x322a 00002ad2: JUMP 00002ad3: JUMPDEST 00002ad4: PUSH32 0x696e636f7272656374206e6f6e63650000000000000000000000000000000000 00002af5: DUP2 00002af6: MSTORE 00002af7: PUSH1 0x20 00002af9: ADD 00002afa: SWAP3 00002afb: SWAP2 00002afc: POP 00002afd: POP 00002afe: JUMP 00002aff: JUMPDEST 00002b00: PUSH1 0x00 00002b02: PUSH2 0x2b0c 00002b05: PUSH1 0x22 00002b07: DUP4 00002b08: PUSH2 0x322a 00002b0b: JUMP 00002b0c: JUMPDEST 00002b0d: PUSH32 0x526f6c65733a206163636f756e7420697320746865207a65726f206164647265 00002b2e: DUP2 00002b2f: MSTORE 00002b30: PUSH32 0x7373000000000000000000000000000000000000000000000000000000000000 00002b51: PUSH1 0x20 00002b53: DUP3 00002b54: ADD 00002b55: MSTORE 00002b56: PUSH1 0x40 00002b58: ADD 00002b59: SWAP3 00002b5a: SWAP2 00002b5b: POP 00002b5c: POP 00002b5d: JUMP 00002b5e: JUMPDEST 00002b5f: PUSH1 0x00 00002b61: PUSH2 0x2b6b 00002b64: PUSH1 0x40 00002b66: DUP4 00002b67: PUSH2 0x322a 00002b6a: JUMP 00002b6b: JUMPDEST 00002b6c: PUSH32 0x57686974656c69737441646d696e526f6c653a2063616c6c657220646f657320 00002b8d: DUP2 00002b8e: MSTORE 00002b8f: PUSH32 0x6e6f742068617665207468652057686974656c69737441646d696e20726f6c65 00002bb0: PUSH1 0x20 00002bb2: DUP3 00002bb3: ADD 00002bb4: MSTORE 00002bb5: PUSH1 0x40 00002bb7: ADD 00002bb8: SWAP3 00002bb9: SWAP2 00002bba: POP 00002bbb: POP 00002bbc: JUMP 00002bbd: JUMPDEST 00002bbe: PUSH1 0x00 00002bc0: PUSH2 0x2bca 00002bc3: PUSH1 0x2c 00002bc5: DUP4 00002bc6: PUSH2 0x322a 00002bc9: JUMP 00002bca: JUMPDEST 00002bcb: PUSH32 0x63616c6c657220646f6573206e6f742068617665207468652057686974656c69 00002bec: DUP2 00002bed: MSTORE 00002bee: PUSH32 0x737441646d696e20726f6c650000000000000000000000000000000000000000 00002c0f: PUSH1 0x20 00002c11: DUP3 00002c12: ADD 00002c13: MSTORE 00002c14: PUSH1 0x40 00002c16: ADD 00002c17: SWAP3 00002c18: SWAP2 00002c19: POP 00002c1a: POP 00002c1b: JUMP 00002c1c: JUMPDEST 00002c1d: PUSH1 0x00 00002c1f: PUSH2 0x2c29 00002c22: PUSH1 0x12 00002c24: DUP4 00002c25: PUSH2 0x322a 00002c28: JUMP 00002c29: JUMPDEST 00002c2a: PUSH32 0x5245454e5452414e43595f494c4c4547414c0000000000000000000000000000 00002c4b: DUP2 00002c4c: MSTORE 00002c4d: PUSH1 0x20 00002c4f: ADD 00002c50: SWAP3 00002c51: SWAP2 00002c52: POP 00002c53: POP 00002c54: JUMP 00002c55: JUMPDEST 00002c56: PUSH1 0x00 00002c58: PUSH2 0x2c62 00002c5b: PUSH1 0x17 00002c5d: DUP4 00002c5e: PUSH2 0x322a 00002c61: JUMP 00002c62: JUMPDEST 00002c63: PUSH32 0x696e73756666696369656e74207369676e617475726573000000000000000000 00002c84: DUP2 00002c85: MSTORE 00002c86: PUSH1 0x20 00002c88: ADD 00002c89: SWAP3 00002c8a: SWAP2 00002c8b: POP 00002c8c: POP 00002c8d: JUMP 00002c8e: JUMPDEST 00002c8f: PUSH1 0x00 00002c91: PUSH2 0x2c9b 00002c94: PUSH1 0x0d 00002c96: DUP4 00002c97: PUSH2 0x322a 00002c9a: JUMP 00002c9b: JUMPDEST 00002c9c: PUSH32 0x6e6f7420637573746f6469616e00000000000000000000000000000000000000 00002cbd: DUP2 00002cbe: MSTORE 00002cbf: PUSH1 0x20 00002cc1: ADD 00002cc2: SWAP3 00002cc3: SWAP2 00002cc4: POP 00002cc5: POP 00002cc6: JUMP 00002cc7: JUMPDEST 00002cc8: PUSH1 0x00 00002cca: PUSH2 0x2cd4 00002ccd: PUSH1 0x06 00002ccf: DUP4 00002cd0: PUSH2 0x322a 00002cd3: JUMP 00002cd4: JUMPDEST 00002cd5: PUSH32 0x7061757365640000000000000000000000000000000000000000000000000000 00002cf6: DUP2 00002cf7: MSTORE 00002cf8: PUSH1 0x20 00002cfa: ADD 00002cfb: SWAP3 00002cfc: SWAP2 00002cfd: POP 00002cfe: POP 00002cff: JUMP 00002d00: JUMPDEST 00002d01: PUSH1 0x00 00002d03: PUSH2 0x2d0d 00002d06: PUSH1 0x0a 00002d08: DUP4 00002d09: PUSH2 0x322a 00002d0c: JUMP 00002d0d: JUMPDEST 00002d0e: PUSH32 0x6e6f742070617573656400000000000000000000000000000000000000000000 00002d2f: DUP2 00002d30: MSTORE 00002d31: PUSH1 0x20 00002d33: ADD 00002d34: SWAP3 00002d35: SWAP2 00002d36: POP 00002d37: POP 00002d38: JUMP 00002d39: JUMPDEST 00002d3a: PUSH1 0x00 00002d3c: PUSH2 0x2d46 00002d3f: PUSH1 0x04 00002d41: DUP4 00002d42: PUSH2 0x1469 00002d45: JUMP 00002d46: JUMPDEST 00002d47: PUSH32 0x6275726e00000000000000000000000000000000000000000000000000000000 00002d68: DUP2 00002d69: MSTORE 00002d6a: PUSH1 0x04 00002d6c: ADD 00002d6d: SWAP3 00002d6e: SWAP2 00002d6f: POP 00002d70: POP 00002d71: JUMP 00002d72: JUMPDEST 00002d73: PUSH1 0x00 00002d75: PUSH2 0x2d7f 00002d78: PUSH1 0x19 00002d7a: DUP4 00002d7b: PUSH2 0x322a 00002d7e: JUMP 00002d7f: JUMPDEST 00002d80: PUSH32 0x5f666163746f7279206d75737420626520636f6e747261637400000000000000 00002da1: DUP2 00002da2: MSTORE 00002da3: PUSH1 0x20 00002da5: ADD 00002da6: SWAP3 00002da7: SWAP2 00002da8: POP 00002da9: POP 00002daa: JUMP 00002dab: JUMPDEST 00002dac: PUSH2 0x25bb 00002daf: PUSH2 0x2db7 00002db2: DUP3 00002db3: PUSH2 0x156b 00002db6: JUMP 00002db7: JUMPDEST 00002db8: PUSH2 0x156b 00002dbb: JUMP 00002dbc: JUMPDEST 00002dbd: PUSH2 0x25bb 00002dc0: DUP2 00002dc1: PUSH2 0x324f 00002dc4: JUMP 00002dc5: JUMPDEST 00002dc6: PUSH1 0x00 00002dc8: PUSH2 0x1c32 00002dcb: DUP3 00002dcc: DUP5 00002dcd: PUSH2 0x2625 00002dd0: JUMP 00002dd1: JUMPDEST 00002dd2: PUSH1 0x00 00002dd4: PUSH2 0x2ddc 00002dd7: DUP3 00002dd8: PUSH2 0x2654 00002ddb: JUMP 00002ddc: JUMPDEST 00002ddd: SWAP2 00002dde: POP 00002ddf: PUSH2 0x2de8 00002de2: DUP3 00002de3: DUP7 00002de4: PUSH2 0x25ca 00002de7: JUMP 00002de8: JUMPDEST 00002de9: PUSH1 0x14 00002deb: DUP3 00002dec: ADD 00002ded: SWAP2 00002dee: POP 00002def: PUSH2 0x2df8 00002df2: DUP3 00002df3: DUP6 00002df4: PUSH2 0x25ca 00002df7: JUMP 00002df8: JUMPDEST 00002df9: PUSH1 0x14 00002dfb: DUP3 00002dfc: ADD 00002dfd: SWAP2 00002dfe: POP 00002dff: PUSH2 0x2e08 00002e02: DUP3 00002e03: DUP5 00002e04: PUSH2 0x2dab 00002e07: JUMP 00002e08: JUMPDEST 00002e09: POP 00002e0a: PUSH1 0x20 00002e0c: ADD 00002e0d: SWAP4 00002e0e: SWAP3 00002e0f: POP 00002e10: POP 00002e11: POP 00002e12: JUMP 00002e13: JUMPDEST 00002e14: PUSH1 0x00 00002e16: PUSH2 0x2e1e 00002e19: DUP3 00002e1a: PUSH2 0x28b3 00002e1d: JUMP 00002e1e: JUMPDEST 00002e1f: SWAP2 00002e20: POP 00002e21: PUSH2 0x2e2a 00002e24: DUP3 00002e25: DUP8 00002e26: PUSH2 0x25ca 00002e29: JUMP 00002e2a: JUMPDEST 00002e2b: PUSH1 0x14 00002e2d: DUP3 00002e2e: ADD 00002e2f: SWAP2 00002e30: POP 00002e31: PUSH2 0x2e3a 00002e34: DUP3 00002e35: DUP7 00002e36: PUSH2 0x25ca 00002e39: JUMP 00002e3a: JUMPDEST 00002e3b: PUSH1 0x14 00002e3d: DUP3 00002e3e: ADD 00002e3f: SWAP2 00002e40: POP 00002e41: PUSH2 0x2e4a 00002e44: DUP3 00002e45: DUP6 00002e46: PUSH2 0x2dab 00002e49: JUMP 00002e4a: JUMPDEST 00002e4b: PUSH1 0x20 00002e4d: DUP3 00002e4e: ADD 00002e4f: SWAP2 00002e50: POP 00002e51: PUSH2 0x2e5a 00002e54: DUP3 00002e55: DUP5 00002e56: PUSH2 0x2dab 00002e59: JUMP 00002e5a: JUMPDEST 00002e5b: POP 00002e5c: PUSH1 0x20 00002e5e: ADD 00002e5f: SWAP5 00002e60: SWAP4 00002e61: POP 00002e62: POP 00002e63: POP 00002e64: POP 00002e65: JUMP 00002e66: JUMPDEST 00002e67: PUSH1 0x00 00002e69: PUSH2 0x2ddc 00002e6c: DUP3 00002e6d: PUSH2 0x28d8 00002e70: JUMP 00002e71: JUMPDEST 00002e72: PUSH1 0x00 00002e74: PUSH2 0x2e7d 00002e77: DUP3 00002e78: DUP11 00002e79: PUSH2 0x2dab 00002e7c: JUMP 00002e7d: JUMPDEST 00002e7e: PUSH1 0x20 00002e80: DUP3 00002e81: ADD 00002e82: SWAP2 00002e83: POP 00002e84: PUSH2 0x2e8c 00002e87: DUP3 00002e88: PUSH2 0x2d39 00002e8b: JUMP 00002e8c: JUMPDEST 00002e8d: SWAP2 00002e8e: POP 00002e8f: PUSH2 0x2e98 00002e92: DUP3 00002e93: DUP10 00002e94: PUSH2 0x25ca 00002e97: JUMP 00002e98: JUMPDEST 00002e99: PUSH1 0x14 00002e9b: DUP3 00002e9c: ADD 00002e9d: SWAP2 00002e9e: POP 00002e9f: PUSH2 0x2ea8 00002ea2: DUP3 00002ea3: DUP9 00002ea4: PUSH2 0x25ca 00002ea7: JUMP 00002ea8: JUMPDEST 00002ea9: PUSH1 0x14 00002eab: DUP3 00002eac: ADD 00002ead: SWAP2 00002eae: POP 00002eaf: PUSH2 0x2eb8 00002eb2: DUP3 00002eb3: DUP8 00002eb4: PUSH2 0x25ca 00002eb7: JUMP 00002eb8: JUMPDEST 00002eb9: PUSH1 0x14 00002ebb: DUP3 00002ebc: ADD 00002ebd: SWAP2 00002ebe: POP 00002ebf: PUSH2 0x2ec8 00002ec2: DUP3 00002ec3: DUP7 00002ec4: PUSH2 0x25ca 00002ec7: JUMP 00002ec8: JUMPDEST 00002ec9: PUSH1 0x14 00002ecb: DUP3 00002ecc: ADD 00002ecd: SWAP2 00002ece: POP 00002ecf: PUSH2 0x2ed8 00002ed2: DUP3 00002ed3: DUP6 00002ed4: PUSH2 0x2dab 00002ed7: JUMP 00002ed8: JUMPDEST 00002ed9: PUSH1 0x20 00002edb: DUP3 00002edc: ADD 00002edd: SWAP2 00002ede: POP 00002edf: PUSH2 0x2ee8 00002ee2: DUP3 00002ee3: DUP5 00002ee4: PUSH2 0x2625 00002ee7: JUMP 00002ee8: JUMPDEST 00002ee9: SWAP10 00002eea: SWAP9 00002eeb: POP 00002eec: POP 00002eed: POP 00002eee: POP 00002eef: POP 00002ef0: POP 00002ef1: POP 00002ef2: POP 00002ef3: POP 00002ef4: JUMP 00002ef5: JUMPDEST 00002ef6: PUSH1 0x20 00002ef8: DUP2 00002ef9: ADD 00002efa: PUSH2 0x1481 00002efd: DUP3 00002efe: DUP5 00002eff: PUSH2 0x25c1 00002f02: JUMP 00002f03: JUMPDEST 00002f04: PUSH1 0x20 00002f06: DUP2 00002f07: ADD 00002f08: PUSH2 0x1481 00002f0b: DUP3 00002f0c: DUP5 00002f0d: PUSH2 0x25b2 00002f10: JUMP 00002f11: JUMPDEST 00002f12: PUSH1 0x40 00002f14: DUP2 00002f15: ADD 00002f16: PUSH2 0x2f1f 00002f19: DUP3 00002f1a: DUP6 00002f1b: PUSH2 0x25b2 00002f1e: JUMP 00002f1f: JUMPDEST 00002f20: PUSH2 0x1c32 00002f23: PUSH1 0x20 00002f25: DUP4 00002f26: ADD 00002f27: DUP5 00002f28: PUSH2 0x25b2 00002f2b: JUMP 00002f2c: JUMPDEST 00002f2d: PUSH1 0x60 00002f2f: DUP2 00002f30: ADD 00002f31: PUSH2 0x2f3a 00002f34: DUP3 00002f35: DUP7 00002f36: PUSH2 0x25b2 00002f39: JUMP 00002f3a: JUMPDEST 00002f3b: DUP2 00002f3c: DUP2 00002f3d: SUB 00002f3e: PUSH1 0x20 00002f40: DUP4 00002f41: ADD 00002f42: MSTORE 00002f43: PUSH2 0x2f4c 00002f46: DUP2 00002f47: DUP6 00002f48: PUSH2 0x25ed 00002f4b: JUMP 00002f4c: JUMPDEST 00002f4d: SWAP1 00002f4e: POP 00002f4f: PUSH2 0x1edb 00002f52: PUSH1 0x40 00002f54: DUP4 00002f55: ADD 00002f56: DUP5 00002f57: PUSH2 0x25c1 00002f5a: JUMP 00002f5b: JUMPDEST 00002f5c: PUSH1 0x40 00002f5e: DUP2 00002f5f: ADD 00002f60: PUSH2 0x2f69 00002f63: DUP3 00002f64: DUP6 00002f65: PUSH2 0x25c1 00002f68: JUMP 00002f69: JUMPDEST 00002f6a: PUSH2 0x1c32 00002f6d: PUSH1 0x20 00002f6f: DUP4 00002f70: ADD 00002f71: DUP5 00002f72: PUSH2 0x25e4 00002f75: JUMP 00002f76: JUMPDEST 00002f77: PUSH1 0x40 00002f79: DUP2 00002f7a: ADD 00002f7b: PUSH2 0x2f69 00002f7e: DUP3 00002f7f: DUP6 00002f80: PUSH2 0x25b2 00002f83: JUMP 00002f84: JUMPDEST 00002f85: PUSH1 0x60 00002f87: DUP2 00002f88: ADD 00002f89: PUSH2 0x2f92 00002f8c: DUP3 00002f8d: DUP7 00002f8e: PUSH2 0x25b2 00002f91: JUMP 00002f92: JUMPDEST 00002f93: PUSH2 0x2f9f 00002f96: PUSH1 0x20 00002f98: DUP4 00002f99: ADD 00002f9a: DUP6 00002f9b: PUSH2 0x25e4 00002f9e: JUMP 00002f9f: JUMPDEST 00002fa0: PUSH2 0x1edb 00002fa3: PUSH1 0x40 00002fa5: DUP4 00002fa6: ADD 00002fa7: DUP5 00002fa8: PUSH2 0x25c1 00002fab: JUMP 00002fac: JUMPDEST 00002fad: PUSH1 0x40 00002faf: DUP2 00002fb0: ADD 00002fb1: PUSH2 0x2fba 00002fb4: DUP3 00002fb5: DUP5 00002fb6: PUSH2 0x25c1 00002fb9: JUMP 00002fba: JUMPDEST 00002fbb: DUP2 00002fbc: DUP2 00002fbd: SUB 00002fbe: PUSH1 0x20 00002fc0: DUP4 00002fc1: ADD 00002fc2: MSTORE 00002fc3: PUSH2 0x1c32 00002fc6: DUP2 00002fc7: PUSH2 0x288e 00002fca: JUMP 00002fcb: JUMPDEST 00002fcc: PUSH1 0x20 00002fce: DUP2 00002fcf: ADD 00002fd0: PUSH2 0x1481 00002fd3: DUP3 00002fd4: DUP5 00002fd5: PUSH2 0x25db 00002fd8: JUMP 00002fd9: JUMPDEST 00002fda: PUSH1 0x80 00002fdc: DUP2 00002fdd: ADD 00002fde: PUSH2 0x2fe7 00002fe1: DUP3 00002fe2: DUP8 00002fe3: PUSH2 0x25e4 00002fe6: JUMP 00002fe7: JUMPDEST 00002fe8: PUSH2 0x2ff4 00002feb: PUSH1 0x20 00002fed: DUP4 00002fee: ADD 00002fef: DUP7 00002ff0: PUSH2 0x2dbc 00002ff3: JUMP 00002ff4: JUMPDEST 00002ff5: PUSH2 0x3001 00002ff8: PUSH1 0x40 00002ffa: DUP4 00002ffb: ADD 00002ffc: DUP6 00002ffd: PUSH2 0x25e4 00003000: JUMP 00003001: JUMPDEST 00003002: PUSH2 0x300e 00003005: PUSH1 0x60 00003007: DUP4 00003008: ADD 00003009: DUP5 0000300a: PUSH2 0x25e4 0000300d: JUMP 0000300e: JUMPDEST 0000300f: SWAP6 00003010: SWAP5 00003011: POP 00003012: POP 00003013: POP 00003014: POP 00003015: POP 00003016: JUMP 00003017: JUMPDEST 00003018: PUSH1 0x20 0000301a: DUP1 0000301b: DUP3 0000301c: MSTORE 0000301d: DUP2 0000301e: ADD 0000301f: PUSH2 0x1c32 00003022: DUP2 00003023: DUP5 00003024: PUSH2 0x25ed 00003027: JUMP 00003028: JUMPDEST 00003029: PUSH1 0x20 0000302b: DUP1 0000302c: DUP3 0000302d: MSTORE 0000302e: DUP2 0000302f: ADD 00003030: PUSH2 0x1481 00003033: DUP2 00003034: PUSH2 0x268d 00003037: JUMP 00003038: JUMPDEST 00003039: PUSH1 0x20 0000303b: DUP1 0000303c: DUP3 0000303d: MSTORE 0000303e: DUP2 0000303f: ADD 00003040: PUSH2 0x1481 00003043: DUP2 00003044: PUSH2 0x26ec 00003047: JUMP 00003048: JUMPDEST 00003049: PUSH1 0x20 0000304b: DUP1 0000304c: DUP3 0000304d: MSTORE 0000304e: DUP2 0000304f: ADD 00003050: PUSH2 0x1481 00003053: DUP2 00003054: PUSH2 0x2725 00003057: JUMP 00003058: JUMPDEST 00003059: PUSH1 0x20 0000305b: DUP1 0000305c: DUP3 0000305d: MSTORE 0000305e: DUP2 0000305f: ADD 00003060: PUSH2 0x1481 00003063: DUP2 00003064: PUSH2 0x275e 00003067: JUMP 00003068: JUMPDEST 00003069: PUSH1 0x20 0000306b: DUP1 0000306c: DUP3 0000306d: MSTORE 0000306e: DUP2 0000306f: ADD 00003070: PUSH2 0x1481 00003073: DUP2 00003074: PUSH2 0x27bd 00003077: JUMP 00003078: JUMPDEST 00003079: PUSH1 0x20 0000307b: DUP1 0000307c: DUP3 0000307d: MSTORE 0000307e: DUP2 0000307f: ADD 00003080: PUSH2 0x1481 00003083: DUP2 00003084: PUSH2 0x27f6 00003087: JUMP 00003088: JUMPDEST 00003089: PUSH1 0x20 0000308b: DUP1 0000308c: DUP3 0000308d: MSTORE 0000308e: DUP2 0000308f: ADD 00003090: PUSH2 0x1481 00003093: DUP2 00003094: PUSH2 0x2855 00003097: JUMP 00003098: JUMPDEST 00003099: PUSH1 0x20 0000309b: DUP1 0000309c: DUP3 0000309d: MSTORE 0000309e: DUP2 0000309f: ADD 000030a0: PUSH2 0x1481 000030a3: DUP2 000030a4: PUSH2 0x2911 000030a7: JUMP 000030a8: JUMPDEST 000030a9: PUSH1 0x20 000030ab: DUP1 000030ac: DUP3 000030ad: MSTORE 000030ae: DUP2 000030af: ADD 000030b0: PUSH2 0x1481 000030b3: DUP2 000030b4: PUSH2 0x294a 000030b7: JUMP 000030b8: JUMPDEST 000030b9: PUSH1 0x20 000030bb: DUP1 000030bc: DUP3 000030bd: MSTORE 000030be: DUP2 000030bf: ADD 000030c0: PUSH2 0x1481 000030c3: DUP2 000030c4: PUSH2 0x2983 000030c7: JUMP 000030c8: JUMPDEST 000030c9: PUSH1 0x20 000030cb: DUP1 000030cc: DUP3 000030cd: MSTORE 000030ce: DUP2 000030cf: ADD 000030d0: PUSH2 0x1481 000030d3: DUP2 000030d4: PUSH2 0x29bc 000030d7: JUMP 000030d8: JUMPDEST 000030d9: PUSH1 0x20 000030db: DUP1 000030dc: DUP3 000030dd: MSTORE 000030de: DUP2 000030df: ADD 000030e0: PUSH2 0x1481 000030e3: DUP2 000030e4: PUSH2 0x29f5 000030e7: JUMP 000030e8: JUMPDEST 000030e9: PUSH1 0x20 000030eb: DUP1 000030ec: DUP3 000030ed: MSTORE 000030ee: DUP2 000030ef: ADD 000030f0: PUSH2 0x1481 000030f3: DUP2 000030f4: PUSH2 0x2a2e 000030f7: JUMP 000030f8: JUMPDEST 000030f9: PUSH1 0x20 000030fb: DUP1 000030fc: DUP3 000030fd: MSTORE 000030fe: DUP2 000030ff: ADD 00003100: PUSH2 0x1481 00003103: DUP2 00003104: PUSH2 0x2a8d 00003107: JUMP 00003108: JUMPDEST 00003109: PUSH1 0x20 0000310b: DUP1 0000310c: DUP3 0000310d: MSTORE 0000310e: DUP2 0000310f: ADD 00003110: PUSH2 0x1481 00003113: DUP2 00003114: PUSH2 0x2ac6 00003117: JUMP 00003118: JUMPDEST 00003119: PUSH1 0x20 0000311b: DUP1 0000311c: DUP3 0000311d: MSTORE 0000311e: DUP2 0000311f: ADD 00003120: PUSH2 0x1481 00003123: DUP2 00003124: PUSH2 0x2aff 00003127: JUMP 00003128: JUMPDEST 00003129: PUSH1 0x20 0000312b: DUP1 0000312c: DUP3 0000312d: MSTORE 0000312e: DUP2 0000312f: ADD 00003130: PUSH2 0x1481 00003133: DUP2 00003134: PUSH2 0x2b5e 00003137: JUMP 00003138: JUMPDEST 00003139: PUSH1 0x20 0000313b: DUP1 0000313c: DUP3 0000313d: MSTORE 0000313e: DUP2 0000313f: ADD 00003140: PUSH2 0x1481 00003143: DUP2 00003144: PUSH2 0x2bbd 00003147: JUMP 00003148: JUMPDEST 00003149: PUSH1 0x20 0000314b: DUP1 0000314c: DUP3 0000314d: MSTORE 0000314e: DUP2 0000314f: ADD 00003150: PUSH2 0x1481 00003153: DUP2 00003154: PUSH2 0x2c1c 00003157: JUMP 00003158: JUMPDEST 00003159: PUSH1 0x20 0000315b: DUP1 0000315c: DUP3 0000315d: MSTORE 0000315e: DUP2 0000315f: ADD 00003160: PUSH2 0x1481 00003163: DUP2 00003164: PUSH2 0x2c55 00003167: JUMP 00003168: JUMPDEST 00003169: PUSH1 0x20 0000316b: DUP1 0000316c: DUP3 0000316d: MSTORE 0000316e: DUP2 0000316f: ADD 00003170: PUSH2 0x1481 00003173: DUP2 00003174: PUSH2 0x2c8e 00003177: JUMP 00003178: JUMPDEST 00003179: PUSH1 0x20 0000317b: DUP1 0000317c: DUP3 0000317d: MSTORE 0000317e: DUP2 0000317f: ADD 00003180: PUSH2 0x1481 00003183: DUP2 00003184: PUSH2 0x2cc7 00003187: JUMP 00003188: JUMPDEST 00003189: PUSH1 0x20 0000318b: DUP1 0000318c: DUP3 0000318d: MSTORE 0000318e: DUP2 0000318f: ADD 00003190: PUSH2 0x1481 00003193: DUP2 00003194: PUSH2 0x2d00 00003197: JUMP 00003198: JUMPDEST 00003199: PUSH1 0x20 0000319b: DUP1 0000319c: DUP3 0000319d: MSTORE 0000319e: DUP2 0000319f: ADD 000031a0: PUSH2 0x1481 000031a3: DUP2 000031a4: PUSH2 0x2d72 000031a7: JUMP 000031a8: JUMPDEST 000031a9: PUSH1 0x20 000031ab: DUP2 000031ac: ADD 000031ad: PUSH2 0x1481 000031b0: DUP3 000031b1: DUP5 000031b2: PUSH2 0x25e4 000031b5: JUMP 000031b6: JUMPDEST 000031b7: PUSH1 0x40 000031b9: MLOAD 000031ba: DUP2 000031bb: DUP2 000031bc: ADD 000031bd: PUSH8 0xffffffffffffffff 000031c6: DUP2 000031c7: GT 000031c8: DUP3 000031c9: DUP3 000031ca: LT 000031cb: OR 000031cc: ISZERO 000031cd: PUSH2 0x31d5 000031d0: JUMPI 000031d1: PUSH1 0x00 000031d3: DUP1 000031d4: REVERT 000031d5: JUMPDEST 000031d6: PUSH1 0x40 000031d8: MSTORE 000031d9: SWAP2 000031da: SWAP1 000031db: POP 000031dc: JUMP 000031dd: JUMPDEST 000031de: PUSH1 0x00 000031e0: PUSH8 0xffffffffffffffff 000031e9: DUP3 000031ea: GT 000031eb: ISZERO 000031ec: PUSH2 0x31f4 000031ef: JUMPI 000031f0: PUSH1 0x00 000031f2: DUP1 000031f3: REVERT 000031f4: JUMPDEST 000031f5: POP 000031f6: PUSH1 0x20 000031f8: SWAP1 000031f9: DUP2 000031fa: MUL 000031fb: ADD 000031fc: SWAP1 000031fd: JUMP 000031fe: JUMPDEST 000031ff: PUSH1 0x00 00003201: PUSH8 0xffffffffffffffff 0000320a: DUP3 0000320b: GT 0000320c: ISZERO 0000320d: PUSH2 0x3215 00003210: JUMPI 00003211: PUSH1 0x00 00003213: DUP1 00003214: REVERT 00003215: JUMPDEST 00003216: POP 00003217: PUSH1 0x20 00003219: PUSH1 0x1f 0000321b: SWAP2 0000321c: SWAP1 0000321d: SWAP2 0000321e: ADD 0000321f: PUSH1 0x1f 00003221: NOT 00003222: AND 00003223: ADD 00003224: SWAP1 00003225: JUMP 00003226: JUMPDEST 00003227: MLOAD 00003228: SWAP1 00003229: JUMP 0000322a: JUMPDEST 0000322b: SWAP1 0000322c: DUP2 0000322d: MSTORE 0000322e: PUSH1 0x20 00003230: ADD 00003231: SWAP1 00003232: JUMP 00003233: JUMPDEST 00003234: PUSH1 0x00 00003236: PUSH2 0x1481 00003239: DUP3 0000323a: PUSH2 0x3243 0000323d: JUMP 0000323e: JUMPDEST 0000323f: ISZERO 00003240: ISZERO 00003241: SWAP1 00003242: JUMP 00003243: JUMPDEST 00003244: PUSH1 0x01 00003246: PUSH1 0x01 00003248: PUSH1 0xa0 0000324a: SHL 0000324b: SUB 0000324c: AND 0000324d: SWAP1 0000324e: JUMP 0000324f: JUMPDEST 00003250: PUSH1 0xff 00003252: AND 00003253: SWAP1 00003254: JUMP 00003255: JUMPDEST 00003256: PUSH1 0x00 00003258: PUSH2 0x1481 0000325b: DUP3 0000325c: PUSH1 0x00 0000325e: PUSH2 0x1481 00003261: DUP3 00003262: PUSH2 0x3233 00003265: JUMP 00003266: JUMPDEST 00003267: DUP3 00003268: DUP2 00003269: DUP4 0000326a: CALLDATACOPY 0000326b: POP 0000326c: PUSH1 0x00 0000326e: SWAP2 0000326f: ADD 00003270: MSTORE 00003271: JUMP 00003272: JUMPDEST 00003273: PUSH1 0x00 00003275: JUMPDEST 00003276: DUP4 00003277: DUP2 00003278: LT 00003279: ISZERO 0000327a: PUSH2 0x328d 0000327d: JUMPI 0000327e: DUP2 0000327f: DUP2 00003280: ADD 00003281: MLOAD 00003282: DUP4 00003283: DUP3 00003284: ADD 00003285: MSTORE 00003286: PUSH1 0x20 00003288: ADD 00003289: PUSH2 0x3275 0000328c: JUMP 0000328d: JUMPDEST 0000328e: DUP4 0000328f: DUP2 00003290: GT 00003291: ISZERO 00003292: PUSH2 0x329c 00003295: JUMPI 00003296: PUSH1 0x00 00003298: DUP5 00003299: DUP5 0000329a: ADD 0000329b: MSTORE 0000329c: JUMPDEST 0000329d: POP 0000329e: POP 0000329f: POP 000032a0: POP 000032a1: JUMP 000032a2: JUMPDEST 000032a3: PUSH1 0x00 000032a5: PUSH2 0x1481 000032a8: DUP3 000032a9: PUSH1 0x00 000032ab: PUSH2 0x1481 000032ae: DUP3 000032af: PUSH2 0x32bd 000032b2: JUMP 000032b3: JUMPDEST 000032b4: PUSH1 0x1f 000032b6: ADD 000032b7: PUSH1 0x1f 000032b9: NOT 000032ba: AND 000032bb: SWAP1 000032bc: JUMP 000032bd: JUMPDEST 000032be: PUSH1 0x60 000032c0: SHL 000032c1: SWAP1 000032c2: JUMP 000032c3: JUMPDEST 000032c4: PUSH2 0x32cc 000032c7: DUP2 000032c8: PUSH2 0x3233 000032cb: JUMP 000032cc: JUMPDEST 000032cd: DUP2 000032ce: EQ 000032cf: PUSH2 0x0b42 000032d2: JUMPI 000032d3: PUSH1 0x00 000032d5: DUP1 000032d6: REVERT 000032d7: JUMPDEST 000032d8: PUSH2 0x32cc 000032db: DUP2 000032dc: PUSH2 0x156b 000032df: JUMP 000032e0: INVALID 000032e1: LOG3 000032e2: PUSH6 0x627a7a723158 000032e9: KECCAK256 000032ea: UNKNOWN(0xC7) 000032eb: UNKNOWN(0xE7) 000032ec: RETURNDATASIZE 000032ed: XOR 000032ee: PUSH14 0x5a2dfd47dda30b5cea910993863d 000032fd: UNKNOWN(0xE3) 000032fe: UNKNOWN(0xCA) 000032ff: PUSH20 0x2494b9ca51ac08b9678e6c6578706572696d656e 00003314: PUSH21
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0x98e03fce9eb81f858225450b5a9c5a8b7ad3c716e6ed64d0b8a1892c19aabc0f
call_targets:
0x8913361f10a407b71cc8d0658aca7a65e355ab83
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x98e03fce9eb81f858225450b5a9c5a8b7ad3c716e6ed64d0b8a1892c19aabc0f",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x8913361f10a407b71cc8d0658aca7a65e355ab83"
],
"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": "0xdc5724e4",
"selector": "0xdc5724e4",
"calldata_variants": [
"0xdc5724e4",
"0xdc5724e40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfb80c747",
"selector": "0xfb80c747",
"calldata_variants": [
"0xfb80c747",
"0xfb80c7470000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfc0a7f03",
"selector": "0xfc0a7f03",
"calldata_variants": [
"0xfc0a7f03",
"0xfc0a7f030000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd50fd1f4",
"selector": "0xd50fd1f4",
"calldata_variants": [
"0xd50fd1f4",
"0xd50fd1f40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd6cd9473",
"selector": "0xd6cd9473",
"calldata_variants": [
"0xd6cd9473",
"0xd6cd94730000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd0e30db0",
"selector": "0xd0e30db0",
"calldata_variants": [
"0xd0e30db0",
"0xd0e30db00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd121b696",
"selector": "0xd121b696",
"calldata_variants": [
"0xd121b696",
"0xd121b6960000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd29ab55b",
"selector": "0xd29ab55b",
"calldata_variants": [
"0xd29ab55b",
"0xd29ab55b0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 2309,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 2684,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3225,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 10,
"guards_detected": [],
"untrusted_call_count": 10
}
|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0x98e03fce9eb81f858225450b5a9c5a8b7ad3c716e6ed64d0b8a1892c19aabc0f
call_targets:
0x8913361f10a407b71cc8d0658aca7a65e355ab83
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x98e03fce9eb81f858225450b5a9c5a8b7ad3c716e6ed64d0b8a1892c19aabc0f",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x8913361f10a407b71cc8d0658aca7a65e355ab83"
],
"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": "0xdc5724e4",
"selector": "0xdc5724e4",
"calldata_variants": [
"0xdc5724e4",
"0xdc5724e40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfb80c747",
"selector": "0xfb80c747",
"calldata_variants": [
"0xfb80c747",
"0xfb80c7470000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfc0a7f03",
"selector": "0xfc0a7f03",
"calldata_variants": [
"0xfc0a7f03",
"0xfc0a7f030000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd50fd1f4",
"selector": "0xd50fd1f4",
"calldata_variants": [
"0xd50fd1f4",
"0xd50fd1f40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd6cd9473",
"selector": "0xd6cd9473",
"calldata_variants": [
"0xd6cd9473",
"0xd6cd94730000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd0e30db0",
"selector": "0xd0e30db0",
"calldata_variants": [
"0xd0e30db0",
"0xd0e30db00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd121b696",
"selector": "0xd121b696",
"calldata_variants": [
"0xd121b696",
"0xd121b6960000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd29ab55b",
"selector": "0xd29ab55b",
"calldata_variants": [
"0xd29ab55b",
"0xd29ab55b0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 2309,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 2684,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3225,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 10,
"guards_detected": []
}
|
| info | other | cast | Heavy EXTCODE*/BALANCE usage | 55 | no | — |
viewevidence_json{
"notes": "frequent external code or balance checks; may indicate introspection or validation logic",
"ext_balance_count": 14
}
|
| info | other | cast | Heavy CALL-family usage | 55 | no | — |
viewevidence_json{
"notes": "large number of CALL/CALLCODE/STATICCALL opcodes; review external call patterns",
"call_family_count": 15
}
|