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

Analysis Run

478c0b93-42fb-420f-976c-10c0f10515a8

complete
Chain ID
1
Address
Block Number
Created
Mon, Dec 29, 2025 5:15 AM
Review Summary

What survived the funnel

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

Confirmed
0
Validated
0
Source
Verified
Review Backing
Present
Best current signal
Withdraw/redeem always revert due to double nonReentrant in yTHOR overrides
crit 0 high 0 direct contract
Review Checklist
1. Read the findings table first. Ignore raw jobs until the result looks real.
2. Confirm attacker control, not just the existence of a sink.
3. Confirm money or privilege impact.
4. Keep it if the behavior is real. Kill it if this is normal proxy, admin, or upgrade plumbing.

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
30430 report.consolidate complete 1 / 1 3 months ago
93979 artifact.fetch complete 1 / 3 1 week ago
93980 tool.cast_disasm complete 1 / 3 1 week ago
93981 analysis.bundle complete 1 / 3 1 week ago
93982 capability.graph complete 1 / 3 1 week ago
93983 detector.run complete 1 / 3 1 week ago
93984 validation.fork complete 1 / 3 1 week ago

Artifact

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

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 1
Findings
3
No findings?
no
Summary
Found a high-severity withdrawal lock from double nonReentrant guards and two lower-severity accounting edge cases (reward debt rounding and fee-on-transfer token assumptions).
View stderr
[codex:1241512] OpenAI Codex v0.77.0 (research preview)
[codex:1241512] --------
[codex:1241512] workdir: /tmp/codex-multi-phteds47
[codex:1241512] model: gpt-5.2-codex
[codex:1241512] provider: openai
[codex:1241512] approval: never
[codex:1241512] sandbox: read-only
[codex:1241512] reasoning effort: xhigh
[codex:1241512] reasoning summaries: auto
[codex:1241512] session id: 019b6885-155f-7363-be5d-d5f36ada44e1
[codex:1241512] --------
[codex:1241512] user
[codex:1241512] You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
[codex:1241512] Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
[codex:1241512] accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
[codex:1241512] 
[codex:1241512] Scope rules:
[codex:1241512] - You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party `contracts/**/*.sol` files.
[codex:1241512] - Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
[codex:1241512] 
[codex:1241512] Output MUST be valid JSON matching the provided schema.
[codex:1241512] - If you find nothing meaningful: set no_findings=true and findings=[].
[codex:1241512] - Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
[codex:1241512] 
[codex:1241512] Output constraints (IMPORTANT):
[codex:1241512] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:1241512] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:1241512] mcp startup: no servers
[codex:1241512] 
[codex:1241512] thinking
[codex:1241512] **Preparing to audit skills and read AGENTS**
[codex:1241512] exec
[codex:1241512] /bin/bash -lc ls in /tmp/codex-multi-phteds47 succeeded in 6ms:
[codex:1241512] AUDIT_BUNDLE.txt
[codex:1241512] codex-output-schema.json
[codex:1241512] contracts
[codex:1241512] exec
[codex:1241512] /bin/bash -lc "sed -n '1,200p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-phteds47 succeeded in 5ms:
[codex:1241512] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:1241512] 
[codex:1241512] ================================================================================
[codex:1241512] FILE: contracts/@openzeppelin/contracts/access/Ownable.sol
[codex:1241512] ================================================================================
[codex:1241512] // SPDX-License-Identifier: MIT
[codex:1241512] // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)
[codex:1241512] 
[codex:1241512] pragma solidity ^0.8.0;
[codex:1241512] 
[codex:1241512] import "../utils/Context.sol";
[codex:1241512] 
[codex:1241512] /**
[codex:1241512]  * @dev Contract module which provides a basic access control mechanism, where
[codex:1241512]  * there is an account (an owner) that can be granted exclusive access to
[codex:1241512]  * specific functions.
[codex:1241512]  *
[codex:1241512]  * By default, the owner account will be the one that deploys the contract. This
[codex:1241512]  * can later be changed with {transferOwnership}.
[codex:1241512]  *
[codex:1241512] 
[codex:1241512] thinking
[codex:1241512] **Scanning for first-party contracts**
[codex:1241512] exec
[codex:1241512] /bin/bash -lc "rg --line-number '"'^FILE:'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-phteds47 succeeded in 6ms:
[codex:1241512] 4:FILE: contracts/@openzeppelin/contracts/access/Ownable.sol
[codex:1241512] 91:FILE: contracts/@openzeppelin/contracts/security/ReentrancyGuard.sol
[codex:1241512] 172:FILE: contracts/@openzeppelin/contracts/token/ERC20/ERC20.sol
[codex:1241512] 541:FILE: contracts/@openzeppelin/contracts/token/ERC20/IERC20.sol
[codex:1241512] 623:FILE: contracts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
[codex:1241512] 655:FILE: contracts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol
[codex:1241512] 749:FILE: contracts/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
[codex:1241512] 896:FILE: contracts/@openzeppelin/contracts/utils/Address.sol
[codex:1241512] 1144:FILE: contracts/@openzeppelin/contracts/utils/Context.sol
[codex:1241512] 1176:FILE: contracts/src/contracts/tokens/yTHOR.sol
[codex:1241512] 1219:FILE: contracts/src/contracts/tokens/yieldTHOR.sol
[codex:1241512] 
[codex:1241512] thinking
[codex:1241512] **Continuing to read file for full context**
[codex:1241512] exec
[codex:1241512] /bin/bash -lc "sed -n '1160,1400p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-phteds47 succeeded in 5ms:
[codex:1241512]  */
[codex:1241512] abstract contract Context {
[codex:1241512]     function _msgSender() internal view virtual returns (address) {
[codex:1241512]         return msg.sender;
[codex:1241512]     }
[codex:1241512] 
[codex:1241512]     function _msgData() internal view virtual returns (bytes calldata) {
[codex:1241512]         return msg.data;
[codex:1241512]     }
[codex:1241512] 
[codex:1241512]     function _contextSuffixLength() internal view virtual returns (uint256) {
[codex:1241512]         return 0;
[codex:1241512]     }
[codex:1241512] }
[codex:1241512] 
[codex:1241512] ================================================================================
[codex:1241512] FILE: contracts/src/contracts/tokens/yTHOR.sol
[codex:1241512] ================================================================================
[codex:1241512] // SPDX-License-Identifier: MIT
[codex:1241512] pragma solidity ^0.8.17;
[codex:1241512] 
[codex:1241512] thinking
[codex:1241512] **Planning full file review**
[codex:1241512] exec
[codex:1241512] /bin/bash -lc "sed -n '200,1160p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-phteds47 succeeded in 6ms:
[codex:1241512]  * applications.
[codex:1241512]  *
[codex:1241512]  * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
[codex:1241512]  * This allows applications to reconstruct the allowance for all accounts just
[codex:1241512]  * by listening to said events. Other implementations of the EIP may not emit
[codex:1241512]  * these events, as it isn't required by the specification.
[codex:1241512]  *
[codex:1241512]  * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
[codex:1241512]  * functions have been added to mitigate the well-known issues around setting
[codex:1241512]  * allowances. See {IERC20-approve}.
[codex:1241512]  */
[codex:1241512] contract ERC20 is Context, IERC20, IERC20Metadata {
[codex:1241512]     mapping(address => uint256) private _balances;
[codex:1241512] 
[codex:1241512]     mapping(address => mapping(address => uint256)) private _allowances;
[codex:1241512] 
[codex:1241512]     uint256 private _totalSupply;
[codex:1241512] 
[codex:1241512]     string private _name;
[codex:1241512]     string private _symbol;
[codex:1241512] 
[codex:1241512] 
[codex:1241512] thinking
[codex:1241512] **Analyzing potential vulnerabilities and accounting nuances**
[codex:1241512] 
[codex:1241512] I'm auditing the contract for typical risks like reentrancy, access control, and accounting bugs. There's an intricate issue with rewardDebt's int256 rounding that can cause negative pending rewards, leading to claim reverts or denial-of-service for some users, mostly due to how floor rounding and transfers affect the balances. Also, depositRewards can be exploited for reward accounting manipulation if fee-on-transfer tokens are used. Overall, it's a detailed review balancing subtle edge cases and typical patterns.
[codex:1241512] thinking
[codex:1241512] **Identifying double nonReentrant bug and rounding issues**
[codex:1241512] 
[codex:1241512] I'm uncovering a critical bug where yTHOR’s withdraw and redeem functions apply nonReentrant twice—both in the override and base—causing all withdrawals to revert and locking funds, which is quite serious. Additionally, repeated transfers can accumulate rounding errors in rewardDebt calculations, potentially blocking claims temporarily due to negative pending rewards. There are also noted accounting risks if fee-on-transfer tokens are used, but those are more design-related than exploitable bugs.
[codex:1241512] exec
[codex:1241512] /bin/bash -lc 'nl -ba contracts/src/contracts/tokens/yTHOR.sol' in /tmp/codex-multi-phteds47 succeeded in 6ms:
[codex:1241512]      1	// SPDX-License-Identifier: MIT
[codex:1241512]      2	pragma solidity ^0.8.17;
[codex:1241512]      3	
[codex:1241512]      4	import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
[codex:1241512]      5	import {yieldTHOR} from "./yieldTHOR.sol";
[codex:1241512]      6	
[codex:1241512]      7	contract yTHOR is yieldTHOR, Ownable {
[codex:1241512]      8	    bool public canWithdraw = false;
[codex:1241512]      9	
[codex:1241512]     10	    constructor(
[codex:1241512]     11	        address asset,
[codex:1241512]     12	        address reward,
[codex:1241512]     13	        address owner
[codex:1241512]     14	    ) yieldTHOR("YieldTHOR", "yTHOR", asset, reward) {
[codex:1241512]     15	        _transferOwnership(owner);
[codex:1241512]     16	    }
[codex:1241512]     17	
[codex:1241512]     18	    function setCanWithdraw(bool _canWithdraw) external onlyOwner {
[codex:1241512]     19	        canWithdraw = _canWithdraw;
[codex:1241512]     20	    }
[codex:1241512] 
[codex:1241512] thinking
[codex:1241512] **Yielding line numbers for yieldTHOR**
[codex:1241512] exec
[codex:1241512] /bin/bash -lc 'nl -ba contracts/src/contracts/tokens/yieldTHOR.sol' in /tmp/codex-multi-phteds47 succeeded in 5ms:
[codex:1241512]      1	// SPDX-License-Identifier: MIT
[codex:1241512]      2	pragma solidity ^0.8.17;
[codex:1241512]      3	
[codex:1241512]      4	import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
[codex:1241512]      5	import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
[codex:1241512]      6	import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
[codex:1241512]      7	import {ReentrancyGuard} from "@openzeppelin/contracts/security/ReentrancyGuard.sol";
[codex:1241512]      8	
[codex:1241512]      9	contract yieldTHOR is ERC20, ReentrancyGuard {
[codex:1241512]     10	    using SafeERC20 for IERC20;
[codex:1241512]     11	
[codex:1241512]     12	    uint256 private constant ACC_PRECISION = 1e24;
[codex:1241512]     13	    IERC20 public immutable asset;
[codex:1241512]     14	    IERC20 public immutable reward;
[codex:1241512]     15	    uint256 public accRewardPerShare;
[codex:1241512]     16	    mapping(address => int256) public rewardDebt;
[codex:1241512]     17	
[codex:1241512]     18	    event Deposit(
[codex:1241512]     19	        address indexed caller,
[codex:1241512]     20	        address indexed owner,
[codex:1241512] 
[codex:1241512] thinking
[codex:1241512] **Summarizing audit findings into JSON**
[codex:1241512] 
[codex:1241512] I’m organizing detailed audit findings into a structured JSON matching the codex-output-schema, covering a high-severity locked funds reentrancy bug and two lower-severity accounting issues involving reward debt rounding and fee-on-transfer token assumptions. I’m carefully crafting each finding with severity, category, exploit scenario, recommendation, evidence, and precise code locations to ensure clarity and accuracy.
[codex:1241512] codex
[codex:1241512] {"no_findings":false,"summary":"Found a high-severity withdrawal lock from double nonReentrant guards and two lower-severity accounting edge cases (reward debt rounding and fee-on-transfer token assumptions).","findings":[{"severity":"high","category":"reentrancy","title":"Withdraw/redeem always revert due to double nonReentrant in yTHOR overrides","exploit_scenario":"A user deposits assets into yTHOR. Even after the owner enables withdrawals, calling `withdraw` or `redeem` enters the nonReentrant guard in yTHOR and then calls `super.withdraw/super.redeem`, which are also nonReentrant. The second guard reverts with `ReentrancyGuard: reentrant call`, effectively locking all user funds permanently.","recommendation":"Apply the reentrancy guard only once on the call path. Remove `nonReentrant` from the yTHOR overrides or refactor to internal functions guarded by a single external `nonReentrant` entrypoint.","evidence":"`yTHOR.withdraw`/`redeem` are `nonReentrant` and call `super.withdraw`/`super.redeem`, which are also `nonReentrant` in `yieldTHOR`, triggering the guard twice.","locations":["contracts/src/contracts/tokens/yTHOR.sol:22","contracts/src/contracts/tokens/yTHOR.sol:31","contracts/src/contracts/tokens/yieldTHOR.sol:108","contracts/src/contracts/tokens/yieldTHOR.sol:126"]},{"severity":"low","category":"math","title":"Signed rewardDebt can exceed accumulated after rounding, causing negative pending and claim DoS","exploit_scenario":"An attacker can transfer dust to a victim when `accRewardPerShare` has a fractional component. Because `_beforeTokenTransfer` updates `rewardDebt` with a per-transfer floor while `accumulated` is recomputed from the post-transfer balance, rounding can make `rewardDebt` slightly larger than `accumulated`. `claimRewards` then casts a negative value to `uint256`, which reverts on transfer or makes `claimable` report a huge number, preventing claims until more rewards accrue.","recommendation":"Avoid signed-to-unsigned casts for pending rewards. Track `rewardDebt` as `uint256` and clamp pending to zero when `accumulated <= rewardDebt`, or recompute `rewardDebt` directly from the post-transfer balance to keep it consistent with `accumulated`.","evidence":"`claimable` and `claimRewards` cast `(accumulated - rewardDebt)` from `int256` to `uint256` without checking for negative values; `_beforeTokenTransfer` updates `rewardDebt` using per-transfer rounding that can diverge from `accumulated`.","locations":["contracts/src/contracts/tokens/yieldTHOR.sol:151","contracts/src/contracts/tokens/yieldTHOR.sol:156","contracts/src/contracts/tokens/yieldTHOR.sol:164"]},{"severity":"low","category":"math","title":"Accounting assumes asset/reward tokens transfer the full requested amount","exploit_scenario":"If the asset or reward token is fee-on-transfer or rebasing, the contract credits full `assets`/`amount` while receiving fewer tokens. Deposits can mint more shares than backing assets, and `depositRewards` can overstate rewards. Early claimers may drain available rewards while later withdrawals/claims revert due to insufficient balances.","recommendation":"For asset and reward transfers, measure actual received via balance-before/after and use that value for minting shares or updating `accRewardPerShare`, or explicitly restrict tokens to non-fee, non-rebasing ERC20s.","evidence":"`deposit`/`mint` and `depositRewards` use the input amount without checking actual received tokens.","locations":["contracts/src/contracts/tokens/yieldTHOR.sol:88","contracts/src/contracts/tokens/yieldTHOR.sol:98","contracts/src/contracts/tokens/yieldTHOR.sol:144"]}]}
[codex:1241512] tokens used
[codex:1241512] 59,570
[codex:1241512] {"no_findings":false,"summary":"Found a high-severity withdrawal lock from double nonReentrant guards and two lower-severity accounting edge cases (reward debt rounding and fee-on-transfer token assumptions).","findings":[{"severity":"high","category":"reentrancy","title":"Withdraw/redeem always revert due to double nonReentrant in yTHOR overrides","exploit_scenario":"A user deposits assets into yTHOR. Even after the owner enables withdrawals, calling `withdraw` or `redeem` enters the nonReentrant guard in yTHOR and then calls `super.withdraw/super.redeem`, which are also nonReentrant. The second guard reverts with `ReentrancyGuard: reentrant call`, effectively locking all user funds permanently.","recommendation":"Apply the reentrancy guard only once on the call path. Remove `nonReentrant` from the yTHOR overrides or refactor to internal functions guarded by a single external `nonReentrant` entrypoint.","evidence":"`yTHOR.withdraw`/`redeem` are `nonReentrant` and call `super.withdraw`/`super.redeem`, which are also `nonReentrant` in `yieldTHOR`, triggering the guard twice.","locations":["contracts/src/contracts/tokens/yTHOR.sol:22","contracts/src/contracts/tokens/yTHOR.sol:31","contracts/src/contracts/tokens/yieldTHOR.sol:108","contracts/src/contracts/tokens/yieldTHOR.sol:126"]},{"severity":"low","category":"math","title":"Signed rewardDebt can exceed accumulated after rounding, causing negative pending and claim DoS","exploit_scenario":"An attacker can transfer dust to a victim when `accRewardPerShare` has a fractional component. Because `_beforeTokenTransfer` updates `rewardDebt` with a per-transfer floor while `accumulated` is recomputed from the post-transfer balance, rounding can make `rewardDebt` slightly larger than `accumulated`. `claimRewards` then casts a negative value to `uint256`, which reverts on transfer or makes `claimable` report a huge number, preventing claims until more rewards accrue.","recommendation":"Avoid signed-to-unsigned casts for pending rewards. Track `rewardDebt` as `uint256` and clamp pending to zero when `accumulated <= rewardDebt`, or recompute `rewardDebt` directly from the post-transfer balance to keep it consistent with `accumulated`.","evidence":"`claimable` and `claimRewards` cast `(accumulated - rewardDebt)` from `int256` to `uint256` without checking for negative values; `_beforeTokenTransfer` updates `rewardDebt` using per-transfer rounding that can diverge from `accumulated`.","locations":["contracts/src/contracts/tokens/yieldTHOR.sol:151","contracts/src/contracts/tokens/yieldTHOR.sol:156","contracts/src/contracts/tokens/yieldTHOR.sol:164"]},{"severity":"low","category":"math","title":"Accounting assumes asset/reward tokens transfer the full requested amount","exploit_scenario":"If the asset or reward token is fee-on-transfer or rebasing, the contract credits full `assets`/`amount` while receiving fewer tokens. Deposits can mint more shares than backing assets, and `depositRewards` can overstate rewards. Early claimers may drain available rewards while later withdrawals/claims revert due to insufficient balances.","recommendation":"For asset and reward transfers, measure actual received via balance-before/after and use that value for minting shares or updating `accRewardPerShare`, or explicitly restrict tokens to non-fee, non-rebasing ERC20s.","evidence":"`deposit`/`mint` and `depositRewards` use the input amount without checking actual received tokens.","locations":["contracts/src/contracts/tokens/yieldTHOR.sol:88","contracts/src/contracts/tokens/yieldTHOR.sol:98","contracts/src/contracts/tokens/yieldTHOR.sol:144"]}]}
Metadata
{
    "codex": {
        "ran_at": "2025-12-29T05:15:31.666014+00:00",
        "returncode": 0
    },
    "summary": "Found a high-severity withdrawal lock from double nonReentrant guards and two lower-severity accounting edge cases (reward debt rounding and fee-on-transfer token assumptions).",
    "raw_final": {
        "summary": "Found a high-severity withdrawal lock from double nonReentrant guards and two lower-severity accounting edge cases (reward debt rounding and fee-on-transfer token assumptions).",
        "findings": [
            {
                "title": "Withdraw/redeem always revert due to double nonReentrant in yTHOR overrides",
                "category": "reentrancy",
                "evidence": "`yTHOR.withdraw`/`redeem` are `nonReentrant` and call `super.withdraw`/`super.redeem`, which are also `nonReentrant` in `yieldTHOR`, triggering the guard twice.",
                "severity": "high",
                "locations": [
                    "contracts/src/contracts/tokens/yTHOR.sol:22",
                    "contracts/src/contracts/tokens/yTHOR.sol:31",
                    "contracts/src/contracts/tokens/yieldTHOR.sol:108",
                    "contracts/src/contracts/tokens/yieldTHOR.sol:126"
                ],
                "recommendation": "Apply the reentrancy guard only once on the call path. Remove `nonReentrant` from the yTHOR overrides or refactor to internal functions guarded by a single external `nonReentrant` entrypoint.",
                "exploit_scenario": "A user deposits assets into yTHOR. Even after the owner enables withdrawals, calling `withdraw` or `redeem` enters the nonReentrant guard in yTHOR and then calls `super.withdraw/super.redeem`, which are also nonReentrant. The second guard reverts with `ReentrancyGuard: reentrant call`, effectively locking all user funds permanently."
            },
            {
                "title": "Signed rewardDebt can exceed accumulated after rounding, causing negative pending and claim DoS",
                "category": "math",
                "evidence": "`claimable` and `claimRewards` cast `(accumulated - rewardDebt)` from `int256` to `uint256` without checking for negative values; `_beforeTokenTransfer` updates `rewardDebt` using per-transfer rounding that can diverge from `accumulated`.",
                "severity": "low",
                "locations": [
                    "contracts/src/contracts/tokens/yieldTHOR.sol:151",
                    "contracts/src/contracts/tokens/yieldTHOR.sol:156",
                    "contracts/src/contracts/tokens/yieldTHOR.sol:164"
                ],
                "recommendation": "Avoid signed-to-unsigned casts for pending rewards. Track `rewardDebt` as `uint256` and clamp pending to zero when `accumulated <= rewardDebt`, or recompute `rewardDebt` directly from the post-transfer balance to keep it consistent with `accumulated`.",
                "exploit_scenario": "An attacker can transfer dust to a victim when `accRewardPerShare` has a fractional component. Because `_beforeTokenTransfer` updates `rewardDebt` with a per-transfer floor while `accumulated` is recomputed from the post-transfer balance, rounding can make `rewardDebt` slightly larger than `accumulated`. `claimRewards` then casts a negative value to `uint256`, which reverts on transfer or makes `claimable` report a huge number, preventing claims until more rewards accrue."
            },
            {
                "title": "Accounting assumes asset/reward tokens transfer the full requested amount",
                "category": "math",
                "evidence": "`deposit`/`mint` and `depositRewards` use the input amount without checking actual received tokens.",
                "severity": "low",
                "locations": [
                    "contracts/src/contracts/tokens/yieldTHOR.sol:88",
                    "contracts/src/contracts/tokens/yieldTHOR.sol:98",
                    "contracts/src/contracts/tokens/yieldTHOR.sol:144"
                ],
                "recommendation": "For asset and reward transfers, measure actual received via balance-before/after and use that value for minting shares or updating `accRewardPerShare`, or explicitly restrict tokens to non-fee, non-rebasing ERC20s.",
                "exploit_scenario": "If the asset or reward token is fee-on-transfer or rebasing, the contract credits full `assets`/`amount` while receiving fewer tokens. Deposits can mint more shares than backing assets, and `depositRewards` can overstate rewards. Early claimers may drain available rewards while later withdrawals/claims revert due to insufficient balances."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
1
EXT*/BALANCE
1
Total opcodes
3460
Flags
No heuristic flags raised.
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: DUP2
00000005: DUP2
00000006: MSTORE
00000007: PUSH1 0x04
00000009: DUP1
0000000a: CALLDATASIZE
0000000b: LT
0000000c: ISZERO
0000000d: PUSH2 0x0015
00000010: JUMPI
00000011: PUSH1 0x00
00000013: DUP1
00000014: REVERT
00000015: JUMPDEST
00000016: PUSH1 0x00
00000018: SWAP3
00000019: DUP4
0000001a: CALLDATALOAD
0000001b: PUSH1 0xe0
0000001d: SHR
0000001e: SWAP1
0000001f: DUP2
00000020: PUSH4 0x01e1d114
00000025: EQ
00000026: PUSH2 0x0bfc
00000029: JUMPI
0000002a: POP
0000002b: DUP1
0000002c: PUSH4 0x06fdde03
00000031: EQ
00000032: PUSH2 0x0b06
00000035: JUMPI
00000036: DUP1
00000037: PUSH4 0x07a2d13a
0000003c: EQ
0000003d: PUSH2 0x0293
00000040: JUMPI
00000041: DUP1
00000042: PUSH4 0x095ea7b3
00000047: EQ
00000048: PUSH2 0x0adc
0000004b: JUMPI
0000004c: DUP1
0000004d: PUSH4 0x0a28a477
00000052: EQ
00000053: PUSH2 0x0293
00000056: JUMPI
00000057: DUP1
00000058: PUSH4 0x18160ddd
0000005d: EQ
0000005e: PUSH2 0x0abd
00000061: JUMPI
00000062: DUP1
00000063: PUSH4 0x228cb733
00000068: EQ
00000069: PUSH2 0x0a79
0000006c: JUMPI
0000006d: DUP1
0000006e: PUSH4 0x23b872dd
00000073: EQ
00000074: PUSH2 0x09af
00000077: JUMPI
00000078: DUP1
00000079: PUSH4 0x313ce567
0000007e: EQ
0000007f: PUSH2 0x0993
00000082: JUMPI
00000083: DUP1
00000084: PUSH4 0x326e5540
00000089: EQ
0000008a: PUSH2 0x094d
0000008d: JUMPI
0000008e: DUP1
0000008f: PUSH4 0x372500ab
00000094: EQ
00000095: PUSH2 0x0890
00000098: JUMPI
00000099: DUP1
0000009a: PUSH4 0x38d52e0f
0000009f: EQ
000000a0: PUSH2 0x084c
000000a3: JUMPI
000000a4: DUP1
000000a5: PUSH4 0x39509351
000000aa: EQ
000000ab: PUSH2 0x07fc
000000ae: JUMPI
000000af: DUP1
000000b0: PUSH4 0x402914f5
000000b5: EQ
000000b6: PUSH2 0x079e
000000b9: JUMPI
000000ba: DUP1
000000bb: PUSH4 0x402d267d
000000c0: EQ
000000c1: PUSH2 0x02ea
000000c4: JUMPI
000000c5: DUP1
000000c6: PUSH4 0x4cdad506
000000cb: EQ
000000cc: PUSH2 0x0293
000000cf: JUMPI
000000d0: DUP1
000000d1: PUSH4 0x5873eb9b
000000d6: EQ
000000d7: PUSH2 0x0766
000000da: JUMPI
000000db: DUP1
000000dc: PUSH4 0x6e553f65
000000e1: EQ
000000e2: PUSH2 0x053d
000000e5: JUMPI
000000e6: DUP1
000000e7: PUSH4 0x70a08231
000000ec: EQ
000000ed: PUSH2 0x0723
000000f0: JUMPI
000000f1: DUP1
000000f2: PUSH4 0x715018a6
000000f7: EQ
000000f8: PUSH2 0x06c6
000000fb: JUMPI
000000fc: DUP1
000000fd: PUSH4 0x8bdf67f2
00000102: EQ
00000103: PUSH2 0x05b5
00000106: JUMPI
00000107: DUP1
00000108: PUSH4 0x8da5cb5b
0000010d: EQ
0000010e: PUSH2 0x058c
00000111: JUMPI
00000112: DUP1
00000113: PUSH4 0x939d6237
00000118: EQ
00000119: PUSH2 0x056d
0000011c: JUMPI
0000011d: DUP1
0000011e: PUSH4 0x94bf804d
00000123: EQ
00000124: PUSH2 0x053d
00000127: JUMPI
00000128: DUP1
00000129: PUSH4 0x95d89b41
0000012e: EQ
0000012f: PUSH2 0x0437
00000132: JUMPI
00000133: DUP1
00000134: PUSH4 0xa457c2d7
00000139: EQ
0000013a: PUSH2 0x0390
0000013d: JUMPI
0000013e: DUP1
0000013f: PUSH4 0xa9059cbb
00000144: EQ
00000145: PUSH2 0x035f
00000148: JUMPI
00000149: DUP1
0000014a: PUSH4 0xb3d7f6b9
0000014f: EQ
00000150: PUSH2 0x0293
00000153: JUMPI
00000154: DUP1
00000155: PUSH4 0xb460af94
0000015a: EQ
0000015b: PUSH2 0x02ef
0000015e: JUMPI
0000015f: DUP1
00000160: PUSH4 0xb51459fe
00000165: EQ
00000166: PUSH2 0x0338
00000169: JUMPI
0000016a: DUP1
0000016b: PUSH4 0xba087652
00000170: EQ
00000171: PUSH2 0x02ef
00000174: JUMPI
00000175: DUP1
00000176: PUSH4 0xc63d75b6
0000017b: EQ
0000017c: PUSH2 0x02ea
0000017f: JUMPI
00000180: DUP1
00000181: PUSH4 0xc6e6f592
00000186: EQ
00000187: PUSH2 0x0293
0000018a: JUMPI
0000018b: DUP1
0000018c: PUSH4 0xce96cb77
00000191: EQ
00000192: PUSH2 0x02e5
00000195: JUMPI
00000196: DUP1
00000197: PUSH4 0xd905777e
0000019c: EQ
0000019d: PUSH2 0x02e5
000001a0: JUMPI
000001a1: DUP1
000001a2: PUSH4 0xdd62ed3e
000001a7: EQ
000001a8: PUSH2 0x0298
000001ab: JUMPI
000001ac: DUP1
000001ad: PUSH4 0xef8b30f7
000001b2: EQ
000001b3: PUSH2 0x0293
000001b6: JUMPI
000001b7: PUSH4 0xf2fde38b
000001bc: EQ
000001bd: PUSH2 0x01c5
000001c0: JUMPI
000001c1: PUSH1 0x00
000001c3: DUP1
000001c4: REVERT
000001c5: JUMPDEST
000001c6: CALLVALUE
000001c7: PUSH2 0x028f
000001ca: JUMPI
000001cb: PUSH1 0x20
000001cd: CALLDATASIZE
000001ce: PUSH1 0x03
000001d0: NOT
000001d1: ADD
000001d2: SLT
000001d3: PUSH2 0x028f
000001d6: JUMPI
000001d7: PUSH2 0x01de
000001da: PUSH2 0x0c83
000001dd: JUMP
000001de: JUMPDEST
000001df: SWAP1
000001e0: PUSH2 0x01e7
000001e3: PUSH2 0x1236
000001e6: JUMP
000001e7: JUMPDEST
000001e8: PUSH1 0x01
000001ea: PUSH1 0x01
000001ec: PUSH1 0xa0
000001ee: SHL
000001ef: SUB
000001f0: SWAP2
000001f1: DUP3
000001f2: AND
000001f3: SWAP3
000001f4: DUP4
000001f5: ISZERO
000001f6: PUSH2 0x023d
000001f9: JUMPI
000001fa: POP
000001fb: POP
000001fc: PUSH1 0x08
000001fe: SLOAD
000001ff: DUP3
00000200: PUSH12 0xffffffffffffffffffffffff
0000020d: PUSH1 0xa0
0000020f: SHL
00000210: DUP3
00000211: AND
00000212: OR
00000213: PUSH1 0x08
00000215: SSTORE
00000216: AND
00000217: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
00000238: DUP4
00000239: DUP1
0000023a: LOG3
0000023b: DUP1
0000023c: RETURN
0000023d: JUMPDEST
0000023e: SWAP1
0000023f: PUSH1 0x20
00000241: PUSH1 0x84
00000243: SWAP3
00000244: MLOAD
00000245: SWAP2
00000246: PUSH3 0x461bcd
0000024a: PUSH1 0xe5
0000024c: SHL
0000024d: DUP4
0000024e: MSTORE
0000024f: DUP3
00000250: ADD
00000251: MSTORE
00000252: PUSH1 0x26
00000254: PUSH1 0x24
00000256: DUP3
00000257: ADD
00000258: MSTORE
00000259: PUSH32 0x4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061
0000027a: PUSH1 0x44
0000027c: DUP3
0000027d: ADD
0000027e: MSTORE
0000027f: PUSH6 0x646472657373
00000286: PUSH1 0xd0
00000288: SHL
00000289: PUSH1 0x64
0000028b: DUP3
0000028c: ADD
0000028d: MSTORE
0000028e: REVERT
0000028f: JUMPDEST
00000290: DUP3
00000291: DUP1
00000292: REVERT
00000293: JUMPDEST
00000294: PUSH2 0x0c61
00000297: JUMP
00000298: JUMPDEST
00000299: POP
0000029a: POP
0000029b: CALLVALUE
0000029c: PUSH2 0x02e1
0000029f: JUMPI
000002a0: DUP1
000002a1: PUSH1 0x03
000002a3: NOT
000002a4: CALLDATASIZE
000002a5: ADD
000002a6: SLT
000002a7: PUSH2 0x02e1
000002aa: JUMPI
000002ab: DUP1
000002ac: PUSH1 0x20
000002ae: SWAP3
000002af: PUSH2 0x02b6
000002b2: PUSH2 0x0c83
000002b5: JUMP
000002b6: JUMPDEST
000002b7: PUSH2 0x02be
000002ba: PUSH2 0x0c99
000002bd: JUMP
000002be: JUMPDEST
000002bf: PUSH1 0x01
000002c1: PUSH1 0x01
000002c3: PUSH1 0xa0
000002c5: SHL
000002c6: SUB
000002c7: SWAP2
000002c8: DUP3
000002c9: AND
000002ca: DUP4
000002cb: MSTORE
000002cc: PUSH1 0x01
000002ce: DUP7
000002cf: MSTORE
000002d0: DUP4
000002d1: DUP4
000002d2: KECCAK256
000002d3: SWAP2
000002d4: AND
000002d5: DUP3
000002d6: MSTORE
000002d7: DUP5
000002d8: MSTORE
000002d9: KECCAK256
000002da: SLOAD
000002db: SWAP1
000002dc: MLOAD
000002dd: SWAP1
000002de: DUP2
000002df: MSTORE
000002e0: RETURN
000002e1: JUMPDEST
000002e2: POP
000002e3: DUP1
000002e4: REVERT
000002e5: JUMPDEST
000002e6: PUSH2 0x0d0a
000002e9: JUMP
000002ea: JUMPDEST
000002eb: PUSH2 0x0caf
000002ee: JUMP
000002ef: JUMPDEST
000002f0: POP
000002f1: POP
000002f2: CALLVALUE
000002f3: PUSH2 0x02e1
000002f6: JUMPI
000002f7: PUSH1 0x20
000002f9: SWAP1
000002fa: PUSH2 0x032c
000002fd: PUSH2 0x0305
00000300: CALLDATASIZE
00000301: PUSH2 0x0cd5
00000304: JUMP
00000305: JUMPDEST
00000306: SWAP2
00000307: PUSH2 0x030e
0000030a: PUSH2 0x128e
0000030d: JUMP
0000030e: JUMPDEST
0000030f: PUSH2 0x031f
00000312: PUSH1 0xff
00000314: PUSH1 0x08
00000316: SLOAD
00000317: PUSH1 0xa0
00000319: SHR
0000031a: AND
0000031b: PUSH2 0x0f19
0000031e: JUMP
0000031f: JUMPDEST
00000320: PUSH2 0x0327
00000323: PUSH2 0x128e
00000326: JUMP
00000327: JUMPDEST
00000328: PUSH2 0x138f
0000032b: JUMP
0000032c: JUMPDEST
0000032d: SWAP1
0000032e: PUSH1 0x01
00000330: PUSH1 0x05
00000332: SSTORE
00000333: MLOAD
00000334: SWAP1
00000335: DUP2
00000336: MSTORE
00000337: RETURN
00000338: JUMPDEST
00000339: POP
0000033a: POP
0000033b: CALLVALUE
0000033c: PUSH2 0x02e1
0000033f: JUMPI
00000340: DUP2
00000341: PUSH1 0x03
00000343: NOT
00000344: CALLDATASIZE
00000345: ADD
00000346: SLT
00000347: PUSH2 0x02e1
0000034a: JUMPI
0000034b: PUSH1 0x20
0000034d: SWAP1
0000034e: PUSH1 0xff
00000350: PUSH1 0x08
00000352: SLOAD
00000353: PUSH1 0xa0
00000355: SHR
00000356: AND
00000357: SWAP1
00000358: MLOAD
00000359: SWAP1
0000035a: ISZERO
0000035b: ISZERO
0000035c: DUP2
0000035d: MSTORE
0000035e: RETURN
0000035f: JUMPDEST
00000360: POP
00000361: POP
00000362: CALLVALUE
00000363: PUSH2 0x02e1
00000366: JUMPI
00000367: DUP1
00000368: PUSH1 0x03
0000036a: NOT
0000036b: CALLDATASIZE
0000036c: ADD
0000036d: SLT
0000036e: PUSH2 0x02e1
00000371: JUMPI
00000372: PUSH1 0x20
00000374: SWAP1
00000375: PUSH2 0x0389
00000378: PUSH2 0x037f
0000037b: PUSH2 0x0c83
0000037e: JUMP
0000037f: JUMPDEST
00000380: PUSH1 0x24
00000382: CALLDATALOAD
00000383: SWAP1
00000384: CALLER
00000385: PUSH2 0x1057
00000388: JUMP
00000389: JUMPDEST
0000038a: MLOAD
0000038b: PUSH1 0x01
0000038d: DUP2
0000038e: MSTORE
0000038f: RETURN
00000390: JUMPDEST
00000391: POP
00000392: DUP3
00000393: CALLVALUE
00000394: PUSH2 0x0434
00000397: JUMPI
00000398: DUP3
00000399: PUSH1 0x03
0000039b: NOT
0000039c: CALLDATASIZE
0000039d: ADD
0000039e: SLT
0000039f: PUSH2 0x0434
000003a2: JUMPI
000003a3: PUSH2 0x03aa
000003a6: PUSH2 0x0c83
000003a9: JUMP
000003aa: JUMPDEST
000003ab: SWAP2
000003ac: DUP4
000003ad: PUSH1 0x24
000003af: CALLDATALOAD
000003b0: SWAP3
000003b1: CALLER
000003b2: DUP2
000003b3: MSTORE
000003b4: PUSH1 0x01
000003b6: PUSH1 0x20
000003b8: MSTORE
000003b9: DUP2
000003ba: DUP2
000003bb: KECCAK256
000003bc: PUSH1 0x01
000003be: DUP1
000003bf: PUSH1 0xa0
000003c1: SHL
000003c2: SUB
000003c3: DUP7
000003c4: AND
000003c5: DUP3
000003c6: MSTORE
000003c7: PUSH1 0x20
000003c9: MSTORE
000003ca: KECCAK256
000003cb: SLOAD
000003cc: SWAP1
000003cd: DUP3
000003ce: DUP3
000003cf: LT
000003d0: PUSH2 0x03e3
000003d3: JUMPI
000003d4: PUSH1 0x20
000003d6: DUP6
000003d7: PUSH2 0x0389
000003da: DUP6
000003db: DUP6
000003dc: SUB
000003dd: DUP8
000003de: CALLER
000003df: PUSH2 0x0f55
000003e2: JUMP
000003e3: JUMPDEST
000003e4: PUSH1 0x84
000003e6: SWAP1
000003e7: PUSH1 0x20
000003e9: DUP7
000003ea: MLOAD
000003eb: SWAP2
000003ec: PUSH3 0x461bcd
000003f0: PUSH1 0xe5
000003f2: SHL
000003f3: DUP4
000003f4: MSTORE
000003f5: DUP3
000003f6: ADD
000003f7: MSTORE
000003f8: PUSH1 0x25
000003fa: PUSH1 0x24
000003fc: DUP3
000003fd: ADD
000003fe: MSTORE
000003ff: PUSH32 0x45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77
00000420: PUSH1 0x44
00000422: DUP3
00000423: ADD
00000424: MSTORE
00000425: PUSH5 0x207a65726f
0000042b: PUSH1 0xd8
0000042d: SHL
0000042e: PUSH1 0x64
00000430: DUP3
00000431: ADD
00000432: MSTORE
00000433: REVERT
00000434: JUMPDEST
00000435: DUP1
00000436: REVERT
00000437: JUMPDEST
00000438: POP
00000439: SWAP2
0000043a: SWAP1
0000043b: CALLVALUE
0000043c: PUSH2 0x02e1
0000043f: JUMPI
00000440: DUP2
00000441: PUSH1 0x03
00000443: NOT
00000444: CALLDATASIZE
00000445: ADD
00000446: SLT
00000447: PUSH2 0x02e1
0000044a: JUMPI
0000044b: DUP1
0000044c: MLOAD
0000044d: SWAP2
0000044e: DUP1
0000044f: SWAP4
00000450: DUP1
00000451: SLOAD
00000452: SWAP2
00000453: PUSH1 0x01
00000455: SWAP1
00000456: DUP4
00000457: PUSH1 0x01
00000459: SHR
0000045a: SWAP3
0000045b: PUSH1 0x01
0000045d: DUP6
0000045e: AND
0000045f: SWAP5
00000460: DUP6
00000461: ISZERO
00000462: PUSH2 0x0533
00000465: JUMPI
00000466: JUMPDEST
00000467: PUSH1 0x20
00000469: SWAP6
0000046a: DUP7
0000046b: DUP7
0000046c: LT
0000046d: DUP2
0000046e: EQ
0000046f: PUSH2 0x0520
00000472: JUMPI
00000473: DUP6
00000474: DUP10
00000475: MSTORE
00000476: SWAP1
00000477: DUP2
00000478: ISZERO
00000479: PUSH2 0x04fc
0000047c: JUMPI
0000047d: POP
0000047e: PUSH1 0x01
00000480: EQ
00000481: PUSH2 0x04a4
00000484: JUMPI
00000485: JUMPDEST
00000486: PUSH2 0x04a0
00000489: DUP8
0000048a: DUP8
0000048b: PUSH2 0x0496
0000048e: DUP3
0000048f: DUP13
00000490: SUB
00000491: DUP4
00000492: PUSH2 0x0d30
00000495: JUMP
00000496: JUMPDEST
00000497: MLOAD
00000498: SWAP2
00000499: DUP3
0000049a: SWAP2
0000049b: DUP3
0000049c: PUSH2 0x0c18
0000049f: JUMP
000004a0: JUMPDEST
000004a1: SUB
000004a2: SWAP1
000004a3: RETURN
000004a4: JUMPDEST
000004a5: DUP2
000004a6: MSTORE
000004a7: SWAP3
000004a8: SWAP6
000004a9: POP
000004aa: PUSH32 0x8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b
000004cb: JUMPDEST
000004cc: DUP3
000004cd: DUP5
000004ce: LT
000004cf: PUSH2 0x04e9
000004d2: JUMPI
000004d3: POP
000004d4: POP
000004d5: POP
000004d6: DUP3
000004d7: PUSH2 0x04a0
000004da: SWAP5
000004db: PUSH2 0x0496
000004de: SWAP3
000004df: DUP3
000004e0: ADD
000004e1: ADD
000004e2: SWAP5
000004e3: CODESIZE
000004e4: DUP1
000004e5: PUSH2 0x0485
000004e8: JUMP
000004e9: JUMPDEST
000004ea: DUP1
000004eb: SLOAD
000004ec: DUP7
000004ed: DUP6
000004ee: ADD
000004ef: DUP9
000004f0: ADD
000004f1: MSTORE
000004f2: SWAP3
000004f3: DUP7
000004f4: ADD
000004f5: SWAP3
000004f6: DUP2
000004f7: ADD
000004f8: PUSH2 0x04cb
000004fb: JUMP
000004fc: JUMPDEST
000004fd: PUSH1 0xff
000004ff: NOT
00000500: AND
00000501: DUP9
00000502: DUP8
00000503: ADD
00000504: MSTORE
00000505: POP
00000506: POP
00000507: POP
00000508: POP
00000509: ISZERO
0000050a: ISZERO
0000050b: PUSH1 0x05
0000050d: SHL
0000050e: DUP4
0000050f: ADD
00000510: ADD
00000511: SWAP3
00000512: POP
00000513: PUSH2 0x0496
00000516: DUP3
00000517: PUSH2 0x04a0
0000051a: CODESIZE
0000051b: DUP1
0000051c: PUSH2 0x0485
0000051f: JUMP
00000520: JUMPDEST
00000521: PUSH4 0x4e487b71
00000526: PUSH1 0xe0
00000528: SHL
00000529: DUP5
0000052a: MSTORE
0000052b: PUSH1 0x22
0000052d: DUP4
0000052e: MSTORE
0000052f: PUSH1 0x24
00000531: DUP5
00000532: REVERT
00000533: JUMPDEST
00000534: SWAP4
00000535: PUSH1 0x7f
00000537: AND
00000538: SWAP4
00000539: PUSH2 0x0466
0000053c: JUMP
0000053d: JUMPDEST
0000053e: POP
0000053f: SWAP2
00000540: CALLVALUE
00000541: PUSH2 0x0434
00000544: JUMPI
00000545: DUP2
00000546: PUSH1 0x03
00000548: NOT
00000549: CALLDATASIZE
0000054a: ADD
0000054b: SLT
0000054c: PUSH2 0x0434
0000054f: JUMPI
00000550: POP
00000551: PUSH2 0x032c
00000554: PUSH1 0x20
00000556: SWAP3
00000557: PUSH2 0x055e
0000055a: PUSH2 0x0c99
0000055d: JUMP
0000055e: JUMPDEST
0000055f: SWAP1
00000560: PUSH2 0x0567
00000563: PUSH2 0x128e
00000566: JUMP
00000567: JUMPDEST
00000568: CALLDATALOAD
00000569: PUSH2 0x0db7
0000056c: JUMP
0000056d: JUMPDEST
0000056e: POP
0000056f: POP
00000570: CALLVALUE
00000571: PUSH2 0x02e1
00000574: JUMPI
00000575: DUP2
00000576: PUSH1 0x03
00000578: NOT
00000579: CALLDATASIZE
0000057a: ADD
0000057b: SLT
0000057c: PUSH2 0x02e1
0000057f: JUMPI
00000580: PUSH1 0x20
00000582: SWAP1
00000583: PUSH1 0x06
00000585: SLOAD
00000586: SWAP1
00000587: MLOAD
00000588: SWAP1
00000589: DUP2
0000058a: MSTORE
0000058b: RETURN
0000058c: JUMPDEST
0000058d: POP
0000058e: POP
0000058f: CALLVALUE
00000590: PUSH2 0x02e1
00000593: JUMPI
00000594: DUP2
00000595: PUSH1 0x03
00000597: NOT
00000598: CALLDATASIZE
00000599: ADD
0000059a: SLT
0000059b: PUSH2 0x02e1
0000059e: JUMPI
0000059f: PUSH1 0x08
000005a1: SLOAD
000005a2: SWAP1
000005a3: MLOAD
000005a4: PUSH1 0x01
000005a6: PUSH1 0x01
000005a8: PUSH1 0xa0
000005aa: SHL
000005ab: SUB
000005ac: SWAP1
000005ad: SWAP2
000005ae: AND
000005af: DUP2
000005b0: MSTORE
000005b1: PUSH1 0x20
000005b3: SWAP1
000005b4: RETURN
000005b5: JUMPDEST
000005b6: POP
000005b7: SWAP2
000005b8: SWAP1
000005b9: CALLVALUE
000005ba: PUSH2 0x02e1
000005bd: JUMPI
000005be: PUSH1 0x20
000005c0: CALLDATASIZE
000005c1: PUSH1 0x03
000005c3: NOT
000005c4: ADD
000005c5: SLT
000005c6: PUSH2 0x02e1
000005c9: JUMPI
000005ca: DUP3
000005cb: CALLDATALOAD
000005cc: SWAP1
000005cd: PUSH2 0x05d4
000005d0: PUSH2 0x128e
000005d3: JUMP
000005d4: JUMPDEST
000005d5: PUSH1 0x02
000005d7: SLOAD
000005d8: ISZERO
000005d9: PUSH2 0x0698
000005dc: JUMPI
000005dd: PUSH2 0x0608
000005e0: DUP3
000005e1: ADDRESS
000005e2: CALLER
000005e3: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
00000604: PUSH2 0x1336
00000607: JUMP
00000608: JUMPDEST
00000609: PUSH1 0x06
0000060b: SLOAD
0000060c: PUSH10 0xd3c21bcecceda1000000
00000617: DUP1
00000618: DUP5
00000619: MUL
0000061a: SWAP1
0000061b: DUP5
0000061c: DUP3
0000061d: DIV
0000061e: EQ
0000061f: DUP5
00000620: ISZERO
00000621: OR
00000622: ISZERO
00000623: PUSH2 0x0685
00000626: JUMPI
00000627: PUSH1 0x02
00000629: SLOAD
0000062a: SWAP1
0000062b: DUP2
0000062c: ISZERO
0000062d: PUSH2 0x0672
00000630: JUMPI
00000631: PUSH32 0x4e9221f2cca6ca0397acc6004ea0b716798254f5abcf53924fab34f0373e5d4e
00000652: SWAP5
00000653: SWAP3
00000654: PUSH1 0x20
00000656: SWAP5
00000657: SWAP3
00000658: PUSH2 0x0662
0000065b: SWAP3
0000065c: DIV
0000065d: SWAP1
0000065e: PUSH2 0x0daa
00000661: JUMP
00000662: JUMPDEST
00000663: PUSH1 0x06
00000665: SSTORE
00000666: MLOAD
00000667: SWAP1
00000668: DUP2
00000669: MSTORE
0000066a: LOG1
0000066b: PUSH1 0x01
0000066d: PUSH1 0x05
0000066f: SSTORE
00000670: DUP1
00000671: RETURN
00000672: JUMPDEST
00000673: PUSH4 0x4e487b71
00000678: PUSH1 0xe0
0000067a: SHL
0000067b: DUP7
0000067c: MSTORE
0000067d: PUSH1 0x12
0000067f: DUP8
00000680: MSTORE
00000681: PUSH1 0x24
00000683: DUP7
00000684: REVERT
00000685: JUMPDEST
00000686: PUSH4 0x4e487b71
0000068b: PUSH1 0xe0
0000068d: SHL
0000068e: DUP6
0000068f: MSTORE
00000690: PUSH1 0x11
00000692: DUP7
00000693: MSTORE
00000694: PUSH1 0x24
00000696: DUP6
00000697: REVERT
00000698: JUMPDEST
00000699: MLOAD
0000069a: PUSH3 0x461bcd
0000069e: PUSH1 0xe5
000006a0: SHL
000006a1: DUP2
000006a2: MSTORE
000006a3: PUSH1 0x20
000006a5: DUP2
000006a6: DUP6
000006a7: ADD
000006a8: MSTORE
000006a9: PUSH1 0x09
000006ab: PUSH1 0x24
000006ad: DUP3
000006ae: ADD
000006af: MSTORE
000006b0: PUSH9 0x4e4f5f534841524553
000006ba: PUSH1 0xb8
000006bc: SHL
000006bd: PUSH1 0x44
000006bf: DUP3
000006c0: ADD
000006c1: MSTORE
000006c2: PUSH1 0x64
000006c4: SWAP1
000006c5: REVERT
000006c6: JUMPDEST
000006c7: DUP4
000006c8: CALLVALUE
000006c9: PUSH2 0x0434
000006cc: JUMPI
000006cd: DUP1
000006ce: PUSH1 0x03
000006d0: NOT
000006d1: CALLDATASIZE
000006d2: ADD
000006d3: SLT
000006d4: PUSH2 0x0434
000006d7: JUMPI
000006d8: PUSH2 0x06df
000006db: PUSH2 0x1236
000006de: JUMP
000006df: JUMPDEST
000006e0: PUSH1 0x08
000006e2: DUP1
000006e3: SLOAD
000006e4: PUSH1 0x01
000006e6: PUSH1 0x01
000006e8: PUSH1 0xa0
000006ea: SHL
000006eb: SUB
000006ec: NOT
000006ed: DUP2
000006ee: AND
000006ef: SWAP1
000006f0: SWAP2
000006f1: SSTORE
000006f2: DUP2
000006f3: SWAP1
000006f4: PUSH1 0x01
000006f6: PUSH1 0x01
000006f8: PUSH1 0xa0
000006fa: SHL
000006fb: SUB
000006fc: AND
000006fd: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
0000071e: DUP3
0000071f: DUP1
00000720: LOG3
00000721: DUP1
00000722: RETURN
00000723: JUMPDEST
00000724: POP
00000725: POP
00000726: CALLVALUE
00000727: PUSH2 0x02e1
0000072a: JUMPI
0000072b: PUSH1 0x20
0000072d: CALLDATASIZE
0000072e: PUSH1 0x03
00000730: NOT
00000731: ADD
00000732: SLT
00000733: PUSH2 0x02e1
00000736: JUMPI
00000737: PUSH1 0x20
00000739: SWAP1
0000073a: PUSH2 0x075f
0000073d: PUSH2 0x0744
00000740: PUSH2 0x0c83
00000743: JUMP
00000744: JUMPDEST
00000745: PUSH1 0x01
00000747: PUSH1 0x01
00000749: PUSH1 0xa0
0000074b: SHL
0000074c: SUB
0000074d: AND
0000074e: PUSH1 0x00
00000750: SWAP1
00000751: DUP2
00000752: MSTORE
00000753: PUSH1 0x20
00000755: DUP2
00000756: SWAP1
00000757: MSTORE
00000758: PUSH1 0x40
0000075a: SWAP1
0000075b: KECCAK256
0000075c: SLOAD
0000075d: SWAP1
0000075e: JUMP
0000075f: JUMPDEST
00000760: SWAP1
00000761: MLOAD
00000762: SWAP1
00000763: DUP2
00000764: MSTORE
00000765: RETURN
00000766: JUMPDEST
00000767: POP
00000768: POP
00000769: CALLVALUE
0000076a: PUSH2 0x02e1
0000076d: JUMPI
0000076e: PUSH1 0x20
00000770: CALLDATASIZE
00000771: PUSH1 0x03
00000773: NOT
00000774: ADD
00000775: SLT
00000776: PUSH2 0x02e1
00000779: JUMPI
0000077a: PUSH1 0x20
0000077c: SWAP2
0000077d: DUP2
0000077e: SWAP1
0000077f: PUSH1 0x01
00000781: PUSH1 0x01
00000783: PUSH1 0xa0
00000785: SHL
00000786: SUB
00000787: PUSH2 0x078e
0000078a: PUSH2 0x0c83
0000078d: JUMP
0000078e: JUMPDEST
0000078f: AND
00000790: DUP2
00000791: MSTORE
00000792: PUSH1 0x07
00000794: DUP5
00000795: MSTORE
00000796: KECCAK256
00000797: SLOAD
00000798: SWAP1
00000799: MLOAD
0000079a: SWAP1
0000079b: DUP2
0000079c: MSTORE
0000079d: RETURN
0000079e: JUMPDEST
0000079f: POP
000007a0: POP
000007a1: CALLVALUE
000007a2: PUSH2 0x02e1
000007a5: JUMPI
000007a6: PUSH1 0x20
000007a8: CALLDATASIZE
000007a9: PUSH1 0x03
000007ab: NOT
000007ac: ADD
000007ad: SLT
000007ae: PUSH2 0x02e1
000007b1: JUMPI
000007b2: PUSH1 0x20
000007b4: SWAP2
000007b5: PUSH2 0x075f
000007b8: SWAP1
000007b9: DUP3
000007ba: PUSH1 0x01
000007bc: PUSH1 0x01
000007be: PUSH1 0xa0
000007c0: SHL
000007c1: SUB
000007c2: PUSH2 0x07c9
000007c5: PUSH2 0x0c83
000007c8: JUMP
000007c9: JUMPDEST
000007ca: AND
000007cb: SWAP2
000007cc: DUP3
000007cd: DUP2
000007ce: MSTORE
000007cf: DUP1
000007d0: DUP7
000007d1: MSTORE
000007d2: PUSH10 0xd3c21bcecceda1000000
000007dd: PUSH2 0x07ec
000007e0: DUP4
000007e1: DUP4
000007e2: KECCAK256
000007e3: SLOAD
000007e4: PUSH1 0x06
000007e6: SLOAD
000007e7: SWAP1
000007e8: PUSH2 0x0d68
000007eb: JUMP
000007ec: JUMPDEST
000007ed: DIV
000007ee: SWAP3
000007ef: DUP2
000007f0: MSTORE
000007f1: PUSH1 0x07
000007f3: DUP7
000007f4: MSTORE
000007f5: KECCAK256
000007f6: SLOAD
000007f7: SWAP1
000007f8: PUSH2 0x0d91
000007fb: JUMP
000007fc: JUMPDEST
000007fd: POP
000007fe: POP
000007ff: CALLVALUE
00000800: PUSH2 0x02e1
00000803: JUMPI
00000804: DUP1
00000805: PUSH1 0x03
00000807: NOT
00000808: CALLDATASIZE
00000809: ADD
0000080a: SLT
0000080b: PUSH2 0x02e1
0000080e: JUMPI
0000080f: PUSH2 0x0389
00000812: PUSH1 0x20
00000814: SWAP3
00000815: PUSH2 0x0845
00000818: PUSH2 0x081f
0000081b: PUSH2 0x0c83
0000081e: JUMP
0000081f: JUMPDEST
00000820: CALLER
00000821: DUP4
00000822: MSTORE
00000823: PUSH1 0x01
00000825: DUP7
00000826: MSTORE
00000827: DUP5
00000828: DUP4
00000829: KECCAK256
0000082a: PUSH1 0x01
0000082c: PUSH1 0x01
0000082e: PUSH1 0xa0
00000830: SHL
00000831: SUB
00000832: DUP3
00000833: AND
00000834: DUP5
00000835: MSTORE
00000836: DUP7
00000837: MSTORE
00000838: SWAP2
00000839: DUP5
0000083a: SWAP1
0000083b: KECCAK256
0000083c: SLOAD
0000083d: PUSH1 0x24
0000083f: CALLDATALOAD
00000840: SWAP1
00000841: PUSH2 0x0daa
00000844: JUMP
00000845: JUMPDEST
00000846: SWAP1
00000847: CALLER
00000848: PUSH2 0x0f55
0000084b: JUMP
0000084c: JUMPDEST
0000084d: POP
0000084e: POP
0000084f: CALLVALUE
00000850: PUSH2 0x02e1
00000853: JUMPI
00000854: DUP2
00000855: PUSH1 0x03
00000857: NOT
00000858: CALLDATASIZE
00000859: ADD
0000085a: SLT
0000085b: PUSH2 0x02e1
0000085e: JUMPI
0000085f: MLOAD
00000860: PUSH32 0x000000000000000000000000a5f2211b9b8170f694421f2046281775e8468044
00000881: PUSH1 0x01
00000883: PUSH1 0x01
00000885: PUSH1 0xa0
00000887: SHL
00000888: SUB
00000889: AND
0000088a: DUP2
0000088b: MSTORE
0000088c: PUSH1 0x20
0000088e: SWAP1
0000088f: RETURN
00000890: JUMPDEST
00000891: POP
00000892: POP
00000893: CALLVALUE
00000894: PUSH2 0x02e1
00000897: JUMPI
00000898: DUP2
00000899: PUSH1 0x03
0000089b: NOT
0000089c: CALLDATASIZE
0000089d: ADD
0000089e: SLT
0000089f: PUSH2 0x02e1
000008a2: JUMPI
000008a3: PUSH2 0x08aa
000008a6: PUSH2 0x128e
000008a9: JUMP
000008aa: JUMPDEST
000008ab: CALLER
000008ac: DUP3
000008ad: MSTORE
000008ae: DUP2
000008af: PUSH1 0x20
000008b1: MSTORE
000008b2: PUSH10 0xd3c21bcecceda1000000
000008bd: PUSH2 0x08cc
000008c0: DUP3
000008c1: DUP5
000008c2: KECCAK256
000008c3: SLOAD
000008c4: PUSH1 0x06
000008c6: SLOAD
000008c7: SWAP1
000008c8: PUSH2 0x0d68
000008cb: JUMP
000008cc: JUMPDEST
000008cd: DIV
000008ce: SWAP1
000008cf: CALLER
000008d0: DUP4
000008d1: MSTORE
000008d2: PUSH1 0x07
000008d4: PUSH1 0x20
000008d6: MSTORE
000008d7: PUSH2 0x08e3
000008da: DUP2
000008db: DUP5
000008dc: KECCAK256
000008dd: SLOAD
000008de: DUP4
000008df: PUSH2 0x0d91
000008e2: JUMP
000008e3: JUMPDEST
000008e4: SWAP2
000008e5: CALLER
000008e6: DUP5
000008e7: MSTORE
000008e8: PUSH1 0x07
000008ea: PUSH1 0x20
000008ec: MSTORE
000008ed: DUP2
000008ee: DUP5
000008ef: KECCAK256
000008f0: SSTORE
000008f1: PUSH2 0x091b
000008f4: DUP3
000008f5: CALLER
000008f6: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
00000917: PUSH2 0x12e4
0000091a: JUMP
0000091b: JUMPDEST
0000091c: MLOAD
0000091d: SWAP1
0000091e: DUP2
0000091f: MSTORE
00000920: PUSH32 0x106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f7241
00000941: PUSH1 0x20
00000943: CALLER
00000944: SWAP3
00000945: LOG2
00000946: PUSH1 0x01
00000948: PUSH1 0x05
0000094a: SSTORE
0000094b: DUP1
0000094c: RETURN
0000094d: JUMPDEST
0000094e: DUP4
0000094f: DUP3
00000950: CALLVALUE
00000951: PUSH2 0x02e1
00000954: JUMPI
00000955: PUSH1 0x20
00000957: CALLDATASIZE
00000958: PUSH1 0x03
0000095a: NOT
0000095b: ADD
0000095c: SLT
0000095d: PUSH2 0x02e1
00000960: JUMPI
00000961: CALLDATALOAD
00000962: DUP1
00000963: ISZERO
00000964: ISZERO
00000965: DUP1
00000966: SWAP2
00000967: SUB
00000968: PUSH2 0x02e1
0000096b: JUMPI
0000096c: PUSH2 0x0973
0000096f: PUSH2 0x1236
00000972: JUMP
00000973: JUMPDEST
00000974: PUSH1 0x08
00000976: DUP1
00000977: SLOAD
00000978: PUSH1 0xff
0000097a: PUSH1 0xa0
0000097c: SHL
0000097d: NOT
0000097e: AND
0000097f: PUSH1 0xa0
00000981: SWAP3
00000982: SWAP1
00000983: SWAP3
00000984: SHL
00000985: PUSH1 0xff
00000987: PUSH1 0xa0
00000989: SHL
0000098a: AND
0000098b: SWAP2
0000098c: SWAP1
0000098d: SWAP2
0000098e: OR
0000098f: SWAP1
00000990: SSTORE
00000991: DUP1
00000992: RETURN
00000993: JUMPDEST
00000994: POP
00000995: POP
00000996: CALLVALUE
00000997: PUSH2 0x02e1
0000099a: JUMPI
0000099b: DUP2
0000099c: PUSH1 0x03
0000099e: NOT
0000099f: CALLDATASIZE
000009a0: ADD
000009a1: SLT
000009a2: PUSH2 0x02e1
000009a5: JUMPI
000009a6: PUSH1 0x20
000009a8: SWAP1
000009a9: MLOAD
000009aa: PUSH1 0x12
000009ac: DUP2
000009ad: MSTORE
000009ae: RETURN
000009af: JUMPDEST
000009b0: POP
000009b1: DUP3
000009b2: SWAP1
000009b3: CALLVALUE
000009b4: PUSH2 0x02e1
000009b7: JUMPI
000009b8: PUSH1 0x60
000009ba: CALLDATASIZE
000009bb: PUSH1 0x03
000009bd: NOT
000009be: ADD
000009bf: SLT
000009c0: PUSH2 0x02e1
000009c3: JUMPI
000009c4: PUSH2 0x09cb
000009c7: PUSH2 0x0c83
000009ca: JUMP
000009cb: JUMPDEST
000009cc: PUSH2 0x09d3
000009cf: PUSH2 0x0c99
000009d2: JUMP
000009d3: JUMPDEST
000009d4: SWAP2
000009d5: DUP5
000009d6: PUSH1 0x44
000009d8: CALLDATALOAD
000009d9: SWAP5
000009da: PUSH1 0x01
000009dc: DUP1
000009dd: PUSH1 0xa0
000009df: SHL
000009e0: SUB
000009e1: DUP5
000009e2: AND
000009e3: DUP2
000009e4: MSTORE
000009e5: PUSH1 0x01
000009e7: PUSH1 0x20
000009e9: MSTORE
000009ea: DUP2
000009eb: DUP2
000009ec: KECCAK256
000009ed: CALLER
000009ee: DUP3
000009ef: MSTORE
000009f0: PUSH1 0x20
000009f2: MSTORE
000009f3: KECCAK256
000009f4: SLOAD
000009f5: SWAP1
000009f6: PUSH1 0x00
000009f8: NOT
000009f9: DUP3
000009fa: SUB
000009fb: PUSH2 0x0a0d
000009fe: JUMPI
000009ff: JUMPDEST
00000a00: PUSH1 0x20
00000a02: DUP7
00000a03: PUSH2 0x0389
00000a06: DUP8
00000a07: DUP8
00000a08: DUP8
00000a09: PUSH2 0x1057
00000a0c: JUMP
00000a0d: JUMPDEST
00000a0e: DUP5
00000a0f: DUP3
00000a10: LT
00000a11: PUSH2 0x0a36
00000a14: JUMPI
00000a15: POP
00000a16: SWAP2
00000a17: DUP4
00000a18: SWAP2
00000a19: PUSH2 0x0a2b
00000a1c: PUSH1 0x20
00000a1e: SWAP7
00000a1f: SWAP6
00000a20: PUSH2 0x0389
00000a23: SWAP6
00000a24: SUB
00000a25: CALLER
00000a26: DUP4
00000a27: PUSH2 0x0f55
00000a2a: JUMP
00000a2b: JUMPDEST
00000a2c: SWAP2
00000a2d: SWAP4
00000a2e: SWAP5
00000a2f: DUP2
00000a30: SWAP4
00000a31: POP
00000a32: PUSH2 0x09ff
00000a35: JUMP
00000a36: JUMPDEST
00000a37: PUSH1 0x64
00000a39: SWAP1
00000a3a: PUSH1 0x20
00000a3c: DUP8
00000a3d: MLOAD
00000a3e: SWAP2
00000a3f: PUSH3 0x461bcd
00000a43: PUSH1 0xe5
00000a45: SHL
00000a46: DUP4
00000a47: MSTORE
00000a48: DUP3
00000a49: ADD
00000a4a: MSTORE
00000a4b: PUSH1 0x1d
00000a4d: PUSH1 0x24
00000a4f: DUP3
00000a50: ADD
00000a51: MSTORE
00000a52: PUSH32 0x45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000
00000a73: PUSH1 0x44
00000a75: DUP3
00000a76: ADD
00000a77: MSTORE
00000a78: REVERT
00000a79: JUMPDEST
00000a7a: POP
00000a7b: POP
00000a7c: CALLVALUE
00000a7d: PUSH2 0x02e1
00000a80: JUMPI
00000a81: DUP2
00000a82: PUSH1 0x03
00000a84: NOT
00000a85: CALLDATASIZE
00000a86: ADD
00000a87: SLT
00000a88: PUSH2 0x02e1
00000a8b: JUMPI
00000a8c: MLOAD
00000a8d: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
00000aae: PUSH1 0x01
00000ab0: PUSH1 0x01
00000ab2: PUSH1 0xa0
00000ab4: SHL
00000ab5: SUB
00000ab6: AND
00000ab7: DUP2
00000ab8: MSTORE
00000ab9: PUSH1 0x20
00000abb: SWAP1
00000abc: RETURN
00000abd: JUMPDEST
00000abe: POP
00000abf: POP
00000ac0: CALLVALUE
00000ac1: PUSH2 0x02e1
00000ac4: JUMPI
00000ac5: DUP2
00000ac6: PUSH1 0x03
00000ac8: NOT
00000ac9: CALLDATASIZE
00000aca: ADD
00000acb: SLT
00000acc: PUSH2 0x02e1
00000acf: JUMPI
00000ad0: PUSH1 0x20
00000ad2: SWAP1
00000ad3: PUSH1 0x02
00000ad5: SLOAD
00000ad6: SWAP1
00000ad7: MLOAD
00000ad8: SWAP1
00000ad9: DUP2
00000ada: MSTORE
00000adb: RETURN
00000adc: JUMPDEST
00000add: POP
00000ade: POP
00000adf: CALLVALUE
00000ae0: PUSH2 0x02e1
00000ae3: JUMPI
00000ae4: DUP1
00000ae5: PUSH1 0x03
00000ae7: NOT
00000ae8: CALLDATASIZE
00000ae9: ADD
00000aea: SLT
00000aeb: PUSH2 0x02e1
00000aee: JUMPI
00000aef: PUSH1 0x20
00000af1: SWAP1
00000af2: PUSH2 0x0389
00000af5: PUSH2 0x0afc
00000af8: PUSH2 0x0c83
00000afb: JUMP
00000afc: JUMPDEST
00000afd: PUSH1 0x24
00000aff: CALLDATALOAD
00000b00: SWAP1
00000b01: CALLER
00000b02: PUSH2 0x0f55
00000b05: JUMP
00000b06: JUMPDEST
00000b07: POP
00000b08: SWAP1
00000b09: CALLVALUE
00000b0a: PUSH2 0x028f
00000b0d: JUMPI
00000b0e: DUP3
00000b0f: PUSH1 0x03
00000b11: NOT
00000b12: CALLDATASIZE
00000b13: ADD
00000b14: SLT
00000b15: PUSH2 0x028f
00000b18: JUMPI
00000b19: DUP1
00000b1a: MLOAD
00000b1b: SWAP2
00000b1c: DUP4
00000b1d: PUSH1 0x03
00000b1f: SLOAD
00000b20: SWAP1
00000b21: PUSH1 0x01
00000b23: SWAP1
00000b24: DUP3
00000b25: PUSH1 0x01
00000b27: SHR
00000b28: SWAP3
00000b29: PUSH1 0x01
00000b2b: DUP2
00000b2c: AND
00000b2d: DUP1
00000b2e: ISZERO
00000b2f: PUSH2 0x0bf2
00000b32: JUMPI
00000b33: JUMPDEST
00000b34: PUSH1 0x20
00000b36: SWAP6
00000b37: DUP7
00000b38: DUP7
00000b39: LT
00000b3a: DUP3
00000b3b: EQ
00000b3c: PUSH2 0x0bdf
00000b3f: JUMPI
00000b40: POP
00000b41: DUP5
00000b42: DUP9
00000b43: MSTORE
00000b44: SWAP1
00000b45: DUP2
00000b46: ISZERO
00000b47: PUSH2 0x0bbd
00000b4a: JUMPI
00000b4b: POP
00000b4c: PUSH1 0x01
00000b4e: EQ
00000b4f: PUSH2 0x0b64
00000b52: JUMPI
00000b53: JUMPDEST
00000b54: PUSH2 0x04a0
00000b57: DUP7
00000b58: DUP7
00000b59: PUSH2 0x0496
00000b5c: DUP3
00000b5d: DUP12
00000b5e: SUB
00000b5f: DUP4
00000b60: PUSH2 0x0d30
00000b63: JUMP
00000b64: JUMPDEST
00000b65: SWAP3
00000b66: SWAP6
00000b67: POP
00000b68: PUSH1 0x03
00000b6a: DUP4
00000b6b: MSTORE
00000b6c: PUSH32 0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b
00000b8d: JUMPDEST
00000b8e: DUP3
00000b8f: DUP5
00000b90: LT
00000b91: PUSH2 0x0baa
00000b94: JUMPI
00000b95: POP
00000b96: POP
00000b97: POP
00000b98: DUP3
00000b99: PUSH2 0x04a0
00000b9c: SWAP5
00000b9d: PUSH2 0x0496
00000ba0: SWAP3
00000ba1: DUP3
00000ba2: ADD
00000ba3: ADD
00000ba4: SWAP5
00000ba5: CODESIZE
00000ba6: PUSH2 0x0b53
00000ba9: JUMP
00000baa: JUMPDEST
00000bab: DUP1
00000bac: SLOAD
00000bad: DUP7
00000bae: DUP6
00000baf: ADD
00000bb0: DUP9
00000bb1: ADD
00000bb2: MSTORE
00000bb3: SWAP3
00000bb4: DUP7
00000bb5: ADD
00000bb6: SWAP3
00000bb7: DUP2
00000bb8: ADD
00000bb9: PUSH2 0x0b8d
00000bbc: JUMP
00000bbd: JUMPDEST
00000bbe: PUSH1 0xff
00000bc0: NOT
00000bc1: AND
00000bc2: DUP8
00000bc3: DUP7
00000bc4: ADD
00000bc5: MSTORE
00000bc6: POP
00000bc7: POP
00000bc8: POP
00000bc9: ISZERO
00000bca: ISZERO
00000bcb: PUSH1 0x05
00000bcd: SHL
00000bce: DUP4
00000bcf: ADD
00000bd0: ADD
00000bd1: SWAP3
00000bd2: POP
00000bd3: PUSH2 0x0496
00000bd6: DUP3
00000bd7: PUSH2 0x04a0
00000bda: CODESIZE
00000bdb: PUSH2 0x0b53
00000bde: JUMP
00000bdf: JUMPDEST
00000be0: PUSH4 0x4e487b71
00000be5: PUSH1 0xe0
00000be7: SHL
00000be8: DUP5
00000be9: MSTORE
00000bea: PUSH1 0x22
00000bec: SWAP1
00000bed: MSTORE
00000bee: PUSH1 0x24
00000bf0: DUP4
00000bf1: REVERT
00000bf2: JUMPDEST
00000bf3: SWAP4
00000bf4: PUSH1 0x7f
00000bf6: AND
00000bf7: SWAP4
00000bf8: PUSH2 0x0b33
00000bfb: JUMP
00000bfc: JUMPDEST
00000bfd: DUP5
00000bfe: SWAP1
00000bff: CALLVALUE
00000c00: PUSH2 0x02e1
00000c03: JUMPI
00000c04: DUP2
00000c05: PUSH1 0x03
00000c07: NOT
00000c08: CALLDATASIZE
00000c09: ADD
00000c0a: SLT
00000c0b: PUSH2 0x02e1
00000c0e: JUMPI
00000c0f: PUSH1 0x20
00000c11: SWAP1
00000c12: PUSH1 0x02
00000c14: SLOAD
00000c15: DUP2
00000c16: MSTORE
00000c17: RETURN
00000c18: JUMPDEST
00000c19: PUSH1 0x20
00000c1b: DUP1
00000c1c: DUP3
00000c1d: MSTORE
00000c1e: DUP3
00000c1f: MLOAD
00000c20: DUP2
00000c21: DUP4
00000c22: ADD
00000c23: DUP2
00000c24: SWAP1
00000c25: MSTORE
00000c26: SWAP1
00000c27: SWAP4
00000c28: SWAP3
00000c29: PUSH1 0x00
00000c2b: JUMPDEST
00000c2c: DUP3
00000c2d: DUP2
00000c2e: LT
00000c2f: PUSH2 0x0c4d
00000c32: JUMPI
00000c33: POP
00000c34: POP
00000c35: PUSH1 0x40
00000c37: SWAP3
00000c38: SWAP4
00000c39: POP
00000c3a: PUSH1 0x00
00000c3c: DUP4
00000c3d: DUP3
00000c3e: DUP5
00000c3f: ADD
00000c40: ADD
00000c41: MSTORE
00000c42: PUSH1 0x1f
00000c44: DUP1
00000c45: NOT
00000c46: SWAP2
00000c47: ADD
00000c48: AND
00000c49: ADD
00000c4a: ADD
00000c4b: SWAP1
00000c4c: JUMP
00000c4d: JUMPDEST
00000c4e: DUP2
00000c4f: DUP2
00000c50: ADD
00000c51: DUP7
00000c52: ADD
00000c53: MLOAD
00000c54: DUP5
00000c55: DUP3
00000c56: ADD
00000c57: PUSH1 0x40
00000c59: ADD
00000c5a: MSTORE
00000c5b: DUP6
00000c5c: ADD
00000c5d: PUSH2 0x0c2b
00000c60: JUMP
00000c61: JUMPDEST
00000c62: CALLVALUE
00000c63: PUSH2 0x0c7e
00000c66: JUMPI
00000c67: PUSH1 0x20
00000c69: CALLDATASIZE
00000c6a: PUSH1 0x03
00000c6c: NOT
00000c6d: ADD
00000c6e: SLT
00000c6f: PUSH2 0x0c7e
00000c72: JUMPI
00000c73: PUSH1 0x20
00000c75: PUSH1 0x40
00000c77: MLOAD
00000c78: PUSH1 0x04
00000c7a: CALLDATALOAD
00000c7b: DUP2
00000c7c: MSTORE
00000c7d: RETURN
00000c7e: JUMPDEST
00000c7f: PUSH1 0x00
00000c81: DUP1
00000c82: REVERT
00000c83: JUMPDEST
00000c84: PUSH1 0x04
00000c86: CALLDATALOAD
00000c87: SWAP1
00000c88: PUSH1 0x01
00000c8a: PUSH1 0x01
00000c8c: PUSH1 0xa0
00000c8e: SHL
00000c8f: SUB
00000c90: DUP3
00000c91: AND
00000c92: DUP3
00000c93: SUB
00000c94: PUSH2 0x0c7e
00000c97: JUMPI
00000c98: JUMP
00000c99: JUMPDEST
00000c9a: PUSH1 0x24
00000c9c: CALLDATALOAD
00000c9d: SWAP1
00000c9e: PUSH1 0x01
00000ca0: PUSH1 0x01
00000ca2: PUSH1 0xa0
00000ca4: SHL
00000ca5: SUB
00000ca6: DUP3
00000ca7: AND
00000ca8: DUP3
00000ca9: SUB
00000caa: PUSH2 0x0c7e
00000cad: JUMPI
00000cae: JUMP
00000caf: JUMPDEST
00000cb0: CALLVALUE
00000cb1: PUSH2 0x0c7e
00000cb4: JUMPI
00000cb5: PUSH1 0x20
00000cb7: CALLDATASIZE
00000cb8: PUSH1 0x03
00000cba: NOT
00000cbb: ADD
00000cbc: SLT
00000cbd: PUSH2 0x0c7e
00000cc0: JUMPI
00000cc1: PUSH2 0x0cc8
00000cc4: PUSH2 0x0c83
00000cc7: JUMP
00000cc8: JUMPDEST
00000cc9: POP
00000cca: PUSH1 0x20
00000ccc: PUSH1 0x40
00000cce: MLOAD
00000ccf: PUSH1 0x00
00000cd1: NOT
00000cd2: DUP2
00000cd3: MSTORE
00000cd4: RETURN
00000cd5: JUMPDEST
00000cd6: PUSH1 0x60
00000cd8: SWAP1
00000cd9: PUSH1 0x03
00000cdb: NOT
00000cdc: ADD
00000cdd: SLT
00000cde: PUSH2 0x0c7e
00000ce1: JUMPI
00000ce2: PUSH1 0x04
00000ce4: CALLDATALOAD
00000ce5: SWAP1
00000ce6: PUSH1 0x01
00000ce8: PUSH1 0x01
00000cea: PUSH1 0xa0
00000cec: SHL
00000ced: SUB
00000cee: SWAP1
00000cef: PUSH1 0x24
00000cf1: CALLDATALOAD
00000cf2: DUP3
00000cf3: DUP2
00000cf4: AND
00000cf5: DUP2
00000cf6: SUB
00000cf7: PUSH2 0x0c7e
00000cfa: JUMPI
00000cfb: SWAP2
00000cfc: PUSH1 0x44
00000cfe: CALLDATALOAD
00000cff: SWAP1
00000d00: DUP2
00000d01: AND
00000d02: DUP2
00000d03: SUB
00000d04: PUSH2 0x0c7e
00000d07: JUMPI
00000d08: SWAP1
00000d09: JUMP
00000d0a: JUMPDEST
00000d0b: CALLVALUE
00000d0c: PUSH2 0x0c7e
00000d0f: JUMPI
00000d10: PUSH1 0x20
00000d12: CALLDATASIZE
00000d13: PUSH1 0x03
00000d15: NOT
00000d16: ADD
00000d17: SLT
00000d18: PUSH2 0x0c7e
00000d1b: JUMPI
00000d1c: PUSH1 0x20
00000d1e: PUSH2 0x0d28
00000d21: PUSH2 0x0744
00000d24: PUSH2 0x0c83
00000d27: JUMP
00000d28: JUMPDEST
00000d29: PUSH1 0x40
00000d2b: MLOAD
00000d2c: SWAP1
00000d2d: DUP2
00000d2e: MSTORE
00000d2f: RETURN
00000d30: JUMPDEST
00000d31: SWAP1
00000d32: PUSH1 0x1f
00000d34: DUP1
00000d35: NOT
00000d36: SWAP2
00000d37: ADD
00000d38: AND
00000d39: DUP2
00000d3a: ADD
00000d3b: SWAP1
00000d3c: DUP2
00000d3d: LT
00000d3e: PUSH8 0xffffffffffffffff
00000d47: DUP3
00000d48: GT
00000d49: OR
00000d4a: PUSH2 0x0d52
00000d4d: JUMPI
00000d4e: PUSH1 0x40
00000d50: MSTORE
00000d51: JUMP
00000d52: JUMPDEST
00000d53: PUSH4 0x4e487b71
00000d58: PUSH1 0xe0
00000d5a: SHL
00000d5b: PUSH1 0x00
00000d5d: MSTORE
00000d5e: PUSH1 0x41
00000d60: PUSH1 0x04
00000d62: MSTORE
00000d63: PUSH1 0x24
00000d65: PUSH1 0x00
00000d67: REVERT
00000d68: JUMPDEST
00000d69: DUP2
00000d6a: DUP2
00000d6b: MUL
00000d6c: SWAP3
00000d6d: SWAP2
00000d6e: DUP2
00000d6f: ISZERO
00000d70: SWAP2
00000d71: DUP5
00000d72: DIV
00000d73: EQ
00000d74: OR
00000d75: ISZERO
00000d76: PUSH2 0x0d7b
00000d79: JUMPI
00000d7a: JUMP
00000d7b: JUMPDEST
00000d7c: PUSH4 0x4e487b71
00000d81: PUSH1 0xe0
00000d83: SHL
00000d84: PUSH1 0x00
00000d86: MSTORE
00000d87: PUSH1 0x11
00000d89: PUSH1 0x04
00000d8b: MSTORE
00000d8c: PUSH1 0x24
00000d8e: PUSH1 0x00
00000d90: REVERT
00000d91: JUMPDEST
00000d92: DUP2
00000d93: DUP2
00000d94: SUB
00000d95: SWAP3
00000d96: SWAP2
00000d97: PUSH1 0x00
00000d99: SGT
00000d9a: DUP1
00000d9b: ISZERO
00000d9c: DUP3
00000d9d: DUP6
00000d9e: SGT
00000d9f: AND
00000da0: SWAP2
00000da1: DUP5
00000da2: SLT
00000da3: AND
00000da4: OR
00000da5: PUSH2 0x0d7b
00000da8: JUMPI
00000da9: JUMP
00000daa: JUMPDEST
00000dab: SWAP2
00000dac: SWAP1
00000dad: DUP3
00000dae: ADD
00000daf: DUP1
00000db0: SWAP3
00000db1: GT
00000db2: PUSH2 0x0d7b
00000db5: JUMPI
00000db6: JUMP
00000db7: JUMPDEST
00000db8: SWAP2
00000db9: SWAP1
00000dba: DUP3
00000dbb: SWAP1
00000dbc: PUSH2 0x0de7
00000dbf: DUP3
00000dc0: ADDRESS
00000dc1: CALLER
00000dc2: PUSH32 0x000000000000000000000000a5f2211b9b8170f694421f2046281775e8468044
00000de3: PUSH2 0x1336
00000de6: JUMP
00000de7: JUMPDEST
00000de8: PUSH1 0x01
00000dea: PUSH1 0x01
00000dec: PUSH1 0xa0
00000dee: SHL
00000def: SUB
00000df0: AND
00000df1: SWAP1
00000df2: DUP2
00000df3: ISZERO
00000df4: PUSH2 0x0ed4
00000df7: JUMPI
00000df8: PUSH1 0x00
00000dfa: DUP3
00000dfb: DUP2
00000dfc: MSTORE
00000dfd: PUSH1 0x07
00000dff: PUSH1 0x20
00000e01: MSTORE
00000e02: PUSH1 0x40
00000e04: SWAP1
00000e05: DUP2
00000e06: DUP2
00000e07: KECCAK256
00000e08: SLOAD
00000e09: PUSH10 0xd3c21bcecceda1000000
00000e14: PUSH2 0x0e1f
00000e17: PUSH1 0x06
00000e19: SLOAD
00000e1a: DUP7
00000e1b: PUSH2 0x0d68
00000e1e: JUMP
00000e1f: JUMPDEST
00000e20: DIV
00000e21: SWAP1
00000e22: DUP3
00000e23: DUP3
00000e24: DUP3
00000e25: ADD
00000e26: SWAP3
00000e27: DUP4
00000e28: SLT
00000e29: SWAP2
00000e2a: SLT
00000e2b: SWAP1
00000e2c: DUP1
00000e2d: ISZERO
00000e2e: DUP3
00000e2f: AND
00000e30: SWAP2
00000e31: ISZERO
00000e32: AND
00000e33: OR
00000e34: PUSH2 0x0ec0
00000e37: JUMPI
00000e38: DUP2
00000e39: DUP6
00000e3a: SWAP2
00000e3b: DUP3
00000e3c: PUSH32 0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7
00000e5d: SWAP6
00000e5e: SWAP5
00000e5f: MSTORE
00000e60: PUSH1 0x07
00000e62: PUSH1 0x20
00000e64: MSTORE
00000e65: DUP4
00000e66: DUP3
00000e67: KECCAK256
00000e68: SSTORE
00000e69: PUSH2 0x0e74
00000e6c: DUP6
00000e6d: PUSH1 0x02
00000e6f: SLOAD
00000e70: PUSH2 0x0daa
00000e73: JUMP
00000e74: JUMPDEST
00000e75: PUSH1 0x02
00000e77: SSTORE
00000e78: DUP2
00000e79: DUP2
00000e7a: MSTORE
00000e7b: DUP1
00000e7c: PUSH1 0x20
00000e7e: MSTORE
00000e7f: DUP3
00000e80: DUP2
00000e81: KECCAK256
00000e82: DUP6
00000e83: DUP2
00000e84: SLOAD
00000e85: ADD
00000e86: SWAP1
00000e87: SSTORE
00000e88: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
00000ea9: PUSH1 0x20
00000eab: DUP5
00000eac: MLOAD
00000ead: DUP8
00000eae: DUP2
00000eaf: MSTORE
00000eb0: LOG3
00000eb1: DUP1
00000eb2: MLOAD
00000eb3: SWAP3
00000eb4: DUP1
00000eb5: DUP5
00000eb6: MSTORE
00000eb7: PUSH1 0x20
00000eb9: DUP5
00000eba: ADD
00000ebb: MSTORE
00000ebc: CALLER
00000ebd: SWAP3
00000ebe: LOG3
00000ebf: JUMP
00000ec0: JUMPDEST
00000ec1: PUSH4 0x4e487b71
00000ec6: PUSH1 0xe0
00000ec8: SHL
00000ec9: DUP3
00000eca: MSTORE
00000ecb: PUSH1 0x11
00000ecd: PUSH1 0x04
00000ecf: MSTORE
00000ed0: PUSH1 0x24
00000ed2: DUP3
00000ed3: REVERT
00000ed4: JUMPDEST
00000ed5: PUSH1 0x40
00000ed7: MLOAD
00000ed8: PUSH3 0x461bcd
00000edc: PUSH1 0xe5
00000ede: SHL
00000edf: DUP2
00000ee0: MSTORE
00000ee1: PUSH1 0x20
00000ee3: PUSH1 0x04
00000ee5: DUP3
00000ee6: ADD
00000ee7: MSTORE
00000ee8: PUSH1 0x1f
00000eea: PUSH1 0x24
00000eec: DUP3
00000eed: ADD
00000eee: MSTORE
00000eef: PUSH32 0x45524332303a206d696e7420746f20746865207a65726f206164647265737300
00000f10: PUSH1 0x44
00000f12: DUP3
00000f13: ADD
00000f14: MSTORE
00000f15: PUSH1 0x64
00000f17: SWAP1
00000f18: REVERT
00000f19: JUMPDEST
00000f1a: ISZERO
00000f1b: PUSH2 0x0f20
00000f1e: JUMPI
00000f1f: JUMP
00000f20: JUMPDEST
00000f21: PUSH1 0x40
00000f23: MLOAD
00000f24: PUSH3 0x461bcd
00000f28: PUSH1 0xe5
00000f2a: SHL
00000f2b: DUP2
00000f2c: MSTORE
00000f2d: PUSH1 0x20
00000f2f: PUSH1 0x04
00000f31: DUP3
00000f32: ADD
00000f33: MSTORE
00000f34: PUSH1 0x0d
00000f36: PUSH1 0x24
00000f38: DUP3
00000f39: ADD
00000f3a: MSTORE
00000f3b: PUSH13 0x1393d517d4d5541413d4951151
00000f49: PUSH1 0x9a
00000f4b: SHL
00000f4c: PUSH1 0x44
00000f4e: DUP3
00000f4f: ADD
00000f50: MSTORE
00000f51: PUSH1 0x64
00000f53: SWAP1
00000f54: REVERT
00000f55: JUMPDEST
00000f56: PUSH1 0x01
00000f58: PUSH1 0x01
00000f5a: PUSH1 0xa0
00000f5c: SHL
00000f5d: SUB
00000f5e: SWAP1
00000f5f: DUP2
00000f60: AND
00000f61: SWAP2
00000f62: DUP3
00000f63: ISZERO
00000f64: PUSH2 0x1006
00000f67: JUMPI
00000f68: AND
00000f69: SWAP2
00000f6a: DUP3
00000f6b: ISZERO
00000f6c: PUSH2 0x0fb6
00000f6f: JUMPI
00000f70: PUSH1 0x20
00000f72: PUSH32 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925
00000f93: SWAP2
00000f94: DUP4
00000f95: PUSH1 0x00
00000f97: MSTORE
00000f98: PUSH1 0x01
00000f9a: DUP3
00000f9b: MSTORE
00000f9c: PUSH1 0x40
00000f9e: PUSH1 0x00
00000fa0: KECCAK256
00000fa1: DUP6
00000fa2: PUSH1 0x00
00000fa4: MSTORE
00000fa5: DUP3
00000fa6: MSTORE
00000fa7: DUP1
00000fa8: PUSH1 0x40
00000faa: PUSH1 0x00
00000fac: KECCAK256
00000fad: SSTORE
00000fae: PUSH1 0x40
00000fb0: MLOAD
00000fb1: SWAP1
00000fb2: DUP2
00000fb3: MSTORE
00000fb4: LOG3
00000fb5: JUMP
00000fb6: JUMPDEST
00000fb7: PUSH1 0x40
00000fb9: MLOAD
00000fba: PUSH3 0x461bcd
00000fbe: PUSH1 0xe5
00000fc0: SHL
00000fc1: DUP2
00000fc2: MSTORE
00000fc3: PUSH1 0x20
00000fc5: PUSH1 0x04
00000fc7: DUP3
00000fc8: ADD
00000fc9: MSTORE
00000fca: PUSH1 0x22
00000fcc: PUSH1 0x24
00000fce: DUP3
00000fcf: ADD
00000fd0: MSTORE
00000fd1: PUSH32 0x45524332303a20617070726f766520746f20746865207a65726f206164647265
00000ff2: PUSH1 0x44
00000ff4: DUP3
00000ff5: ADD
00000ff6: MSTORE
00000ff7: PUSH2 0x7373
00000ffa: PUSH1 0xf0
00000ffc: SHL
00000ffd: PUSH1 0x64
00000fff: DUP3
00001000: ADD
00001001: MSTORE
00001002: PUSH1 0x84
00001004: SWAP1
00001005: REVERT
00001006: JUMPDEST
00001007: PUSH1 0x40
00001009: MLOAD
0000100a: PUSH3 0x461bcd
0000100e: PUSH1 0xe5
00001010: SHL
00001011: DUP2
00001012: MSTORE
00001013: PUSH1 0x20
00001015: PUSH1 0x04
00001017: DUP3
00001018: ADD
00001019: MSTORE
0000101a: PUSH1 0x24
0000101c: DUP1
0000101d: DUP3
0000101e: ADD
0000101f: MSTORE
00001020: PUSH32 0x45524332303a20617070726f76652066726f6d20746865207a65726f20616464
00001041: PUSH1 0x44
00001043: DUP3
00001044: ADD
00001045: MSTORE
00001046: PUSH4 0x72657373
0000104b: PUSH1 0xe0
0000104d: SHL
0000104e: PUSH1 0x64
00001050: DUP3
00001051: ADD
00001052: MSTORE
00001053: PUSH1 0x84
00001055: SWAP1
00001056: REVERT
00001057: JUMPDEST
00001058: PUSH1 0x01
0000105a: PUSH1 0x01
0000105c: PUSH1 0xa0
0000105e: SHL
0000105f: SUB
00001060: SWAP1
00001061: DUP2
00001062: AND
00001063: SWAP2
00001064: DUP3
00001065: ISZERO
00001066: PUSH2 0x11e3
00001069: JUMPI
0000106a: AND
0000106b: SWAP2
0000106c: DUP3
0000106d: ISZERO
0000106e: PUSH2 0x1192
00001071: JUMPI
00001072: PUSH1 0x00
00001074: SWAP1
00001075: DUP3
00001076: DUP3
00001077: MSTORE
00001078: PUSH1 0x20
0000107a: SWAP2
0000107b: PUSH1 0x07
0000107d: DUP4
0000107e: MSTORE
0000107f: PUSH1 0x40
00001081: SWAP1
00001082: DUP2
00001083: DUP2
00001084: KECCAK256
00001085: SLOAD
00001086: PUSH2 0x10a8
00001089: PUSH10 0xd3c21bcecceda1000000
00001094: SWAP2
00001095: DUP3
00001096: PUSH2 0x10a1
00001099: PUSH1 0x06
0000109b: SLOAD
0000109c: DUP9
0000109d: PUSH2 0x0d68
000010a0: JUMP
000010a1: JUMPDEST
000010a2: DIV
000010a3: SWAP1
000010a4: PUSH2 0x0d91
000010a7: JUMP
000010a8: JUMPDEST
000010a9: DUP7
000010aa: DUP4
000010ab: MSTORE
000010ac: PUSH1 0x07
000010ae: DUP7
000010af: MSTORE
000010b0: DUP4
000010b1: DUP4
000010b2: KECCAK256
000010b3: SSTORE
000010b4: DUP7
000010b5: DUP3
000010b6: MSTORE
000010b7: DUP3
000010b8: DUP3
000010b9: KECCAK256
000010ba: SLOAD
000010bb: SWAP1
000010bc: PUSH2 0x10c7
000010bf: PUSH1 0x06
000010c1: SLOAD
000010c2: DUP7
000010c3: PUSH2 0x0d68
000010c6: JUMP
000010c7: JUMPDEST
000010c8: DIV
000010c9: SWAP1
000010ca: DUP3
000010cb: DUP3
000010cc: DUP3
000010cd: ADD
000010ce: SWAP3
000010cf: DUP4
000010d0: SLT
000010d1: SWAP2
000010d2: SLT
000010d3: SWAP1
000010d4: DUP1
000010d5: ISZERO
000010d6: DUP3
000010d7: AND
000010d8: SWAP2
000010d9: ISZERO
000010da: AND
000010db: OR
000010dc: PUSH2 0x0ec0
000010df: JUMPI
000010e0: DUP7
000010e1: DUP3
000010e2: MSTORE
000010e3: PUSH1 0x07
000010e5: DUP6
000010e6: MSTORE
000010e7: DUP3
000010e8: DUP3
000010e9: KECCAK256
000010ea: SSTORE
000010eb: DUP5
000010ec: DUP2
000010ed: MSTORE
000010ee: DUP1
000010ef: DUP5
000010f0: MSTORE
000010f1: DUP2
000010f2: DUP2
000010f3: KECCAK256
000010f4: SLOAD
000010f5: DUP4
000010f6: DUP2
000010f7: LT
000010f8: PUSH2 0x113f
000010fb: JUMPI
000010fc: SWAP2
000010fd: DUP2
000010fe: DUP5
000010ff: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
00001120: SWAP7
00001121: SWAP6
00001122: SWAP5
00001123: DUP9
00001124: DUP5
00001125: SWAP6
00001126: MSTORE
00001127: DUP3
00001128: DUP8
00001129: MSTORE
0000112a: SUB
0000112b: DUP3
0000112c: DUP3
0000112d: KECCAK256
0000112e: SSTORE
0000112f: DUP8
00001130: DUP2
00001131: MSTORE
00001132: KECCAK256
00001133: DUP3
00001134: DUP2
00001135: SLOAD
00001136: ADD
00001137: SWAP1
00001138: SSTORE
00001139: MLOAD
0000113a: SWAP1
0000113b: DUP2
0000113c: MSTORE
0000113d: LOG3
0000113e: JUMP
0000113f: JUMPDEST
00001140: DUP3
00001141: MLOAD
00001142: PUSH3 0x461bcd
00001146: PUSH1 0xe5
00001148: SHL
00001149: DUP2
0000114a: MSTORE
0000114b: PUSH1 0x04
0000114d: DUP2
0000114e: ADD
0000114f: DUP7
00001150: SWAP1
00001151: MSTORE
00001152: PUSH1 0x26
00001154: PUSH1 0x24
00001156: DUP3
00001157: ADD
00001158: MSTORE
00001159: PUSH32 0x45524332303a207472616e7366657220616d6f756e7420657863656564732062
0000117a: PUSH1 0x44
0000117c: DUP3
0000117d: ADD
0000117e: MSTORE
0000117f: PUSH6 0x616c616e6365
00001186: PUSH1 0xd0
00001188: SHL
00001189: PUSH1 0x64
0000118b: DUP3
0000118c: ADD
0000118d: MSTORE
0000118e: PUSH1 0x84
00001190: SWAP1
00001191: REVERT
00001192: JUMPDEST
00001193: PUSH1 0x40
00001195: MLOAD
00001196: PUSH3 0x461bcd
0000119a: PUSH1 0xe5
0000119c: SHL
0000119d: DUP2
0000119e: MSTORE
0000119f: PUSH1 0x20
000011a1: PUSH1 0x04
000011a3: DUP3
000011a4: ADD
000011a5: MSTORE
000011a6: PUSH1 0x23
000011a8: PUSH1 0x24
000011aa: DUP3
000011ab: ADD
000011ac: MSTORE
000011ad: PUSH32 0x45524332303a207472616e7366657220746f20746865207a65726f2061646472
000011ce: PUSH1 0x44
000011d0: DUP3
000011d1: ADD
000011d2: MSTORE
000011d3: PUSH3 0x657373
000011d7: PUSH1 0xe8
000011d9: SHL
000011da: PUSH1 0x64
000011dc: DUP3
000011dd: ADD
000011de: MSTORE
000011df: PUSH1 0x84
000011e1: SWAP1
000011e2: REVERT
000011e3: JUMPDEST
000011e4: PUSH1 0x40
000011e6: MLOAD
000011e7: PUSH3 0x461bcd
000011eb: PUSH1 0xe5
000011ed: SHL
000011ee: DUP2
000011ef: MSTORE
000011f0: PUSH1 0x20
000011f2: PUSH1 0x04
000011f4: DUP3
000011f5: ADD
000011f6: MSTORE
000011f7: PUSH1 0x25
000011f9: PUSH1 0x24
000011fb: DUP3
000011fc: ADD
000011fd: MSTORE
000011fe: PUSH32 0x45524332303a207472616e736665722066726f6d20746865207a65726f206164
0000121f: PUSH1 0x44
00001221: DUP3
00001222: ADD
00001223: MSTORE
00001224: PUSH5 0x6472657373
0000122a: PUSH1 0xd8
0000122c: SHL
0000122d: PUSH1 0x64
0000122f: DUP3
00001230: ADD
00001231: MSTORE
00001232: PUSH1 0x84
00001234: SWAP1
00001235: REVERT
00001236: JUMPDEST
00001237: PUSH1 0x08
00001239: SLOAD
0000123a: PUSH1 0x01
0000123c: PUSH1 0x01
0000123e: PUSH1 0xa0
00001240: SHL
00001241: SUB
00001242: AND
00001243: CALLER
00001244: SUB
00001245: PUSH2 0x124a
00001248: JUMPI
00001249: JUMP
0000124a: JUMPDEST
0000124b: PUSH1 0x64
0000124d: PUSH1 0x40
0000124f: MLOAD
00001250: PUSH3 0x461bcd
00001254: PUSH1 0xe5
00001256: SHL
00001257: DUP2
00001258: MSTORE
00001259: PUSH1 0x20
0000125b: PUSH1 0x04
0000125d: DUP3
0000125e: ADD
0000125f: MSTORE
00001260: PUSH1 0x20
00001262: PUSH1 0x24
00001264: DUP3
00001265: ADD
00001266: MSTORE
00001267: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
00001288: PUSH1 0x44
0000128a: DUP3
0000128b: ADD
0000128c: MSTORE
0000128d: REVERT
0000128e: JUMPDEST
0000128f: PUSH1 0x02
00001291: PUSH1 0x05
00001293: SLOAD
00001294: EQ
00001295: PUSH2 0x129f
00001298: JUMPI
00001299: PUSH1 0x02
0000129b: PUSH1 0x05
0000129d: SSTORE
0000129e: JUMP
0000129f: JUMPDEST
000012a0: PUSH1 0x40
000012a2: MLOAD
000012a3: PUSH3 0x461bcd
000012a7: PUSH1 0xe5
000012a9: SHL
000012aa: DUP2
000012ab: MSTORE
000012ac: PUSH1 0x20
000012ae: PUSH1 0x04
000012b0: DUP3
000012b1: ADD
000012b2: MSTORE
000012b3: PUSH1 0x1f
000012b5: PUSH1 0x24
000012b7: DUP3
000012b8: ADD
000012b9: MSTORE
000012ba: PUSH32 0x5265656e7472616e637947756172643a207265656e7472616e742063616c6c00
000012db: PUSH1 0x44
000012dd: DUP3
000012de: ADD
000012df: MSTORE
000012e0: PUSH1 0x64
000012e2: SWAP1
000012e3: REVERT
000012e4: JUMPDEST
000012e5: PUSH1 0x40
000012e7: MLOAD
000012e8: PUSH4 0xa9059cbb
000012ed: PUSH1 0xe0
000012ef: SHL
000012f0: PUSH1 0x20
000012f2: DUP3
000012f3: ADD
000012f4: MSTORE
000012f5: PUSH1 0x01
000012f7: PUSH1 0x01
000012f9: PUSH1 0xa0
000012fb: SHL
000012fc: SUB
000012fd: SWAP1
000012fe: SWAP3
000012ff: AND
00001300: PUSH1 0x24
00001302: DUP4
00001303: ADD
00001304: MSTORE
00001305: PUSH1 0x44
00001307: DUP1
00001308: DUP4
00001309: ADD
0000130a: SWAP4
0000130b: SWAP1
0000130c: SWAP4
0000130d: MSTORE
0000130e: SWAP2
0000130f: DUP2
00001310: MSTORE
00001311: PUSH1 0x80
00001313: DUP2
00001314: ADD
00001315: SWAP2
00001316: PUSH8 0xffffffffffffffff
0000131f: DUP4
00001320: GT
00001321: DUP3
00001322: DUP5
00001323: LT
00001324: OR
00001325: PUSH2 0x0d52
00001328: JUMPI
00001329: PUSH2 0x1334
0000132c: SWAP3
0000132d: PUSH1 0x40
0000132f: MSTORE
00001330: PUSH2 0x15ce
00001333: JUMP
00001334: JUMPDEST
00001335: JUMP
00001336: JUMPDEST
00001337: PUSH1 0x40
00001339: MLOAD
0000133a: PUSH4 0x23b872dd
0000133f: PUSH1 0xe0
00001341: SHL
00001342: PUSH1 0x20
00001344: DUP3
00001345: ADD
00001346: MSTORE
00001347: PUSH1 0x01
00001349: PUSH1 0x01
0000134b: PUSH1 0xa0
0000134d: SHL
0000134e: SUB
0000134f: SWAP3
00001350: DUP4
00001351: AND
00001352: PUSH1 0x24
00001354: DUP3
00001355: ADD
00001356: MSTORE
00001357: SWAP3
00001358: SWAP1
00001359: SWAP2
0000135a: AND
0000135b: PUSH1 0x44
0000135d: DUP4
0000135e: ADD
0000135f: MSTORE
00001360: PUSH1 0x64
00001362: DUP1
00001363: DUP4
00001364: ADD
00001365: SWAP4
00001366: SWAP1
00001367: SWAP4
00001368: MSTORE
00001369: SWAP2
0000136a: DUP2
0000136b: MSTORE
0000136c: PUSH1 0xa0
0000136e: DUP2
0000136f: ADD
00001370: SWAP2
00001371: DUP2
00001372: DUP4
00001373: LT
00001374: PUSH8 0xffffffffffffffff
0000137d: DUP5
0000137e: GT
0000137f: OR
00001380: PUSH2 0x0d52
00001383: JUMPI
00001384: PUSH2 0x1334
00001387: SWAP3
00001388: PUSH1 0x40
0000138a: MSTORE
0000138b: PUSH2 0x15ce
0000138e: JUMP
0000138f: JUMPDEST
00001390: SWAP3
00001391: SWAP2
00001392: DUP4
00001393: PUSH1 0x01
00001395: DUP1
00001396: PUSH1 0xa0
00001398: SHL
00001399: SUB
0000139a: DUP1
0000139b: DUP4
0000139c: AND
0000139d: SWAP4
0000139e: PUSH1 0x00
000013a0: SWAP3
000013a1: DUP6
000013a2: DUP5
000013a3: MSTORE
000013a4: PUSH1 0x20
000013a6: SWAP4
000013a7: DUP1
000013a8: DUP6
000013a9: MSTORE
000013aa: PUSH1 0x40
000013ac: SWAP6
000013ad: DUP3
000013ae: DUP8
000013af: DUP4
000013b0: KECCAK256
000013b1: SLOAD
000013b2: LT
000013b3: PUSH2 0x1593
000013b6: JUMPI
000013b7: DUP8
000013b8: CALLER
000013b9: SUB
000013ba: PUSH2 0x153e
000013bd: JUMPI
000013be: JUMPDEST
000013bf: POP
000013c0: DUP7
000013c1: ISZERO
000013c2: PUSH2 0x14f0
000013c5: JUMPI
000013c6: DUP7
000013c7: DUP2
000013c8: MSTORE
000013c9: PUSH1 0x07
000013cb: DUP6
000013cc: MSTORE
000013cd: PUSH2 0x13ea
000013d0: DUP7
000013d1: DUP3
000013d2: KECCAK256
000013d3: SLOAD
000013d4: PUSH10 0xd3c21bcecceda1000000
000013df: PUSH2 0x10a1
000013e2: PUSH1 0x06
000013e4: SLOAD
000013e5: DUP7
000013e6: PUSH2 0x0d68
000013e9: JUMP
000013ea: JUMPDEST
000013eb: DUP8
000013ec: DUP3
000013ed: MSTORE
000013ee: PUSH1 0x07
000013f0: DUP7
000013f1: MSTORE
000013f2: DUP7
000013f3: DUP3
000013f4: KECCAK256
000013f5: SSTORE
000013f6: DUP1
000013f7: DUP6
000013f8: MSTORE
000013f9: DUP6
000013fa: DUP2
000013fb: KECCAK256
000013fc: SLOAD
000013fd: DUP3
000013fe: DUP2
000013ff: LT
00001400: PUSH2 0x14a1
00001403: JUMPI
00001404: SWAP1
00001405: DUP3
00001406: PUSH32 0xfbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db
00001427: SWAP6
00001428: SWAP5
00001429: SWAP4
0000142a: SWAP3
0000142b: DUP10
0000142c: DUP4
0000142d: MSTORE
0000142e: DUP3
0000142f: DUP9
00001430: MSTORE
00001431: SUB
00001432: DUP8
00001433: DUP3
00001434: KECCAK256
00001435: SSTORE
00001436: DUP2
00001437: PUSH1 0x02
00001439: SLOAD
0000143a: SUB
0000143b: PUSH1 0x02
0000143d: SSTORE
0000143e: DUP8
0000143f: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
00001460: DUP8
00001461: DUP10
00001462: MLOAD
00001463: DUP6
00001464: DUP2
00001465: MSTORE
00001466: LOG3
00001467: PUSH2 0x1491
0000146a: DUP2
0000146b: DUP4
0000146c: PUSH32 0x000000000000000000000000a5f2211b9b8170f694421f2046281775e8468044
0000148d: PUSH2 0x12e4
00001490: JUMP
00001491: JUMPDEST
00001492: DUP6
00001493: MLOAD
00001494: SWAP5
00001495: DUP2
00001496: DUP7
00001497: MSTORE
00001498: DUP6
00001499: ADD
0000149a: MSTORE
0000149b: AND
0000149c: SWAP3
0000149d: CALLER
0000149e: SWAP3
0000149f: LOG4
000014a0: JUMP
000014a1: JUMPDEST
000014a2: DUP7
000014a3: MLOAD
000014a4: PUSH3 0x461bcd
000014a8: PUSH1 0xe5
000014aa: SHL
000014ab: DUP2
000014ac: MSTORE
000014ad: PUSH1 0x04
000014af: DUP2
000014b0: ADD
000014b1: DUP8
000014b2: SWAP1
000014b3: MSTORE
000014b4: PUSH1 0x22
000014b6: PUSH1 0x24
000014b8: DUP3
000014b9: ADD
000014ba: MSTORE
000014bb: PUSH32 0x45524332303a206275726e20616d6f756e7420657863656564732062616c616e
000014dc: PUSH1 0x44
000014de: DUP3
000014df: ADD
000014e0: MSTORE
000014e1: PUSH2 0x6365
000014e4: PUSH1 0xf0
000014e6: SHL
000014e7: PUSH1 0x64
000014e9: DUP3
000014ea: ADD
000014eb: MSTORE
000014ec: PUSH1 0x84
000014ee: SWAP1
000014ef: REVERT
000014f0: JUMPDEST
000014f1: DUP6
000014f2: MLOAD
000014f3: PUSH3 0x461bcd
000014f7: PUSH1 0xe5
000014f9: SHL
000014fa: DUP2
000014fb: MSTORE
000014fc: PUSH1 0x04
000014fe: DUP2
000014ff: ADD
00001500: DUP7
00001501: SWAP1
00001502: MSTORE
00001503: PUSH1 0x21
00001505: PUSH1 0x24
00001507: DUP3
00001508: ADD
00001509: MSTORE
0000150a: PUSH32 0x45524332303a206275726e2066726f6d20746865207a65726f20616464726573
0000152b: PUSH1 0x44
0000152d: DUP3
0000152e: ADD
0000152f: MSTORE
00001530: PUSH1 0x73
00001532: PUSH1 0xf8
00001534: SHL
00001535: PUSH1 0x64
00001537: DUP3
00001538: ADD
00001539: MSTORE
0000153a: PUSH1 0x84
0000153c: SWAP1
0000153d: REVERT
0000153e: JUMPDEST
0000153f: DUP8
00001540: DUP3
00001541: MSTORE
00001542: PUSH1 0x01
00001544: DUP7
00001545: MSTORE
00001546: DUP7
00001547: DUP3
00001548: KECCAK256
00001549: CALLER
0000154a: DUP4
0000154b: MSTORE
0000154c: DUP7
0000154d: MSTORE
0000154e: DUP7
0000154f: DUP3
00001550: KECCAK256
00001551: SLOAD
00001552: SWAP1
00001553: PUSH1 0x00
00001555: NOT
00001556: DUP3
00001557: SUB
00001558: PUSH2 0x1562
0000155b: JUMPI
0000155c: JUMPDEST
0000155d: POP
0000155e: PUSH2 0x13be
00001561: JUMP
00001562: JUMPDEST
00001563: DUP4
00001564: DUP3
00001565: SUB
00001566: SWAP2
00001567: DUP3
00001568: GT
00001569: PUSH2 0x157f
0000156c: JUMPI
0000156d: SWAP1
0000156e: PUSH2 0x1578
00001571: SWAP2
00001572: CALLER
00001573: SWAP1
00001574: PUSH2 0x0f55
00001577: JUMP
00001578: JUMPDEST
00001579: CODESIZE
0000157a: DUP1
0000157b: PUSH2 0x155c
0000157e: JUMP
0000157f: JUMPDEST
00001580: PUSH4 0x4e487b71
00001585: PUSH1 0xe0
00001587: SHL
00001588: DUP4
00001589: MSTORE
0000158a: PUSH1 0x11
0000158c: PUSH1 0x04
0000158e: MSTORE
0000158f: PUSH1 0x24
00001591: DUP4
00001592: REVERT
00001593: JUMPDEST
00001594: DUP7
00001595: MLOAD
00001596: PUSH3 0x461bcd
0000159a: PUSH1 0xe5
0000159c: SHL
0000159d: DUP2
0000159e: MSTORE
0000159f: PUSH1 0x04
000015a1: DUP2
000015a2: ADD
000015a3: DUP8
000015a4: SWAP1
000015a5: MSTORE
000015a6: PUSH1 0x14
000015a8: PUSH1 0x24
000015aa: DUP3
000015ab: ADD
000015ac: MSTORE
000015ad: PUSH20 0x494e53554646494349454e545f42414c414e4345
000015c2: PUSH1 0x60
000015c4: SHL
000015c5: PUSH1 0x44
000015c7: DUP3
000015c8: ADD
000015c9: MSTORE
000015ca: PUSH1 0x64
000015cc: SWAP1
000015cd: REVERT
000015ce: JUMPDEST
000015cf: PUSH1 0x01
000015d1: DUP1
000015d2: PUSH1 0xa0
000015d4: SHL
000015d5: SUB
000015d6: AND
000015d7: SWAP1
000015d8: PUSH1 0x40
000015da: MLOAD
000015db: PUSH1 0x40
000015dd: DUP2
000015de: ADD
000015df: PUSH8 0xffffffffffffffff
000015e8: SWAP1
000015e9: DUP3
000015ea: DUP2
000015eb: LT
000015ec: DUP3
000015ed: DUP3
000015ee: GT
000015ef: OR
000015f0: PUSH2 0x0d52
000015f3: JUMPI
000015f4: PUSH1 0x40
000015f6: MSTORE
000015f7: PUSH1 0x20
000015f9: SWAP4
000015fa: DUP5
000015fb: DUP4
000015fc: MSTORE
000015fd: PUSH32 0x5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564
0000161e: DUP6
0000161f: DUP5
00001620: ADD
00001621: MSTORE
00001622: PUSH1 0x00
00001624: DUP1
00001625: DUP6
00001626: DUP8
00001627: DUP3
00001628: SWAP8
00001629: MLOAD
0000162a: SWAP2
0000162b: ADD
0000162c: DUP3
0000162d: DUP6
0000162e: GAS
0000162f: CALL
00001630: SWAP1
00001631: RETURNDATASIZE
00001632: ISZERO
00001633: PUSH2 0x1713
00001636: JUMPI
00001637: RETURNDATASIZE
00001638: SWAP3
00001639: DUP4
0000163a: GT
0000163b: PUSH2 0x16ff
0000163e: JUMPI
0000163f: SWAP1
00001640: PUSH2 0x1669
00001643: SWAP4
00001644: SWAP3
00001645: SWAP2
00001646: PUSH1 0x40
00001648: MLOAD
00001649: SWAP3
0000164a: PUSH2 0x165c
0000164d: DUP9
0000164e: PUSH1 0x1f
00001650: NOT
00001651: PUSH1 0x1f
00001653: DUP5
00001654: ADD
00001655: AND
00001656: ADD
00001657: DUP6
00001658: PUSH2 0x0d30
0000165b: JUMP
0000165c: JUMPDEST
0000165d: DUP4
0000165e: MSTORE
0000165f: RETURNDATASIZE
00001660: DUP7
00001661: DUP9
00001662: DUP6
00001663: ADD
00001664: RETURNDATACOPY
00001665: PUSH2 0x171e
00001668: JUMP
00001669: JUMPDEST
0000166a: DUP1
0000166b: MLOAD
0000166c: SWAP2
0000166d: DUP3
0000166e: ISZERO
0000166f: SWAP2
00001670: DUP5
00001671: DUP4
00001672: ISZERO
00001673: PUSH2 0x16db
00001676: JUMPI
00001677: JUMPDEST
00001678: POP
00001679: POP
0000167a: POP
0000167b: SWAP1
0000167c: POP
0000167d: ISZERO
0000167e: PUSH2 0x1684
00001681: JUMPI
00001682: POP
00001683: JUMP
00001684: JUMPDEST
00001685: PUSH1 0x84
00001687: SWAP1
00001688: PUSH1 0x40
0000168a: MLOAD
0000168b: SWAP1
0000168c: PUSH3 0x461bcd
00001690: PUSH1 0xe5
00001692: SHL
00001693: DUP3
00001694: MSTORE
00001695: PUSH1 0x04
00001697: DUP3
00001698: ADD
00001699: MSTORE
0000169a: PUSH1 0x2a
0000169c: PUSH1 0x24
0000169e: DUP3
0000169f: ADD
000016a0: MSTORE
000016a1: PUSH32 0x5361666545524332303a204552433230206f7065726174696f6e20646964206e
000016c2: PUSH1 0x44
000016c4: DUP3
000016c5: ADD
000016c6: MSTORE
000016c7: PUSH10 0x1bdd081cdd58d8d95959
000016d2: PUSH1 0xb2
000016d4: SHL
000016d5: PUSH1 0x64
000016d7: DUP3
000016d8: ADD
000016d9: MSTORE
000016da: REVERT
000016db: JUMPDEST
000016dc: SWAP2
000016dd: SWAP4
000016de: DUP2
000016df: DUP1
000016e0: SWAP5
000016e1: POP
000016e2: ADD
000016e3: SUB
000016e4: SLT
000016e5: PUSH2 0x02e1
000016e8: JUMPI
000016e9: DUP3
000016ea: ADD
000016eb: MLOAD
000016ec: SWAP1
000016ed: DUP2
000016ee: ISZERO
000016ef: ISZERO
000016f0: DUP3
000016f1: SUB
000016f2: PUSH2 0x0434
000016f5: JUMPI
000016f6: POP
000016f7: DUP1
000016f8: CODESIZE
000016f9: DUP1
000016fa: DUP5
000016fb: PUSH2 0x1677
000016fe: JUMP
000016ff: JUMPDEST
00001700: PUSH4 0x4e487b71
00001705: PUSH1 0xe0
00001707: SHL
00001708: DUP6
00001709: MSTORE
0000170a: PUSH1 0x41
0000170c: PUSH1 0x04
0000170e: MSTORE
0000170f: PUSH1 0x24
00001711: DUP6
00001712: REVERT
00001713: JUMPDEST
00001714: SWAP1
00001715: PUSH2 0x1669
00001718: SWAP4
00001719: SWAP3
0000171a: POP
0000171b: PUSH1 0x60
0000171d: SWAP2
0000171e: JUMPDEST
0000171f: SWAP2
00001720: SWAP3
00001721: SWAP1
00001722: ISZERO
00001723: PUSH2 0x1780
00001726: JUMPI
00001727: POP
00001728: DUP2
00001729: MLOAD
0000172a: ISZERO
0000172b: PUSH2 0x1732
0000172e: JUMPI
0000172f: POP
00001730: SWAP1
00001731: JUMP
00001732: JUMPDEST
00001733: EXTCODESIZE
00001734: ISZERO
00001735: PUSH2 0x173b
00001738: JUMPI
00001739: SWAP1
0000173a: JUMP
0000173b: JUMPDEST
0000173c: PUSH1 0x40
0000173e: MLOAD
0000173f: PUSH3 0x461bcd
00001743: PUSH1 0xe5
00001745: SHL
00001746: DUP2
00001747: MSTORE
00001748: PUSH1 0x20
0000174a: PUSH1 0x04
0000174c: DUP3
0000174d: ADD
0000174e: MSTORE
0000174f: PUSH1 0x1d
00001751: PUSH1 0x24
00001753: DUP3
00001754: ADD
00001755: MSTORE
00001756: PUSH32 0x416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000
00001777: PUSH1 0x44
00001779: DUP3
0000177a: ADD
0000177b: MSTORE
0000177c: PUSH1 0x64
0000177e: SWAP1
0000177f: REVERT
00001780: JUMPDEST
00001781: DUP3
00001782: MLOAD
00001783: SWAP1
00001784: SWAP2
00001785: POP
00001786: ISZERO
00001787: PUSH2 0x1793
0000178a: JUMPI
0000178b: POP
0000178c: DUP1
0000178d: MLOAD
0000178e: SWAP1
0000178f: PUSH1 0x20
00001791: ADD
00001792: REVERT
00001793: JUMPDEST
00001794: PUSH1 0x40
00001796: MLOAD
00001797: PUSH3 0x461bcd
0000179b: PUSH1 0xe5
0000179d: SHL
0000179e: DUP2
0000179f: MSTORE
000017a0: SWAP1
000017a1: DUP2
000017a2: SWAP1
000017a3: PUSH2 0x17af
000017a6: SWAP1
000017a7: PUSH1 0x04
000017a9: DUP4
000017aa: ADD
000017ab: PUSH2 0x0c18
000017ae: JUMP
000017af: JUMPDEST
000017b0: SUB
000017b1: SWAP1
000017b2: REVERT
000017b3: INVALID
000017b4: LOG2
000017b5: PUSH5 0x6970667358
000017bb: UNKNOWN(0x22)
000017bc: SLT
000017bd: KECCAK256
000017be: BLOCKHASH
000017bf: SHL
000017c0: UNKNOWN(0xC8)
000017c1: UNKNOWN(0x4D)
000017c2: PUSH20 0xfe6be3a1f85aee8dba0730333f6be8b505635d4c
000017d7: CHAINID
000017d8: UNKNOWN(0xCF)
000017d9: TLOAD
000017da: UNKNOWN(0xFB)
000017db: UNKNOWN(0x4B)
000017dc: PUSH21

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high reentrancy codex Withdraw/redeem always revert due to double nonReentrant in yTHOR overrides 85 no
view
evidence_json
{
    "evidence": "`yTHOR.withdraw`/`redeem` are `nonReentrant` and call `super.withdraw`/`super.redeem`, which are also `nonReentrant` in `yieldTHOR`, triggering the guard twice.",
    "locations": [
        "contracts/src/contracts/tokens/yTHOR.sol:22",
        "contracts/src/contracts/tokens/yTHOR.sol:31",
        "contracts/src/contracts/tokens/yieldTHOR.sol:108",
        "contracts/src/contracts/tokens/yieldTHOR.sol:126"
    ],
    "recommendation": "Apply the reentrancy guard only once on the call path. Remove `nonReentrant` from the yTHOR overrides or refactor to internal functions guarded by a single external `nonReentrant` entrypoint.",
    "exploit_scenario": "A user deposits assets into yTHOR. Even after the owner enables withdrawals, calling `withdraw` or `redeem` enters the nonReentrant guard in yTHOR and then calls `super.withdraw/super.redeem`, which are also nonReentrant. The second guard reverts with `ReentrancyGuard: reentrant call`, effectively locking all user funds permanently."
}
high other detector Untrusted CALL target/value reachable 60 no no
view
trace_id: 0x16b9db044d8c88c935d09d2e6bd746d19f8101c2d58a3eecf640a56e0042f509
call_targets: 0x8793cd69895c45b2d2474236b3cb28fc5c764775
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x16b9db044d8c88c935d09d2e6bd746d19f8101c2d58a3eecf640a56e0042f509",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x8793cd69895c45b2d2474236b3cb28fc5c764775"
    ],
    "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": "0x01e1d114",
            "selector": "0x01e1d114",
            "calldata_variants": [
                "0x01e1d114",
                "0x01e1d1140000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x06fdde03",
            "selector": "0x06fdde03",
            "calldata_variants": [
                "0x06fdde03",
                "0x06fdde030000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x07a2d13a",
            "selector": "0x07a2d13a",
            "calldata_variants": [
                "0x07a2d13a",
                "0x07a2d13a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x095ea7b3",
            "selector": "0x095ea7b3",
            "calldata_variants": [
                "0x095ea7b3",
                "0x095ea7b30000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x0a28a477",
            "selector": "0x0a28a477",
            "calldata_variants": [
                "0x0a28a477",
                "0x0a28a4770000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x18160ddd",
            "selector": "0x18160ddd",
            "calldata_variants": [
                "0x18160ddd",
                "0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x228cb733",
            "selector": "0x228cb733",
            "calldata_variants": [
                "0x228cb733",
                "0x228cb7330000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x23b872dd",
            "selector": "0x23b872dd",
            "calldata_variants": [
                "0x23b872dd",
                "0x23b872dd0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 5679,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 1,
    "guards_detected": [],
    "untrusted_call_count": 1
}
high other detector ETH value transfer possible 55 no no
view
trace_id: 0x16b9db044d8c88c935d09d2e6bd746d19f8101c2d58a3eecf640a56e0042f509
call_targets: 0x8793cd69895c45b2d2474236b3cb28fc5c764775
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x16b9db044d8c88c935d09d2e6bd746d19f8101c2d58a3eecf640a56e0042f509",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x8793cd69895c45b2d2474236b3cb28fc5c764775"
    ],
    "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": "0x01e1d114",
            "selector": "0x01e1d114",
            "calldata_variants": [
                "0x01e1d114",
                "0x01e1d1140000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x06fdde03",
            "selector": "0x06fdde03",
            "calldata_variants": [
                "0x06fdde03",
                "0x06fdde030000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x07a2d13a",
            "selector": "0x07a2d13a",
            "calldata_variants": [
                "0x07a2d13a",
                "0x07a2d13a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x095ea7b3",
            "selector": "0x095ea7b3",
            "calldata_variants": [
                "0x095ea7b3",
                "0x095ea7b30000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x0a28a477",
            "selector": "0x0a28a477",
            "calldata_variants": [
                "0x0a28a477",
                "0x0a28a4770000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x18160ddd",
            "selector": "0x18160ddd",
            "calldata_variants": [
                "0x18160ddd",
                "0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x228cb733",
            "selector": "0x228cb733",
            "calldata_variants": [
                "0x228cb733",
                "0x228cb7330000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x23b872dd",
            "selector": "0x23b872dd",
            "calldata_variants": [
                "0x23b872dd",
                "0x23b872dd0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 5679,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 1,
    "guards_detected": []
}
low math codex Signed rewardDebt can exceed accumulated after rounding, causing negative pending and claim DoS 65 no
view
evidence_json
{
    "evidence": "`claimable` and `claimRewards` cast `(accumulated - rewardDebt)` from `int256` to `uint256` without checking for negative values; `_beforeTokenTransfer` updates `rewardDebt` using per-transfer rounding that can diverge from `accumulated`.",
    "locations": [
        "contracts/src/contracts/tokens/yieldTHOR.sol:151",
        "contracts/src/contracts/tokens/yieldTHOR.sol:156",
        "contracts/src/contracts/tokens/yieldTHOR.sol:164"
    ],
    "recommendation": "Avoid signed-to-unsigned casts for pending rewards. Track `rewardDebt` as `uint256` and clamp pending to zero when `accumulated <= rewardDebt`, or recompute `rewardDebt` directly from the post-transfer balance to keep it consistent with `accumulated`.",
    "exploit_scenario": "An attacker can transfer dust to a victim when `accRewardPerShare` has a fractional component. Because `_beforeTokenTransfer` updates `rewardDebt` with a per-transfer floor while `accumulated` is recomputed from the post-transfer balance, rounding can make `rewardDebt` slightly larger than `accumulated`. `claimRewards` then casts a negative value to `uint256`, which reverts on transfer or makes `claimable` report a huge number, preventing claims until more rewards accrue."
}
low math codex Accounting assumes asset/reward tokens transfer the full requested amount 65 no
view
evidence_json
{
    "evidence": "`deposit`/`mint` and `depositRewards` use the input amount without checking actual received tokens.",
    "locations": [
        "contracts/src/contracts/tokens/yieldTHOR.sol:88",
        "contracts/src/contracts/tokens/yieldTHOR.sol:98",
        "contracts/src/contracts/tokens/yieldTHOR.sol:144"
    ],
    "recommendation": "For asset and reward transfers, measure actual received via balance-before/after and use that value for minting shares or updating `accRewardPerShare`, or explicitly restrict tokens to non-fee, non-rebasing ERC20s.",
    "exploit_scenario": "If the asset or reward token is fee-on-transfer or rebasing, the contract credits full `assets`/`amount` while receiving fewer tokens. Deposits can mint more shares than backing assets, and `depositRewards` can overstate rewards. Early claimers may drain available rewards while later withdrawals/claims revert due to insufficient balances."
}