83c46581-935d-4c5c-8596-6954c0074eb5
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 |
|---|---|---|---|---|
| 31137 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 76636 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 76637 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 76638 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 76639 | capability.graph | complete | 1 / 3 | 1 week ago |
| 76640 | detector.run | complete | 1 / 3 | 1 week ago |
| 76641 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:503513] OpenAI Codex v0.77.0 (research preview)
[codex:503513] --------
[codex:503513] workdir: /tmp/codex-multi-hl7hem2w
[codex:503513] model: gpt-5.2-codex
[codex:503513] provider: openai
[codex:503513] approval: never
[codex:503513] sandbox: read-only
[codex:503513] reasoning effort: xhigh
[codex:503513] reasoning summaries: auto
[codex:503513] session id: 019b7b74-75df-7152-8e6a-08e147547a1d
[codex:503513] --------
[codex:503513] user
[codex:503513] You are a profit-focused exploit hunter. Your ONLY goal is finding ways to extract value (ETH, tokens, NFTs) from this contract.
[codex:503513]
[codex:503513] Read `AUDIT_BUNDLE.txt` completely before concluding. Treat `lib/` and `@openzeppelin/` as trusted unless misused.
[codex:503513]
[codex:503513] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:503513] - Gas inefficiency, code quality, naming, or best practices
[codex:503513] - Theoretical vulnerabilities without a clear extraction path
[codex:503513] - Centralization risks (admin can rug) - assume admin keys are secure
[codex:503513] - Front-running unless it enables theft beyond MEV
[codex:503513] - DoS, griefing, or issues that don't result in attacker profit
[codex:503513] - Missing events, view function issues, or informational findings
[codex:503513]
[codex:503513] HIGH-VALUE PATTERNS TO HUNT:
[codex:503513] - Reentrancy: external calls before state updates that allow double-withdrawal
[codex:503513] - Access control: missing/bypassable auth on withdraw, transfer, or mint functions
[codex:503513] - Flash loan attacks: borrow -> manipulate -> profit in single tx
[codex:503513] - Price oracle manipulation: TWAP with short window, spot price reads, stale prices
[codex:503513] - Signature replay: missing nonce, chainId, or deadline in permit/meta-tx
[codex:503513] - Proxy hijacking: unprotected initialize(), storage collision, UUPS without auth
[codex:503513] - Accounting errors: rounding that favors attacker, share inflation, first depositor attacks
[codex:503513] - Unchecked external calls: return value ignored on token transfers enabling fake tokens
[codex:503513] - Cross-function reentrancy: state read in function A, modified via reentrant call, used stale in A
[codex:503513]
[codex:503513] For each finding, you MUST provide:
[codex:503513] 1. Exact file and line numbers of vulnerable code
[codex:503513] 2. Step-by-step exploit transaction sequence
[codex:503513] 3. Estimated profit potential (order of magnitude: contract balance, LP reserves, etc.)
[codex:503513]
[codex:503513] If no concrete profit path exists: set no_findings=true. Do NOT pad with low-severity noise.
[codex:503513]
[codex:503513] Output MUST be valid JSON matching the provided schema.
[codex:503513] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:503513] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:503513] mcp startup: no servers
[codex:503513]
[codex:503513] thinking
[codex:503513] **Reading AUDIT_BUNDLE.txt**
[codex:503513] exec
[codex:503513] /bin/bash -lc ls in /tmp/codex-multi-hl7hem2w succeeded in 5ms:
[codex:503513] AUDIT_BUNDLE.txt
[codex:503513] codex-output-schema.json
[codex:503513] contracts
[codex:503513] exec
[codex:503513] /bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-multi-hl7hem2w succeeded in 8ms:
[codex:503513] This file concatenates first-party Solidity sources only (lib/@openzeppelin excluded).
[codex:503513]
[codex:503513] ================================================================================
[codex:503513] FILE: contracts/Contract.sol
[codex:503513] ================================================================================
[codex:503513] // SPDX-License-Identifier: Apache-2.0
[codex:503513] // Copyright 2017 Loopring Technology Limited.
[codex:503513] pragma solidity ^0.7.0;
[codex:503513]
[codex:503513]
[codex:503513] /// @title Ownable
[codex:503513] /// @author Brecht Devos - <brecht@loopring.org>
[codex:503513] /// @dev The Ownable contract has an owner address, and provides basic
[codex:503513] /// authorization control functions, this simplifies the implementation of
[codex:503513] /// "user permissions".
[codex:503513] contract Ownable
[codex:503513] {
[codex:503513] address public owner;
[codex:503513]
[codex:503513] event OwnershipTransferred(
[codex:503513]
[codex:503513] thinking
[codex:503513] **Analyzing initialization vulnerability**
[codex:503513] exec
[codex:503513] /bin/bash -lc 'nl -ba contracts/Contract.sol' in /tmp/codex-multi-hl7hem2w succeeded in 7ms:
[codex:503513] 1 // SPDX-License-Identifier: Apache-2.0
[codex:503513] 2 // Copyright 2017 Loopring Technology Limited.
[codex:503513] 3 pragma solidity ^0.7.0;
[codex:503513] 4
[codex:503513] 5
[codex:503513] 6 /// @title Ownable
[codex:503513] 7 /// @author Brecht Devos - <brecht@loopring.org>
[codex:503513] 8 /// @dev The Ownable contract has an owner address, and provides basic
[codex:503513] 9 /// authorization control functions, this simplifies the implementation of
[codex:503513] 10 /// "user permissions".
[codex:503513] 11 contract Ownable
[codex:503513] 12 {
[codex:503513] 13 address public owner;
[codex:503513] 14
[codex:503513] 15 event OwnershipTransferred(
[codex:503513] 16 address indexed previousOwner,
[codex:503513] 17 address indexed newOwner
[codex:503513] 18 );
[codex:503513] 19
[codex:503513] 20 /// @dev The Ownable constructor sets the original `owner` of the contract
[codex:503513]
[codex:503513]
[codex:503513] thinking
[codex:503513] **Analyzing unprotected initialize vulnerability**
[codex:503513] thinking
[codex:503513] **Preparing detailed JSON vulnerability report**
[codex:503513]
[codex:503513] I’m assembling a complete JSON report outlining the unprotected initialize exploit with step-by-step scenario, severity, evidence, locations, and recommendations to match the required schema and clearly communicate the concrete profit path.
[codex:503513] codex
[codex:503513] {"no_findings":false,"summary":"Unprotected initializer lets anyone seize the exchange role before initialization and drain all funds held by the deposit contract.","findings":[{"severity":"critical","category":"upgradeability","title":"Unprotected initialize allows exchange takeover and full fund drain","exploit_scenario":"1) Before `exchange` is set, attacker calls `initialize(attackerExchange)` and becomes both `owner` and `exchange` because there is no access control. 2) As `exchange`, attacker calls `withdraw(..., token, amount, ...)` for ETH (token = 0x0) and each ERC20 with `amount` set to the contract’s balance, transferring all funds to themselves. 3) Optional: attacker calls `transfer(from, attacker, token, amount)` to pull any user allowances granted to the deposit contract. Profit potential: up to the entire ETH/ERC20 balances held by the deposit contract plus any user allowances approved to it.","recommendation":"Protect `initialize` with an explicit access control check (e.g., onlyOwner/onlyProxy), or set `exchange` in a constructor for non-proxy deployments and disable the initializer on the implementation contract.","evidence":"`initialize` is `external` and only checks `exchange == address(0)` before setting `owner = msg.sender` and `exchange = _exchange`, enabling anyone to claim control if not yet initialized (contracts/Contract.sol:925-936).","locations":["contracts/Contract.sol:925","contracts/Contract.sol:934","contracts/Contract.sol:935"]}]}
[codex:503513] tokens used
[codex:503513] 24,483
[codex:503513] {"no_findings":false,"summary":"Unprotected initializer lets anyone seize the exchange role before initialization and drain all funds held by the deposit contract.","findings":[{"severity":"critical","category":"upgradeability","title":"Unprotected initialize allows exchange takeover and full fund drain","exploit_scenario":"1) Before `exchange` is set, attacker calls `initialize(attackerExchange)` and becomes both `owner` and `exchange` because there is no access control. 2) As `exchange`, attacker calls `withdraw(..., token, amount, ...)` for ETH (token = 0x0) and each ERC20 with `amount` set to the contract’s balance, transferring all funds to themselves. 3) Optional: attacker calls `transfer(from, attacker, token, amount)` to pull any user allowances granted to the deposit contract. Profit potential: up to the entire ETH/ERC20 balances held by the deposit contract plus any user allowances approved to it.","recommendation":"Protect `initialize` with an explicit access control check (e.g., onlyOwner/onlyProxy), or set `exchange` in a constructor for non-proxy deployments and disable the initializer on the implementation contract.","evidence":"`initialize` is `external` and only checks `exchange == address(0)` before setting `owner = msg.sender` and `exchange = _exchange`, enabling anyone to claim control if not yet initialized (contracts/Contract.sol:925-936).","locations":["contracts/Contract.sol:925","contracts/Contract.sol:934","contracts/Contract.sol:935"]}]}
{
"codex": {
"ran_at": "2026-01-01T21:28:22.339526+00:00",
"returncode": 0
},
"summary": "Unprotected initializer lets anyone seize the exchange role before initialization and drain all funds held by the deposit contract.",
"raw_final": {
"summary": "Unprotected initializer lets anyone seize the exchange role before initialization and drain all funds held by the deposit contract.",
"findings": [
{
"title": "Unprotected initialize allows exchange takeover and full fund drain",
"category": "upgradeability",
"evidence": "`initialize` is `external` and only checks `exchange == address(0)` before setting `owner = msg.sender` and `exchange = _exchange`, enabling anyone to claim control if not yet initialized (contracts/Contract.sol:925-936).",
"severity": "critical",
"locations": [
"contracts/Contract.sol:925",
"contracts/Contract.sol:934",
"contracts/Contract.sol:935"
],
"recommendation": "Protect `initialize` with an explicit access control check (e.g., onlyOwner/onlyProxy), or set `exchange` in a constructor for non-proxy deployments and disable the initializer on the implementation contract.",
"exploit_scenario": "1) Before `exchange` is set, attacker calls `initialize(attackerExchange)` and becomes both `owner` and `exchange` because there is no access control. 2) As `exchange`, attacker calls `withdraw(..., token, amount, ...)` for ETH (token = 0x0) and each ERC20 with `amount` set to the contract\u2019s balance, transferring all funds to themselves. 3) Optional: attacker calls `transfer(from, attacker, token, amount)` to pull any user allowances granted to the deposit contract. Profit potential: up to the entire ETH/ERC20 balances held by the deposit contract plus any user allowances approved to it."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x00d2 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0xc4d66de8 00000019: GT 0000001a: PUSH2 0x007f 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0xf18d03cc 00000024: GT 00000025: PUSH2 0x0059 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0xf18d03cc 0000002f: EQ 00000030: PUSH2 0x02ec 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0xf2fde38b 0000003a: EQ 0000003b: PUSH2 0x0335 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xf3d790b7 00000045: EQ 00000046: PUSH2 0x0375 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xf70a2508 00000050: EQ 00000051: PUSH2 0x0441 00000054: JUMPI 00000055: PUSH2 0x00d2 00000058: JUMP 00000059: JUMPDEST 0000005a: DUP1 0000005b: PUSH4 0xc4d66de8 00000060: EQ 00000061: PUSH2 0x0282 00000064: JUMPI 00000065: DUP1 00000066: PUSH4 0xd2f7265a 0000006b: EQ 0000006c: PUSH2 0x02c2 0000006f: JUMPI 00000070: DUP1 00000071: PUSH4 0xe30c3978 00000076: EQ 00000077: PUSH2 0x02d7 0000007a: JUMPI 0000007b: PUSH2 0x00d2 0000007e: JUMP 0000007f: JUMPDEST 00000080: DUP1 00000081: PUSH4 0x715018a6 00000086: GT 00000087: PUSH2 0x00b0 0000008a: JUMPI 0000008b: DUP1 0000008c: PUSH4 0x715018a6 00000091: EQ 00000092: PUSH2 0x01db 00000095: JUMPI 00000096: DUP1 00000097: PUSH4 0x75151b63 0000009c: EQ 0000009d: PUSH2 0x01f0 000000a0: JUMPI 000000a1: DUP1 000000a2: PUSH4 0x8da5cb5b 000000a7: EQ 000000a8: PUSH2 0x0244 000000ab: JUMPI 000000ac: PUSH2 0x00d2 000000af: JUMP 000000b0: JUMPDEST 000000b1: DUP1 000000b2: PUSH4 0x3823f247 000000b7: EQ 000000b8: PUSH2 0x00d7 000000bb: JUMPI 000000bc: DUP1 000000bd: PUSH4 0x4e71e0c8 000000c2: EQ 000000c3: PUSH2 0x017e 000000c6: JUMPI 000000c7: DUP1 000000c8: PUSH4 0x634de7dd 000000cd: EQ 000000ce: PUSH2 0x0193 000000d1: JUMPI 000000d2: JUMPDEST 000000d3: PUSH1 0x00 000000d5: DUP1 000000d6: REVERT 000000d7: JUMPDEST 000000d8: PUSH2 0x017c 000000db: PUSH1 0x04 000000dd: DUP1 000000de: CALLDATASIZE 000000df: SUB 000000e0: PUSH1 0xa0 000000e2: DUP2 000000e3: LT 000000e4: ISZERO 000000e5: PUSH2 0x00ed 000000e8: JUMPI 000000e9: PUSH1 0x00 000000eb: DUP1 000000ec: REVERT 000000ed: JUMPDEST 000000ee: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000103: DUP3 00000104: CALLDATALOAD 00000105: DUP2 00000106: AND 00000107: SWAP3 00000108: PUSH1 0x20 0000010a: DUP2 0000010b: ADD 0000010c: CALLDATALOAD 0000010d: DUP3 0000010e: AND 0000010f: SWAP3 00000110: PUSH1 0x40 00000112: DUP3 00000113: ADD 00000114: CALLDATALOAD 00000115: SWAP1 00000116: SWAP3 00000117: AND 00000118: SWAP2 00000119: PUSH1 0x60 0000011b: DUP3 0000011c: ADD 0000011d: CALLDATALOAD 0000011e: SWAP2 0000011f: SWAP1 00000120: DUP2 00000121: ADD 00000122: SWAP1 00000123: PUSH1 0xa0 00000125: DUP2 00000126: ADD 00000127: PUSH1 0x80 00000129: DUP3 0000012a: ADD 0000012b: CALLDATALOAD 0000012c: PUSH5 0x0100000000 00000132: DUP2 00000133: GT 00000134: ISZERO 00000135: PUSH2 0x013d 00000138: JUMPI 00000139: PUSH1 0x00 0000013b: DUP1 0000013c: REVERT 0000013d: JUMPDEST 0000013e: DUP3 0000013f: ADD 00000140: DUP4 00000141: PUSH1 0x20 00000143: DUP3 00000144: ADD 00000145: GT 00000146: ISZERO 00000147: PUSH2 0x014f 0000014a: JUMPI 0000014b: PUSH1 0x00 0000014d: DUP1 0000014e: REVERT 0000014f: JUMPDEST 00000150: DUP1 00000151: CALLDATALOAD 00000152: SWAP1 00000153: PUSH1 0x20 00000155: ADD 00000156: SWAP2 00000157: DUP5 00000158: PUSH1 0x01 0000015a: DUP4 0000015b: MUL 0000015c: DUP5 0000015d: ADD 0000015e: GT 0000015f: PUSH5 0x0100000000 00000165: DUP4 00000166: GT 00000167: OR 00000168: ISZERO 00000169: PUSH2 0x0171 0000016c: JUMPI 0000016d: PUSH1 0x00 0000016f: DUP1 00000170: REVERT 00000171: JUMPDEST 00000172: POP 00000173: SWAP1 00000174: SWAP3 00000175: POP 00000176: SWAP1 00000177: POP 00000178: PUSH2 0x0481 0000017b: JUMP 0000017c: JUMPDEST 0000017d: STOP 0000017e: JUMPDEST 0000017f: CALLVALUE 00000180: DUP1 00000181: ISZERO 00000182: PUSH2 0x018a 00000185: JUMPI 00000186: PUSH1 0x00 00000188: DUP1 00000189: REVERT 0000018a: JUMPDEST 0000018b: POP 0000018c: PUSH2 0x017c 0000018f: PUSH2 0x069f 00000192: JUMP 00000193: JUMPDEST 00000194: CALLVALUE 00000195: DUP1 00000196: ISZERO 00000197: PUSH2 0x019f 0000019a: JUMPI 0000019b: PUSH1 0x00 0000019d: DUP1 0000019e: REVERT 0000019f: JUMPDEST 000001a0: POP 000001a1: PUSH2 0x017c 000001a4: PUSH1 0x04 000001a6: DUP1 000001a7: CALLDATASIZE 000001a8: SUB 000001a9: PUSH1 0x40 000001ab: DUP2 000001ac: LT 000001ad: ISZERO 000001ae: PUSH2 0x01b6 000001b1: JUMPI 000001b2: PUSH1 0x00 000001b4: DUP1 000001b5: REVERT 000001b6: JUMPDEST 000001b7: POP 000001b8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000001cd: DUP2 000001ce: CALLDATALOAD 000001cf: AND 000001d0: SWAP1 000001d1: PUSH1 0x20 000001d3: ADD 000001d4: CALLDATALOAD 000001d5: ISZERO 000001d6: ISZERO 000001d7: PUSH2 0x07bb 000001da: JUMP 000001db: JUMPDEST 000001dc: CALLVALUE 000001dd: DUP1 000001de: ISZERO 000001df: PUSH2 0x01e7 000001e2: JUMPI 000001e3: PUSH1 0x00 000001e5: DUP1 000001e6: REVERT 000001e7: JUMPDEST 000001e8: POP 000001e9: PUSH2 0x017c 000001ec: PUSH2 0x0967 000001ef: JUMP 000001f0: JUMPDEST 000001f1: CALLVALUE 000001f2: DUP1 000001f3: ISZERO 000001f4: PUSH2 0x01fc 000001f7: JUMPI 000001f8: PUSH1 0x00 000001fa: DUP1 000001fb: REVERT 000001fc: JUMPDEST 000001fd: POP 000001fe: PUSH2 0x0230 00000201: PUSH1 0x04 00000203: DUP1 00000204: CALLDATASIZE 00000205: SUB 00000206: PUSH1 0x20 00000208: DUP2 00000209: LT 0000020a: ISZERO 0000020b: PUSH2 0x0213 0000020e: JUMPI 0000020f: PUSH1 0x00 00000211: DUP1 00000212: REVERT 00000213: JUMPDEST 00000214: POP 00000215: CALLDATALOAD 00000216: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000022b: AND 0000022c: PUSH2 0x0a5c 0000022f: JUMP 00000230: JUMPDEST 00000231: PUSH1 0x40 00000233: DUP1 00000234: MLOAD 00000235: SWAP2 00000236: ISZERO 00000237: ISZERO 00000238: DUP3 00000239: MSTORE 0000023a: MLOAD 0000023b: SWAP1 0000023c: DUP2 0000023d: SWAP1 0000023e: SUB 0000023f: PUSH1 0x20 00000241: ADD 00000242: SWAP1 00000243: RETURN 00000244: JUMPDEST 00000245: CALLVALUE 00000246: DUP1 00000247: ISZERO 00000248: PUSH2 0x0250 0000024b: JUMPI 0000024c: PUSH1 0x00 0000024e: DUP1 0000024f: REVERT 00000250: JUMPDEST 00000251: POP 00000252: PUSH2 0x0259 00000255: PUSH2 0x0a62 00000258: JUMP 00000259: JUMPDEST 0000025a: PUSH1 0x40 0000025c: DUP1 0000025d: MLOAD 0000025e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000273: SWAP1 00000274: SWAP3 00000275: AND 00000276: DUP3 00000277: MSTORE 00000278: MLOAD 00000279: SWAP1 0000027a: DUP2 0000027b: SWAP1 0000027c: SUB 0000027d: PUSH1 0x20 0000027f: ADD 00000280: SWAP1 00000281: RETURN 00000282: JUMPDEST 00000283: CALLVALUE 00000284: DUP1 00000285: ISZERO 00000286: PUSH2 0x028e 00000289: JUMPI 0000028a: PUSH1 0x00 0000028c: DUP1 0000028d: REVERT 0000028e: JUMPDEST 0000028f: POP 00000290: PUSH2 0x017c 00000293: PUSH1 0x04 00000295: DUP1 00000296: CALLDATASIZE 00000297: SUB 00000298: PUSH1 0x20 0000029a: DUP2 0000029b: LT 0000029c: ISZERO 0000029d: PUSH2 0x02a5 000002a0: JUMPI 000002a1: PUSH1 0x00 000002a3: DUP1 000002a4: REVERT 000002a5: JUMPDEST 000002a6: POP 000002a7: CALLDATALOAD 000002a8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000002bd: AND 000002be: PUSH2 0x0a7e 000002c1: JUMP 000002c2: JUMPDEST 000002c3: CALLVALUE 000002c4: DUP1 000002c5: ISZERO 000002c6: PUSH2 0x02ce 000002c9: JUMPI 000002ca: PUSH1 0x00 000002cc: DUP1 000002cd: REVERT 000002ce: JUMPDEST 000002cf: POP 000002d0: PUSH2 0x0259 000002d3: PUSH2 0x0b79 000002d6: JUMP 000002d7: JUMPDEST 000002d8: CALLVALUE 000002d9: DUP1 000002da: ISZERO 000002db: PUSH2 0x02e3 000002de: JUMPI 000002df: PUSH1 0x00 000002e1: DUP1 000002e2: REVERT 000002e3: JUMPDEST 000002e4: POP 000002e5: PUSH2 0x0259 000002e8: PUSH2 0x0b95 000002eb: JUMP 000002ec: JUMPDEST 000002ed: PUSH2 0x017c 000002f0: PUSH1 0x04 000002f2: DUP1 000002f3: CALLDATASIZE 000002f4: SUB 000002f5: PUSH1 0x80 000002f7: DUP2 000002f8: LT 000002f9: ISZERO 000002fa: PUSH2 0x0302 000002fd: JUMPI 000002fe: PUSH1 0x00 00000300: DUP1 00000301: REVERT 00000302: JUMPDEST 00000303: POP 00000304: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000319: DUP2 0000031a: CALLDATALOAD 0000031b: DUP2 0000031c: AND 0000031d: SWAP2 0000031e: PUSH1 0x20 00000320: DUP2 00000321: ADD 00000322: CALLDATALOAD 00000323: DUP3 00000324: AND 00000325: SWAP2 00000326: PUSH1 0x40 00000328: DUP3 00000329: ADD 0000032a: CALLDATALOAD 0000032b: AND 0000032c: SWAP1 0000032d: PUSH1 0x60 0000032f: ADD 00000330: CALLDATALOAD 00000331: PUSH2 0x0bb1 00000334: JUMP 00000335: JUMPDEST 00000336: CALLVALUE 00000337: DUP1 00000338: ISZERO 00000339: PUSH2 0x0341 0000033c: JUMPI 0000033d: PUSH1 0x00 0000033f: DUP1 00000340: REVERT 00000341: JUMPDEST 00000342: POP 00000343: PUSH2 0x017c 00000346: PUSH1 0x04 00000348: DUP1 00000349: CALLDATASIZE 0000034a: SUB 0000034b: PUSH1 0x20 0000034d: DUP2 0000034e: LT 0000034f: ISZERO 00000350: PUSH2 0x0358 00000353: JUMPI 00000354: PUSH1 0x00 00000356: DUP1 00000357: REVERT 00000358: JUMPDEST 00000359: POP 0000035a: CALLDATALOAD 0000035b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000370: AND 00000371: PUSH2 0x0c6b 00000374: JUMP 00000375: JUMPDEST 00000376: PUSH2 0x0420 00000379: PUSH1 0x04 0000037b: DUP1 0000037c: CALLDATASIZE 0000037d: SUB 0000037e: PUSH1 0x80 00000380: DUP2 00000381: LT 00000382: ISZERO 00000383: PUSH2 0x038b 00000386: JUMPI 00000387: PUSH1 0x00 00000389: DUP1 0000038a: REVERT 0000038b: JUMPDEST 0000038c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000003a1: DUP3 000003a2: CALLDATALOAD 000003a3: DUP2 000003a4: AND 000003a5: SWAP3 000003a6: PUSH1 0x20 000003a8: DUP2 000003a9: ADD 000003aa: CALLDATALOAD 000003ab: SWAP1 000003ac: SWAP2 000003ad: AND 000003ae: SWAP2 000003af: PUSH12 0xffffffffffffffffffffffff 000003bc: PUSH1 0x40 000003be: DUP4 000003bf: ADD 000003c0: CALLDATALOAD 000003c1: AND 000003c2: SWAP2 000003c3: SWAP1 000003c4: DUP2 000003c5: ADD 000003c6: SWAP1 000003c7: PUSH1 0x80 000003c9: DUP2 000003ca: ADD 000003cb: PUSH1 0x60 000003cd: DUP3 000003ce: ADD 000003cf: CALLDATALOAD 000003d0: PUSH5 0x0100000000 000003d6: DUP2 000003d7: GT 000003d8: ISZERO 000003d9: PUSH2 0x03e1 000003dc: JUMPI 000003dd: PUSH1 0x00 000003df: DUP1 000003e0: REVERT 000003e1: JUMPDEST 000003e2: DUP3 000003e3: ADD 000003e4: DUP4 000003e5: PUSH1 0x20 000003e7: DUP3 000003e8: ADD 000003e9: GT 000003ea: ISZERO 000003eb: PUSH2 0x03f3 000003ee: JUMPI 000003ef: PUSH1 0x00 000003f1: DUP1 000003f2: REVERT 000003f3: JUMPDEST 000003f4: DUP1 000003f5: CALLDATALOAD 000003f6: SWAP1 000003f7: PUSH1 0x20 000003f9: ADD 000003fa: SWAP2 000003fb: DUP5 000003fc: PUSH1 0x01 000003fe: DUP4 000003ff: MUL 00000400: DUP5 00000401: ADD 00000402: GT 00000403: PUSH5 0x0100000000 00000409: DUP4 0000040a: GT 0000040b: OR 0000040c: ISZERO 0000040d: PUSH2 0x0415 00000410: JUMPI 00000411: PUSH1 0x00 00000413: DUP1 00000414: REVERT 00000415: JUMPDEST 00000416: POP 00000417: SWAP1 00000418: SWAP3 00000419: POP 0000041a: SWAP1 0000041b: POP 0000041c: PUSH2 0x0de3 0000041f: JUMP 00000420: JUMPDEST 00000421: PUSH1 0x40 00000423: DUP1 00000424: MLOAD 00000425: PUSH12 0xffffffffffffffffffffffff 00000432: SWAP1 00000433: SWAP3 00000434: AND 00000435: DUP3 00000436: MSTORE 00000437: MLOAD 00000438: SWAP1 00000439: DUP2 0000043a: SWAP1 0000043b: SUB 0000043c: PUSH1 0x20 0000043e: ADD 0000043f: SWAP1 00000440: RETURN 00000441: JUMPDEST 00000442: CALLVALUE 00000443: DUP1 00000444: ISZERO 00000445: PUSH2 0x044d 00000448: JUMPI 00000449: PUSH1 0x00 0000044b: DUP1 0000044c: REVERT 0000044d: JUMPDEST 0000044e: POP 0000044f: PUSH2 0x0230 00000452: PUSH1 0x04 00000454: DUP1 00000455: CALLDATASIZE 00000456: SUB 00000457: PUSH1 0x20 00000459: DUP2 0000045a: LT 0000045b: ISZERO 0000045c: PUSH2 0x0464 0000045f: JUMPI 00000460: PUSH1 0x00 00000462: DUP1 00000463: REVERT 00000464: JUMPDEST 00000465: POP 00000466: CALLDATALOAD 00000467: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000047c: AND 0000047d: PUSH2 0x113b 00000480: JUMP 00000481: JUMPDEST 00000482: PUSH1 0x02 00000484: SLOAD 00000485: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000049a: AND 0000049b: CALLER 0000049c: EQ 0000049d: PUSH2 0x0507 000004a0: JUMPI 000004a1: PUSH1 0x40 000004a3: DUP1 000004a4: MLOAD 000004a5: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000004c6: DUP2 000004c7: MSTORE 000004c8: PUSH1 0x20 000004ca: PUSH1 0x04 000004cc: DUP3 000004cd: ADD 000004ce: MSTORE 000004cf: PUSH1 0x0c 000004d1: PUSH1 0x24 000004d3: DUP3 000004d4: ADD 000004d5: MSTORE 000004d6: PUSH32 0x554e415554484f52495a45440000000000000000000000000000000000000000 000004f7: PUSH1 0x44 000004f9: DUP3 000004fa: ADD 000004fb: MSTORE 000004fc: SWAP1 000004fd: MLOAD 000004fe: SWAP1 000004ff: DUP2 00000500: SWAP1 00000501: SUB 00000502: PUSH1 0x64 00000504: ADD 00000505: SWAP1 00000506: REVERT 00000507: JUMPDEST 00000508: DUP3 00000509: DUP1 0000050a: PUSH2 0x0512 0000050d: JUMPI 0000050e: PUSH2 0x0696 00000511: JUMP 00000512: JUMPDEST 00000513: PUSH2 0x051b 00000516: DUP6 00000517: PUSH2 0x114c 0000051a: JUMP 0000051b: JUMPDEST 0000051c: ISZERO 0000051d: PUSH2 0x0549 00000520: JUMPI 00000521: PUSH2 0x0543 00000524: DUP5 00000525: GAS 00000526: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000053b: DUP10 0000053c: AND 0000053d: SWAP2 0000053e: SWAP1 0000053f: PUSH2 0x1166 00000542: JUMP 00000543: JUMPDEST 00000544: POP 00000545: PUSH2 0x0696 00000548: JUMP 00000549: JUMPDEST 0000054a: PUSH2 0x056a 0000054d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000562: DUP7 00000563: AND 00000564: DUP8 00000565: DUP7 00000566: PUSH2 0x11fe 00000569: JUMP 0000056a: JUMPDEST 0000056b: PUSH2 0x0696 0000056e: JUMPI 0000056f: PUSH1 0x00 00000571: DUP6 00000572: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000587: AND 00000588: PUSH4 0x70a08231 0000058d: ADDRESS 0000058e: PUSH1 0x40 00000590: MLOAD 00000591: DUP3 00000592: PUSH4 0xffffffff 00000597: AND 00000598: PUSH1 0xe0 0000059a: SHL 0000059b: DUP2 0000059c: MSTORE 0000059d: PUSH1 0x04 0000059f: ADD 000005a0: DUP1 000005a1: DUP3 000005a2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000005b7: AND 000005b8: DUP2 000005b9: MSTORE 000005ba: PUSH1 0x20 000005bc: ADD 000005bd: SWAP2 000005be: POP 000005bf: POP 000005c0: PUSH1 0x20 000005c2: PUSH1 0x40 000005c4: MLOAD 000005c5: DUP1 000005c6: DUP4 000005c7: SUB 000005c8: DUP2 000005c9: DUP7 000005ca: DUP1 000005cb: EXTCODESIZE 000005cc: ISZERO 000005cd: DUP1 000005ce: ISZERO 000005cf: PUSH2 0x05d7 000005d2: JUMPI 000005d3: PUSH1 0x00 000005d5: DUP1 000005d6: REVERT 000005d7: JUMPDEST 000005d8: POP 000005d9: GAS 000005da: STATICCALL 000005db: ISZERO 000005dc: DUP1 000005dd: ISZERO 000005de: PUSH2 0x05eb 000005e1: JUMPI 000005e2: RETURNDATASIZE 000005e3: PUSH1 0x00 000005e5: DUP1 000005e6: RETURNDATACOPY 000005e7: RETURNDATASIZE 000005e8: PUSH1 0x00 000005ea: REVERT 000005eb: JUMPDEST 000005ec: POP 000005ed: POP 000005ee: POP 000005ef: POP 000005f0: PUSH1 0x40 000005f2: MLOAD 000005f3: RETURNDATASIZE 000005f4: PUSH1 0x20 000005f6: DUP2 000005f7: LT 000005f8: ISZERO 000005f9: PUSH2 0x0601 000005fc: JUMPI 000005fd: PUSH1 0x00 000005ff: DUP1 00000600: REVERT 00000601: JUMPDEST 00000602: POP 00000603: MLOAD 00000604: SWAP1 00000605: POP 00000606: DUP5 00000607: DUP2 00000608: LT 00000609: PUSH2 0x0673 0000060c: JUMPI 0000060d: PUSH1 0x40 0000060f: DUP1 00000610: MLOAD 00000611: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000632: DUP2 00000633: MSTORE 00000634: PUSH1 0x20 00000636: PUSH1 0x04 00000638: DUP3 00000639: ADD 0000063a: MSTORE 0000063b: PUSH1 0x0a 0000063d: PUSH1 0x24 0000063f: DUP3 00000640: ADD 00000641: MSTORE 00000642: PUSH32 0x554e455850454354454400000000000000000000000000000000000000000000 00000663: PUSH1 0x44 00000665: DUP3 00000666: ADD 00000667: MSTORE 00000668: SWAP1 00000669: MLOAD 0000066a: SWAP1 0000066b: DUP2 0000066c: SWAP1 0000066d: SUB 0000066e: PUSH1 0x64 00000670: ADD 00000671: SWAP1 00000672: REVERT 00000673: JUMPDEST 00000674: PUSH2 0x0694 00000677: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000068c: DUP8 0000068d: AND 0000068e: DUP9 0000068f: DUP4 00000690: PUSH2 0x1214 00000693: JUMP 00000694: JUMPDEST 00000695: POP 00000696: JUMPDEST 00000697: POP 00000698: POP 00000699: POP 0000069a: POP 0000069b: POP 0000069c: POP 0000069d: POP 0000069e: JUMP 0000069f: JUMPDEST 000006a0: PUSH1 0x01 000006a2: SLOAD 000006a3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000006b8: AND 000006b9: CALLER 000006ba: EQ 000006bb: PUSH2 0x0725 000006be: JUMPI 000006bf: PUSH1 0x40 000006c1: DUP1 000006c2: MLOAD 000006c3: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000006e4: DUP2 000006e5: MSTORE 000006e6: PUSH1 0x20 000006e8: PUSH1 0x04 000006ea: DUP3 000006eb: ADD 000006ec: MSTORE 000006ed: PUSH1 0x0c 000006ef: PUSH1 0x24 000006f1: DUP3 000006f2: ADD 000006f3: MSTORE 000006f4: PUSH32 0x554e415554484f52495a45440000000000000000000000000000000000000000 00000715: PUSH1 0x44 00000717: DUP3 00000718: ADD 00000719: MSTORE 0000071a: SWAP1 0000071b: MLOAD 0000071c: SWAP1 0000071d: DUP2 0000071e: SWAP1 0000071f: SUB 00000720: PUSH1 0x64 00000722: ADD 00000723: SWAP1 00000724: REVERT 00000725: JUMPDEST 00000726: PUSH1 0x01 00000728: SLOAD 00000729: PUSH1 0x00 0000072b: DUP1 0000072c: SLOAD 0000072d: PUSH1 0x40 0000072f: MLOAD 00000730: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000745: SWAP4 00000746: DUP5 00000747: AND 00000748: SWAP4 00000749: SWAP1 0000074a: SWAP2 0000074b: AND 0000074c: SWAP2 0000074d: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 0000076e: SWAP2 0000076f: LOG3 00000770: PUSH1 0x01 00000772: DUP1 00000773: SLOAD 00000774: PUSH1 0x00 00000776: DUP1 00000777: SLOAD 00000778: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 00000799: SWAP1 0000079a: DUP2 0000079b: AND 0000079c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000007b1: DUP5 000007b2: AND 000007b3: OR 000007b4: SWAP1 000007b5: SWAP2 000007b6: SSTORE 000007b7: AND 000007b8: SWAP1 000007b9: SSTORE 000007ba: JUMP 000007bb: JUMPDEST 000007bc: PUSH1 0x00 000007be: SLOAD 000007bf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000007d4: AND 000007d5: CALLER 000007d6: EQ 000007d7: PUSH2 0x0841 000007da: JUMPI 000007db: PUSH1 0x40 000007dd: DUP1 000007de: MLOAD 000007df: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000800: DUP2 00000801: MSTORE 00000802: PUSH1 0x20 00000804: PUSH1 0x04 00000806: DUP3 00000807: ADD 00000808: MSTORE 00000809: PUSH1 0x0c 0000080b: PUSH1 0x24 0000080d: DUP3 0000080e: ADD 0000080f: MSTORE 00000810: PUSH32 0x554e415554484f52495a45440000000000000000000000000000000000000000 00000831: PUSH1 0x44 00000833: DUP3 00000834: ADD 00000835: MSTORE 00000836: SWAP1 00000837: MLOAD 00000838: SWAP1 00000839: DUP2 0000083a: SWAP1 0000083b: SUB 0000083c: PUSH1 0x64 0000083e: ADD 0000083f: SWAP1 00000840: REVERT 00000841: JUMPDEST 00000842: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000857: DUP3 00000858: AND 00000859: PUSH1 0x00 0000085b: SWAP1 0000085c: DUP2 0000085d: MSTORE 0000085e: PUSH1 0x03 00000860: PUSH1 0x20 00000862: MSTORE 00000863: PUSH1 0x40 00000865: SWAP1 00000866: KECCAK256 00000867: SLOAD 00000868: PUSH1 0xff 0000086a: AND 0000086b: ISZERO 0000086c: ISZERO 0000086d: DUP2 0000086e: ISZERO 0000086f: ISZERO 00000870: EQ 00000871: ISZERO 00000872: PUSH2 0x08dc 00000875: JUMPI 00000876: PUSH1 0x40 00000878: DUP1 00000879: MLOAD 0000087a: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 0000089b: DUP2 0000089c: MSTORE 0000089d: PUSH1 0x20 0000089f: PUSH1 0x04 000008a1: DUP3 000008a2: ADD 000008a3: MSTORE 000008a4: PUSH1 0x0d 000008a6: PUSH1 0x24 000008a8: DUP3 000008a9: ADD 000008aa: MSTORE 000008ab: PUSH32 0x494e56414c49445f56414c554500000000000000000000000000000000000000 000008cc: PUSH1 0x44 000008ce: DUP3 000008cf: ADD 000008d0: MSTORE 000008d1: SWAP1 000008d2: MLOAD 000008d3: SWAP1 000008d4: DUP2 000008d5: SWAP1 000008d6: SUB 000008d7: PUSH1 0x64 000008d9: ADD 000008da: SWAP1 000008db: REVERT 000008dc: JUMPDEST 000008dd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000008f2: DUP3 000008f3: AND 000008f4: PUSH1 0x00 000008f6: DUP2 000008f7: DUP2 000008f8: MSTORE 000008f9: PUSH1 0x03 000008fb: PUSH1 0x20 000008fd: SWAP1 000008fe: DUP2 000008ff: MSTORE 00000900: PUSH1 0x40 00000902: SWAP2 00000903: DUP3 00000904: SWAP1 00000905: KECCAK256 00000906: DUP1 00000907: SLOAD 00000908: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 00000929: AND 0000092a: DUP6 0000092b: ISZERO 0000092c: ISZERO 0000092d: SWAP1 0000092e: DUP2 0000092f: OR 00000930: SWAP1 00000931: SWAP2 00000932: SSTORE 00000933: DUP3 00000934: MLOAD 00000935: SWAP1 00000936: DUP2 00000937: MSTORE 00000938: SWAP2 00000939: MLOAD 0000093a: PUSH32 0x5ca546e2df4ecf26ee1e85b99c7fc08237e0fc2bc8df80f9f3e0fa5a7116ed81 0000095b: SWAP3 0000095c: DUP2 0000095d: SWAP1 0000095e: SUB 0000095f: SWAP1 00000960: SWAP2 00000961: ADD 00000962: SWAP1 00000963: LOG2 00000964: POP 00000965: POP 00000966: JUMP 00000967: JUMPDEST 00000968: PUSH1 0x00 0000096a: SLOAD 0000096b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000980: AND 00000981: CALLER 00000982: EQ 00000983: PUSH2 0x09ed 00000986: JUMPI 00000987: PUSH1 0x40 00000989: DUP1 0000098a: MLOAD 0000098b: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000009ac: DUP2 000009ad: MSTORE 000009ae: PUSH1 0x20 000009b0: PUSH1 0x04 000009b2: DUP3 000009b3: ADD 000009b4: MSTORE 000009b5: PUSH1 0x0c 000009b7: PUSH1 0x24 000009b9: DUP3 000009ba: ADD 000009bb: MSTORE 000009bc: PUSH32 0x554e415554484f52495a45440000000000000000000000000000000000000000 000009dd: PUSH1 0x44 000009df: DUP3 000009e0: ADD 000009e1: MSTORE 000009e2: SWAP1 000009e3: MLOAD 000009e4: SWAP1 000009e5: DUP2 000009e6: SWAP1 000009e7: SUB 000009e8: PUSH1 0x64 000009ea: ADD 000009eb: SWAP1 000009ec: REVERT 000009ed: JUMPDEST 000009ee: PUSH1 0x00 000009f0: DUP1 000009f1: SLOAD 000009f2: PUSH1 0x40 000009f4: MLOAD 000009f5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a0a: SWAP1 00000a0b: SWAP2 00000a0c: AND 00000a0d: SWAP1 00000a0e: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 00000a2f: SWAP1 00000a30: DUP4 00000a31: SWAP1 00000a32: LOG3 00000a33: PUSH1 0x00 00000a35: DUP1 00000a36: SLOAD 00000a37: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 00000a58: AND 00000a59: SWAP1 00000a5a: SSTORE 00000a5b: JUMP 00000a5c: JUMPDEST 00000a5d: POP 00000a5e: PUSH1 0x01 00000a60: SWAP1 00000a61: JUMP 00000a62: JUMPDEST 00000a63: PUSH1 0x00 00000a65: SLOAD 00000a66: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a7b: AND 00000a7c: DUP2 00000a7d: JUMP 00000a7e: JUMPDEST 00000a7f: PUSH1 0x02 00000a81: SLOAD 00000a82: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a97: AND 00000a98: ISZERO 00000a99: DUP1 00000a9a: ISZERO 00000a9b: PUSH2 0x0ab9 00000a9e: JUMPI 00000a9f: POP 00000aa0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ab5: DUP2 00000ab6: AND 00000ab7: ISZERO 00000ab8: ISZERO 00000ab9: JUMPDEST 00000aba: PUSH2 0x0b24 00000abd: JUMPI 00000abe: PUSH1 0x40 00000ac0: DUP1 00000ac1: MLOAD 00000ac2: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000ae3: DUP2 00000ae4: MSTORE 00000ae5: PUSH1 0x20 00000ae7: PUSH1 0x04 00000ae9: DUP3 00000aea: ADD 00000aeb: MSTORE 00000aec: PUSH1 0x10 00000aee: PUSH1 0x24 00000af0: DUP3 00000af1: ADD 00000af2: MSTORE 00000af3: PUSH32 0x494e56414c49445f45584348414e474500000000000000000000000000000000 00000b14: PUSH1 0x44 00000b16: DUP3 00000b17: ADD 00000b18: MSTORE 00000b19: SWAP1 00000b1a: MLOAD 00000b1b: SWAP1 00000b1c: DUP2 00000b1d: SWAP1 00000b1e: SUB 00000b1f: PUSH1 0x64 00000b21: ADD 00000b22: SWAP1 00000b23: REVERT 00000b24: JUMPDEST 00000b25: PUSH1 0x00 00000b27: DUP1 00000b28: SLOAD 00000b29: CALLER 00000b2a: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 00000b4b: SWAP2 00000b4c: DUP3 00000b4d: AND 00000b4e: OR 00000b4f: SWAP1 00000b50: SWAP2 00000b51: SSTORE 00000b52: PUSH1 0x02 00000b54: DUP1 00000b55: SLOAD 00000b56: SWAP1 00000b57: SWAP2 00000b58: AND 00000b59: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000b6e: SWAP3 00000b6f: SWAP1 00000b70: SWAP3 00000b71: AND 00000b72: SWAP2 00000b73: SWAP1 00000b74: SWAP2 00000b75: OR 00000b76: SWAP1 00000b77: SSTORE 00000b78: JUMP 00000b79: JUMPDEST 00000b7a: PUSH1 0x02 00000b7c: SLOAD 00000b7d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000b92: AND 00000b93: DUP2 00000b94: JUMP 00000b95: JUMPDEST 00000b96: PUSH1 0x01 00000b98: SLOAD 00000b99: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000bae: AND 00000baf: DUP2 00000bb0: JUMP 00000bb1: JUMPDEST 00000bb2: PUSH1 0x02 00000bb4: SLOAD 00000bb5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000bca: AND 00000bcb: CALLER 00000bcc: EQ 00000bcd: PUSH2 0x0c37 00000bd0: JUMPI 00000bd1: PUSH1 0x40 00000bd3: DUP1 00000bd4: MLOAD 00000bd5: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000bf6: DUP2 00000bf7: MSTORE 00000bf8: PUSH1 0x20 00000bfa: PUSH1 0x04 00000bfc: DUP3 00000bfd: ADD 00000bfe: MSTORE 00000bff: PUSH1 0x0c 00000c01: PUSH1 0x24 00000c03: DUP3 00000c04: ADD 00000c05: MSTORE 00000c06: PUSH32 0x554e415554484f52495a45440000000000000000000000000000000000000000 00000c27: PUSH1 0x44 00000c29: DUP3 00000c2a: ADD 00000c2b: MSTORE 00000c2c: SWAP1 00000c2d: MLOAD 00000c2e: SWAP1 00000c2f: DUP2 00000c30: SWAP1 00000c31: SUB 00000c32: PUSH1 0x64 00000c34: ADD 00000c35: SWAP1 00000c36: REVERT 00000c37: JUMPDEST 00000c38: DUP1 00000c39: DUP1 00000c3a: PUSH2 0x0c42 00000c3d: JUMPI 00000c3e: PUSH2 0x0c64 00000c41: JUMP 00000c42: JUMPDEST 00000c43: PUSH2 0x0c64 00000c46: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c5b: DUP5 00000c5c: AND 00000c5d: DUP7 00000c5e: DUP7 00000c5f: DUP6 00000c60: PUSH2 0x1225 00000c63: JUMP 00000c64: JUMPDEST 00000c65: POP 00000c66: POP 00000c67: POP 00000c68: POP 00000c69: POP 00000c6a: JUMP 00000c6b: JUMPDEST 00000c6c: PUSH1 0x00 00000c6e: SLOAD 00000c6f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c84: AND 00000c85: CALLER 00000c86: EQ 00000c87: PUSH2 0x0cf1 00000c8a: JUMPI 00000c8b: PUSH1 0x40 00000c8d: DUP1 00000c8e: MLOAD 00000c8f: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000cb0: DUP2 00000cb1: MSTORE 00000cb2: PUSH1 0x20 00000cb4: PUSH1 0x04 00000cb6: DUP3 00000cb7: ADD 00000cb8: MSTORE 00000cb9: PUSH1 0x0c 00000cbb: PUSH1 0x24 00000cbd: DUP3 00000cbe: ADD 00000cbf: MSTORE 00000cc0: PUSH32 0x554e415554484f52495a45440000000000000000000000000000000000000000 00000ce1: PUSH1 0x44 00000ce3: DUP3 00000ce4: ADD 00000ce5: MSTORE 00000ce6: SWAP1 00000ce7: MLOAD 00000ce8: SWAP1 00000ce9: DUP2 00000cea: SWAP1 00000ceb: SUB 00000cec: PUSH1 0x64 00000cee: ADD 00000cef: SWAP1 00000cf0: REVERT 00000cf1: JUMPDEST 00000cf2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d07: DUP2 00000d08: AND 00000d09: ISZERO 00000d0a: DUP1 00000d0b: ISZERO 00000d0c: SWAP1 00000d0d: PUSH2 0x0d31 00000d10: JUMPI 00000d11: POP 00000d12: PUSH1 0x00 00000d14: SLOAD 00000d15: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d2a: DUP3 00000d2b: DUP2 00000d2c: AND 00000d2d: SWAP2 00000d2e: AND 00000d2f: EQ 00000d30: ISZERO 00000d31: JUMPDEST 00000d32: PUSH2 0x0d9c 00000d35: JUMPI 00000d36: PUSH1 0x40 00000d38: DUP1 00000d39: MLOAD 00000d3a: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000d5b: DUP2 00000d5c: MSTORE 00000d5d: PUSH1 0x20 00000d5f: PUSH1 0x04 00000d61: DUP3 00000d62: ADD 00000d63: MSTORE 00000d64: PUSH1 0x0f 00000d66: PUSH1 0x24 00000d68: DUP3 00000d69: ADD 00000d6a: MSTORE 00000d6b: PUSH32 0x494e56414c49445f414444524553530000000000000000000000000000000000 00000d8c: PUSH1 0x44 00000d8e: DUP3 00000d8f: ADD 00000d90: MSTORE 00000d91: SWAP1 00000d92: MLOAD 00000d93: SWAP1 00000d94: DUP2 00000d95: SWAP1 00000d96: SUB 00000d97: PUSH1 0x64 00000d99: ADD 00000d9a: SWAP1 00000d9b: REVERT 00000d9c: JUMPDEST 00000d9d: PUSH1 0x01 00000d9f: DUP1 00000da0: SLOAD 00000da1: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 00000dc2: AND 00000dc3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000dd8: SWAP3 00000dd9: SWAP1 00000dda: SWAP3 00000ddb: AND 00000ddc: SWAP2 00000ddd: SWAP1 00000dde: SWAP2 00000ddf: OR 00000de0: SWAP1 00000de1: SSTORE 00000de2: JUMP 00000de3: JUMPDEST 00000de4: PUSH1 0x02 00000de6: SLOAD 00000de7: PUSH1 0x00 00000de9: SWAP1 00000dea: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000dff: AND 00000e00: CALLER 00000e01: EQ 00000e02: PUSH2 0x0e6c 00000e05: JUMPI 00000e06: PUSH1 0x40 00000e08: DUP1 00000e09: MLOAD 00000e0a: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000e2b: DUP2 00000e2c: MSTORE 00000e2d: PUSH1 0x20 00000e2f: PUSH1 0x04 00000e31: DUP3 00000e32: ADD 00000e33: MSTORE 00000e34: PUSH1 0x0c 00000e36: PUSH1 0x24 00000e38: DUP3 00000e39: ADD 00000e3a: MSTORE 00000e3b: PUSH32 0x554e415554484f52495a45440000000000000000000000000000000000000000 00000e5c: PUSH1 0x44 00000e5e: DUP3 00000e5f: ADD 00000e60: MSTORE 00000e61: SWAP1 00000e62: MLOAD 00000e63: SWAP1 00000e64: DUP2 00000e65: SWAP1 00000e66: SUB 00000e67: PUSH1 0x64 00000e69: ADD 00000e6a: SWAP1 00000e6b: REVERT 00000e6c: JUMPDEST 00000e6d: PUSH12 0xffffffffffffffffffffffff 00000e7a: DUP5 00000e7b: AND 00000e7c: DUP1 00000e7d: PUSH2 0x0e85 00000e80: JUMPI 00000e81: PUSH2 0x1131 00000e84: JUMP 00000e85: JUMPDEST 00000e86: PUSH1 0x00 00000e88: PUSH2 0x0e90 00000e8b: DUP8 00000e8c: PUSH2 0x114c 00000e8f: JUMP 00000e90: JUMPDEST 00000e91: ISZERO 00000e92: PUSH2 0x0f2c 00000e95: JUMPI 00000e96: DUP6 00000e97: PUSH12 0xffffffffffffffffffffffff 00000ea4: AND 00000ea5: CALLVALUE 00000ea6: LT 00000ea7: ISZERO 00000ea8: PUSH2 0x0f12 00000eab: JUMPI 00000eac: PUSH1 0x40 00000eae: DUP1 00000eaf: MLOAD 00000eb0: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000ed1: DUP2 00000ed2: MSTORE 00000ed3: PUSH1 0x20 00000ed5: PUSH1 0x04 00000ed7: DUP3 00000ed8: ADD 00000ed9: MSTORE 00000eda: PUSH1 0x13 00000edc: PUSH1 0x24 00000ede: DUP3 00000edf: ADD 00000ee0: MSTORE 00000ee1: PUSH32 0x494e56414c49445f4554485f4445504f53495400000000000000000000000000 00000f02: PUSH1 0x44 00000f04: DUP3 00000f05: ADD 00000f06: MSTORE 00000f07: SWAP1 00000f08: MLOAD 00000f09: SWAP1 00000f0a: DUP2 00000f0b: SWAP1 00000f0c: SUB 00000f0d: PUSH1 0x64 00000f0f: ADD 00000f10: SWAP1 00000f11: REVERT 00000f12: JUMPDEST 00000f13: POP 00000f14: DUP5 00000f15: SWAP2 00000f16: POP 00000f17: PUSH12 0xffffffffffffffffffffffff 00000f24: DUP3 00000f25: AND 00000f26: CALLVALUE 00000f27: SUB 00000f28: PUSH2 0x1104 00000f2b: JUMP 00000f2c: JUMPDEST 00000f2d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f42: DUP8 00000f43: AND 00000f44: PUSH1 0x00 00000f46: SWAP1 00000f47: DUP2 00000f48: MSTORE 00000f49: PUSH1 0x03 00000f4b: PUSH1 0x20 00000f4d: MSTORE 00000f4e: PUSH1 0x40 00000f50: DUP2 00000f51: KECCAK256 00000f52: SLOAD 00000f53: PUSH1 0xff 00000f55: AND 00000f56: SWAP1 00000f57: DUP2 00000f58: PUSH2 0x0f62 00000f5b: JUMPI 00000f5c: PUSH1 0x00 00000f5e: PUSH2 0x0ffb 00000f61: JUMP 00000f62: JUMPDEST 00000f63: PUSH1 0x40 00000f65: DUP1 00000f66: MLOAD 00000f67: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000 00000f88: DUP2 00000f89: MSTORE 00000f8a: ADDRESS 00000f8b: PUSH1 0x04 00000f8d: DUP3 00000f8e: ADD 00000f8f: MSTORE 00000f90: SWAP1 00000f91: MLOAD 00000f92: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000fa7: DUP12 00000fa8: AND 00000fa9: SWAP2 00000faa: PUSH4 0x70a08231 00000faf: SWAP2 00000fb0: PUSH1 0x24 00000fb2: DUP1 00000fb3: DUP4 00000fb4: ADD 00000fb5: SWAP3 00000fb6: PUSH1 0x20 00000fb8: SWAP3 00000fb9: SWAP2 00000fba: SWAP1 00000fbb: DUP3 00000fbc: SWAP1 00000fbd: SUB 00000fbe: ADD 00000fbf: DUP2 00000fc0: DUP7 00000fc1: DUP1 00000fc2: EXTCODESIZE 00000fc3: ISZERO 00000fc4: DUP1 00000fc5: ISZERO 00000fc6: PUSH2 0x0fce 00000fc9: JUMPI 00000fca: PUSH1 0x00 00000fcc: DUP1 00000fcd: REVERT 00000fce: JUMPDEST 00000fcf: POP 00000fd0: GAS 00000fd1: STATICCALL 00000fd2: ISZERO 00000fd3: DUP1 00000fd4: ISZERO 00000fd5: PUSH2 0x0fe2 00000fd8: JUMPI 00000fd9: RETURNDATASIZE 00000fda: PUSH1 0x00 00000fdc: DUP1 00000fdd: RETURNDATACOPY 00000fde: RETURNDATASIZE 00000fdf: PUSH1 0x00 00000fe1: REVERT 00000fe2: JUMPDEST 00000fe3: POP 00000fe4: POP 00000fe5: POP 00000fe6: POP 00000fe7: PUSH1 0x40 00000fe9: MLOAD 00000fea: RETURNDATASIZE 00000feb: PUSH1 0x20 00000fed: DUP2 00000fee: LT 00000fef: ISZERO 00000ff0: PUSH2 0x0ff8 00000ff3: JUMPI 00000ff4: PUSH1 0x00 00000ff6: DUP1 00000ff7: REVERT 00000ff8: JUMPDEST 00000ff9: POP 00000ffa: MLOAD 00000ffb: JUMPDEST 00000ffc: SWAP1 00000ffd: POP 00000ffe: PUSH2 0x102d 00001001: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001016: DUP11 00001017: AND 00001018: DUP12 00001019: ADDRESS 0000101a: PUSH12 0xffffffffffffffffffffffff 00001027: DUP13 00001028: AND 00001029: PUSH2 0x1225 0000102c: JUMP 0000102d: JUMPDEST 0000102e: PUSH1 0x00 00001030: DUP3 00001031: PUSH2 0x1048 00001034: JUMPI 00001035: DUP9 00001036: PUSH12 0xffffffffffffffffffffffff 00001043: AND 00001044: PUSH2 0x10e1 00001047: JUMP 00001048: JUMPDEST 00001049: PUSH1 0x40 0000104b: DUP1 0000104c: MLOAD 0000104d: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000 0000106e: DUP2 0000106f: MSTORE 00001070: ADDRESS 00001071: PUSH1 0x04 00001073: DUP3 00001074: ADD 00001075: MSTORE 00001076: SWAP1 00001077: MLOAD 00001078: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000108d: DUP13 0000108e: AND 0000108f: SWAP2 00001090: PUSH4 0x70a08231 00001095: SWAP2 00001096: PUSH1 0x24 00001098: DUP1 00001099: DUP4 0000109a: ADD 0000109b: SWAP3 0000109c: PUSH1 0x20 0000109e: SWAP3 0000109f: SWAP2 000010a0: SWAP1 000010a1: DUP3 000010a2: SWAP1 000010a3: SUB 000010a4: ADD 000010a5: DUP2 000010a6: DUP7 000010a7: DUP1 000010a8: EXTCODESIZE 000010a9: ISZERO 000010aa: DUP1 000010ab: ISZERO 000010ac: PUSH2 0x10b4 000010af: JUMPI 000010b0: PUSH1 0x00 000010b2: DUP1 000010b3: REVERT 000010b4: JUMPDEST 000010b5: POP 000010b6: GAS 000010b7: STATICCALL 000010b8: ISZERO 000010b9: DUP1 000010ba: ISZERO 000010bb: PUSH2 0x10c8 000010be: JUMPI 000010bf: RETURNDATASIZE 000010c0: PUSH1 0x00 000010c2: DUP1 000010c3: RETURNDATACOPY 000010c4: RETURNDATASIZE 000010c5: PUSH1 0x00 000010c7: REVERT 000010c8: JUMPDEST 000010c9: POP 000010ca: POP 000010cb: POP 000010cc: POP 000010cd: PUSH1 0x40 000010cf: MLOAD 000010d0: RETURNDATASIZE 000010d1: PUSH1 0x20 000010d3: DUP2 000010d4: LT 000010d5: ISZERO 000010d6: PUSH2 0x10de 000010d9: JUMPI 000010da: PUSH1 0x00 000010dc: DUP1 000010dd: REVERT 000010de: JUMPDEST 000010df: POP 000010e0: MLOAD 000010e1: JUMPDEST 000010e2: SWAP1 000010e3: POP 000010e4: PUSH1 0x00 000010e6: PUSH2 0x10ef 000010e9: DUP3 000010ea: DUP5 000010eb: PUSH2 0x1238 000010ee: JUMP 000010ef: JUMPDEST 000010f0: SWAP1 000010f1: POP 000010f2: PUSH2 0x10fa 000010f5: DUP2 000010f6: PUSH2 0x12af 000010f9: JUMP 000010fa: JUMPDEST 000010fb: SWAP7 000010fc: POP 000010fd: CALLVALUE 000010fe: SWAP5 000010ff: POP 00001100: POP 00001101: POP 00001102: POP 00001103: POP 00001104: JUMPDEST 00001105: DUP1 00001106: ISZERO 00001107: PUSH2 0x112f 0000110a: JUMPI 0000110b: PUSH2 0x112d 0000110e: DUP2 0000110f: GAS 00001110: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001125: DUP12 00001126: AND 00001127: SWAP2 00001128: SWAP1 00001129: PUSH2 0x1166 0000112c: JUMP 0000112d: JUMPDEST 0000112e: POP 0000112f: JUMPDEST 00001130: POP 00001131: JUMPDEST 00001132: POP 00001133: SWAP6 00001134: SWAP5 00001135: POP 00001136: POP 00001137: POP 00001138: POP 00001139: POP 0000113a: JUMP 0000113b: JUMPDEST 0000113c: PUSH1 0x00 0000113e: PUSH2 0x1146 00001141: DUP3 00001142: PUSH2 0x114c 00001145: JUMP 00001146: JUMPDEST 00001147: SWAP3 00001148: SWAP2 00001149: POP 0000114a: POP 0000114b: JUMP 0000114c: JUMPDEST 0000114d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001162: AND 00001163: ISZERO 00001164: SWAP1 00001165: JUMP 00001166: JUMPDEST 00001167: PUSH1 0x00 00001169: PUSH2 0x1189 0000116c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001181: DUP6 00001182: AND 00001183: DUP5 00001184: DUP5 00001185: PUSH2 0x131a 00001188: JUMP 00001189: JUMPDEST 0000118a: SWAP1 0000118b: POP 0000118c: DUP1 0000118d: PUSH2 0x11f7 00001190: JUMPI 00001191: PUSH1 0x40 00001193: DUP1 00001194: MLOAD 00001195: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000011b6: DUP2 000011b7: MSTORE 000011b8: PUSH1 0x20 000011ba: PUSH1 0x04 000011bc: DUP3 000011bd: ADD 000011be: MSTORE 000011bf: PUSH1 0x10 000011c1: PUSH1 0x24 000011c3: DUP3 000011c4: ADD 000011c5: MSTORE 000011c6: PUSH32 0x5452414e534645525f4641494c55524500000000000000000000000000000000 000011e7: PUSH1 0x44 000011e9: DUP3 000011ea: ADD 000011eb: MSTORE 000011ec: SWAP1 000011ed: MLOAD 000011ee: SWAP1 000011ef: DUP2 000011f0: SWAP1 000011f1: SUB 000011f2: PUSH1 0x64 000011f4: ADD 000011f5: SWAP1 000011f6: REVERT 000011f7: JUMPDEST 000011f8: SWAP4 000011f9: SWAP3 000011fa: POP 000011fb: POP 000011fc: POP 000011fd: JUMP 000011fe: JUMPDEST 000011ff: PUSH1 0x00 00001201: PUSH2 0x120c 00001204: DUP5 00001205: DUP5 00001206: DUP5 00001207: GAS 00001208: PUSH2 0x13b7 0000120b: JUMP 0000120c: JUMPDEST 0000120d: SWAP5 0000120e: SWAP4 0000120f: POP 00001210: POP 00001211: POP 00001212: POP 00001213: JUMP 00001214: JUMPDEST 00001215: PUSH2 0x1220 00001218: DUP4 00001219: DUP4 0000121a: DUP4 0000121b: GAS 0000121c: PUSH2 0x150c 0000121f: JUMP 00001220: JUMPDEST 00001221: POP 00001222: POP 00001223: POP 00001224: JUMP 00001225: JUMPDEST 00001226: PUSH2 0x1232 00001229: DUP5 0000122a: DUP5 0000122b: DUP5 0000122c: DUP5 0000122d: GAS 0000122e: PUSH2 0x1583 00001231: JUMP 00001232: JUMPDEST 00001233: POP 00001234: POP 00001235: POP 00001236: POP 00001237: JUMP 00001238: JUMPDEST 00001239: PUSH1 0x00 0000123b: DUP3 0000123c: DUP3 0000123d: GT 0000123e: ISZERO 0000123f: PUSH2 0x12a9 00001242: JUMPI 00001243: PUSH1 0x40 00001245: DUP1 00001246: MLOAD 00001247: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001268: DUP2 00001269: MSTORE 0000126a: PUSH1 0x20 0000126c: PUSH1 0x04 0000126e: DUP3 0000126f: ADD 00001270: MSTORE 00001271: PUSH1 0x0d 00001273: PUSH1 0x24 00001275: DUP3 00001276: ADD 00001277: MSTORE 00001278: PUSH32 0x5355425f554e444552464c4f5700000000000000000000000000000000000000 00001299: PUSH1 0x44 0000129b: DUP3 0000129c: ADD 0000129d: MSTORE 0000129e: SWAP1 0000129f: MLOAD 000012a0: SWAP1 000012a1: DUP2 000012a2: SWAP1 000012a3: SUB 000012a4: PUSH1 0x64 000012a6: ADD 000012a7: SWAP1 000012a8: REVERT 000012a9: JUMPDEST 000012aa: POP 000012ab: SWAP1 000012ac: SUB 000012ad: SWAP1 000012ae: JUMP 000012af: JUMPDEST 000012b0: PUSH1 0x00 000012b2: PUSH13 0x01000000000000000000000000 000012c0: DUP3 000012c1: LT 000012c2: PUSH2 0x1316 000012c5: JUMPI 000012c6: PUSH1 0x40 000012c8: MLOAD 000012c9: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000012ea: DUP2 000012eb: MSTORE 000012ec: PUSH1 0x04 000012ee: ADD 000012ef: DUP1 000012f0: DUP1 000012f1: PUSH1 0x20 000012f3: ADD 000012f4: DUP3 000012f5: DUP2 000012f6: SUB 000012f7: DUP3 000012f8: MSTORE 000012f9: PUSH1 0x26 000012fb: DUP2 000012fc: MSTORE 000012fd: PUSH1 0x20 000012ff: ADD 00001300: DUP1 00001301: PUSH2 0x17a6 00001304: PUSH1 0x26 00001306: SWAP2 00001307: CODECOPY 00001308: PUSH1 0x40 0000130a: ADD 0000130b: SWAP2 0000130c: POP 0000130d: POP 0000130e: PUSH1 0x40 00001310: MLOAD 00001311: DUP1 00001312: SWAP2 00001313: SUB 00001314: SWAP1 00001315: REVERT 00001316: JUMPDEST 00001317: POP 00001318: SWAP1 00001319: JUMP 0000131a: JUMPDEST 0000131b: PUSH1 0x00 0000131d: DUP3 0000131e: PUSH2 0x1329 00001321: JUMPI 00001322: POP 00001323: PUSH1 0x01 00001325: PUSH2 0x11f7 00001328: JUMP 00001329: JUMPDEST 0000132a: PUSH1 0x00 0000132c: PUSH2 0x134a 0000132f: DUP6 00001330: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001345: AND 00001346: PUSH2 0x1608 00001349: JUMP 0000134a: JUMPDEST 0000134b: PUSH1 0x40 0000134d: MLOAD 0000134e: SWAP1 0000134f: SWAP2 00001350: POP 00001351: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001366: DUP3 00001367: AND 00001368: SWAP1 00001369: DUP5 0000136a: SWAP1 0000136b: DUP7 0000136c: SWAP1 0000136d: PUSH1 0x00 0000136f: DUP2 00001370: DUP2 00001371: DUP2 00001372: DUP6 00001373: DUP9 00001374: DUP9 00001375: CALL 00001376: SWAP4 00001377: POP 00001378: POP 00001379: POP 0000137a: POP 0000137b: RETURNDATASIZE 0000137c: DUP1 0000137d: PUSH1 0x00 0000137f: DUP2 00001380: EQ 00001381: PUSH2 0x13a6 00001384: JUMPI 00001385: PUSH1 0x40 00001387: MLOAD 00001388: SWAP2 00001389: POP 0000138a: PUSH1 0x1f 0000138c: NOT 0000138d: PUSH1 0x3f 0000138f: RETURNDATASIZE 00001390: ADD 00001391: AND 00001392: DUP3 00001393: ADD 00001394: PUSH1 0x40 00001396: MSTORE 00001397: RETURNDATASIZE 00001398: DUP3 00001399: MSTORE 0000139a: RETURNDATASIZE 0000139b: PUSH1 0x00 0000139d: PUSH1 0x20 0000139f: DUP5 000013a0: ADD 000013a1: RETURNDATACOPY 000013a2: PUSH2 0x13ab 000013a5: JUMP 000013a6: JUMPDEST 000013a7: PUSH1 0x60 000013a9: SWAP2 000013aa: POP 000013ab: JUMPDEST 000013ac: POP 000013ad: SWAP1 000013ae: SWAP7 000013af: SWAP6 000013b0: POP 000013b1: POP 000013b2: POP 000013b3: POP 000013b4: POP 000013b5: POP 000013b6: JUMP 000013b7: JUMPDEST 000013b8: PUSH1 0x40 000013ba: DUP1 000013bb: MLOAD 000013bc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000013d1: DUP1 000013d2: DUP7 000013d3: AND 000013d4: PUSH1 0x24 000013d6: DUP4 000013d7: ADD 000013d8: MSTORE 000013d9: PUSH1 0x44 000013db: DUP1 000013dc: DUP4 000013dd: ADD 000013de: DUP7 000013df: SWAP1 000013e0: MSTORE 000013e1: DUP4 000013e2: MLOAD 000013e3: DUP1 000013e4: DUP5 000013e5: SUB 000013e6: SWAP1 000013e7: SWAP2 000013e8: ADD 000013e9: DUP2 000013ea: MSTORE 000013eb: PUSH1 0x64 000013ed: SWAP1 000013ee: SWAP3 000013ef: ADD 000013f0: DUP4 000013f1: MSTORE 000013f2: PUSH1 0x20 000013f4: DUP3 000013f5: ADD 000013f6: DUP1 000013f7: MLOAD 000013f8: PUSH28 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00001415: AND 00001416: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000 00001437: OR 00001438: DUP2 00001439: MSTORE 0000143a: SWAP3 0000143b: MLOAD 0000143c: DUP3 0000143d: MLOAD 0000143e: PUSH1 0x00 00001440: SWAP5 00001441: DUP6 00001442: SWAP4 00001443: DUP11 00001444: AND 00001445: SWAP3 00001446: DUP8 00001447: SWAP3 00001448: DUP7 00001449: SWAP3 0000144a: DUP3 0000144b: SWAP2 0000144c: DUP1 0000144d: DUP4 0000144e: DUP4 0000144f: JUMPDEST 00001450: PUSH1 0x20 00001452: DUP4 00001453: LT 00001454: PUSH2 0x148c 00001457: JUMPI 00001458: DUP1 00001459: MLOAD 0000145a: DUP3 0000145b: MSTORE 0000145c: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 0000147d: SWAP1 0000147e: SWAP3 0000147f: ADD 00001480: SWAP2 00001481: PUSH1 0x20 00001483: SWAP2 00001484: DUP3 00001485: ADD 00001486: SWAP2 00001487: ADD 00001488: PUSH2 0x144f 0000148b: JUMP 0000148c: JUMPDEST 0000148d: PUSH1 0x01 0000148f: DUP4 00001490: PUSH1 0x20 00001492: SUB 00001493: PUSH2 0x0100 00001496: EXP 00001497: SUB 00001498: DUP1 00001499: NOT 0000149a: DUP3 0000149b: MLOAD 0000149c: AND 0000149d: DUP2 0000149e: DUP5 0000149f: MLOAD 000014a0: AND 000014a1: DUP1 000014a2: DUP3 000014a3: OR 000014a4: DUP6 000014a5: MSTORE 000014a6: POP 000014a7: POP 000014a8: POP 000014a9: POP 000014aa: POP 000014ab: POP 000014ac: SWAP1 000014ad: POP 000014ae: ADD 000014af: SWAP2 000014b0: POP 000014b1: POP 000014b2: PUSH1 0x00 000014b4: PUSH1 0x40 000014b6: MLOAD 000014b7: DUP1 000014b8: DUP4 000014b9: SUB 000014ba: DUP2 000014bb: PUSH1 0x00 000014bd: DUP8 000014be: DUP8 000014bf: CALL 000014c0: SWAP3 000014c1: POP 000014c2: POP 000014c3: POP 000014c4: RETURNDATASIZE 000014c5: DUP1 000014c6: PUSH1 0x00 000014c8: DUP2 000014c9: EQ 000014ca: PUSH2 0x14ef 000014cd: JUMPI 000014ce: PUSH1 0x40 000014d0: MLOAD 000014d1: SWAP2 000014d2: POP 000014d3: PUSH1 0x1f 000014d5: NOT 000014d6: PUSH1 0x3f 000014d8: RETURNDATASIZE 000014d9: ADD 000014da: AND 000014db: DUP3 000014dc: ADD 000014dd: PUSH1 0x40 000014df: MSTORE 000014e0: RETURNDATASIZE 000014e1: DUP3 000014e2: MSTORE 000014e3: RETURNDATASIZE 000014e4: PUSH1 0x00 000014e6: PUSH1 0x20 000014e8: DUP5 000014e9: ADD 000014ea: RETURNDATACOPY 000014eb: PUSH2 0x14f4 000014ee: JUMP 000014ef: JUMPDEST 000014f0: PUSH1 0x60 000014f2: SWAP2 000014f3: POP 000014f4: JUMPDEST 000014f5: POP 000014f6: POP 000014f7: SWAP1 000014f8: POP 000014f9: PUSH2 0x1501 000014fc: DUP2 000014fd: PUSH2 0x160b 00001500: JUMP 00001501: JUMPDEST 00001502: SWAP8 00001503: SWAP7 00001504: POP 00001505: POP 00001506: POP 00001507: POP 00001508: POP 00001509: POP 0000150a: POP 0000150b: JUMP 0000150c: JUMPDEST 0000150d: PUSH2 0x1518 00001510: DUP5 00001511: DUP5 00001512: DUP5 00001513: DUP5 00001514: PUSH2 0x13b7 00001517: JUMP 00001518: JUMPDEST 00001519: PUSH2 0x1232 0000151c: JUMPI 0000151d: PUSH1 0x40 0000151f: DUP1 00001520: MLOAD 00001521: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001542: DUP2 00001543: MSTORE 00001544: PUSH1 0x20 00001546: PUSH1 0x04 00001548: DUP3 00001549: ADD 0000154a: MSTORE 0000154b: PUSH1 0x10 0000154d: PUSH1 0x24 0000154f: DUP3 00001550: ADD 00001551: MSTORE 00001552: PUSH32 0x5452414e534645525f4641494c55524500000000000000000000000000000000 00001573: PUSH1 0x44 00001575: DUP3 00001576: ADD 00001577: MSTORE 00001578: SWAP1 00001579: MLOAD 0000157a: SWAP1 0000157b: DUP2 0000157c: SWAP1 0000157d: SUB 0000157e: PUSH1 0x64 00001580: ADD 00001581: SWAP1 00001582: REVERT 00001583: JUMPDEST 00001584: PUSH1 0x00 00001586: PUSH2 0x1592 00001589: DUP7 0000158a: DUP7 0000158b: DUP7 0000158c: DUP7 0000158d: DUP7 0000158e: PUSH2 0x1647 00001591: JUMP 00001592: JUMPDEST 00001593: SWAP1 00001594: POP 00001595: DUP1 00001596: PUSH2 0x1600 00001599: JUMPI 0000159a: PUSH1 0x40 0000159c: DUP1 0000159d: MLOAD 0000159e: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000015bf: DUP2 000015c0: MSTORE 000015c1: PUSH1 0x20 000015c3: PUSH1 0x04 000015c5: DUP3 000015c6: ADD 000015c7: MSTORE 000015c8: PUSH1 0x10 000015ca: PUSH1 0x24 000015cc: DUP3 000015cd: ADD 000015ce: MSTORE 000015cf: PUSH32 0x5452414e534645525f4641494c55524500000000000000000000000000000000 000015f0: PUSH1 0x44 000015f2: DUP3 000015f3: ADD 000015f4: MSTORE 000015f5: SWAP1 000015f6: MLOAD 000015f7: SWAP1 000015f8: DUP2 000015f9: SWAP1 000015fa: SUB 000015fb: PUSH1 0x64 000015fd: ADD 000015fe: SWAP1 000015ff: REVERT 00001600: JUMPDEST 00001601: POP 00001602: POP 00001603: POP 00001604: POP 00001605: POP 00001606: POP 00001607: JUMP 00001608: JUMPDEST 00001609: SWAP1 0000160a: JUMP 0000160b: JUMPDEST 0000160c: PUSH1 0x00 0000160e: DUP2 0000160f: ISZERO 00001610: PUSH2 0x1316 00001613: JUMPI 00001614: RETURNDATASIZE 00001615: DUP1 00001616: ISZERO 00001617: PUSH2 0x162b 0000161a: JUMPI 0000161b: PUSH1 0x20 0000161d: DUP2 0000161e: EQ 0000161f: PUSH2 0x1634 00001622: JUMPI 00001623: PUSH1 0x00 00001625: SWAP3 00001626: POP 00001627: PUSH2 0x1640 0000162a: JUMP 0000162b: JUMPDEST 0000162c: PUSH1 0x01 0000162e: SWAP3 0000162f: POP 00001630: PUSH2 0x1640 00001633: JUMP 00001634: JUMPDEST 00001635: PUSH1 0x20 00001637: PUSH1 0x00 00001639: DUP1 0000163a: RETURNDATACOPY 0000163b: PUSH1 0x00 0000163d: MLOAD 0000163e: SWAP3 0000163f: POP 00001640: JUMPDEST 00001641: POP 00001642: SWAP1 00001643: SWAP2 00001644: SWAP1 00001645: POP 00001646: JUMP 00001647: JUMPDEST 00001648: PUSH1 0x40 0000164a: DUP1 0000164b: MLOAD 0000164c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001661: DUP1 00001662: DUP8 00001663: AND 00001664: PUSH1 0x24 00001666: DUP4 00001667: ADD 00001668: MSTORE 00001669: DUP1 0000166a: DUP7 0000166b: AND 0000166c: PUSH1 0x44 0000166e: DUP4 0000166f: ADD 00001670: MSTORE 00001671: PUSH1 0x64 00001673: DUP1 00001674: DUP4 00001675: ADD 00001676: DUP7 00001677: SWAP1 00001678: MSTORE 00001679: DUP4 0000167a: MLOAD 0000167b: DUP1 0000167c: DUP5 0000167d: SUB 0000167e: SWAP1 0000167f: SWAP2 00001680: ADD 00001681: DUP2 00001682: MSTORE 00001683: PUSH1 0x84 00001685: SWAP1 00001686: SWAP3 00001687: ADD 00001688: DUP4 00001689: MSTORE 0000168a: PUSH1 0x20 0000168c: DUP3 0000168d: ADD 0000168e: DUP1 0000168f: MLOAD 00001690: PUSH28 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000016ad: AND 000016ae: PUSH32 0x23b872dd00000000000000000000000000000000000000000000000000000000 000016cf: OR 000016d0: DUP2 000016d1: MSTORE 000016d2: SWAP3 000016d3: MLOAD 000016d4: DUP3 000016d5: MLOAD 000016d6: PUSH1 0x00 000016d8: SWAP5 000016d9: DUP6 000016da: SWAP4 000016db: DUP12 000016dc: AND 000016dd: SWAP3 000016de: DUP8 000016df: SWAP3 000016e0: DUP7 000016e1: SWAP3 000016e2: DUP3 000016e3: SWAP2 000016e4: DUP1 000016e5: DUP4 000016e6: DUP4 000016e7: JUMPDEST 000016e8: PUSH1 0x20 000016ea: DUP4 000016eb: LT 000016ec: PUSH2 0x1724 000016ef: JUMPI 000016f0: DUP1 000016f1: MLOAD 000016f2: DUP3 000016f3: MSTORE 000016f4: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00001715: SWAP1 00001716: SWAP3 00001717: ADD 00001718: SWAP2 00001719: PUSH1 0x20 0000171b: SWAP2 0000171c: DUP3 0000171d: ADD 0000171e: SWAP2 0000171f: ADD 00001720: PUSH2 0x16e7 00001723: JUMP 00001724: JUMPDEST 00001725: PUSH1 0x01 00001727: DUP4 00001728: PUSH1 0x20 0000172a: SUB 0000172b: PUSH2 0x0100 0000172e: EXP 0000172f: SUB 00001730: DUP1 00001731: NOT 00001732: DUP3 00001733: MLOAD 00001734: AND 00001735: DUP2 00001736: DUP5 00001737: MLOAD 00001738: AND 00001739: DUP1 0000173a: DUP3 0000173b: OR 0000173c: DUP6 0000173d: MSTORE 0000173e: POP 0000173f: POP 00001740: POP 00001741: POP 00001742: POP 00001743: POP 00001744: SWAP1 00001745: POP 00001746: ADD 00001747: SWAP2 00001748: POP 00001749: POP 0000174a: PUSH1 0x00 0000174c: PUSH1 0x40 0000174e: MLOAD 0000174f: DUP1 00001750: DUP4 00001751: SUB 00001752: DUP2 00001753: PUSH1 0x00 00001755: DUP8 00001756: DUP8 00001757: CALL 00001758: SWAP3 00001759: POP 0000175a: POP 0000175b: POP 0000175c: RETURNDATASIZE 0000175d: DUP1 0000175e: PUSH1 0x00 00001760: DUP2 00001761: EQ 00001762: PUSH2 0x1787 00001765: JUMPI 00001766: PUSH1 0x40 00001768: MLOAD 00001769: SWAP2 0000176a: POP 0000176b: PUSH1 0x1f 0000176d: NOT 0000176e: PUSH1 0x3f 00001770: RETURNDATASIZE 00001771: ADD 00001772: AND 00001773: DUP3 00001774: ADD 00001775: PUSH1 0x40 00001777: MSTORE 00001778: RETURNDATASIZE 00001779: DUP3 0000177a: MSTORE 0000177b: RETURNDATASIZE 0000177c: PUSH1 0x00 0000177e: PUSH1 0x20 00001780: DUP5 00001781: ADD 00001782: RETURNDATACOPY 00001783: PUSH2 0x178c 00001786: JUMP 00001787: JUMPDEST 00001788: PUSH1 0x60 0000178a: SWAP2 0000178b: POP 0000178c: JUMPDEST 0000178d: POP 0000178e: POP 0000178f: SWAP1 00001790: POP 00001791: PUSH2 0x1799 00001794: DUP2 00001795: PUSH2 0x160b 00001798: JUMP 00001799: JUMPDEST 0000179a: SWAP9 0000179b: SWAP8 0000179c: POP 0000179d: POP 0000179e: POP 0000179f: POP 000017a0: POP 000017a1: POP 000017a2: POP 000017a3: POP 000017a4: JUMP 000017a5: INVALID 000017a6: MSTORE8 000017a7: PUSH2 0x6665 000017aa: NUMBER 000017ab: PUSH2 0x7374 000017ae: GASPRICE 000017af: KECCAK256 000017b0: PUSH23 0x616c756520646f65736e27742066697420696e20393620 000017c8: PUSH3 0x697473 000017cc: LOG2 000017cd: PUSH5 0x6970667358 000017d3: UNKNOWN(0x22) 000017d4: SLT 000017d5: KECCAK256 000017d6: SWAP8 000017d7: SWAP15 000017d8: SWAP7 000017d9: PUSH14 0x3e3b93489b96051bd9dd18007a01 000017e8: XOR 000017e9: UNKNOWN(0x24) 000017ea: PUSH4 0xcd93ae5c 000017ef: LOG1 000017f0: UNKNOWN(0xC1) 000017f1: PUSH25
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| critical | upgradeability | codex | Unprotected initialize allows exchange takeover and full fund drain | 90 | no | — |
viewevidence_json{
"evidence": "`initialize` is `external` and only checks `exchange == address(0)` before setting `owner = msg.sender` and `exchange = _exchange`, enabling anyone to claim control if not yet initialized (contracts/Contract.sol:925-936).",
"locations": [
"contracts/Contract.sol:925",
"contracts/Contract.sol:934",
"contracts/Contract.sol:935"
],
"recommendation": "Protect `initialize` with an explicit access control check (e.g., onlyOwner/onlyProxy), or set `exchange` in a constructor for non-proxy deployments and disable the initializer on the implementation contract.",
"exploit_scenario": "1) Before `exchange` is set, attacker calls `initialize(attackerExchange)` and becomes both `owner` and `exchange` because there is no access control. 2) As `exchange`, attacker calls `withdraw(..., token, amount, ...)` for ETH (token = 0x0) and each ERC20 with `amount` set to the contract\u2019s balance, transferring all funds to themselves. 3) Optional: attacker calls `transfer(from, attacker, token, amount)` to pull any user allowances granted to the deposit contract. Profit potential: up to the entire ETH/ERC20 balances held by the deposit contract plus any user allowances approved to it."
}
|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0x3361d39372af62b1c1cb3c245ee6764a41b167719a6385ace404fefae3c7ac9a
call_targets:
0x674bdf20a0f284d710bc40872100128e2d66bd3f
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x3361d39372af62b1c1cb3c245ee6764a41b167719a6385ace404fefae3c7ac9a",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x674bdf20a0f284d710bc40872100128e2d66bd3f"
],
"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": "0xf18d03cc",
"selector": "0xf18d03cc",
"calldata_variants": [
"0xf18d03cc",
"0xf18d03cc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf3d790b7",
"selector": "0xf3d790b7",
"calldata_variants": [
"0xf3d790b7",
"0xf3d790b70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf70a2508",
"selector": "0xf70a2508",
"calldata_variants": [
"0xf70a2508",
"0xf70a25080000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xc4d66de8",
"selector": "0xc4d66de8",
"calldata_variants": [
"0xc4d66de8",
"0xc4d66de80000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd2f7265a",
"selector": "0xd2f7265a",
"calldata_variants": [
"0xd2f7265a",
"0xd2f7265a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe30c3978",
"selector": "0xe30c3978",
"calldata_variants": [
"0xe30c3978",
"0xe30c39780000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x715018a6",
"selector": "0x715018a6",
"calldata_variants": [
"0x715018a6",
"0x715018a60000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 4981,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5311,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5975,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 3,
"guards_detected": [],
"untrusted_call_count": 3
}
|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0x3361d39372af62b1c1cb3c245ee6764a41b167719a6385ace404fefae3c7ac9a
call_targets:
0x674bdf20a0f284d710bc40872100128e2d66bd3f
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x3361d39372af62b1c1cb3c245ee6764a41b167719a6385ace404fefae3c7ac9a",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x674bdf20a0f284d710bc40872100128e2d66bd3f"
],
"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": "0xf18d03cc",
"selector": "0xf18d03cc",
"calldata_variants": [
"0xf18d03cc",
"0xf18d03cc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf3d790b7",
"selector": "0xf3d790b7",
"calldata_variants": [
"0xf3d790b7",
"0xf3d790b70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf70a2508",
"selector": "0xf70a2508",
"calldata_variants": [
"0xf70a2508",
"0xf70a25080000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xc4d66de8",
"selector": "0xc4d66de8",
"calldata_variants": [
"0xc4d66de8",
"0xc4d66de80000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd2f7265a",
"selector": "0xd2f7265a",
"calldata_variants": [
"0xd2f7265a",
"0xd2f7265a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe30c3978",
"selector": "0xe30c3978",
"calldata_variants": [
"0xe30c3978",
"0xe30c39780000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x715018a6",
"selector": "0x715018a6",
"calldata_variants": [
"0x715018a6",
"0x715018a60000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 4981,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5311,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5975,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 3,
"guards_detected": []
}
|