bd446f50-167b-4602-9a1e-d7999d3ffe37
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 |
|---|---|---|---|---|
| 30385 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 74494 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 74495 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 74496 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 74497 | capability.graph | complete | 1 / 3 | 1 week ago |
| 74498 | detector.run | complete | 1 / 3 | 1 week ago |
| 74499 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:793112] OpenAI Codex v0.77.0 (research preview)
[codex:793112] --------
[codex:793112] workdir: /tmp/codex-multi-6oweco0i
[codex:793112] model: gpt-5.2-codex
[codex:793112] provider: openai
[codex:793112] approval: never
[codex:793112] sandbox: read-only
[codex:793112] reasoning effort: xhigh
[codex:793112] reasoning summaries: auto
[codex:793112] session id: 019b6809-4e10-75a3-b1d9-06e90f5c77cb
[codex:793112] --------
[codex:793112] user
[codex:793112] You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
[codex:793112] Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
[codex:793112] accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
[codex:793112]
[codex:793112] Scope rules:
[codex:793112] - You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party `contracts/**/*.sol` files.
[codex:793112] - Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
[codex:793112]
[codex:793112] Output MUST be valid JSON matching the provided schema.
[codex:793112] - If you find nothing meaningful: set no_findings=true and findings=[].
[codex:793112] - Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
[codex:793112]
[codex:793112] Output constraints (IMPORTANT):
[codex:793112] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:793112] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:793112] mcp startup: no servers
[codex:793112]
[codex:793112] thinking
[codex:793112] **Preparing to read instructions and audit bundle**
[codex:793112] exec
[codex:793112] /bin/bash -lc ls in /tmp/codex-multi-6oweco0i succeeded in 5ms:
[codex:793112] AUDIT_BUNDLE.txt
[codex:793112] codex-output-schema.json
[codex:793112] contracts
[codex:793112] exec
[codex:793112] /bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-multi-6oweco0i succeeded in 5ms:
[codex:793112] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:793112]
[codex:793112] ================================================================================
[codex:793112] FILE: contracts/Contract.sol
[codex:793112] ================================================================================
[codex:793112] // SPDX-License-Identifier: MIT
[codex:793112] pragma solidity 0.8.17;
[codex:793112]
[codex:793112] /**
[codex:793112] * @dev Provides information about the current execution context, including the
[codex:793112] * sender of the transaction and its data. While these are generally available
[codex:793112] * via msg.sender and msg.data, they should not be accessed in such a direct
[codex:793112] * manner, since when dealing with meta-transactions the account sending and
[codex:793112] * paying for execution may not be the actual sender (as far as an application
[codex:793112] * is concerned).
[codex:793112] *
[codex:793112] * This contract is only required for intermediate, library-like contracts.
[codex:793112] */
[codex:793112] abstract contract Context {
[codex:793112] function _msgSender() internal view virtual returns (address) {
[codex:793112]
[codex:793112] thinking
[codex:793112] **Reviewing token transfer checks and reentrancy concerns**
[codex:793112]
[codex:793112] I'm examining Contract.sol focusing on its Merkle airdrop logic, looking for misuse rather than bugs in third-party code. The main issue seems to be unchecked ERC20 transfer return values that may cause silent failures, a medium-severity concern. I’m also verifying state updates before external calls to confirm reentrancy safety and considering access control nuances, while planning to correlate token.transfer occurrences with line numbers for detailed evidence.
[codex:793112] exec
[codex:793112] /bin/bash -lc 'nl -ba contracts/Contract.sol' in /tmp/codex-multi-6oweco0i succeeded in 6ms:
[codex:793112] 1 // SPDX-License-Identifier: MIT
[codex:793112] 2 pragma solidity 0.8.17;
[codex:793112] 3
[codex:793112] 4 /**
[codex:793112] 5 * @dev Provides information about the current execution context, including the
[codex:793112] 6 * sender of the transaction and its data. While these are generally available
[codex:793112] 7 * via msg.sender and msg.data, they should not be accessed in such a direct
[codex:793112] 8 * manner, since when dealing with meta-transactions the account sending and
[codex:793112] 9 * paying for execution may not be the actual sender (as far as an application
[codex:793112] 10 * is concerned).
[codex:793112] 11 *
[codex:793112] 12 * This contract is only required for intermediate, library-like contracts.
[codex:793112] 13 */
[codex:793112] 14 abstract contract Context {
[codex:793112] 15 function _msgSender() internal view virtual returns (address) {
[codex:793112] 16 return msg.sender;
[codex:793112] 17 }
[codex:793112] 18
[codex:793112] 19 function _msgData() internal view virtual returns (bytes calldata) {
[codex:793112] 20 return msg.data;
[codex:793112]
[codex:793112] thinking
[codex:793112] **Summarizing unchecked ERC20 transfer issue**
[codex:793112]
[codex:793112] I’m building a JSON report outlining a medium-severity issue where unchecked ERC20 transfer return values can cause claims to be marked as paid even if the transfer fails. This can lead to silent claim failures and denial of fund retrieval, especially with non-standard tokens. I’m including detailed exploit scenarios, recommendations to use SafeERC20 methods or return checks, code evidence lines, and categorizing the problem as “other.” I’ll ensure strict JSON formatting with required fields and no extra text.
[codex:793112] codex
[codex:793112] {"no_findings":false,"summary":"Found 1 issue: unchecked ERC20 transfer return values in Merkle claim/withdraw can silently fail and still mark claims.","findings":[{"severity":"medium","category":"other","title":"Unchecked ERC20 transfer return values can permanently mark claims as paid","exploit_scenario":"If the ERC20 token returns false on transfer (e.g., non-standard tokens or insufficient balance), `claim` still marks `_claimed[leaf]=true` and emits `Claim` without reverting. The claimant then cannot re-claim, effectively losing the payout. Similarly, `withdraw` can silently fail and leave funds stranded while the owner believes the withdrawal succeeded.","recommendation":"Use `SafeERC20.safeTransfer`/`safeTransferFrom` or explicitly `require(token.transfer(...), \"TRANSFER_FAILED\")` for both claim and withdraw paths.","evidence":"`token.transfer(account, amount);` and `token.transfer(msg.sender, token.balanceOf(address(this)));` are unchecked.","locations":["contracts/Contract.sol:451","contracts/Contract.sol:457"]}]}
[codex:793112] tokens used
[codex:793112] 21,008
[codex:793112] {"no_findings":false,"summary":"Found 1 issue: unchecked ERC20 transfer return values in Merkle claim/withdraw can silently fail and still mark claims.","findings":[{"severity":"medium","category":"other","title":"Unchecked ERC20 transfer return values can permanently mark claims as paid","exploit_scenario":"If the ERC20 token returns false on transfer (e.g., non-standard tokens or insufficient balance), `claim` still marks `_claimed[leaf]=true` and emits `Claim` without reverting. The claimant then cannot re-claim, effectively losing the payout. Similarly, `withdraw` can silently fail and leave funds stranded while the owner believes the withdrawal succeeded.","recommendation":"Use `SafeERC20.safeTransfer`/`safeTransferFrom` or explicitly `require(token.transfer(...), \"TRANSFER_FAILED\")` for both claim and withdraw paths.","evidence":"`token.transfer(account, amount);` and `token.transfer(msg.sender, token.balanceOf(address(this)));` are unchecked.","locations":["contracts/Contract.sol:451","contracts/Contract.sol:457"]}]}
{
"codex": {
"ran_at": "2025-12-29T02:57:31.244553+00:00",
"returncode": 0
},
"summary": "Found 1 issue: unchecked ERC20 transfer return values in Merkle claim/withdraw can silently fail and still mark claims.",
"raw_final": {
"summary": "Found 1 issue: unchecked ERC20 transfer return values in Merkle claim/withdraw can silently fail and still mark claims.",
"findings": [
{
"title": "Unchecked ERC20 transfer return values can permanently mark claims as paid",
"category": "other",
"evidence": "`token.transfer(account, amount);` and `token.transfer(msg.sender, token.balanceOf(address(this)));` are unchecked.",
"severity": "medium",
"locations": [
"contracts/Contract.sol:451",
"contracts/Contract.sol:457"
],
"recommendation": "Use `SafeERC20.safeTransfer`/`safeTransferFrom` or explicitly `require(token.transfer(...), \"TRANSFER_FAILED\")` for both claim and withdraw paths.",
"exploit_scenario": "If the ERC20 token returns false on transfer (e.g., non-standard tokens or insufficient balance), `claim` still marks `_claimed[leaf]=true` and emits `Claim` without reverting. The claimant then cannot re-claim, effectively losing the payout. Similarly, `withdraw` can silently fail and leave funds stranded while the owner believes the withdrawal succeeded."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: CALLVALUE 00000006: DUP1 00000007: ISZERO 00000008: PUSH2 0x0010 0000000b: JUMPI 0000000c: PUSH1 0x00 0000000e: DUP1 0000000f: REVERT 00000010: JUMPDEST 00000011: POP 00000012: PUSH1 0x04 00000014: CALLDATASIZE 00000015: LT 00000016: PUSH2 0x0093 00000019: JUMPI 0000001a: PUSH1 0x00 0000001c: CALLDATALOAD 0000001d: PUSH1 0xe0 0000001f: SHR 00000020: DUP1 00000021: PUSH4 0x8da5cb5b 00000026: GT 00000027: PUSH2 0x0066 0000002a: JUMPI 0000002b: DUP1 0000002c: PUSH4 0x8da5cb5b 00000031: EQ 00000032: PUSH2 0x00f8 00000035: JUMPI 00000036: DUP1 00000037: PUSH4 0xbfa0b133 0000003c: EQ 0000003d: PUSH2 0x0116 00000040: JUMPI 00000041: DUP1 00000042: PUSH4 0xebf0c717 00000047: EQ 00000048: PUSH2 0x0134 0000004b: JUMPI 0000004c: DUP1 0000004d: PUSH4 0xf2fde38b 00000052: EQ 00000053: PUSH2 0x0152 00000056: JUMPI 00000057: DUP1 00000058: PUSH4 0xfc0c546a 0000005d: EQ 0000005e: PUSH2 0x016e 00000061: JUMPI 00000062: PUSH2 0x0093 00000065: JUMP 00000066: JUMPDEST 00000067: DUP1 00000068: PUSH4 0x3ccfd60b 0000006d: EQ 0000006e: PUSH2 0x0098 00000071: JUMPI 00000072: DUP1 00000073: PUSH4 0x3d13f874 00000078: EQ 00000079: PUSH2 0x00a2 0000007c: JUMPI 0000007d: DUP1 0000007e: PUSH4 0x4dd6c8de 00000083: EQ 00000084: PUSH2 0x00be 00000087: JUMPI 00000088: DUP1 00000089: PUSH4 0x715018a6 0000008e: EQ 0000008f: PUSH2 0x00ee 00000092: JUMPI 00000093: JUMPDEST 00000094: PUSH1 0x00 00000096: DUP1 00000097: REVERT 00000098: JUMPDEST 00000099: PUSH2 0x00a0 0000009c: PUSH2 0x018c 0000009f: JUMP 000000a0: JUMPDEST 000000a1: STOP 000000a2: JUMPDEST 000000a3: PUSH2 0x00bc 000000a6: PUSH1 0x04 000000a8: DUP1 000000a9: CALLDATASIZE 000000aa: SUB 000000ab: DUP2 000000ac: ADD 000000ad: SWAP1 000000ae: PUSH2 0x00b7 000000b1: SWAP2 000000b2: SWAP1 000000b3: PUSH2 0x0a7b 000000b6: JUMP 000000b7: JUMPDEST 000000b8: PUSH2 0x02ce 000000bb: JUMP 000000bc: JUMPDEST 000000bd: STOP 000000be: JUMPDEST 000000bf: PUSH2 0x00d8 000000c2: PUSH1 0x04 000000c4: DUP1 000000c5: CALLDATASIZE 000000c6: SUB 000000c7: DUP2 000000c8: ADD 000000c9: SWAP1 000000ca: PUSH2 0x00d3 000000cd: SWAP2 000000ce: SWAP1 000000cf: PUSH2 0x0aef 000000d2: JUMP 000000d3: JUMPDEST 000000d4: PUSH2 0x05c5 000000d7: JUMP 000000d8: JUMPDEST 000000d9: PUSH1 0x40 000000db: MLOAD 000000dc: PUSH2 0x00e5 000000df: SWAP2 000000e0: SWAP1 000000e1: PUSH2 0x0b4a 000000e4: JUMP 000000e5: JUMPDEST 000000e6: PUSH1 0x40 000000e8: MLOAD 000000e9: DUP1 000000ea: SWAP2 000000eb: SUB 000000ec: SWAP1 000000ed: RETURN 000000ee: JUMPDEST 000000ef: PUSH2 0x00f6 000000f2: PUSH2 0x05fe 000000f5: JUMP 000000f6: JUMPDEST 000000f7: STOP 000000f8: JUMPDEST 000000f9: PUSH2 0x0100 000000fc: PUSH2 0x0612 000000ff: JUMP 00000100: JUMPDEST 00000101: PUSH1 0x40 00000103: MLOAD 00000104: PUSH2 0x010d 00000107: SWAP2 00000108: SWAP1 00000109: PUSH2 0x0b74 0000010c: JUMP 0000010d: JUMPDEST 0000010e: PUSH1 0x40 00000110: MLOAD 00000111: DUP1 00000112: SWAP2 00000113: SUB 00000114: SWAP1 00000115: RETURN 00000116: JUMPDEST 00000117: PUSH2 0x011e 0000011a: PUSH2 0x063b 0000011d: JUMP 0000011e: JUMPDEST 0000011f: PUSH1 0x40 00000121: MLOAD 00000122: PUSH2 0x012b 00000125: SWAP2 00000126: SWAP1 00000127: PUSH2 0x0b9e 0000012a: JUMP 0000012b: JUMPDEST 0000012c: PUSH1 0x40 0000012e: MLOAD 0000012f: DUP1 00000130: SWAP2 00000131: SUB 00000132: SWAP1 00000133: RETURN 00000134: JUMPDEST 00000135: PUSH2 0x013c 00000138: PUSH2 0x065f 0000013b: JUMP 0000013c: JUMPDEST 0000013d: PUSH1 0x40 0000013f: MLOAD 00000140: PUSH2 0x0149 00000143: SWAP2 00000144: SWAP1 00000145: PUSH2 0x0bd2 00000148: JUMP 00000149: JUMPDEST 0000014a: PUSH1 0x40 0000014c: MLOAD 0000014d: DUP1 0000014e: SWAP2 0000014f: SUB 00000150: SWAP1 00000151: RETURN 00000152: JUMPDEST 00000153: PUSH2 0x016c 00000156: PUSH1 0x04 00000158: DUP1 00000159: CALLDATASIZE 0000015a: SUB 0000015b: DUP2 0000015c: ADD 0000015d: SWAP1 0000015e: PUSH2 0x0167 00000161: SWAP2 00000162: SWAP1 00000163: PUSH2 0x0bed 00000166: JUMP 00000167: JUMPDEST 00000168: PUSH2 0x0683 0000016b: JUMP 0000016c: JUMPDEST 0000016d: STOP 0000016e: JUMPDEST 0000016f: PUSH2 0x0176 00000172: PUSH2 0x0706 00000175: JUMP 00000176: JUMPDEST 00000177: PUSH1 0x40 00000179: MLOAD 0000017a: PUSH2 0x0183 0000017d: SWAP2 0000017e: SWAP1 0000017f: PUSH2 0x0c79 00000182: JUMP 00000183: JUMPDEST 00000184: PUSH1 0x40 00000186: MLOAD 00000187: DUP1 00000188: SWAP2 00000189: SUB 0000018a: SWAP1 0000018b: RETURN 0000018c: JUMPDEST 0000018d: PUSH2 0x0194 00000190: PUSH2 0x072a 00000193: JUMP 00000194: JUMPDEST 00000195: PUSH32 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 000001b6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000001cb: AND 000001cc: PUSH4 0xa9059cbb 000001d1: CALLER 000001d2: PUSH32 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 000001f3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000208: AND 00000209: PUSH4 0x70a08231 0000020e: ADDRESS 0000020f: PUSH1 0x40 00000211: MLOAD 00000212: DUP3 00000213: PUSH4 0xffffffff 00000218: AND 00000219: PUSH1 0xe0 0000021b: SHL 0000021c: DUP2 0000021d: MSTORE 0000021e: PUSH1 0x04 00000220: ADD 00000221: PUSH2 0x022a 00000224: SWAP2 00000225: SWAP1 00000226: PUSH2 0x0b74 00000229: JUMP 0000022a: JUMPDEST 0000022b: PUSH1 0x20 0000022d: PUSH1 0x40 0000022f: MLOAD 00000230: DUP1 00000231: DUP4 00000232: SUB 00000233: DUP2 00000234: DUP7 00000235: GAS 00000236: STATICCALL 00000237: ISZERO 00000238: DUP1 00000239: ISZERO 0000023a: PUSH2 0x0247 0000023d: JUMPI 0000023e: RETURNDATASIZE 0000023f: PUSH1 0x00 00000241: DUP1 00000242: RETURNDATACOPY 00000243: RETURNDATASIZE 00000244: PUSH1 0x00 00000246: REVERT 00000247: JUMPDEST 00000248: POP 00000249: POP 0000024a: POP 0000024b: POP 0000024c: PUSH1 0x40 0000024e: MLOAD 0000024f: RETURNDATASIZE 00000250: PUSH1 0x1f 00000252: NOT 00000253: PUSH1 0x1f 00000255: DUP3 00000256: ADD 00000257: AND 00000258: DUP3 00000259: ADD 0000025a: DUP1 0000025b: PUSH1 0x40 0000025d: MSTORE 0000025e: POP 0000025f: DUP2 00000260: ADD 00000261: SWAP1 00000262: PUSH2 0x026b 00000265: SWAP2 00000266: SWAP1 00000267: PUSH2 0x0ca9 0000026a: JUMP 0000026b: JUMPDEST 0000026c: PUSH1 0x40 0000026e: MLOAD 0000026f: DUP4 00000270: PUSH4 0xffffffff 00000275: AND 00000276: PUSH1 0xe0 00000278: SHL 00000279: DUP2 0000027a: MSTORE 0000027b: PUSH1 0x04 0000027d: ADD 0000027e: PUSH2 0x0288 00000281: SWAP3 00000282: SWAP2 00000283: SWAP1 00000284: PUSH2 0x0cd6 00000287: JUMP 00000288: JUMPDEST 00000289: PUSH1 0x20 0000028b: PUSH1 0x40 0000028d: MLOAD 0000028e: DUP1 0000028f: DUP4 00000290: SUB 00000291: DUP2 00000292: PUSH1 0x00 00000294: DUP8 00000295: GAS 00000296: CALL 00000297: ISZERO 00000298: DUP1 00000299: ISZERO 0000029a: PUSH2 0x02a7 0000029d: JUMPI 0000029e: RETURNDATASIZE 0000029f: PUSH1 0x00 000002a1: DUP1 000002a2: RETURNDATACOPY 000002a3: RETURNDATASIZE 000002a4: PUSH1 0x00 000002a6: REVERT 000002a7: JUMPDEST 000002a8: POP 000002a9: POP 000002aa: POP 000002ab: POP 000002ac: PUSH1 0x40 000002ae: MLOAD 000002af: RETURNDATASIZE 000002b0: PUSH1 0x1f 000002b2: NOT 000002b3: PUSH1 0x1f 000002b5: DUP3 000002b6: ADD 000002b7: AND 000002b8: DUP3 000002b9: ADD 000002ba: DUP1 000002bb: PUSH1 0x40 000002bd: MSTORE 000002be: POP 000002bf: DUP2 000002c0: ADD 000002c1: SWAP1 000002c2: PUSH2 0x02cb 000002c5: SWAP2 000002c6: SWAP1 000002c7: PUSH2 0x0d2b 000002ca: JUMP 000002cb: JUMPDEST 000002cc: POP 000002cd: JUMP 000002ce: JUMPDEST 000002cf: PUSH1 0x00 000002d1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000002e6: AND 000002e7: DUP5 000002e8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000002fd: AND 000002fe: SUB 000002ff: PUSH2 0x033d 00000302: JUMPI 00000303: PUSH1 0x40 00000305: MLOAD 00000306: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000327: DUP2 00000328: MSTORE 00000329: PUSH1 0x04 0000032b: ADD 0000032c: PUSH2 0x0334 0000032f: SWAP1 00000330: PUSH2 0x0db5 00000333: JUMP 00000334: JUMPDEST 00000335: PUSH1 0x40 00000337: MLOAD 00000338: DUP1 00000339: SWAP2 0000033a: SUB 0000033b: SWAP1 0000033c: REVERT 0000033d: JUMPDEST 0000033e: PUSH1 0x00 00000340: DUP4 00000341: SUB 00000342: PUSH2 0x0380 00000345: JUMPI 00000346: PUSH1 0x40 00000348: MLOAD 00000349: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 0000036a: DUP2 0000036b: MSTORE 0000036c: PUSH1 0x04 0000036e: ADD 0000036f: PUSH2 0x0377 00000372: SWAP1 00000373: PUSH2 0x0e21 00000376: JUMP 00000377: JUMPDEST 00000378: PUSH1 0x40 0000037a: MLOAD 0000037b: DUP1 0000037c: SWAP2 0000037d: SUB 0000037e: SWAP1 0000037f: REVERT 00000380: JUMPDEST 00000381: PUSH1 0x00 00000383: PUSH2 0x038c 00000386: DUP6 00000387: DUP6 00000388: PUSH2 0x07a8 0000038b: JUMP 0000038c: JUMPDEST 0000038d: SWAP1 0000038e: POP 0000038f: PUSH1 0x01 00000391: PUSH1 0x00 00000393: DUP3 00000394: DUP2 00000395: MSTORE 00000396: PUSH1 0x20 00000398: ADD 00000399: SWAP1 0000039a: DUP2 0000039b: MSTORE 0000039c: PUSH1 0x20 0000039e: ADD 0000039f: PUSH1 0x00 000003a1: KECCAK256 000003a2: PUSH1 0x00 000003a4: SWAP1 000003a5: SLOAD 000003a6: SWAP1 000003a7: PUSH2 0x0100 000003aa: EXP 000003ab: SWAP1 000003ac: DIV 000003ad: PUSH1 0xff 000003af: AND 000003b0: ISZERO 000003b1: PUSH2 0x03ef 000003b4: JUMPI 000003b5: PUSH1 0x40 000003b7: MLOAD 000003b8: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000003d9: DUP2 000003da: MSTORE 000003db: PUSH1 0x04 000003dd: ADD 000003de: PUSH2 0x03e6 000003e1: SWAP1 000003e2: PUSH2 0x0e8d 000003e5: JUMP 000003e6: JUMPDEST 000003e7: PUSH1 0x40 000003e9: MLOAD 000003ea: DUP1 000003eb: SWAP2 000003ec: SUB 000003ed: SWAP1 000003ee: REVERT 000003ef: JUMPDEST 000003f0: PUSH2 0x0465 000003f3: PUSH32 0x72ce2908b775898d73379c033c97c33cf998153bd3e7b7593d7148a571ee1f2c 00000414: DUP3 00000415: DUP6 00000416: DUP6 00000417: DUP1 00000418: DUP1 00000419: PUSH1 0x20 0000041b: MUL 0000041c: PUSH1 0x20 0000041e: ADD 0000041f: PUSH1 0x40 00000421: MLOAD 00000422: SWAP1 00000423: DUP2 00000424: ADD 00000425: PUSH1 0x40 00000427: MSTORE 00000428: DUP1 00000429: SWAP4 0000042a: SWAP3 0000042b: SWAP2 0000042c: SWAP1 0000042d: DUP2 0000042e: DUP2 0000042f: MSTORE 00000430: PUSH1 0x20 00000432: ADD 00000433: DUP4 00000434: DUP4 00000435: PUSH1 0x20 00000437: MUL 00000438: DUP1 00000439: DUP3 0000043a: DUP5 0000043b: CALLDATACOPY 0000043c: PUSH1 0x00 0000043e: DUP2 0000043f: DUP5 00000440: ADD 00000441: MSTORE 00000442: PUSH1 0x1f 00000444: NOT 00000445: PUSH1 0x1f 00000447: DUP3 00000448: ADD 00000449: AND 0000044a: SWAP1 0000044b: POP 0000044c: DUP1 0000044d: DUP4 0000044e: ADD 0000044f: SWAP3 00000450: POP 00000451: POP 00000452: POP 00000453: POP 00000454: POP 00000455: POP 00000456: POP 00000457: PUSH2 0x07fd 0000045a: SWAP1 0000045b: SWAP3 0000045c: SWAP2 0000045d: SWAP1 0000045e: PUSH4 0xffffffff 00000463: AND 00000464: JUMP 00000465: JUMPDEST 00000466: PUSH2 0x04a4 00000469: JUMPI 0000046a: PUSH1 0x40 0000046c: MLOAD 0000046d: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 0000048e: DUP2 0000048f: MSTORE 00000490: PUSH1 0x04 00000492: ADD 00000493: PUSH2 0x049b 00000496: SWAP1 00000497: PUSH2 0x0ef9 0000049a: JUMP 0000049b: JUMPDEST 0000049c: PUSH1 0x40 0000049e: MLOAD 0000049f: DUP1 000004a0: SWAP2 000004a1: SUB 000004a2: SWAP1 000004a3: REVERT 000004a4: JUMPDEST 000004a5: PUSH1 0x01 000004a7: DUP1 000004a8: PUSH1 0x00 000004aa: DUP4 000004ab: DUP2 000004ac: MSTORE 000004ad: PUSH1 0x20 000004af: ADD 000004b0: SWAP1 000004b1: DUP2 000004b2: MSTORE 000004b3: PUSH1 0x20 000004b5: ADD 000004b6: PUSH1 0x00 000004b8: KECCAK256 000004b9: PUSH1 0x00 000004bb: PUSH2 0x0100 000004be: EXP 000004bf: DUP2 000004c0: SLOAD 000004c1: DUP2 000004c2: PUSH1 0xff 000004c4: MUL 000004c5: NOT 000004c6: AND 000004c7: SWAP1 000004c8: DUP4 000004c9: ISZERO 000004ca: ISZERO 000004cb: MUL 000004cc: OR 000004cd: SWAP1 000004ce: SSTORE 000004cf: POP 000004d0: PUSH32 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 000004f1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000506: AND 00000507: PUSH4 0xa9059cbb 0000050c: DUP7 0000050d: DUP7 0000050e: PUSH1 0x40 00000510: MLOAD 00000511: DUP4 00000512: PUSH4 0xffffffff 00000517: AND 00000518: PUSH1 0xe0 0000051a: SHL 0000051b: DUP2 0000051c: MSTORE 0000051d: PUSH1 0x04 0000051f: ADD 00000520: PUSH2 0x052a 00000523: SWAP3 00000524: SWAP2 00000525: SWAP1 00000526: PUSH2 0x0cd6 00000529: JUMP 0000052a: JUMPDEST 0000052b: PUSH1 0x20 0000052d: PUSH1 0x40 0000052f: MLOAD 00000530: DUP1 00000531: DUP4 00000532: SUB 00000533: DUP2 00000534: PUSH1 0x00 00000536: DUP8 00000537: GAS 00000538: CALL 00000539: ISZERO 0000053a: DUP1 0000053b: ISZERO 0000053c: PUSH2 0x0549 0000053f: JUMPI 00000540: RETURNDATASIZE 00000541: PUSH1 0x00 00000543: DUP1 00000544: RETURNDATACOPY 00000545: RETURNDATASIZE 00000546: PUSH1 0x00 00000548: REVERT 00000549: JUMPDEST 0000054a: POP 0000054b: POP 0000054c: POP 0000054d: POP 0000054e: PUSH1 0x40 00000550: MLOAD 00000551: RETURNDATASIZE 00000552: PUSH1 0x1f 00000554: NOT 00000555: PUSH1 0x1f 00000557: DUP3 00000558: ADD 00000559: AND 0000055a: DUP3 0000055b: ADD 0000055c: DUP1 0000055d: PUSH1 0x40 0000055f: MSTORE 00000560: POP 00000561: DUP2 00000562: ADD 00000563: SWAP1 00000564: PUSH2 0x056d 00000567: SWAP2 00000568: SWAP1 00000569: PUSH2 0x0d2b 0000056c: JUMP 0000056d: JUMPDEST 0000056e: POP 0000056f: DUP5 00000570: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000585: AND 00000586: PUSH32 0x33e1e4350f7b57099d5489c172fc55e9e32d4d3906a6e36710fae5ed9f5eef0f 000005a7: DUP3 000005a8: DUP7 000005a9: PUSH1 0x40 000005ab: MLOAD 000005ac: PUSH2 0x05b6 000005af: SWAP3 000005b0: SWAP2 000005b1: SWAP1 000005b2: PUSH2 0x0f19 000005b5: JUMP 000005b6: JUMPDEST 000005b7: PUSH1 0x40 000005b9: MLOAD 000005ba: DUP1 000005bb: SWAP2 000005bc: SUB 000005bd: SWAP1 000005be: LOG2 000005bf: POP 000005c0: POP 000005c1: POP 000005c2: POP 000005c3: POP 000005c4: JUMP 000005c5: JUMPDEST 000005c6: PUSH1 0x00 000005c8: DUP1 000005c9: PUSH2 0x05d2 000005cc: DUP5 000005cd: DUP5 000005ce: PUSH2 0x07a8 000005d1: JUMP 000005d2: JUMPDEST 000005d3: SWAP1 000005d4: POP 000005d5: PUSH1 0x01 000005d7: PUSH1 0x00 000005d9: DUP3 000005da: DUP2 000005db: MSTORE 000005dc: PUSH1 0x20 000005de: ADD 000005df: SWAP1 000005e0: DUP2 000005e1: MSTORE 000005e2: PUSH1 0x20 000005e4: ADD 000005e5: PUSH1 0x00 000005e7: KECCAK256 000005e8: PUSH1 0x00 000005ea: SWAP1 000005eb: SLOAD 000005ec: SWAP1 000005ed: PUSH2 0x0100 000005f0: EXP 000005f1: SWAP1 000005f2: DIV 000005f3: PUSH1 0xff 000005f5: AND 000005f6: SWAP2 000005f7: POP 000005f8: POP 000005f9: SWAP3 000005fa: SWAP2 000005fb: POP 000005fc: POP 000005fd: JUMP 000005fe: JUMPDEST 000005ff: PUSH2 0x0606 00000602: PUSH2 0x072a 00000605: JUMP 00000606: JUMPDEST 00000607: PUSH2 0x0610 0000060a: PUSH1 0x00 0000060c: PUSH2 0x0814 0000060f: JUMP 00000610: JUMPDEST 00000611: JUMP 00000612: JUMPDEST 00000613: PUSH1 0x00 00000615: DUP1 00000616: PUSH1 0x00 00000618: SWAP1 00000619: SLOAD 0000061a: SWAP1 0000061b: PUSH2 0x0100 0000061e: EXP 0000061f: SWAP1 00000620: DIV 00000621: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000636: AND 00000637: SWAP1 00000638: POP 00000639: SWAP1 0000063a: JUMP 0000063b: JUMPDEST 0000063c: PUSH32 0x00000000000000000000000000000000000000000000000000000000075bcd15 0000065d: DUP2 0000065e: JUMP 0000065f: JUMPDEST 00000660: PUSH32 0x72ce2908b775898d73379c033c97c33cf998153bd3e7b7593d7148a571ee1f2c 00000681: DUP2 00000682: JUMP 00000683: JUMPDEST 00000684: PUSH2 0x068b 00000687: PUSH2 0x072a 0000068a: JUMP 0000068b: JUMPDEST 0000068c: PUSH1 0x00 0000068e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000006a3: AND 000006a4: DUP2 000006a5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000006ba: AND 000006bb: SUB 000006bc: PUSH2 0x06fa 000006bf: JUMPI 000006c0: PUSH1 0x40 000006c2: MLOAD 000006c3: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000006e4: DUP2 000006e5: MSTORE 000006e6: PUSH1 0x04 000006e8: ADD 000006e9: PUSH2 0x06f1 000006ec: SWAP1 000006ed: PUSH2 0x0fb4 000006f0: JUMP 000006f1: JUMPDEST 000006f2: PUSH1 0x40 000006f4: MLOAD 000006f5: DUP1 000006f6: SWAP2 000006f7: SUB 000006f8: SWAP1 000006f9: REVERT 000006fa: JUMPDEST 000006fb: PUSH2 0x0703 000006fe: DUP2 000006ff: PUSH2 0x0814 00000702: JUMP 00000703: JUMPDEST 00000704: POP 00000705: JUMP 00000706: JUMPDEST 00000707: PUSH32 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00000728: DUP2 00000729: JUMP 0000072a: JUMPDEST 0000072b: PUSH2 0x0732 0000072e: PUSH2 0x08d8 00000731: JUMP 00000732: JUMPDEST 00000733: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000748: AND 00000749: PUSH2 0x0750 0000074c: PUSH2 0x0612 0000074f: JUMP 00000750: JUMPDEST 00000751: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000766: AND 00000767: EQ 00000768: PUSH2 0x07a6 0000076b: JUMPI 0000076c: PUSH1 0x40 0000076e: MLOAD 0000076f: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000790: DUP2 00000791: MSTORE 00000792: PUSH1 0x04 00000794: ADD 00000795: PUSH2 0x079d 00000798: SWAP1 00000799: PUSH2 0x1020 0000079c: JUMP 0000079d: JUMPDEST 0000079e: PUSH1 0x40 000007a0: MLOAD 000007a1: DUP1 000007a2: SWAP2 000007a3: SUB 000007a4: SWAP1 000007a5: REVERT 000007a6: JUMPDEST 000007a7: JUMP 000007a8: JUMPDEST 000007a9: PUSH1 0x00 000007ab: DUP3 000007ac: DUP3 000007ad: PUSH32 0x00000000000000000000000000000000000000000000000000000000075bcd15 000007ce: PUSH1 0x40 000007d0: MLOAD 000007d1: PUSH1 0x20 000007d3: ADD 000007d4: PUSH2 0x07df 000007d7: SWAP4 000007d8: SWAP3 000007d9: SWAP2 000007da: SWAP1 000007db: PUSH2 0x10a9 000007de: JUMP 000007df: JUMPDEST 000007e0: PUSH1 0x40 000007e2: MLOAD 000007e3: PUSH1 0x20 000007e5: DUP2 000007e6: DUP4 000007e7: SUB 000007e8: SUB 000007e9: DUP2 000007ea: MSTORE 000007eb: SWAP1 000007ec: PUSH1 0x40 000007ee: MSTORE 000007ef: DUP1 000007f0: MLOAD 000007f1: SWAP1 000007f2: PUSH1 0x20 000007f4: ADD 000007f5: KECCAK256 000007f6: SWAP1 000007f7: POP 000007f8: SWAP3 000007f9: SWAP2 000007fa: POP 000007fb: POP 000007fc: JUMP 000007fd: JUMPDEST 000007fe: PUSH1 0x00 00000800: DUP3 00000801: PUSH2 0x080a 00000804: DUP6 00000805: DUP5 00000806: PUSH2 0x08e0 00000809: JUMP 0000080a: JUMPDEST 0000080b: EQ 0000080c: SWAP1 0000080d: POP 0000080e: SWAP4 0000080f: SWAP3 00000810: POP 00000811: POP 00000812: POP 00000813: JUMP 00000814: JUMPDEST 00000815: PUSH1 0x00 00000817: DUP1 00000818: PUSH1 0x00 0000081a: SWAP1 0000081b: SLOAD 0000081c: SWAP1 0000081d: PUSH2 0x0100 00000820: EXP 00000821: SWAP1 00000822: DIV 00000823: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000838: AND 00000839: SWAP1 0000083a: POP 0000083b: DUP2 0000083c: PUSH1 0x00 0000083e: DUP1 0000083f: PUSH2 0x0100 00000842: EXP 00000843: DUP2 00000844: SLOAD 00000845: DUP2 00000846: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000085b: MUL 0000085c: NOT 0000085d: AND 0000085e: SWAP1 0000085f: DUP4 00000860: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000875: AND 00000876: MUL 00000877: OR 00000878: SWAP1 00000879: SSTORE 0000087a: POP 0000087b: DUP2 0000087c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000891: AND 00000892: DUP2 00000893: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000008a8: AND 000008a9: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 000008ca: PUSH1 0x40 000008cc: MLOAD 000008cd: PUSH1 0x40 000008cf: MLOAD 000008d0: DUP1 000008d1: SWAP2 000008d2: SUB 000008d3: SWAP1 000008d4: LOG3 000008d5: POP 000008d6: POP 000008d7: JUMP 000008d8: JUMPDEST 000008d9: PUSH1 0x00 000008db: CALLER 000008dc: SWAP1 000008dd: POP 000008de: SWAP1 000008df: JUMP 000008e0: JUMPDEST 000008e1: PUSH1 0x00 000008e3: DUP1 000008e4: DUP3 000008e5: SWAP1 000008e6: POP 000008e7: PUSH1 0x00 000008e9: JUMPDEST 000008ea: DUP5 000008eb: MLOAD 000008ec: DUP2 000008ed: LT 000008ee: ISZERO 000008ef: PUSH2 0x092b 000008f2: JUMPI 000008f3: PUSH2 0x0916 000008f6: DUP3 000008f7: DUP7 000008f8: DUP4 000008f9: DUP2 000008fa: MLOAD 000008fb: DUP2 000008fc: LT 000008fd: PUSH2 0x0909 00000900: JUMPI 00000901: PUSH2 0x0908 00000904: PUSH2 0x10e6 00000907: JUMP 00000908: JUMPDEST 00000909: JUMPDEST 0000090a: PUSH1 0x20 0000090c: MUL 0000090d: PUSH1 0x20 0000090f: ADD 00000910: ADD 00000911: MLOAD 00000912: PUSH2 0x0936 00000915: JUMP 00000916: JUMPDEST 00000917: SWAP2 00000918: POP 00000919: DUP1 0000091a: DUP1 0000091b: PUSH2 0x0923 0000091e: SWAP1 0000091f: PUSH2 0x1144 00000922: JUMP 00000923: JUMPDEST 00000924: SWAP2 00000925: POP 00000926: POP 00000927: PUSH2 0x08e9 0000092a: JUMP 0000092b: JUMPDEST 0000092c: POP 0000092d: DUP1 0000092e: SWAP2 0000092f: POP 00000930: POP 00000931: SWAP3 00000932: SWAP2 00000933: POP 00000934: POP 00000935: JUMP 00000936: JUMPDEST 00000937: PUSH1 0x00 00000939: DUP2 0000093a: DUP4 0000093b: LT 0000093c: PUSH2 0x094e 0000093f: JUMPI 00000940: PUSH2 0x0949 00000943: DUP3 00000944: DUP5 00000945: PUSH2 0x0961 00000948: JUMP 00000949: JUMPDEST 0000094a: PUSH2 0x0959 0000094d: JUMP 0000094e: JUMPDEST 0000094f: PUSH2 0x0958 00000952: DUP4 00000953: DUP4 00000954: PUSH2 0x0961 00000957: JUMP 00000958: JUMPDEST 00000959: JUMPDEST 0000095a: SWAP1 0000095b: POP 0000095c: SWAP3 0000095d: SWAP2 0000095e: POP 0000095f: POP 00000960: JUMP 00000961: JUMPDEST 00000962: PUSH1 0x00 00000964: DUP3 00000965: PUSH1 0x00 00000967: MSTORE 00000968: DUP2 00000969: PUSH1 0x20 0000096b: MSTORE 0000096c: PUSH1 0x40 0000096e: PUSH1 0x00 00000970: KECCAK256 00000971: SWAP1 00000972: POP 00000973: SWAP3 00000974: SWAP2 00000975: POP 00000976: POP 00000977: JUMP 00000978: JUMPDEST 00000979: PUSH1 0x00 0000097b: DUP1 0000097c: REVERT 0000097d: JUMPDEST 0000097e: PUSH1 0x00 00000980: DUP1 00000981: REVERT 00000982: JUMPDEST 00000983: PUSH1 0x00 00000985: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000099a: DUP3 0000099b: AND 0000099c: SWAP1 0000099d: POP 0000099e: SWAP2 0000099f: SWAP1 000009a0: POP 000009a1: JUMP 000009a2: JUMPDEST 000009a3: PUSH1 0x00 000009a5: PUSH2 0x09ad 000009a8: DUP3 000009a9: PUSH2 0x0982 000009ac: JUMP 000009ad: JUMPDEST 000009ae: SWAP1 000009af: POP 000009b0: SWAP2 000009b1: SWAP1 000009b2: POP 000009b3: JUMP 000009b4: JUMPDEST 000009b5: PUSH2 0x09bd 000009b8: DUP2 000009b9: PUSH2 0x09a2 000009bc: JUMP 000009bd: JUMPDEST 000009be: DUP2 000009bf: EQ 000009c0: PUSH2 0x09c8 000009c3: JUMPI 000009c4: PUSH1 0x00 000009c6: DUP1 000009c7: REVERT 000009c8: JUMPDEST 000009c9: POP 000009ca: JUMP 000009cb: JUMPDEST 000009cc: PUSH1 0x00 000009ce: DUP2 000009cf: CALLDATALOAD 000009d0: SWAP1 000009d1: POP 000009d2: PUSH2 0x09da 000009d5: DUP2 000009d6: PUSH2 0x09b4 000009d9: JUMP 000009da: JUMPDEST 000009db: SWAP3 000009dc: SWAP2 000009dd: POP 000009de: POP 000009df: JUMP 000009e0: JUMPDEST 000009e1: PUSH1 0x00 000009e3: DUP2 000009e4: SWAP1 000009e5: POP 000009e6: SWAP2 000009e7: SWAP1 000009e8: POP 000009e9: JUMP 000009ea: JUMPDEST 000009eb: PUSH2 0x09f3 000009ee: DUP2 000009ef: PUSH2 0x09e0 000009f2: JUMP 000009f3: JUMPDEST 000009f4: DUP2 000009f5: EQ 000009f6: PUSH2 0x09fe 000009f9: JUMPI 000009fa: PUSH1 0x00 000009fc: DUP1 000009fd: REVERT 000009fe: JUMPDEST 000009ff: POP 00000a00: JUMP 00000a01: JUMPDEST 00000a02: PUSH1 0x00 00000a04: DUP2 00000a05: CALLDATALOAD 00000a06: SWAP1 00000a07: POP 00000a08: PUSH2 0x0a10 00000a0b: DUP2 00000a0c: PUSH2 0x09ea 00000a0f: JUMP 00000a10: JUMPDEST 00000a11: SWAP3 00000a12: SWAP2 00000a13: POP 00000a14: POP 00000a15: JUMP 00000a16: JUMPDEST 00000a17: PUSH1 0x00 00000a19: DUP1 00000a1a: REVERT 00000a1b: JUMPDEST 00000a1c: PUSH1 0x00 00000a1e: DUP1 00000a1f: REVERT 00000a20: JUMPDEST 00000a21: PUSH1 0x00 00000a23: DUP1 00000a24: REVERT 00000a25: JUMPDEST 00000a26: PUSH1 0x00 00000a28: DUP1 00000a29: DUP4 00000a2a: PUSH1 0x1f 00000a2c: DUP5 00000a2d: ADD 00000a2e: SLT 00000a2f: PUSH2 0x0a3b 00000a32: JUMPI 00000a33: PUSH2 0x0a3a 00000a36: PUSH2 0x0a16 00000a39: JUMP 00000a3a: JUMPDEST 00000a3b: JUMPDEST 00000a3c: DUP3 00000a3d: CALLDATALOAD 00000a3e: SWAP1 00000a3f: POP 00000a40: PUSH8 0xffffffffffffffff 00000a49: DUP2 00000a4a: GT 00000a4b: ISZERO 00000a4c: PUSH2 0x0a58 00000a4f: JUMPI 00000a50: PUSH2 0x0a57 00000a53: PUSH2 0x0a1b 00000a56: JUMP 00000a57: JUMPDEST 00000a58: JUMPDEST 00000a59: PUSH1 0x20 00000a5b: DUP4 00000a5c: ADD 00000a5d: SWAP2 00000a5e: POP 00000a5f: DUP4 00000a60: PUSH1 0x20 00000a62: DUP3 00000a63: MUL 00000a64: DUP4 00000a65: ADD 00000a66: GT 00000a67: ISZERO 00000a68: PUSH2 0x0a74 00000a6b: JUMPI 00000a6c: PUSH2 0x0a73 00000a6f: PUSH2 0x0a20 00000a72: JUMP 00000a73: JUMPDEST 00000a74: JUMPDEST 00000a75: SWAP3 00000a76: POP 00000a77: SWAP3 00000a78: SWAP1 00000a79: POP 00000a7a: JUMP 00000a7b: JUMPDEST 00000a7c: PUSH1 0x00 00000a7e: DUP1 00000a7f: PUSH1 0x00 00000a81: DUP1 00000a82: PUSH1 0x60 00000a84: DUP6 00000a85: DUP8 00000a86: SUB 00000a87: SLT 00000a88: ISZERO 00000a89: PUSH2 0x0a95 00000a8c: JUMPI 00000a8d: PUSH2 0x0a94 00000a90: PUSH2 0x0978 00000a93: JUMP 00000a94: JUMPDEST 00000a95: JUMPDEST 00000a96: PUSH1 0x00 00000a98: PUSH2 0x0aa3 00000a9b: DUP8 00000a9c: DUP3 00000a9d: DUP9 00000a9e: ADD 00000a9f: PUSH2 0x09cb 00000aa2: JUMP 00000aa3: JUMPDEST 00000aa4: SWAP5 00000aa5: POP 00000aa6: POP 00000aa7: PUSH1 0x20 00000aa9: PUSH2 0x0ab4 00000aac: DUP8 00000aad: DUP3 00000aae: DUP9 00000aaf: ADD 00000ab0: PUSH2 0x0a01 00000ab3: JUMP 00000ab4: JUMPDEST 00000ab5: SWAP4 00000ab6: POP 00000ab7: POP 00000ab8: PUSH1 0x40 00000aba: DUP6 00000abb: ADD 00000abc: CALLDATALOAD 00000abd: PUSH8 0xffffffffffffffff 00000ac6: DUP2 00000ac7: GT 00000ac8: ISZERO 00000ac9: PUSH2 0x0ad5 00000acc: JUMPI 00000acd: PUSH2 0x0ad4 00000ad0: PUSH2 0x097d 00000ad3: JUMP 00000ad4: JUMPDEST 00000ad5: JUMPDEST 00000ad6: PUSH2 0x0ae1 00000ad9: DUP8 00000ada: DUP3 00000adb: DUP9 00000adc: ADD 00000add: PUSH2 0x0a25 00000ae0: JUMP 00000ae1: JUMPDEST 00000ae2: SWAP3 00000ae3: POP 00000ae4: SWAP3 00000ae5: POP 00000ae6: POP 00000ae7: SWAP3 00000ae8: SWAP6 00000ae9: SWAP2 00000aea: SWAP5 00000aeb: POP 00000aec: SWAP3 00000aed: POP 00000aee: JUMP 00000aef: JUMPDEST 00000af0: PUSH1 0x00 00000af2: DUP1 00000af3: PUSH1 0x40 00000af5: DUP4 00000af6: DUP6 00000af7: SUB 00000af8: SLT 00000af9: ISZERO 00000afa: PUSH2 0x0b06 00000afd: JUMPI 00000afe: PUSH2 0x0b05 00000b01: PUSH2 0x0978 00000b04: JUMP 00000b05: JUMPDEST 00000b06: JUMPDEST 00000b07: PUSH1 0x00 00000b09: PUSH2 0x0b14 00000b0c: DUP6 00000b0d: DUP3 00000b0e: DUP7 00000b0f: ADD 00000b10: PUSH2 0x09cb 00000b13: JUMP 00000b14: JUMPDEST 00000b15: SWAP3 00000b16: POP 00000b17: POP 00000b18: PUSH1 0x20 00000b1a: PUSH2 0x0b25 00000b1d: DUP6 00000b1e: DUP3 00000b1f: DUP7 00000b20: ADD 00000b21: PUSH2 0x0a01 00000b24: JUMP 00000b25: JUMPDEST 00000b26: SWAP2 00000b27: POP 00000b28: POP 00000b29: SWAP3 00000b2a: POP 00000b2b: SWAP3 00000b2c: SWAP1 00000b2d: POP 00000b2e: JUMP 00000b2f: JUMPDEST 00000b30: PUSH1 0x00 00000b32: DUP2 00000b33: ISZERO 00000b34: ISZERO 00000b35: SWAP1 00000b36: POP 00000b37: SWAP2 00000b38: SWAP1 00000b39: POP 00000b3a: JUMP 00000b3b: JUMPDEST 00000b3c: PUSH2 0x0b44 00000b3f: DUP2 00000b40: PUSH2 0x0b2f 00000b43: JUMP 00000b44: JUMPDEST 00000b45: DUP3 00000b46: MSTORE 00000b47: POP 00000b48: POP 00000b49: JUMP 00000b4a: JUMPDEST 00000b4b: PUSH1 0x00 00000b4d: PUSH1 0x20 00000b4f: DUP3 00000b50: ADD 00000b51: SWAP1 00000b52: POP 00000b53: PUSH2 0x0b5f 00000b56: PUSH1 0x00 00000b58: DUP4 00000b59: ADD 00000b5a: DUP5 00000b5b: PUSH2 0x0b3b 00000b5e: JUMP 00000b5f: JUMPDEST 00000b60: SWAP3 00000b61: SWAP2 00000b62: POP 00000b63: POP 00000b64: JUMP 00000b65: JUMPDEST 00000b66: PUSH2 0x0b6e 00000b69: DUP2 00000b6a: PUSH2 0x09a2 00000b6d: JUMP 00000b6e: JUMPDEST 00000b6f: DUP3 00000b70: MSTORE 00000b71: POP 00000b72: POP 00000b73: JUMP 00000b74: JUMPDEST 00000b75: PUSH1 0x00 00000b77: PUSH1 0x20 00000b79: DUP3 00000b7a: ADD 00000b7b: SWAP1 00000b7c: POP 00000b7d: PUSH2 0x0b89 00000b80: PUSH1 0x00 00000b82: DUP4 00000b83: ADD 00000b84: DUP5 00000b85: PUSH2 0x0b65 00000b88: JUMP 00000b89: JUMPDEST 00000b8a: SWAP3 00000b8b: SWAP2 00000b8c: POP 00000b8d: POP 00000b8e: JUMP 00000b8f: JUMPDEST 00000b90: PUSH2 0x0b98 00000b93: DUP2 00000b94: PUSH2 0x09e0 00000b97: JUMP 00000b98: JUMPDEST 00000b99: DUP3 00000b9a: MSTORE 00000b9b: POP 00000b9c: POP 00000b9d: JUMP 00000b9e: JUMPDEST 00000b9f: PUSH1 0x00 00000ba1: PUSH1 0x20 00000ba3: DUP3 00000ba4: ADD 00000ba5: SWAP1 00000ba6: POP 00000ba7: PUSH2 0x0bb3 00000baa: PUSH1 0x00 00000bac: DUP4 00000bad: ADD 00000bae: DUP5 00000baf: PUSH2 0x0b8f 00000bb2: JUMP 00000bb3: JUMPDEST 00000bb4: SWAP3 00000bb5: SWAP2 00000bb6: POP 00000bb7: POP 00000bb8: JUMP 00000bb9: JUMPDEST 00000bba: PUSH1 0x00 00000bbc: DUP2 00000bbd: SWAP1 00000bbe: POP 00000bbf: SWAP2 00000bc0: SWAP1 00000bc1: POP 00000bc2: JUMP 00000bc3: JUMPDEST 00000bc4: PUSH2 0x0bcc 00000bc7: DUP2 00000bc8: PUSH2 0x0bb9 00000bcb: JUMP 00000bcc: JUMPDEST 00000bcd: DUP3 00000bce: MSTORE 00000bcf: POP 00000bd0: POP 00000bd1: JUMP 00000bd2: JUMPDEST 00000bd3: PUSH1 0x00 00000bd5: PUSH1 0x20 00000bd7: DUP3 00000bd8: ADD 00000bd9: SWAP1 00000bda: POP 00000bdb: PUSH2 0x0be7 00000bde: PUSH1 0x00 00000be0: DUP4 00000be1: ADD 00000be2: DUP5 00000be3: PUSH2 0x0bc3 00000be6: JUMP 00000be7: JUMPDEST 00000be8: SWAP3 00000be9: SWAP2 00000bea: POP 00000beb: POP 00000bec: JUMP 00000bed: JUMPDEST 00000bee: PUSH1 0x00 00000bf0: PUSH1 0x20 00000bf2: DUP3 00000bf3: DUP5 00000bf4: SUB 00000bf5: SLT 00000bf6: ISZERO 00000bf7: PUSH2 0x0c03 00000bfa: JUMPI 00000bfb: PUSH2 0x0c02 00000bfe: PUSH2 0x0978 00000c01: JUMP 00000c02: JUMPDEST 00000c03: JUMPDEST 00000c04: PUSH1 0x00 00000c06: PUSH2 0x0c11 00000c09: DUP5 00000c0a: DUP3 00000c0b: DUP6 00000c0c: ADD 00000c0d: PUSH2 0x09cb 00000c10: JUMP 00000c11: JUMPDEST 00000c12: SWAP2 00000c13: POP 00000c14: POP 00000c15: SWAP3 00000c16: SWAP2 00000c17: POP 00000c18: POP 00000c19: JUMP 00000c1a: JUMPDEST 00000c1b: PUSH1 0x00 00000c1d: DUP2 00000c1e: SWAP1 00000c1f: POP 00000c20: SWAP2 00000c21: SWAP1 00000c22: POP 00000c23: JUMP 00000c24: JUMPDEST 00000c25: PUSH1 0x00 00000c27: PUSH2 0x0c3f 00000c2a: PUSH2 0x0c3a 00000c2d: PUSH2 0x0c35 00000c30: DUP5 00000c31: PUSH2 0x0982 00000c34: JUMP 00000c35: JUMPDEST 00000c36: PUSH2 0x0c1a 00000c39: JUMP 00000c3a: JUMPDEST 00000c3b: PUSH2 0x0982 00000c3e: JUMP 00000c3f: JUMPDEST 00000c40: SWAP1 00000c41: POP 00000c42: SWAP2 00000c43: SWAP1 00000c44: POP 00000c45: JUMP 00000c46: JUMPDEST 00000c47: PUSH1 0x00 00000c49: PUSH2 0x0c51 00000c4c: DUP3 00000c4d: PUSH2 0x0c24 00000c50: JUMP 00000c51: JUMPDEST 00000c52: SWAP1 00000c53: POP 00000c54: SWAP2 00000c55: SWAP1 00000c56: POP 00000c57: JUMP 00000c58: JUMPDEST 00000c59: PUSH1 0x00 00000c5b: PUSH2 0x0c63 00000c5e: DUP3 00000c5f: PUSH2 0x0c46 00000c62: JUMP 00000c63: JUMPDEST 00000c64: SWAP1 00000c65: POP 00000c66: SWAP2 00000c67: SWAP1 00000c68: POP 00000c69: JUMP 00000c6a: JUMPDEST 00000c6b: PUSH2 0x0c73 00000c6e: DUP2 00000c6f: PUSH2 0x0c58 00000c72: JUMP 00000c73: JUMPDEST 00000c74: DUP3 00000c75: MSTORE 00000c76: POP 00000c77: POP 00000c78: JUMP 00000c79: JUMPDEST 00000c7a: PUSH1 0x00 00000c7c: PUSH1 0x20 00000c7e: DUP3 00000c7f: ADD 00000c80: SWAP1 00000c81: POP 00000c82: PUSH2 0x0c8e 00000c85: PUSH1 0x00 00000c87: DUP4 00000c88: ADD 00000c89: DUP5 00000c8a: PUSH2 0x0c6a 00000c8d: JUMP 00000c8e: JUMPDEST 00000c8f: SWAP3 00000c90: SWAP2 00000c91: POP 00000c92: POP 00000c93: JUMP 00000c94: JUMPDEST 00000c95: PUSH1 0x00 00000c97: DUP2 00000c98: MLOAD 00000c99: SWAP1 00000c9a: POP 00000c9b: PUSH2 0x0ca3 00000c9e: DUP2 00000c9f: PUSH2 0x09ea 00000ca2: JUMP 00000ca3: JUMPDEST 00000ca4: SWAP3 00000ca5: SWAP2 00000ca6: POP 00000ca7: POP 00000ca8: JUMP 00000ca9: JUMPDEST 00000caa: PUSH1 0x00 00000cac: PUSH1 0x20 00000cae: DUP3 00000caf: DUP5 00000cb0: SUB 00000cb1: SLT 00000cb2: ISZERO 00000cb3: PUSH2 0x0cbf 00000cb6: JUMPI 00000cb7: PUSH2 0x0cbe 00000cba: PUSH2 0x0978 00000cbd: JUMP 00000cbe: JUMPDEST 00000cbf: JUMPDEST 00000cc0: PUSH1 0x00 00000cc2: PUSH2 0x0ccd 00000cc5: DUP5 00000cc6: DUP3 00000cc7: DUP6 00000cc8: ADD 00000cc9: PUSH2 0x0c94 00000ccc: JUMP 00000ccd: JUMPDEST 00000cce: SWAP2 00000ccf: POP 00000cd0: POP 00000cd1: SWAP3 00000cd2: SWAP2 00000cd3: POP 00000cd4: POP 00000cd5: JUMP 00000cd6: JUMPDEST 00000cd7: PUSH1 0x00 00000cd9: PUSH1 0x40 00000cdb: DUP3 00000cdc: ADD 00000cdd: SWAP1 00000cde: POP 00000cdf: PUSH2 0x0ceb 00000ce2: PUSH1 0x00 00000ce4: DUP4 00000ce5: ADD 00000ce6: DUP6 00000ce7: PUSH2 0x0b65 00000cea: JUMP 00000ceb: JUMPDEST 00000cec: PUSH2 0x0cf8 00000cef: PUSH1 0x20 00000cf1: DUP4 00000cf2: ADD 00000cf3: DUP5 00000cf4: PUSH2 0x0b8f 00000cf7: JUMP 00000cf8: JUMPDEST 00000cf9: SWAP4 00000cfa: SWAP3 00000cfb: POP 00000cfc: POP 00000cfd: POP 00000cfe: JUMP 00000cff: JUMPDEST 00000d00: PUSH2 0x0d08 00000d03: DUP2 00000d04: PUSH2 0x0b2f 00000d07: JUMP 00000d08: JUMPDEST 00000d09: DUP2 00000d0a: EQ 00000d0b: PUSH2 0x0d13 00000d0e: JUMPI 00000d0f: PUSH1 0x00 00000d11: DUP1 00000d12: REVERT 00000d13: JUMPDEST 00000d14: POP 00000d15: JUMP 00000d16: JUMPDEST 00000d17: PUSH1 0x00 00000d19: DUP2 00000d1a: MLOAD 00000d1b: SWAP1 00000d1c: POP 00000d1d: PUSH2 0x0d25 00000d20: DUP2 00000d21: PUSH2 0x0cff 00000d24: JUMP 00000d25: JUMPDEST 00000d26: SWAP3 00000d27: SWAP2 00000d28: POP 00000d29: POP 00000d2a: JUMP 00000d2b: JUMPDEST 00000d2c: PUSH1 0x00 00000d2e: PUSH1 0x20 00000d30: DUP3 00000d31: DUP5 00000d32: SUB 00000d33: SLT 00000d34: ISZERO 00000d35: PUSH2 0x0d41 00000d38: JUMPI 00000d39: PUSH2 0x0d40 00000d3c: PUSH2 0x0978 00000d3f: JUMP 00000d40: JUMPDEST 00000d41: JUMPDEST 00000d42: PUSH1 0x00 00000d44: PUSH2 0x0d4f 00000d47: DUP5 00000d48: DUP3 00000d49: DUP6 00000d4a: ADD 00000d4b: PUSH2 0x0d16 00000d4e: JUMP 00000d4f: JUMPDEST 00000d50: SWAP2 00000d51: POP 00000d52: POP 00000d53: SWAP3 00000d54: SWAP2 00000d55: POP 00000d56: POP 00000d57: JUMP 00000d58: JUMPDEST 00000d59: PUSH1 0x00 00000d5b: DUP3 00000d5c: DUP3 00000d5d: MSTORE 00000d5e: PUSH1 0x20 00000d60: DUP3 00000d61: ADD 00000d62: SWAP1 00000d63: POP 00000d64: SWAP3 00000d65: SWAP2 00000d66: POP 00000d67: POP 00000d68: JUMP 00000d69: JUMPDEST 00000d6a: PUSH32 0x6163636f756e74203d207a65726f206164647265737300000000000000000000 00000d8b: PUSH1 0x00 00000d8d: DUP3 00000d8e: ADD 00000d8f: MSTORE 00000d90: POP 00000d91: JUMP 00000d92: JUMPDEST 00000d93: PUSH1 0x00 00000d95: PUSH2 0x0d9f 00000d98: PUSH1 0x16 00000d9a: DUP4 00000d9b: PUSH2 0x0d58 00000d9e: JUMP 00000d9f: JUMPDEST 00000da0: SWAP2 00000da1: POP 00000da2: PUSH2 0x0daa 00000da5: DUP3 00000da6: PUSH2 0x0d69 00000da9: JUMP 00000daa: JUMPDEST 00000dab: PUSH1 0x20 00000dad: DUP3 00000dae: ADD 00000daf: SWAP1 00000db0: POP 00000db1: SWAP2 00000db2: SWAP1 00000db3: POP 00000db4: JUMP 00000db5: JUMPDEST 00000db6: PUSH1 0x00 00000db8: PUSH1 0x20 00000dba: DUP3 00000dbb: ADD 00000dbc: SWAP1 00000dbd: POP 00000dbe: DUP2 00000dbf: DUP2 00000dc0: SUB 00000dc1: PUSH1 0x00 00000dc3: DUP4 00000dc4: ADD 00000dc5: MSTORE 00000dc6: PUSH2 0x0dce 00000dc9: DUP2 00000dca: PUSH2 0x0d92 00000dcd: JUMP 00000dce: JUMPDEST 00000dcf: SWAP1 00000dd0: POP 00000dd1: SWAP2 00000dd2: SWAP1 00000dd3: POP 00000dd4: JUMP 00000dd5: JUMPDEST 00000dd6: PUSH32 0x616d6f756e74203d203000000000000000000000000000000000000000000000 00000df7: PUSH1 0x00 00000df9: DUP3 00000dfa: ADD 00000dfb: MSTORE 00000dfc: POP 00000dfd: JUMP 00000dfe: JUMPDEST 00000dff: PUSH1 0x00 00000e01: PUSH2 0x0e0b 00000e04: PUSH1 0x0a 00000e06: DUP4 00000e07: PUSH2 0x0d58 00000e0a: JUMP 00000e0b: JUMPDEST 00000e0c: SWAP2 00000e0d: POP 00000e0e: PUSH2 0x0e16 00000e11: DUP3 00000e12: PUSH2 0x0dd5 00000e15: JUMP 00000e16: JUMPDEST 00000e17: PUSH1 0x20 00000e19: DUP3 00000e1a: ADD 00000e1b: SWAP1 00000e1c: POP 00000e1d: SWAP2 00000e1e: SWAP1 00000e1f: POP 00000e20: JUMP 00000e21: JUMPDEST 00000e22: PUSH1 0x00 00000e24: PUSH1 0x20 00000e26: DUP3 00000e27: ADD 00000e28: SWAP1 00000e29: POP 00000e2a: DUP2 00000e2b: DUP2 00000e2c: SUB 00000e2d: PUSH1 0x00 00000e2f: DUP4 00000e30: ADD 00000e31: MSTORE 00000e32: PUSH2 0x0e3a 00000e35: DUP2 00000e36: PUSH2 0x0dfe 00000e39: JUMP 00000e3a: JUMPDEST 00000e3b: SWAP1 00000e3c: POP 00000e3d: SWAP2 00000e3e: SWAP1 00000e3f: POP 00000e40: JUMP 00000e41: JUMPDEST 00000e42: PUSH32 0x636c61696d656400000000000000000000000000000000000000000000000000 00000e63: PUSH1 0x00 00000e65: DUP3 00000e66: ADD 00000e67: MSTORE 00000e68: POP 00000e69: JUMP 00000e6a: JUMPDEST 00000e6b: PUSH1 0x00 00000e6d: PUSH2 0x0e77 00000e70: PUSH1 0x07 00000e72: DUP4 00000e73: PUSH2 0x0d58 00000e76: JUMP 00000e77: JUMPDEST 00000e78: SWAP2 00000e79: POP 00000e7a: PUSH2 0x0e82 00000e7d: DUP3 00000e7e: PUSH2 0x0e41 00000e81: JUMP 00000e82: JUMPDEST 00000e83: PUSH1 0x20 00000e85: DUP3 00000e86: ADD 00000e87: SWAP1 00000e88: POP 00000e89: SWAP2 00000e8a: SWAP1 00000e8b: POP 00000e8c: JUMP 00000e8d: JUMPDEST 00000e8e: PUSH1 0x00 00000e90: PUSH1 0x20 00000e92: DUP3 00000e93: ADD 00000e94: SWAP1 00000e95: POP 00000e96: DUP2 00000e97: DUP2 00000e98: SUB 00000e99: PUSH1 0x00 00000e9b: DUP4 00000e9c: ADD 00000e9d: MSTORE 00000e9e: PUSH2 0x0ea6 00000ea1: DUP2 00000ea2: PUSH2 0x0e6a 00000ea5: JUMP 00000ea6: JUMPDEST 00000ea7: SWAP1 00000ea8: POP 00000ea9: SWAP2 00000eaa: SWAP1 00000eab: POP 00000eac: JUMP 00000ead: JUMPDEST 00000eae: PUSH32 0x696e76616c69642070726f6f6600000000000000000000000000000000000000 00000ecf: PUSH1 0x00 00000ed1: DUP3 00000ed2: ADD 00000ed3: MSTORE 00000ed4: POP 00000ed5: JUMP 00000ed6: JUMPDEST 00000ed7: PUSH1 0x00 00000ed9: PUSH2 0x0ee3 00000edc: PUSH1 0x0d 00000ede: DUP4 00000edf: PUSH2 0x0d58 00000ee2: JUMP 00000ee3: JUMPDEST 00000ee4: SWAP2 00000ee5: POP 00000ee6: PUSH2 0x0eee 00000ee9: DUP3 00000eea: PUSH2 0x0ead 00000eed: JUMP 00000eee: JUMPDEST 00000eef: PUSH1 0x20 00000ef1: DUP3 00000ef2: ADD 00000ef3: SWAP1 00000ef4: POP 00000ef5: SWAP2 00000ef6: SWAP1 00000ef7: POP 00000ef8: JUMP 00000ef9: JUMPDEST 00000efa: PUSH1 0x00 00000efc: PUSH1 0x20 00000efe: DUP3 00000eff: ADD 00000f00: SWAP1 00000f01: POP 00000f02: DUP2 00000f03: DUP2 00000f04: SUB 00000f05: PUSH1 0x00 00000f07: DUP4 00000f08: ADD 00000f09: MSTORE 00000f0a: PUSH2 0x0f12 00000f0d: DUP2 00000f0e: PUSH2 0x0ed6 00000f11: JUMP 00000f12: JUMPDEST 00000f13: SWAP1 00000f14: POP 00000f15: SWAP2 00000f16: SWAP1 00000f17: POP 00000f18: JUMP 00000f19: JUMPDEST 00000f1a: PUSH1 0x00 00000f1c: PUSH1 0x40 00000f1e: DUP3 00000f1f: ADD 00000f20: SWAP1 00000f21: POP 00000f22: PUSH2 0x0f2e 00000f25: PUSH1 0x00 00000f27: DUP4 00000f28: ADD 00000f29: DUP6 00000f2a: PUSH2 0x0bc3 00000f2d: JUMP 00000f2e: JUMPDEST 00000f2f: PUSH2 0x0f3b 00000f32: PUSH1 0x20 00000f34: DUP4 00000f35: ADD 00000f36: DUP5 00000f37: PUSH2 0x0b8f 00000f3a: JUMP 00000f3b: JUMPDEST 00000f3c: SWAP4 00000f3d: SWAP3 00000f3e: POP 00000f3f: POP 00000f40: POP 00000f41: JUMP 00000f42: JUMPDEST 00000f43: PUSH32 0x4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061 00000f64: PUSH1 0x00 00000f66: DUP3 00000f67: ADD 00000f68: MSTORE 00000f69: PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 00000f8a: PUSH1 0x20 00000f8c: DUP3 00000f8d: ADD 00000f8e: MSTORE 00000f8f: POP 00000f90: JUMP 00000f91: JUMPDEST 00000f92: PUSH1 0x00 00000f94: PUSH2 0x0f9e 00000f97: PUSH1 0x26 00000f99: DUP4 00000f9a: PUSH2 0x0d58 00000f9d: JUMP 00000f9e: JUMPDEST 00000f9f: SWAP2 00000fa0: POP 00000fa1: PUSH2 0x0fa9 00000fa4: DUP3 00000fa5: PUSH2 0x0f42 00000fa8: JUMP 00000fa9: JUMPDEST 00000faa: PUSH1 0x40 00000fac: DUP3 00000fad: ADD 00000fae: SWAP1 00000faf: POP 00000fb0: SWAP2 00000fb1: SWAP1 00000fb2: POP 00000fb3: JUMP 00000fb4: JUMPDEST 00000fb5: PUSH1 0x00 00000fb7: PUSH1 0x20 00000fb9: DUP3 00000fba: ADD 00000fbb: SWAP1 00000fbc: POP 00000fbd: DUP2 00000fbe: DUP2 00000fbf: SUB 00000fc0: PUSH1 0x00 00000fc2: DUP4 00000fc3: ADD 00000fc4: MSTORE 00000fc5: PUSH2 0x0fcd 00000fc8: DUP2 00000fc9: PUSH2 0x0f91 00000fcc: JUMP 00000fcd: JUMPDEST 00000fce: SWAP1 00000fcf: POP 00000fd0: SWAP2 00000fd1: SWAP1 00000fd2: POP 00000fd3: JUMP 00000fd4: JUMPDEST 00000fd5: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572 00000ff6: PUSH1 0x00 00000ff8: DUP3 00000ff9: ADD 00000ffa: MSTORE 00000ffb: POP 00000ffc: JUMP 00000ffd: JUMPDEST 00000ffe: PUSH1 0x00 00001000: PUSH2 0x100a 00001003: PUSH1 0x20 00001005: DUP4 00001006: PUSH2 0x0d58 00001009: JUMP 0000100a: JUMPDEST 0000100b: SWAP2 0000100c: POP 0000100d: PUSH2 0x1015 00001010: DUP3 00001011: PUSH2 0x0fd4 00001014: JUMP 00001015: JUMPDEST 00001016: PUSH1 0x20 00001018: DUP3 00001019: ADD 0000101a: SWAP1 0000101b: POP 0000101c: SWAP2 0000101d: SWAP1 0000101e: POP 0000101f: JUMP 00001020: JUMPDEST 00001021: PUSH1 0x00 00001023: PUSH1 0x20 00001025: DUP3 00001026: ADD 00001027: SWAP1 00001028: POP 00001029: DUP2 0000102a: DUP2 0000102b: SUB 0000102c: PUSH1 0x00 0000102e: DUP4 0000102f: ADD 00001030: MSTORE 00001031: PUSH2 0x1039 00001034: DUP2 00001035: PUSH2 0x0ffd 00001038: JUMP 00001039: JUMPDEST 0000103a: SWAP1 0000103b: POP 0000103c: SWAP2 0000103d: SWAP1 0000103e: POP 0000103f: JUMP 00001040: JUMPDEST 00001041: PUSH1 0x00 00001043: DUP2 00001044: PUSH1 0x60 00001046: SHL 00001047: SWAP1 00001048: POP 00001049: SWAP2 0000104a: SWAP1 0000104b: POP 0000104c: JUMP 0000104d: JUMPDEST 0000104e: PUSH1 0x00 00001050: PUSH2 0x1058 00001053: DUP3 00001054: PUSH2 0x1040 00001057: JUMP 00001058: JUMPDEST 00001059: SWAP1 0000105a: POP 0000105b: SWAP2 0000105c: SWAP1 0000105d: POP 0000105e: JUMP 0000105f: JUMPDEST 00001060: PUSH1 0x00 00001062: PUSH2 0x106a 00001065: DUP3 00001066: PUSH2 0x104d 00001069: JUMP 0000106a: JUMPDEST 0000106b: SWAP1 0000106c: POP 0000106d: SWAP2 0000106e: SWAP1 0000106f: POP 00001070: JUMP 00001071: JUMPDEST 00001072: PUSH2 0x1082 00001075: PUSH2 0x107d 00001078: DUP3 00001079: PUSH2 0x09a2 0000107c: JUMP 0000107d: JUMPDEST 0000107e: PUSH2 0x105f 00001081: JUMP 00001082: JUMPDEST 00001083: DUP3 00001084: MSTORE 00001085: POP 00001086: POP 00001087: JUMP 00001088: JUMPDEST 00001089: PUSH1 0x00 0000108b: DUP2 0000108c: SWAP1 0000108d: POP 0000108e: SWAP2 0000108f: SWAP1 00001090: POP 00001091: JUMP 00001092: JUMPDEST 00001093: PUSH2 0x10a3 00001096: PUSH2 0x109e 00001099: DUP3 0000109a: PUSH2 0x09e0 0000109d: JUMP 0000109e: JUMPDEST 0000109f: PUSH2 0x1088 000010a2: JUMP 000010a3: JUMPDEST 000010a4: DUP3 000010a5: MSTORE 000010a6: POP 000010a7: POP 000010a8: JUMP 000010a9: JUMPDEST 000010aa: PUSH1 0x00 000010ac: PUSH2 0x10b5 000010af: DUP3 000010b0: DUP7 000010b1: PUSH2 0x1071 000010b4: JUMP 000010b5: JUMPDEST 000010b6: PUSH1 0x14 000010b8: DUP3 000010b9: ADD 000010ba: SWAP2 000010bb: POP 000010bc: PUSH2 0x10c5 000010bf: DUP3 000010c0: DUP6 000010c1: PUSH2 0x1092 000010c4: JUMP 000010c5: JUMPDEST 000010c6: PUSH1 0x20 000010c8: DUP3 000010c9: ADD 000010ca: SWAP2 000010cb: POP 000010cc: PUSH2 0x10d5 000010cf: DUP3 000010d0: DUP5 000010d1: PUSH2 0x1092 000010d4: JUMP 000010d5: JUMPDEST 000010d6: PUSH1 0x20 000010d8: DUP3 000010d9: ADD 000010da: SWAP2 000010db: POP 000010dc: DUP2 000010dd: SWAP1 000010de: POP 000010df: SWAP5 000010e0: SWAP4 000010e1: POP 000010e2: POP 000010e3: POP 000010e4: POP 000010e5: JUMP 000010e6: JUMPDEST 000010e7: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00001108: PUSH1 0x00 0000110a: MSTORE 0000110b: PUSH1 0x32 0000110d: PUSH1 0x04 0000110f: MSTORE 00001110: PUSH1 0x24 00001112: PUSH1 0x00 00001114: REVERT 00001115: JUMPDEST 00001116: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00001137: PUSH1 0x00 00001139: MSTORE 0000113a: PUSH1 0x11 0000113c: PUSH1 0x04 0000113e: MSTORE 0000113f: PUSH1 0x24 00001141: PUSH1 0x00 00001143: REVERT 00001144: JUMPDEST 00001145: PUSH1 0x00 00001147: PUSH2 0x114f 0000114a: DUP3 0000114b: PUSH2 0x09e0 0000114e: JUMP 0000114f: JUMPDEST 00001150: SWAP2 00001151: POP 00001152: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00001173: DUP3 00001174: SUB 00001175: PUSH2 0x1181 00001178: JUMPI 00001179: PUSH2 0x1180 0000117c: PUSH2 0x1115 0000117f: JUMP 00001180: JUMPDEST 00001181: JUMPDEST 00001182: PUSH1 0x01 00001184: DUP3 00001185: ADD 00001186: SWAP1 00001187: POP 00001188: SWAP2 00001189: SWAP1 0000118a: POP 0000118b: JUMP 0000118c: INVALID 0000118d: LOG2 0000118e: PUSH5 0x6970667358 00001194: UNKNOWN(0x22) 00001195: SLT 00001196: KECCAK256 00001197: ADDMOD 00001198: SWAP4 00001199: JUMPI 0000119a: UNKNOWN(0xBE) 0000119b: DUP4 0000119c: REVERT 0000119d: SWAP15 0000119e: DIV 0000119f: GASLIMIT 000011a0: UNKNOWN(0xBF) 000011a1: UNKNOWN(0xC4) 000011a2: UNKNOWN(0xBB) 000011a3: UNKNOWN(0x0E) 000011a4: UNKNOWN(0xD2) 000011a5: PUSH17 0x8f76c787b1ca4c7b1bc2d1eabb1966320e 000011b7: PUSH5 0x736f6c6343 000011bd: STOP 000011be: ADDMOD 000011bf: GT 000011c0: STOP 000011c1: CALLER
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0x0ebd247e897d2e2de5567fdb5101ce691f1bf3f5e68a809af2a45239bb7a80ee
call_targets:
0xf5644345a5a9dc14076b58802dc908b83e62b0e1
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x0ebd247e897d2e2de5567fdb5101ce691f1bf3f5e68a809af2a45239bb7a80ee",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xf5644345a5a9dc14076b58802dc908b83e62b0e1"
],
"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": "0x8da5cb5b",
"selector": "0x8da5cb5b",
"calldata_variants": [
"0x8da5cb5b",
"0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbfa0b133",
"selector": "0xbfa0b133",
"calldata_variants": [
"0xbfa0b133",
"0xbfa0b1330000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xebf0c717",
"selector": "0xebf0c717",
"calldata_variants": [
"0xebf0c717",
"0xebf0c7170000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfc0c546a",
"selector": "0xfc0c546a",
"calldata_variants": [
"0xfc0c546a",
"0xfc0c546a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3ccfd60b",
"selector": "0x3ccfd60b",
"calldata_variants": [
"0x3ccfd60b",
"0x3ccfd60b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3d13f874",
"selector": "0x3d13f874",
"calldata_variants": [
"0x3d13f874",
"0x3d13f8740000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x4dd6c8de",
"selector": "0x4dd6c8de",
"calldata_variants": [
"0x4dd6c8de",
"0x4dd6c8de0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 662,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1336,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 2,
"guards_detected": [],
"untrusted_call_count": 2
}
|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0x0ebd247e897d2e2de5567fdb5101ce691f1bf3f5e68a809af2a45239bb7a80ee
call_targets:
0xf5644345a5a9dc14076b58802dc908b83e62b0e1
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x0ebd247e897d2e2de5567fdb5101ce691f1bf3f5e68a809af2a45239bb7a80ee",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xf5644345a5a9dc14076b58802dc908b83e62b0e1"
],
"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": "0x8da5cb5b",
"selector": "0x8da5cb5b",
"calldata_variants": [
"0x8da5cb5b",
"0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbfa0b133",
"selector": "0xbfa0b133",
"calldata_variants": [
"0xbfa0b133",
"0xbfa0b1330000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xebf0c717",
"selector": "0xebf0c717",
"calldata_variants": [
"0xebf0c717",
"0xebf0c7170000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfc0c546a",
"selector": "0xfc0c546a",
"calldata_variants": [
"0xfc0c546a",
"0xfc0c546a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3ccfd60b",
"selector": "0x3ccfd60b",
"calldata_variants": [
"0x3ccfd60b",
"0x3ccfd60b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3d13f874",
"selector": "0x3d13f874",
"calldata_variants": [
"0x3d13f874",
"0x3d13f8740000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x4dd6c8de",
"selector": "0x4dd6c8de",
"calldata_variants": [
"0x4dd6c8de",
"0x4dd6c8de0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 662,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1336,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 2,
"guards_detected": []
}
|
| medium | other | codex | Unchecked ERC20 transfer return values can permanently mark claims as paid | 75 | no | — |
viewevidence_json{
"evidence": "`token.transfer(account, amount);` and `token.transfer(msg.sender, token.balanceOf(address(this)));` are unchecked.",
"locations": [
"contracts/Contract.sol:451",
"contracts/Contract.sol:457"
],
"recommendation": "Use `SafeERC20.safeTransfer`/`safeTransferFrom` or explicitly `require(token.transfer(...), \"TRANSFER_FAILED\")` for both claim and withdraw paths.",
"exploit_scenario": "If the ERC20 token returns false on transfer (e.g., non-standard tokens or insufficient balance), `claim` still marks `_claimed[leaf]=true` and emits `Claim` without reverting. The claimant then cannot re-claim, effectively losing the payout. Similarly, `withdraw` can silently fail and leave funds stranded while the owner believes the withdrawal succeeded."
}
|