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

Analysis Run

8334cc4c-d376-4cae-a657-bd2812b2b250

complete
Chain ID
1
Address
Block Number
Created
Sun, Dec 28, 2025 6:00 PM
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
Untrusted CALL target/value reachable
crit 0 high 0 direct contract
Review Checklist
1. Read the findings table first. Ignore raw jobs until the result looks real.
2. Confirm attacker control, not just the existence of a sink.
3. Confirm money or privilege impact.
4. Keep it if the behavior is real. Kill it if this is normal proxy, admin, or upgrade plumbing.

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
30347 report.consolidate complete 1 / 1 3 months ago
74266 artifact.fetch complete 1 / 3 1 week ago
74267 tool.cast_disasm complete 1 / 3 1 week ago
74268 analysis.bundle complete 1 / 3 1 week ago
74269 capability.graph complete 1 / 3 1 week ago
74270 detector.run complete 1 / 3 1 week ago
74271 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
4
No findings?
no
Summary
Found four issues: ABI encoding/decoding mismatches in yield hooks (can revert inbound bridging or corrupt accounting), a pending-share math bug, missing access control in StakeEasy, and unchecked ERC20 transfers.
View stderr
[codex:1133124] OpenAI Codex v0.77.0 (research preview)
[codex:1133124] --------
[codex:1133124] workdir: /tmp/codex-multi-nh1x7o2c
[codex:1133124] model: gpt-5.2-codex
[codex:1133124] provider: openai
[codex:1133124] approval: never
[codex:1133124] sandbox: read-only
[codex:1133124] reasoning effort: xhigh
[codex:1133124] reasoning summaries: auto
[codex:1133124] session id: 019b6615-6f8d-7753-a7b1-e4e0fc99bf05
[codex:1133124] --------
[codex:1133124] user
[codex:1133124] You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
[codex:1133124] Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
[codex:1133124] accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
[codex:1133124] 
[codex:1133124] Scope rules:
[codex:1133124] - You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party `contracts/**/*.sol` files.
[codex:1133124] - Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
[codex:1133124] 
[codex:1133124] Output MUST be valid JSON matching the provided schema.
[codex:1133124] - If you find nothing meaningful: set no_findings=true and findings=[].
[codex:1133124] - Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
[codex:1133124] 
[codex:1133124] Output constraints (IMPORTANT):
[codex:1133124] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:1133124] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:1133124] mcp startup: no servers
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Preparing to read audit file**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc ls in /tmp/codex-multi-nh1x7o2c succeeded in 5ms:
[codex:1133124] AUDIT_BUNDLE.txt
[codex:1133124] codex-output-schema.json
[codex:1133124] contracts
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Reading the bundle file**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-multi-nh1x7o2c succeeded in 5ms:
[codex:1133124] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:1133124] 
[codex:1133124] ================================================================================
[codex:1133124] FILE: contracts/contracts/ConnectorPlug.sol
[codex:1133124] ================================================================================
[codex:1133124] // SPDX-License-Identifier: MIT
[codex:1133124] pragma solidity 0.8.13;
[codex:1133124] 
[codex:1133124] import "./utils/RescueBase.sol";
[codex:1133124] import {ISocket} from "./interfaces/ISocket.sol";
[codex:1133124] import {IPlug} from "./interfaces/IPlug.sol";
[codex:1133124] import {IConnector} from "./interfaces/IConnector.sol";
[codex:1133124] import {IBridge} from "./interfaces/IBridge.sol";
[codex:1133124] import "./common/Errors.sol";
[codex:1133124] 
[codex:1133124] contract ConnectorPlug is IConnector, IPlug, RescueBase {
[codex:1133124]     IBridge public immutable bridge__;
[codex:1133124]     ISocket public immutable socket__;
[codex:1133124]     uint32 public immutable siblingChainSlug;
[codex:1133124]     uint256 public messageIdPart;
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Preparing to analyze large audit bundle**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc 'rg --line-number "''^FILE:" AUDIT_BUNDLE.txt' in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 4:FILE: contracts/contracts/ConnectorPlug.sol
[codex:1133124] 126:FILE: contracts/contracts/bridge/Base.sol
[codex:1133124] 466:FILE: contracts/contracts/bridge/BridgePermit.sol
[codex:1133124] 511:FILE: contracts/contracts/bridge/Controller.sol
[codex:1133124] 658:FILE: contracts/contracts/bridge/FiatTokenV2_1/FiatTokenV2_1_Controller.sol
[codex:1133124] 679:FILE: contracts/contracts/bridge/FiatTokenV2_1/IFiatTokenV2_1_Mintable.sol
[codex:1133124] 694:FILE: contracts/contracts/bridge/StakeEasy.sol
[codex:1133124] 846:FILE: contracts/contracts/bridge/UnWrapper.sol
[codex:1133124] 874:FILE: contracts/contracts/bridge/Vault.sol
[codex:1133124] 1036:FILE: contracts/contracts/common/Constants.sol
[codex:1133124] 1060:FILE: contracts/contracts/common/Errors.sol
[codex:1133124] 1091:FILE: contracts/contracts/common/Structs.sol
[codex:1133124] 1160:FILE: contracts/contracts/hooks/Controller_YieldLimitExecHook.sol
[codex:1133124] 1461:FILE: contracts/contracts/hooks/HookBase.sol
[codex:1133124] 1499:FILE: contracts/contracts/hooks/LimitExecutionHook.sol
[codex:1133124] 1755:FILE: contracts/contracts/hooks/LimitHook.sol
[codex:1133124] 1958:FILE: contracts/contracts/hooks/Vault_YieldLimitExecHook.sol
[codex:1133124] 2329:FILE: contracts/contracts/hooks/plugins/ConnectorPoolPlugin.sol
[codex:1133124] 2390:FILE: contracts/contracts/hooks/plugins/ExecutionHelper.sol
[codex:1133124] 2452:FILE: contracts/contracts/hooks/plugins/LimitPlugin.sol
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Examining first-party core files**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=3572 && NR<3701 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 10ms:
[codex:1133124] 3572:FILE: contracts/contracts/utils/AccessControl.sol
[codex:1133124] 3573:================================================================================
[codex:1133124] 3574:// SPDX-License-Identifier: GPL-3.0-only
[codex:1133124] 3575:pragma solidity 0.8.13;
[codex:1133124] 3576:
[codex:1133124] 3577:import "./Ownable.sol";
[codex:1133124] 3578:
[codex:1133124] 3579:/**
[codex:1133124] 3580: * @title AccessControl
[codex:1133124] 3581: * @dev This abstract contract implements access control mechanism based on roles.
[codex:1133124] 3582: * Each role can have one or more addresses associated with it, which are granted
[codex:1133124] 3583: * permission to execute functions with the onlyRole modifier.
[codex:1133124] 3584: */
[codex:1133124] 3585:abstract contract AccessControl is Ownable {
[codex:1133124] 3586:    /**
[codex:1133124] 3587:     * @dev A mapping of roles to a mapping of addresses to boolean values indicating whether or not they have the role.
[codex:1133124] 3588:     */
[codex:1133124] 3589:    mapping(bytes32 => mapping(address => bool)) private _permits;
[codex:1133124] 3590:
[codex:1133124] 3591:    /**
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Considering AccessControl and Ownable**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=3755 && NR<3839 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 3755:FILE: contracts/contracts/utils/Ownable.sol
[codex:1133124] 3756:================================================================================
[codex:1133124] 3757:// SPDX-License-Identifier: GPL-3.0-only
[codex:1133124] 3758:pragma solidity 0.8.13;
[codex:1133124] 3759:
[codex:1133124] 3760:/**
[codex:1133124] 3761: * @title Ownable
[codex:1133124] 3762: * @dev The Ownable contract provides a simple way to manage ownership of a contract
[codex:1133124] 3763: * and allows for ownership to be transferred to a nominated address.
[codex:1133124] 3764: */
[codex:1133124] 3765:abstract contract Ownable {
[codex:1133124] 3766:    address private _owner;
[codex:1133124] 3767:    address private _nominee;
[codex:1133124] 3768:
[codex:1133124] 3769:    event OwnerNominated(address indexed nominee);
[codex:1133124] 3770:    event OwnerClaimed(address indexed claimer);
[codex:1133124] 3771:
[codex:1133124] 3772:    error OnlyOwner();
[codex:1133124] 3773:    error OnlyNominee();
[codex:1133124] 3774:
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Considering Ownable standard and RescueBase**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=3839 && NR<3871 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 3839:FILE: contracts/contracts/utils/RescueBase.sol
[codex:1133124] 3840:================================================================================
[codex:1133124] 3841:// SPDX-License-Identifier: MIT
[codex:1133124] 3842:pragma solidity 0.8.13;
[codex:1133124] 3843:import {RescueFundsLib} from "../libraries/RescueFundsLib.sol";
[codex:1133124] 3844:import {AccessControl} from "./AccessControl.sol";
[codex:1133124] 3845:
[codex:1133124] 3846:/**
[codex:1133124] 3847: * @title Base contract for super token and vault
[codex:1133124] 3848: * @notice It contains relevant execution payload storages.
[codex:1133124] 3849: * @dev This contract implements Socket's IPlug to enable message bridging and IMessageBridge
[codex:1133124] 3850: * to support any type of message bridge.
[codex:1133124] 3851: */
[codex:1133124] 3852:abstract contract RescueBase is AccessControl {
[codex:1133124] 3853:    bytes32 constant RESCUE_ROLE = keccak256("RESCUE_ROLE");
[codex:1133124] 3854:
[codex:1133124] 3855:    /**
[codex:1133124] 3856:     * @notice Rescues funds from the contract if they are locked by mistake.
[codex:1133124] 3857:     * @param token_ The address of the token contract.
[codex:1133124] 3858:     * @param rescueTo_ The address where rescued tokens need to be sent.
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Inspecting Vault contract for vulnerabilities**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=874 && NR<1036 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 874:FILE: contracts/contracts/bridge/Vault.sol
[codex:1133124] 875:================================================================================
[codex:1133124] 876:pragma solidity 0.8.13;
[codex:1133124] 877:
[codex:1133124] 878:import "./Base.sol";
[codex:1133124] 879:import "../interfaces/IConnector.sol";
[codex:1133124] 880:import "lib/solmate/src/tokens/ERC20.sol";
[codex:1133124] 881:
[codex:1133124] 882:/**
[codex:1133124] 883: * @title SuperToken
[codex:1133124] 884: * @notice A contract which enables bridging a token to its sibling chains.
[codex:1133124] 885: * @dev This contract implements ISuperTokenOrVault to support message bridging through IMessageBridge compliant contracts.
[codex:1133124] 886: */
[codex:1133124] 887:contract Vault is Base {
[codex:1133124] 888:    using SafeTransferLib for ERC20;
[codex:1133124] 889:
[codex:1133124] 890:    // /**
[codex:1133124] 891:    //  * @notice constructor for creating a new SuperTokenVault.
[codex:1133124] 892:    //  * @param token_ token contract address which is to be bridged.
[codex:1133124] 893:    //  */
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Reviewing full Controller code**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=511 && NR<658 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 511:FILE: contracts/contracts/bridge/Controller.sol
[codex:1133124] 512:================================================================================
[codex:1133124] 513:pragma solidity 0.8.13;
[codex:1133124] 514:
[codex:1133124] 515:import "./Base.sol";
[codex:1133124] 516:
[codex:1133124] 517:contract Controller is Base {
[codex:1133124] 518:    uint256 public totalMinted;
[codex:1133124] 519:
[codex:1133124] 520:    constructor(address token_) Base(token_) {
[codex:1133124] 521:        bridgeType = NORMAL_CONTROLLER;
[codex:1133124] 522:    }
[codex:1133124] 523:
[codex:1133124] 524:    /**
[codex:1133124] 525:     * @notice Bridges tokens between chains.
[codex:1133124] 526:     * @dev This function allows bridging tokens between different chains.
[codex:1133124] 527:     * @param receiver_ The address to receive the bridged tokens.
[codex:1133124] 528:     * @param amount_ The amount of tokens to bridge.
[codex:1133124] 529:     * @param msgGasLimit_ The gas limit for the execution of the bridging process.
[codex:1133124] 530:     * @param connector_ The address of the connector contract responsible for the bridge.
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Inspecting token controller and upgradeability**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=658 && NR<694 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 658:FILE: contracts/contracts/bridge/FiatTokenV2_1/FiatTokenV2_1_Controller.sol
[codex:1133124] 659:================================================================================
[codex:1133124] 660:pragma solidity 0.8.13;
[codex:1133124] 661:
[codex:1133124] 662:import {IFiatTokenV2_1_Mintable} from "./IFiatTokenV2_1_Mintable.sol";
[codex:1133124] 663:import "../Controller.sol";
[codex:1133124] 664:
[codex:1133124] 665:contract FiatTokenV2_1_Controller is Controller {
[codex:1133124] 666:    using SafeTransferLib for ERC20;
[codex:1133124] 667:
[codex:1133124] 668:    constructor(address token_) Controller(token_) {
[codex:1133124] 669:        bridgeType = FIAT_TOKEN_CONTROLLER;
[codex:1133124] 670:    }
[codex:1133124] 671:
[codex:1133124] 672:    function _burn(address user_, uint256 burnAmount_) internal override {
[codex:1133124] 673:        ERC20(token).safeTransferFrom(user_, address(this), burnAmount_);
[codex:1133124] 674:        IFiatTokenV2_1_Mintable(address(token)).burn(burnAmount_);
[codex:1133124] 675:    }
[codex:1133124] 676:}
[codex:1133124] 677:
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Checking FiatToken transfer and burn flow**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=694 && NR<846 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 694:FILE: contracts/contracts/bridge/StakeEasy.sol
[codex:1133124] 695:================================================================================
[codex:1133124] 696:pragma solidity 0.8.13;
[codex:1133124] 697:
[codex:1133124] 698:import "lib/solmate/src/tokens/ERC20.sol";
[codex:1133124] 699:
[codex:1133124] 700:interface IProxPolyCore {
[codex:1133124] 701:    function createAccount() external returns (uint128 accountId);
[codex:1133124] 702:    function deposit(uint128 accountId, address collateralType, uint256 tokenAmount) external;
[codex:1133124] 703:    function grantPermission(uint128 accountId, bytes32 permission, address user) external;
[codex:1133124] 704:
[codex:1133124] 705:    
[codex:1133124] 706:    function delegateCollateral(
[codex:1133124] 707:        uint128 accountId,
[codex:1133124] 708:        uint128 poolId,
[codex:1133124] 709:        address collateralType,
[codex:1133124] 710:        uint256 amount,
[codex:1133124] 711:        uint256 leverage
[codex:1133124] 712:    ) external;
[codex:1133124] 713:
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Evaluating permissionless risks and reentrancy**
[codex:1133124] 
[codex:1133124] I’m carefully assessing StakeEasy's lack of access control and how it handles approvals, unwraps, and staking without slippage checks. I see potential risks from anyone spending contract-held tokens since createAccountAndStake is external and unprotected. I’m considering if this fits the intended bridging flow and planning to check related contracts to understand integration and safeguards.
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=846 && NR<874 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 846:FILE: contracts/contracts/bridge/UnWrapper.sol
[codex:1133124] 847:================================================================================
[codex:1133124] 848:pragma solidity 0.8.13;
[codex:1133124] 849:
[codex:1133124] 850:import "lib/solmate/src/tokens/ERC20.sol";
[codex:1133124] 851:
[codex:1133124] 852:contract Unwrapper {
[codex:1133124] 853:    address public baseToken;
[codex:1133124] 854:    address public wrappedToken;
[codex:1133124] 855:
[codex:1133124] 856:    constructor(address _baseToken, address _wrappedToken) {
[codex:1133124] 857:        baseToken = _baseToken;
[codex:1133124] 858:        wrappedToken = _wrappedToken;
[codex:1133124] 859:    }
[codex:1133124] 860:
[codex:1133124] 861:    function wrap(uint256 amount) public {
[codex:1133124] 862:        ERC20(baseToken).transferFrom(msg.sender, address(this), amount);
[codex:1133124] 863:        ERC20(wrappedToken).transfer(msg.sender, amount);
[codex:1133124] 864:    }
[codex:1133124] 865:
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Analyzing Unwrapper token transfer risks**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=3189 && NR<3243 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 8ms:
[codex:1133124] 3189:FILE: contracts/contracts/token/SuperToken.sol
[codex:1133124] 3190:================================================================================
[codex:1133124] 3191:pragma solidity 0.8.13;
[codex:1133124] 3192:
[codex:1133124] 3193:import "lib/solmate/src/tokens/ERC20.sol";
[codex:1133124] 3194:import "../utils/RescueBase.sol";
[codex:1133124] 3195:import "../interfaces/IHook.sol";
[codex:1133124] 3196:
[codex:1133124] 3197:/**
[codex:1133124] 3198: * @title SuperToken
[codex:1133124] 3199: * @notice An ERC20 contract which enables bridging a token to its sibling chains.
[codex:1133124] 3200: * @dev This contract implements ISuperTokenOrVault to support message bridging through IMessageBridge compliant contracts.
[codex:1133124] 3201: */
[codex:1133124] 3202:contract SuperToken is ERC20, RescueBase {
[codex:1133124] 3203:    // for all controller access (mint, burn)
[codex:1133124] 3204:    bytes32 constant CONTROLLER_ROLE = keccak256("CONTROLLER_ROLE");
[codex:1133124] 3205:
[codex:1133124] 3206:    /**
[codex:1133124] 3207:     * @notice constructor for creating a new SuperToken.
[codex:1133124] 3208:     * @param name_ token name
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Inspecting token contracts**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=3243 && NR<3314 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 3243:FILE: contracts/contracts/token/yield-token/YieldToken.sol
[codex:1133124] 3244:================================================================================
[codex:1133124] 3245:// SPDX-License-Identifier: GPL-3.0-only
[codex:1133124] 3246:pragma solidity 0.8.13;
[codex:1133124] 3247:
[codex:1133124] 3248:import "./YieldTokenBase.sol";
[codex:1133124] 3249:import {IStrategy} from "../../interfaces/IStrategy.sol";
[codex:1133124] 3250:import {IConnector} from "../../interfaces/IConnector.sol";
[codex:1133124] 3251:import {IHook} from "../../interfaces/IHook.sol";
[codex:1133124] 3252:
[codex:1133124] 3253:// add shutdown
[codex:1133124] 3254:contract YieldToken is YieldTokenBase {
[codex:1133124] 3255:    using FixedPointMathLib for uint256;
[codex:1133124] 3256:
[codex:1133124] 3257:    bytes32 constant MINTER_ROLE = keccak256("MINTER_ROLE");
[codex:1133124] 3258:    bytes32 constant HOOK_ROLE = keccak256("HOOK_ROLE");
[codex:1133124] 3259:
[codex:1133124] 3260:    constructor(
[codex:1133124] 3261:        string memory name_,
[codex:1133124] 3262:        string memory symbol_,
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Analyzing division safety in calculateMintAmount**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=3314 && NR<3572 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 8ms:
[codex:1133124] 3314:FILE: contracts/contracts/token/yield-token/YieldTokenBase.sol
[codex:1133124] 3315:================================================================================
[codex:1133124] 3316:// SPDX-License-Identifier: AGPL-3.0-only
[codex:1133124] 3317:pragma solidity >=0.8.0;
[codex:1133124] 3318:
[codex:1133124] 3319:import "lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol";
[codex:1133124] 3320:import {FixedPointMathLib} from "lib/solmate/src/utils/FixedPointMathLib.sol";
[codex:1133124] 3321:import "../../utils/RescueBase.sol";
[codex:1133124] 3322:import "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol";
[codex:1133124] 3323:import {PermitDeadlineExpired, InvalidSigner} from "../../common/Errors.sol";
[codex:1133124] 3324:
[codex:1133124] 3325:abstract contract YieldTokenBase is RescueBase, ReentrancyGuard, IERC20 {
[codex:1133124] 3326:    using FixedPointMathLib for uint256;
[codex:1133124] 3327:
[codex:1133124] 3328:    /*//////////////////////////////////////////////////////////////
[codex:1133124] 3329:                            METADATA STORAGE
[codex:1133124] 3330:    //////////////////////////////////////////////////////////////*/
[codex:1133124] 3331:
[codex:1133124] 3332:    string public name;
[codex:1133124] 3333:
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Analyzing share-to-asset conversion risks**
[codex:1133124] 
[codex:1133124] I'm unraveling how YieldTokenBase converts assets to shares, especially in permits and allowances, to spot potential vulnerabilities related to shifting totalUnderlyingAssets and its effect on allowance accuracy. I want to check if the role controlling totalUnderlyingAssets updates could be exploited, so I'm moving on to inspect HookBase and other hooks for possible attack vectors.
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=1461 && NR<1499 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 1461:FILE: contracts/contracts/hooks/HookBase.sol
[codex:1133124] 1462:================================================================================
[codex:1133124] 1463:pragma solidity 0.8.13;
[codex:1133124] 1464:
[codex:1133124] 1465:import "lib/solmate/src/utils/ReentrancyGuard.sol";
[codex:1133124] 1466:import "../common/Errors.sol";
[codex:1133124] 1467:import "../common/Constants.sol";
[codex:1133124] 1468:import "../interfaces/IHook.sol";
[codex:1133124] 1469:import "../utils/RescueBase.sol";
[codex:1133124] 1470:
[codex:1133124] 1471:/**
[codex:1133124] 1472: * @title Base contract for super token and vault
[codex:1133124] 1473: * @notice It contains relevant execution payload storages.
[codex:1133124] 1474: * @dev This contract implements Socket's IPlug to enable message bridging and IMessageBridge
[codex:1133124] 1475: * to support any type of message bridge.
[codex:1133124] 1476: */
[codex:1133124] 1477:abstract contract HookBase is ReentrancyGuard, IHook, RescueBase {
[codex:1133124] 1478:    address public immutable vaultOrController;
[codex:1133124] 1479:    bytes32 public hookType;
[codex:1133124] 1480:
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Inspecting hook implementations**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=1499 && NR<1755 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 8ms:
[codex:1133124] 1499:FILE: contracts/contracts/hooks/LimitExecutionHook.sol
[codex:1133124] 1500:================================================================================
[codex:1133124] 1501:pragma solidity 0.8.13;
[codex:1133124] 1502:
[codex:1133124] 1503:import "./plugins/LimitPlugin.sol";
[codex:1133124] 1504:import "./plugins/ExecutionHelper.sol";
[codex:1133124] 1505:import "./plugins/ConnectorPoolPlugin.sol";
[codex:1133124] 1506:import "../interfaces/IController.sol";
[codex:1133124] 1507:
[codex:1133124] 1508:contract LimitExecutionHook is LimitPlugin, ConnectorPoolPlugin {
[codex:1133124] 1509:    bool public useControllerPools;
[codex:1133124] 1510:    ExecutionHelper executionHelper__;
[codex:1133124] 1511:
[codex:1133124] 1512:    event MessageExecuted(bytes32 indexed messageId, address indexed receiver);
[codex:1133124] 1513:
[codex:1133124] 1514:    /**
[codex:1133124] 1515:     * @notice Constructor for creating a new SuperToken.
[codex:1133124] 1516:     * @param owner_ Owner of this contract.
[codex:1133124] 1517:     */
[codex:1133124] 1518:    constructor(
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Inspecting LimitHook and ExecutionHelper**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=1755 && NR<1958 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 1755:FILE: contracts/contracts/hooks/LimitHook.sol
[codex:1133124] 1756:================================================================================
[codex:1133124] 1757:pragma solidity 0.8.13;
[codex:1133124] 1758:
[codex:1133124] 1759:import "./plugins/LimitPlugin.sol";
[codex:1133124] 1760:import "../interfaces/IController.sol";
[codex:1133124] 1761:import "./plugins/ConnectorPoolPlugin.sol";
[codex:1133124] 1762:
[codex:1133124] 1763:contract LimitHook is LimitPlugin, ConnectorPoolPlugin {
[codex:1133124] 1764:    bool public immutable useControllerPools;
[codex:1133124] 1765:
[codex:1133124] 1766:    /**
[codex:1133124] 1767:     * @notice Constructor for creating a new SuperToken.
[codex:1133124] 1768:     * @param owner_ Owner of this contract.
[codex:1133124] 1769:     */
[codex:1133124] 1770:    constructor(
[codex:1133124] 1771:        address owner_,
[codex:1133124] 1772:        address controller_,
[codex:1133124] 1773:        bool useControllerPools_
[codex:1133124] 1774:    ) HookBase(owner_, controller_) {
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Investigating yield limit hooks**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=1160 && NR<1461 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 8ms:
[codex:1133124] 1160:FILE: contracts/contracts/hooks/Controller_YieldLimitExecHook.sol
[codex:1133124] 1161:================================================================================
[codex:1133124] 1162:// // // SPDX-License-Identifier: GPL-3.0-only
[codex:1133124] 1163:pragma solidity 0.8.13;
[codex:1133124] 1164:
[codex:1133124] 1165:import "lib/openzeppelin-contracts/contracts/utils/math/Math.sol";
[codex:1133124] 1166:import {FixedPointMathLib} from "lib/solmate/src/utils/FixedPointMathLib.sol";
[codex:1133124] 1167:import {IStrategy} from "../interfaces/IStrategy.sol";
[codex:1133124] 1168:import {IMintableERC20} from "../interfaces/IMintableERC20.sol";
[codex:1133124] 1169:import "lib/solmate/src/utils/SafeTransferLib.sol";
[codex:1133124] 1170:import {IConnector} from "../ConnectorPlug.sol";
[codex:1133124] 1171:import "./LimitExecutionHook.sol";
[codex:1133124] 1172:
[codex:1133124] 1173:interface IYieldToken {
[codex:1133124] 1174:    function updateTotalUnderlyingAssets(uint256 amount_) external;
[codex:1133124] 1175:
[codex:1133124] 1176:    function calculateMintAmount(uint256 amount_) external returns (uint256);
[codex:1133124] 1177:
[codex:1133124] 1178:    function convertToShares(
[codex:1133124] 1179:        uint256 underlyingAssets
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Analyzing yield token hook logic and potential inconsistencies**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=1958 && NR<2329 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 8ms:
[codex:1133124] 1958:FILE: contracts/contracts/hooks/Vault_YieldLimitExecHook.sol
[codex:1133124] 1959:================================================================================
[codex:1133124] 1960:// // // SPDX-License-Identifier: GPL-3.0-only
[codex:1133124] 1961:pragma solidity 0.8.13;
[codex:1133124] 1962:
[codex:1133124] 1963:import "lib/openzeppelin-contracts/contracts/utils/math/Math.sol";
[codex:1133124] 1964:import {FixedPointMathLib} from "lib/solmate/src/utils/FixedPointMathLib.sol";
[codex:1133124] 1965:import {IStrategy} from "../interfaces/IStrategy.sol";
[codex:1133124] 1966:import "lib/solmate/src/tokens/ERC20.sol";
[codex:1133124] 1967:
[codex:1133124] 1968:import "lib/solmate/src/utils/SafeTransferLib.sol";
[codex:1133124] 1969:import {IConnector} from "../ConnectorPlug.sol";
[codex:1133124] 1970:
[codex:1133124] 1971:import "./LimitExecutionHook.sol";
[codex:1133124] 1972:
[codex:1133124] 1973:contract Vault_YieldLimitExecHook is LimitExecutionHook {
[codex:1133124] 1974:    using SafeTransferLib for ERC20;
[codex:1133124] 1975:    using FixedPointMathLib for uint256;
[codex:1133124] 1976:
[codex:1133124] 1977:    uint256 private constant MAX_BPS = 10_000;
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Analyzing potential reentrancy and transfer risks in Vault_YieldLimitExecHook**
[codex:1133124] 
[codex:1133124] I'm inspecting Vault_YieldLimitExecHook for reentrancy guards and safe transfer practices, noting it inherits nonReentrant via HookBase but some key functions lack explicit guards. The pattern of state updates before external calls might prevent some issues, but unguarded external calls to strategy could still enable exploits if the strategy is untrusted. I'm also wary of token transfers using solmate's ERC20, which may not handle non-standard tokens safely. Next, I plan to check ExecutionHelper to understand external call vulnerabilities better.
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=2390 && NR<2452 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 2390:FILE: contracts/contracts/hooks/plugins/ExecutionHelper.sol
[codex:1133124] 2391:================================================================================
[codex:1133124] 2392:// SPDX-License-Identifier: MIT
[codex:1133124] 2393:pragma solidity 0.8.13;
[codex:1133124] 2394:
[codex:1133124] 2395:import "../../libraries/ExcessivelySafeCall.sol";
[codex:1133124] 2396:import "../../utils/RescueBase.sol";
[codex:1133124] 2397:import "../../common/Errors.sol";
[codex:1133124] 2398:
[codex:1133124] 2399:/**
[codex:1133124] 2400: * @title ExecutionHelper
[codex:1133124] 2401: * @notice It is an untrusted contract used for payload execution by Super token and Vault.
[codex:1133124] 2402: */
[codex:1133124] 2403:contract ExecutionHelper is RescueBase {
[codex:1133124] 2404:    using ExcessivelySafeCall for address;
[codex:1133124] 2405:    uint16 private constant MAX_COPY_BYTES = 0;
[codex:1133124] 2406:    address public hook;
[codex:1133124] 2407:    bytes32 public messageId;
[codex:1133124] 2408:    uint256 public bridgeAmount;
[codex:1133124] 2409:
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Evaluating ExecutionHelper reentrancy and security**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=2329 && NR<2390 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 2329:FILE: contracts/contracts/hooks/plugins/ConnectorPoolPlugin.sol
[codex:1133124] 2330:================================================================================
[codex:1133124] 2331:pragma solidity 0.8.13;
[codex:1133124] 2332:import "../HookBase.sol";
[codex:1133124] 2333:
[codex:1133124] 2334:abstract contract ConnectorPoolPlugin is HookBase {
[codex:1133124] 2335:    // connectorPoolId => totalLockedAmount
[codex:1133124] 2336:    mapping(uint256 => uint256) public poolLockedAmounts;
[codex:1133124] 2337:
[codex:1133124] 2338:    // connector => connectorPoolId
[codex:1133124] 2339:    mapping(address => uint256) public connectorPoolIds;
[codex:1133124] 2340:
[codex:1133124] 2341:    event ConnectorPoolIdUpdated(address connector, uint256 poolId);
[codex:1133124] 2342:    event PoolLockedAmountUpdated(uint256 poolId, uint256 amount);
[codex:1133124] 2343:
[codex:1133124] 2344:    function updateConnectorPoolId(
[codex:1133124] 2345:        address[] calldata connectors,
[codex:1133124] 2346:        uint256[] calldata poolIds_
[codex:1133124] 2347:    ) external onlyOwner {
[codex:1133124] 2348:        uint256 length = connectors.length;
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Considering plugin complexity**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=2452 && NR<2577 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 2452:FILE: contracts/contracts/hooks/plugins/LimitPlugin.sol
[codex:1133124] 2453:================================================================================
[codex:1133124] 2454:pragma solidity 0.8.13;
[codex:1133124] 2455:
[codex:1133124] 2456:import "../HookBase.sol";
[codex:1133124] 2457:import {Gauge} from "../../utils/Gauge.sol";
[codex:1133124] 2458:
[codex:1133124] 2459:abstract contract LimitPlugin is Gauge, HookBase {
[codex:1133124] 2460:    bytes32 constant LIMIT_UPDATER_ROLE = keccak256("LIMIT_UPDATER_ROLE");
[codex:1133124] 2461:
[codex:1133124] 2462:    // connector => receivingLimitParams
[codex:1133124] 2463:    mapping(address => LimitParams) _receivingLimitParams;
[codex:1133124] 2464:
[codex:1133124] 2465:    // connector => sendingLimitParams
[codex:1133124] 2466:    mapping(address => LimitParams) _sendingLimitParams;
[codex:1133124] 2467:
[codex:1133124] 2468:    ////////////////////////////////////////////////////////
[codex:1133124] 2469:    ////////////////////// EVENTS //////////////////////////
[codex:1133124] 2470:    ////////////////////////////////////////////////////////
[codex:1133124] 2471:
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Inspecting Gauge contract usage**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=3701 && NR<3755 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 3701:FILE: contracts/contracts/utils/Gauge.sol
[codex:1133124] 3702:================================================================================
[codex:1133124] 3703:// SPDX-License-Identifier: MIT
[codex:1133124] 3704:pragma solidity 0.8.13;
[codex:1133124] 3705:import "../common/Structs.sol";
[codex:1133124] 3706:
[codex:1133124] 3707:abstract contract Gauge {
[codex:1133124] 3708:    error AmountOutsideLimit();
[codex:1133124] 3709:
[codex:1133124] 3710:    function _getCurrentLimit(
[codex:1133124] 3711:        LimitParams storage _params
[codex:1133124] 3712:    ) internal view returns (uint256 _limit) {
[codex:1133124] 3713:        uint256 timeElapsed = block.timestamp - _params.lastUpdateTimestamp;
[codex:1133124] 3714:        uint256 limitIncrease = timeElapsed * _params.ratePerSecond;
[codex:1133124] 3715:
[codex:1133124] 3716:        if (limitIncrease + _params.lastUpdateLimit > _params.maxLimit) {
[codex:1133124] 3717:            _limit = _params.maxLimit;
[codex:1133124] 3718:        } else {
[codex:1133124] 3719:            _limit = limitIncrease + _params.lastUpdateLimit;
[codex:1133124] 3720:        }
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Opening interface definitions**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=2577 && NR<2999 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 8ms:
[codex:1133124] 2577:FILE: contracts/contracts/interfaces/IBridge.sol
[codex:1133124] 2578:================================================================================
[codex:1133124] 2579:pragma solidity ^0.8.3;
[codex:1133124] 2580:
[codex:1133124] 2581:interface IBridge {
[codex:1133124] 2582:    function bridge(
[codex:1133124] 2583:        address receiver_,
[codex:1133124] 2584:        uint256 amount_,
[codex:1133124] 2585:        uint256 msgGasLimit_,
[codex:1133124] 2586:        address connector_,
[codex:1133124] 2587:        bytes calldata execPayload_,
[codex:1133124] 2588:        bytes calldata options_
[codex:1133124] 2589:    ) external payable;
[codex:1133124] 2590:
[codex:1133124] 2591:    function receiveInbound(
[codex:1133124] 2592:        uint32 siblingChainSlug_,
[codex:1133124] 2593:        bytes memory payload_
[codex:1133124] 2594:    ) external payable;
[codex:1133124] 2595:
[codex:1133124] 2596:    function retry(address connector_, bytes32 messageId_) external;
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Inspecting critical libraries**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=2999 && NR<3189 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 2999:FILE: contracts/contracts/libraries/ExcessivelySafeCall.sol
[codex:1133124] 3000:================================================================================
[codex:1133124] 3001:// SPDX-License-Identifier: MIT OR Apache-2.0
[codex:1133124] 3002:pragma solidity 0.8.13;
[codex:1133124] 3003:
[codex:1133124] 3004:library ExcessivelySafeCall {
[codex:1133124] 3005:    uint constant LOW_28_MASK =
[codex:1133124] 3006:        0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff;
[codex:1133124] 3007:
[codex:1133124] 3008:    /// @notice Use when you _really_ really _really_ don't trust the called
[codex:1133124] 3009:    /// contract. This prevents the called contract from causing reversion of
[codex:1133124] 3010:    /// the caller in as many ways as we can.
[codex:1133124] 3011:    /// @dev The main difference between this and a solidity low-level call is
[codex:1133124] 3012:    /// that we limit the number of bytes that the callee can cause to be
[codex:1133124] 3013:    /// copied to caller memory. This prevents stupid things like malicious
[codex:1133124] 3014:    /// contracts returning 10,000,000 bytes causing a local OOG when copying
[codex:1133124] 3015:    /// to memory.
[codex:1133124] 3016:    /// @param _target The address to call
[codex:1133124] 3017:    /// @param _gas The amount of gas to forward to the remote contract
[codex:1133124] 3018:    /// @param _maxCopy The maximum number of bytes of returndata to copy
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Inspecting error constants**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "awk 'NR>=1036 && NR<1160 {print NR\":\""'$0}'"' AUDIT_BUNDLE.txt" in /tmp/codex-multi-nh1x7o2c succeeded in 7ms:
[codex:1133124] 1036:FILE: contracts/contracts/common/Constants.sol
[codex:1133124] 1037:================================================================================
[codex:1133124] 1038:pragma solidity 0.8.13;
[codex:1133124] 1039:
[codex:1133124] 1040:address constant ETH_ADDRESS = address(
[codex:1133124] 1041:    0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE
[codex:1133124] 1042:);
[codex:1133124] 1043:
[codex:1133124] 1044:bytes32 constant NORMAL_CONTROLLER = keccak256("NORMAL_CONTROLLER");
[codex:1133124] 1045:bytes32 constant FIAT_TOKEN_CONTROLLER = keccak256("FIAT_TOKEN_CONTROLLER");
[codex:1133124] 1046:
[codex:1133124] 1047:bytes32 constant LIMIT_HOOK = keccak256("LIMIT_HOOK");
[codex:1133124] 1048:bytes32 constant LIMIT_EXECUTION_HOOK = keccak256("LIMIT_EXECUTION_HOOK");
[codex:1133124] 1049:bytes32 constant LIMIT_EXECUTION_YIELD_HOOK = keccak256(
[codex:1133124] 1050:    "LIMIT_EXECUTION_YIELD_HOOK"
[codex:1133124] 1051:);
[codex:1133124] 1052:bytes32 constant LIMIT_EXECUTION_YIELD_TOKEN_HOOK = keccak256(
[codex:1133124] 1053:    "LIMIT_EXECUTION_YIELD_TOKEN_HOOK"
[codex:1133124] 1054:);
[codex:1133124] 1055:
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Examining connectors and security concerns**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc 'rg -n "delegatecall" AUDIT_BUNDLE.txt' in /tmp/codex-multi-nh1x7o2c exited 1 in 6ms:
[codex:1133124] 
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Analyzing contract call patterns and potential risks**
[codex:1133124] 
[codex:1133124] I'm reviewing the use of external calls, permit signature handling, reentrancy protections, connector validations, unchecked ERC20 transfers, and bridging logic to spot inconsistencies or vulnerabilities; there are subtle points around signature timing, access control assumptions, unchecked token transfer returns, and hook call behaviors that could cause reverts or risks, so I'm systematically inspecting them.
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "rg -n \"\\.transfer\\(|\\.transferFrom\\(|\\.approve\\(\" contracts/contracts" in /tmp/codex-multi-nh1x7o2c succeeded in 10ms:
[codex:1133124] contracts/contracts/bridge/BridgePermit.sol:37:        ERC20(token).transferFrom(msg.sender, address(this), amount_);
[codex:1133124] contracts/contracts/bridge/BridgePermit.sol:38:        ERC20(token).approve(address(vault), amount_);
[codex:1133124] contracts/contracts/bridge/StakeEasy.sol:105:            EnumberableNft(nft).transferFrom(address(this), walletAddress, accountId); 
[codex:1133124] contracts/contracts/bridge/StakeEasy.sol:123:        ERC20(bridgedToken).approve(address(Unwrapper), amount);
[codex:1133124] contracts/contracts/bridge/StakeEasy.sol:127:        ERC20(fUSDC).approve(address(spotMarket), amount);
[codex:1133124] contracts/contracts/bridge/StakeEasy.sol:132:        ERC20(fxUSD).approve(address(polyCore), amountOut);
[codex:1133124] contracts/contracts/bridge/UnWrapper.sol:15:        ERC20(baseToken).transferFrom(msg.sender, address(this), amount);
[codex:1133124] contracts/contracts/bridge/UnWrapper.sol:16:        ERC20(wrappedToken).transfer(msg.sender, amount);
[codex:1133124] contracts/contracts/bridge/UnWrapper.sol:21:        ERC20(wrappedToken).transferFrom(msg.sender, address(this), amount);
[codex:1133124] contracts/contracts/bridge/UnWrapper.sol:22:        ERC20(baseToken).transfer(msg.sender, amount);
[codex:1133124] contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:187:            yieldToken__.transfer(receiver, consumedUnderlying);
[codex:1133124] contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:270:        yieldToken__.transfer(receiver, consumedUnderlying);
[codex:1133124] contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:223:        underlyingAsset__.transfer(vaultOrController, withdrawn);
[codex:1133124] contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:235:        underlyingAsset__.transfer(vaultOrController, withdrawn);
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Preparing to extract accurate line numbers**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc 'nl -ba contracts/contracts/bridge/BridgePermit.sol' in /tmp/codex-multi-nh1x7o2c succeeded in 5ms:
[codex:1133124]      1	pragma solidity 0.8.13;
[codex:1133124]      2	
[codex:1133124]      3	import "lib/solmate/src/tokens/ERC20.sol";
[codex:1133124]      4	interface IVault {
[codex:1133124]      5	    function bridge(
[codex:1133124]      6	        address receiver_,
[codex:1133124]      7	        uint256 amount_,
[codex:1133124]      8	        uint256 msgGasLimit_,
[codex:1133124]      9	        address connector_,
[codex:1133124]     10	        bytes calldata execPayload_,
[codex:1133124]     11	        bytes calldata options_
[codex:1133124]     12	    ) external payable;
[codex:1133124]     13	
[codex:1133124]     14	}
[codex:1133124]     15	contract BridgeWithPermit {
[codex:1133124]     16	    IVault public vault;
[codex:1133124]     17	    address public token;
[codex:1133124]     18	
[codex:1133124]     19	    constructor(address _vault, address _token) {
[codex:1133124]     20	        token = _token;
[codex:1133124] 
[codex:1133124] 
[codex:1133124] 
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Analyzing unchecked token transfer risks**
[codex:1133124] 
[codex:1133124] I’m unpacking how some contracts use ERC20 transfer functions without checking return values, risking silent failures—this can lead to mismatched accounting or unauthorized token minting, especially with non-standard tokens. I’m also exploring how a staking function allows anyone to stake contract-held tokens into arbitrary accounts, revealing a missing access control risk. Finally, I’m diving into complex yield token accounting logic where ABI encoding mismatches could cause serious calculation errors affecting share minting and pending amounts, potentially enabling exploit scenarios. There is a lot here! I’ll keep tracing these intricate flows to understand their impact better.
[codex:1133124] thinking
[codex:1133124] **Examining ABI encoding mismatches and accounting risks**
[codex:1133124] 
[codex:1133124] I’m reviewing how inconsistent ABI encoding and decoding between source and destination hooks cause decoding errors or misinterpreted data, risking bridged funds getting stuck or accounting breaking. There’s also a deeper issue where yield token calculations rely on assumptions that may cause over-minting or denial-of-service if strategy asset values drop. Plus, I’m assessing how unchecked signature malleability and unrestricted staking calls further complicate security. It’s a lot to untangle!
[codex:1133124] thinking
[codex:1133124] **Analyzing token handling and reentrancy edge cases**
[codex:1133124] 
[codex:1133124] I’m looking into how tokens can get stuck in StakeEasy after failed executions and how lack of access control on certain functions might allow misuse of those tokens. I’m also checking for unchecked ERC20 return values in Unwrapper that could cause issues and examining reentrancy protections around hooks and external calls. There’s quite a tangle of subtle contract behaviors around failures, allowances, and event semantics to sort through!
[codex:1133124] thinking
[codex:1133124] **Identifying key vulnerabilities and mismatches**
[codex:1133124] 
[codex:1133124] I’m summarizing main issues such as unchecked ERC20 return values in Unwrapper and Vault hooks, missing access control in StakeEasy allowing misuse of contract-held tokens, and severe ABI encoding mismatches between source and destination hooks that can cause permanent fund locks. There’s also a critical pending share accounting bug that could enable exploit or denial of service. These highlight critical areas needing attention in this Solidity codebase.
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "nl -ba contracts/contracts/hooks/Controller_YieldLimitExecHook.sol | sed -n '120,220p'" in /tmp/codex-multi-nh1x7o2c succeeded in 8ms:
[codex:1133124]    120	
[codex:1133124]    121	        if (params_.transferInfo.amount == 0)
[codex:1133124]    122	            return (abi.encode(0, 0, 0, address(0)), transferInfo);
[codex:1133124]    123	
[codex:1133124]    124	        (uint256 consumedUnderlying, uint256 pendingUnderlying) = _limitDstHook(
[codex:1133124]    125	            params_.connector,
[codex:1133124]    126	            params_.transferInfo.amount
[codex:1133124]    127	        );
[codex:1133124]    128	        uint256 sharesToMint = yieldToken__.calculateMintAmount(
[codex:1133124]    129	            params_.transferInfo.amount
[codex:1133124]    130	        );
[codex:1133124]    131	
[codex:1133124]    132	        postHookData = abi.encode(
[codex:1133124]    133	            consumedUnderlying,
[codex:1133124]    134	            pendingUnderlying,
[codex:1133124]    135	            params_.transferInfo.amount,
[codex:1133124]    136	            params_.transferInfo.receiver
[codex:1133124]    137	        );
[codex:1133124]    138	
[codex:1133124]    139	        transferInfo = params_.transferInfo;
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Checking hook call mismatches**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "nl -ba contracts/contracts/hooks/Controller_YieldLimitExecHook.sol | sed -n '60,130p'" in /tmp/codex-multi-nh1x7o2c succeeded in 6ms:
[codex:1133124]     60	        SrcPreHookCallParams calldata params_
[codex:1133124]     61	    )
[codex:1133124]     62	        public
[codex:1133124]     63	        override
[codex:1133124]     64	        notShutdown
[codex:1133124]     65	        returns (TransferInfo memory transferInfo, bytes memory postSrcHookData)
[codex:1133124]     66	    {
[codex:1133124]     67	        super.srcPreHookCall(params_);
[codex:1133124]     68	        uint256 amount = params_.transferInfo.amount;
[codex:1133124]     69	        postSrcHookData = abi.encode(amount);
[codex:1133124]     70	
[codex:1133124]     71	        totalUnderlyingAssets -= amount;
[codex:1133124]     72	        transferInfo = params_.transferInfo;
[codex:1133124]     73	        transferInfo.amount = yieldToken__.convertToShares(amount);
[codex:1133124]     74	    }
[codex:1133124]     75	
[codex:1133124]     76	    function srcPostHookCall(
[codex:1133124]     77	        SrcPostHookCallParams memory srcPostHookCallParams_
[codex:1133124]     78	    )
[codex:1133124]     79	        public
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Reviewing encode/decode mismatch**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "nl -ba contracts/contracts/hooks/Vault_YieldLimitExecHook.sol | sed -n '40,140p'" in /tmp/codex-multi-nh1x7o2c succeeded in 6ms:
[codex:1133124]     40	        uint256 debtOutstanding
[codex:1133124]     41	    );
[codex:1133124]     42	    event ShutdownStateUpdated(bool shutdownState);
[codex:1133124]     43	    event DebtRatioUpdated(uint256 debtRatio);
[codex:1133124]     44	    event StrategyUpdated(address strategy);
[codex:1133124]     45	    event RebalanceDelayUpdated(uint128 rebalanceDelay);
[codex:1133124]     46	
[codex:1133124]     47	    modifier notShutdown() {
[codex:1133124]     48	        if (emergencyShutdown) revert VaultShutdown();
[codex:1133124]     49	        _;
[codex:1133124]     50	    }
[codex:1133124]     51	
[codex:1133124]     52	    constructor(
[codex:1133124]     53	        uint256 debtRatio_,
[codex:1133124]     54	        uint128 rebalanceDelay_,
[codex:1133124]     55	        address strategy_,
[codex:1133124]     56	        address underlyingAsset_,
[codex:1133124]     57	        address vault_,
[codex:1133124]     58	        address executionHelper_,
[codex:1133124]     59	        bool useControllerPools_
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Analyzing potential underflow and sync issues**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "nl -ba contracts/contracts/bridge/StakeEasy.sol | sed -n '70,170p'" in /tmp/codex-multi-nh1x7o2c succeeded in 6ms:
[codex:1133124]     70	        address _Unwrapper,
[codex:1133124]     71	        address _bridgedToken,
[codex:1133124]     72	        address _nft,
[codex:1133124]     73	        address _fUSDC,
[codex:1133124]     74	        address _fxUSD
[codex:1133124]     75	    ) {
[codex:1133124]     76	        polyCore = IProxPolyCore(_polyCore);
[codex:1133124]     77	        spotMarket = ISpotMarket(_spotMarket);
[codex:1133124]     78	        Unwrapper = IWrapper(_Unwrapper);
[codex:1133124]     79	        bridgedToken = _bridgedToken;
[codex:1133124]     80	        nft = _nft;
[codex:1133124]     81	        fUSDC = _fUSDC;
[codex:1133124]     82	        fxUSD = _fxUSD;
[codex:1133124]     83	    }
[codex:1133124]     84	
[codex:1133124]     85	    function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {
[codex:1133124]     86	        return 0x150b7a02;
[codex:1133124]     87	    }
[codex:1133124]     88	
[codex:1133124]     89	    function createAccountAndStake(
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Noting lack of access control**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc 'nl -ba contracts/contracts/bridge/UnWrapper.sol' in /tmp/codex-multi-nh1x7o2c succeeded in 6ms:
[codex:1133124]      1	pragma solidity 0.8.13;
[codex:1133124]      2	
[codex:1133124]      3	import "lib/solmate/src/tokens/ERC20.sol";
[codex:1133124]      4	
[codex:1133124]      5	contract Unwrapper {
[codex:1133124]      6	    address public baseToken;
[codex:1133124]      7	    address public wrappedToken;
[codex:1133124]      8	
[codex:1133124]      9	    constructor(address _baseToken, address _wrappedToken) {
[codex:1133124]     10	        baseToken = _baseToken;
[codex:1133124]     11	        wrappedToken = _wrappedToken;
[codex:1133124]     12	    }
[codex:1133124]     13	
[codex:1133124]     14	    function wrap(uint256 amount) public {
[codex:1133124]     15	        ERC20(baseToken).transferFrom(msg.sender, address(this), amount);
[codex:1133124]     16	        ERC20(wrappedToken).transfer(msg.sender, amount);
[codex:1133124]     17	    }
[codex:1133124]     18	
[codex:1133124]     19	    function unwrap(uint256 amount) public {
[codex:1133124]     20	        
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Investigating Vault_YieldLimitExecHook transfers**
[codex:1133124] exec
[codex:1133124] /bin/bash -lc "nl -ba contracts/contracts/hooks/Vault_YieldLimitExecHook.sol | sed -n '210,260p'" in /tmp/codex-multi-nh1x7o2c succeeded in 6ms:
[codex:1133124]    210	    ) external onlyOwner returns (uint256) {
[codex:1133124]    211	        return _withdrawFromStrategy(underlyingAsset_);
[codex:1133124]    212	    }
[codex:1133124]    213	
[codex:1133124]    214	    function _withdrawFromStrategy(
[codex:1133124]    215	        uint256 underlyingAsset_
[codex:1133124]    216	    ) internal returns (uint256 withdrawn) {
[codex:1133124]    217	        uint256 preBalance = underlyingAsset__.balanceOf(address(this));
[codex:1133124]    218	        strategy.withdraw(underlyingAsset_);
[codex:1133124]    219	        withdrawn = underlyingAsset__.balanceOf(address(this)) - preBalance;
[codex:1133124]    220	        totalIdle += withdrawn;
[codex:1133124]    221	        totalDebt -= withdrawn;
[codex:1133124]    222	
[codex:1133124]    223	        underlyingAsset__.transfer(vaultOrController, withdrawn);
[codex:1133124]    224	        emit WithdrawFromStrategy(withdrawn);
[codex:1133124]    225	    }
[codex:1133124]    226	
[codex:1133124]    227	    function _withdrawAllFromStrategy() internal returns (uint256) {
[codex:1133124]    228	        uint256 preBalance = underlyingAsset__.balanceOf(address(this));
[codex:1133124]    229	        strategy.withdrawAll();
[codex:1133124] 
[codex:1133124] thinking
[codex:1133124] **Summarizing vulnerability findings and crafting JSON output**
[codex:1133124] 
[codex:1133124] I’m gathering all relevant details about encoding mismatches, pending share bugs, access control gaps, and unchecked ERC20 transfers from multiple contracts, and preparing a concise summary and structured JSON with severity, categories, evidence, and recommendations for each issue. This will clearly communicate the problems and suggest mitigation steps following the required output schema.
[codex:1133124] codex
[codex:1133124] {"no_findings":false,"summary":"Found four issues: ABI encoding/decoding mismatches in yield hooks (can revert inbound bridging or corrupt accounting), a pending-share math bug, missing access control in StakeEasy, and unchecked ERC20 transfers.","findings":[{"severity":"high","category":"other","title":"YieldLimitExec hooks encode/decode mismatch can revert inbound mints and corrupt accounting","exploit_scenario":"When these hooks are enabled, the source hook encodes `transferInfo.data` as `(bytes, bytes)` (controller) or `(uint256, bytes)` (vault), but the destination hook decodes it as `(uint256, bytes)` (controller) or `(bytes, bytes)` (vault). This ABI mismatch causes `dstPreHookCall` to revert for most payloads (locking funds that were burned/locked on the source chain), or to misinterpret offsets as `increasedUnderlying`, skewing pool limits and totalUnderlyingAssets. A malicious sender can craft payloads to maximize the misdecode or guarantee reverts.","recommendation":"Make the encoding/decoding types consistent on both ends. Use a single struct or explicit `(uint256 increasedUnderlying, bytes payload)` in both `srcPostHookCall` and `dstPreHookCall`, and add cross-chain payload encoding/decoding tests to prevent regressions.","evidence":"Controller hook encodes bytes but destination decodes uint256; vault hook encodes uint256 but destination decodes bytes.","locations":["contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:87","contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:110","contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:104","contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:133"]},{"severity":"medium","category":"math","title":"Pending-share calculation uses pendingUnderlying instead of consumedUnderlying","exploit_scenario":"When a transfer exceeds the limit, `pendingUnderlying > 0` and shares are minted to the hook. The hook computes `consumedShares` using `pendingUnderlying`, which inverts the split and stores `pendingShares` larger than the remaining shares. An attacker can then call `retry` and attempt to withdraw more shares than the hook actually holds, potentially draining shares reserved for other pending transfers or permanently blocking retries due to insufficient balance.","recommendation":"Compute `consumedShares` from `consumedUnderlying` (or compute `pendingShares` directly from `pendingUnderlying`), and add invariants to ensure `pendingShares` equals the hook’s remaining share balance.","evidence":"`consumedShares` is calculated using `pendingUnderlying` instead of `consumedUnderlying`, flipping the pending/consumed split.","locations":["contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:175","contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:179"]},{"severity":"medium","category":"access_control","title":"StakeEasy lets any caller spend contract-held tokens","exploit_scenario":"`createAccountAndStake` is permissionless and uses the contract’s own balances (bridgedToken/fUSDC/fxUSD) without pulling funds from the caller. If StakeEasy ever receives tokens (e.g., failed execution payload or accidental transfer), any user can call this function with their own `walletAddress` and stake those tokens into their account, effectively stealing assets.","recommendation":"Restrict `createAccountAndStake` to a trusted caller (bridge/hook/execution helper) or require `msg.sender == walletAddress` and pull tokens from the caller with `transferFrom` before staking. Consider adding a rescue function for unexpected balances.","evidence":"No access control on `createAccountAndStake`, and `_wrapAndStake` uses the contract’s balances with approvals to external contracts.","locations":["contracts/contracts/bridge/StakeEasy.sol:89","contracts/contracts/bridge/StakeEasy.sol:122"]},{"severity":"low","category":"other","title":"Unchecked ERC20 transfer/transferFrom can enable free unwrap or silent accounting drift","exploit_scenario":"If `baseToken`/`wrappedToken` (or the vault’s underlying asset) return `false` without reverting, `Unwrapper.wrap/unwrap` can send tokens out even when `transferFrom` failed, letting users obtain tokens without paying. In `Vault_YieldLimitExecHook`, transfers back to the vault can silently fail while accounting is updated, leading to asset/ledger divergence.","recommendation":"Use `SafeTransferLib.safeTransfer`/`safeTransferFrom` (or check return values explicitly) for all external token transfers.","evidence":"Raw ERC20 `transfer/transferFrom` calls are made without checking return values.","locations":["contracts/contracts/bridge/UnWrapper.sol:14","contracts/contracts/bridge/UnWrapper.sol:19","contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:223","contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:235"]}]}
[codex:1133124] tokens used
[codex:1133124] 169,821
[codex:1133124] {"no_findings":false,"summary":"Found four issues: ABI encoding/decoding mismatches in yield hooks (can revert inbound bridging or corrupt accounting), a pending-share math bug, missing access control in StakeEasy, and unchecked ERC20 transfers.","findings":[{"severity":"high","category":"other","title":"YieldLimitExec hooks encode/decode mismatch can revert inbound mints and corrupt accounting","exploit_scenario":"When these hooks are enabled, the source hook encodes `transferInfo.data` as `(bytes, bytes)` (controller) or `(uint256, bytes)` (vault), but the destination hook decodes it as `(uint256, bytes)` (controller) or `(bytes, bytes)` (vault). This ABI mismatch causes `dstPreHookCall` to revert for most payloads (locking funds that were burned/locked on the source chain), or to misinterpret offsets as `increasedUnderlying`, skewing pool limits and totalUnderlyingAssets. A malicious sender can craft payloads to maximize the misdecode or guarantee reverts.","recommendation":"Make the encoding/decoding types consistent on both ends. Use a single struct or explicit `(uint256 increasedUnderlying, bytes payload)` in both `srcPostHookCall` and `dstPreHookCall`, and add cross-chain payload encoding/decoding tests to prevent regressions.","evidence":"Controller hook encodes bytes but destination decodes uint256; vault hook encodes uint256 but destination decodes bytes.","locations":["contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:87","contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:110","contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:104","contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:133"]},{"severity":"medium","category":"math","title":"Pending-share calculation uses pendingUnderlying instead of consumedUnderlying","exploit_scenario":"When a transfer exceeds the limit, `pendingUnderlying > 0` and shares are minted to the hook. The hook computes `consumedShares` using `pendingUnderlying`, which inverts the split and stores `pendingShares` larger than the remaining shares. An attacker can then call `retry` and attempt to withdraw more shares than the hook actually holds, potentially draining shares reserved for other pending transfers or permanently blocking retries due to insufficient balance.","recommendation":"Compute `consumedShares` from `consumedUnderlying` (or compute `pendingShares` directly from `pendingUnderlying`), and add invariants to ensure `pendingShares` equals the hook’s remaining share balance.","evidence":"`consumedShares` is calculated using `pendingUnderlying` instead of `consumedUnderlying`, flipping the pending/consumed split.","locations":["contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:175","contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:179"]},{"severity":"medium","category":"access_control","title":"StakeEasy lets any caller spend contract-held tokens","exploit_scenario":"`createAccountAndStake` is permissionless and uses the contract’s own balances (bridgedToken/fUSDC/fxUSD) without pulling funds from the caller. If StakeEasy ever receives tokens (e.g., failed execution payload or accidental transfer), any user can call this function with their own `walletAddress` and stake those tokens into their account, effectively stealing assets.","recommendation":"Restrict `createAccountAndStake` to a trusted caller (bridge/hook/execution helper) or require `msg.sender == walletAddress` and pull tokens from the caller with `transferFrom` before staking. Consider adding a rescue function for unexpected balances.","evidence":"No access control on `createAccountAndStake`, and `_wrapAndStake` uses the contract’s balances with approvals to external contracts.","locations":["contracts/contracts/bridge/StakeEasy.sol:89","contracts/contracts/bridge/StakeEasy.sol:122"]},{"severity":"low","category":"other","title":"Unchecked ERC20 transfer/transferFrom can enable free unwrap or silent accounting drift","exploit_scenario":"If `baseToken`/`wrappedToken` (or the vault’s underlying asset) return `false` without reverting, `Unwrapper.wrap/unwrap` can send tokens out even when `transferFrom` failed, letting users obtain tokens without paying. In `Vault_YieldLimitExecHook`, transfers back to the vault can silently fail while accounting is updated, leading to asset/ledger divergence.","recommendation":"Use `SafeTransferLib.safeTransfer`/`safeTransferFrom` (or check return values explicitly) for all external token transfers.","evidence":"Raw ERC20 `transfer/transferFrom` calls are made without checking return values.","locations":["contracts/contracts/bridge/UnWrapper.sol:14","contracts/contracts/bridge/UnWrapper.sol:19","contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:223","contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:235"]}]}
Metadata
{
    "codex": {
        "ran_at": "2025-12-28T18:00:12.284398+00:00",
        "returncode": 0
    },
    "summary": "Found four issues: ABI encoding/decoding mismatches in yield hooks (can revert inbound bridging or corrupt accounting), a pending-share math bug, missing access control in StakeEasy, and unchecked ERC20 transfers.",
    "raw_final": {
        "summary": "Found four issues: ABI encoding/decoding mismatches in yield hooks (can revert inbound bridging or corrupt accounting), a pending-share math bug, missing access control in StakeEasy, and unchecked ERC20 transfers.",
        "findings": [
            {
                "title": "YieldLimitExec hooks encode/decode mismatch can revert inbound mints and corrupt accounting",
                "category": "other",
                "evidence": "Controller hook encodes bytes but destination decodes uint256; vault hook encodes uint256 but destination decodes bytes.",
                "severity": "high",
                "locations": [
                    "contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:87",
                    "contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:110",
                    "contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:104",
                    "contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:133"
                ],
                "recommendation": "Make the encoding/decoding types consistent on both ends. Use a single struct or explicit `(uint256 increasedUnderlying, bytes payload)` in both `srcPostHookCall` and `dstPreHookCall`, and add cross-chain payload encoding/decoding tests to prevent regressions.",
                "exploit_scenario": "When these hooks are enabled, the source hook encodes `transferInfo.data` as `(bytes, bytes)` (controller) or `(uint256, bytes)` (vault), but the destination hook decodes it as `(uint256, bytes)` (controller) or `(bytes, bytes)` (vault). This ABI mismatch causes `dstPreHookCall` to revert for most payloads (locking funds that were burned/locked on the source chain), or to misinterpret offsets as `increasedUnderlying`, skewing pool limits and totalUnderlyingAssets. A malicious sender can craft payloads to maximize the misdecode or guarantee reverts."
            },
            {
                "title": "Pending-share calculation uses pendingUnderlying instead of consumedUnderlying",
                "category": "math",
                "evidence": "`consumedShares` is calculated using `pendingUnderlying` instead of `consumedUnderlying`, flipping the pending/consumed split.",
                "severity": "medium",
                "locations": [
                    "contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:175",
                    "contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:179"
                ],
                "recommendation": "Compute `consumedShares` from `consumedUnderlying` (or compute `pendingShares` directly from `pendingUnderlying`), and add invariants to ensure `pendingShares` equals the hook\u2019s remaining share balance.",
                "exploit_scenario": "When a transfer exceeds the limit, `pendingUnderlying > 0` and shares are minted to the hook. The hook computes `consumedShares` using `pendingUnderlying`, which inverts the split and stores `pendingShares` larger than the remaining shares. An attacker can then call `retry` and attempt to withdraw more shares than the hook actually holds, potentially draining shares reserved for other pending transfers or permanently blocking retries due to insufficient balance."
            },
            {
                "title": "StakeEasy lets any caller spend contract-held tokens",
                "category": "access_control",
                "evidence": "No access control on `createAccountAndStake`, and `_wrapAndStake` uses the contract\u2019s balances with approvals to external contracts.",
                "severity": "medium",
                "locations": [
                    "contracts/contracts/bridge/StakeEasy.sol:89",
                    "contracts/contracts/bridge/StakeEasy.sol:122"
                ],
                "recommendation": "Restrict `createAccountAndStake` to a trusted caller (bridge/hook/execution helper) or require `msg.sender == walletAddress` and pull tokens from the caller with `transferFrom` before staking. Consider adding a rescue function for unexpected balances.",
                "exploit_scenario": "`createAccountAndStake` is permissionless and uses the contract\u2019s own balances (bridgedToken/fUSDC/fxUSD) without pulling funds from the caller. If StakeEasy ever receives tokens (e.g., failed execution payload or accidental transfer), any user can call this function with their own `walletAddress` and stake those tokens into their account, effectively stealing assets."
            },
            {
                "title": "Unchecked ERC20 transfer/transferFrom can enable free unwrap or silent accounting drift",
                "category": "other",
                "evidence": "Raw ERC20 `transfer/transferFrom` calls are made without checking return values.",
                "severity": "low",
                "locations": [
                    "contracts/contracts/bridge/UnWrapper.sol:14",
                    "contracts/contracts/bridge/UnWrapper.sol:19",
                    "contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:223",
                    "contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:235"
                ],
                "recommendation": "Use `SafeTransferLib.safeTransfer`/`safeTransferFrom` (or check return values explicitly) for all external token transfers.",
                "exploit_scenario": "If `baseToken`/`wrappedToken` (or the vault\u2019s underlying asset) return `false` without reverting, `Unwrapper.wrap/unwrap` can send tokens out even when `transferFrom` failed, letting users obtain tokens without paying. In `Vault_YieldLimitExecHook`, transfers back to the vault can silently fail while accounting is updated, leading to asset/ledger divergence."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
15
EXT*/BALANCE
2
Total opcodes
6937
Flags
call_family_heavy
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: PUSH1 0x04
00000007: CALLDATASIZE
00000008: LT
00000009: PUSH2 0x016a
0000000c: JUMPI
0000000d: PUSH1 0x00
0000000f: CALLDATALOAD
00000010: PUSH1 0xe0
00000012: SHR
00000013: DUP1
00000014: PUSH4 0x8da5cb5b
00000019: GT
0000001a: PUSH2 0x00cb
0000001d: JUMPI
0000001e: DUP1
0000001f: PUSH4 0xd547741f
00000024: GT
00000025: PUSH2 0x007f
00000028: JUMPI
00000029: DUP1
0000002a: PUSH4 0xf290aafa
0000002f: GT
00000030: PUSH2 0x0059
00000033: JUMPI
00000034: DUP1
00000035: PUSH4 0xf290aafa
0000003a: EQ
0000003b: PUSH2 0x03f9
0000003e: JUMPI
0000003f: DUP1
00000040: PUSH4 0xfc0c546a
00000045: EQ
00000046: PUSH2 0x0419
00000049: JUMPI
0000004a: DUP1
0000004b: PUSH4 0xfc3a7b98
00000050: EQ
00000051: PUSH2 0x044d
00000054: JUMPI
00000055: PUSH1 0x00
00000057: DUP1
00000058: REVERT
00000059: JUMPDEST
0000005a: DUP1
0000005b: PUSH4 0xd547741f
00000060: EQ
00000061: PUSH2 0x0389
00000064: JUMPI
00000065: DUP1
00000066: PUSH4 0xe272ad3f
0000006b: EQ
0000006c: PUSH2 0x03a9
0000006f: JUMPI
00000070: DUP1
00000071: PUSH4 0xe9ee1eaf
00000076: EQ
00000077: PUSH2 0x03c9
0000007a: JUMPI
0000007b: PUSH1 0x00
0000007d: DUP1
0000007e: REVERT
0000007f: JUMPDEST
00000080: DUP1
00000081: PUSH4 0x9dc7b023
00000086: GT
00000087: PUSH2 0x00b0
0000008a: JUMPI
0000008b: DUP1
0000008c: PUSH4 0x9dc7b023
00000091: EQ
00000092: PUSH2 0x0336
00000095: JUMPI
00000096: DUP1
00000097: PUSH4 0xaad48d80
0000009c: EQ
0000009d: PUSH2 0x0356
000000a0: JUMPI
000000a1: DUP1
000000a2: PUSH4 0xb23d5436
000000a7: EQ
000000a8: PUSH2 0x0376
000000ab: JUMPI
000000ac: PUSH1 0x00
000000ae: DUP1
000000af: REVERT
000000b0: JUMPDEST
000000b1: DUP1
000000b2: PUSH4 0x8da5cb5b
000000b7: EQ
000000b8: PUSH2 0x02db
000000bb: JUMPI
000000bc: DUP1
000000bd: PUSH4 0x91d14854
000000c2: EQ
000000c3: PUSH2 0x0306
000000c6: JUMPI
000000c7: PUSH1 0x00
000000c9: DUP1
000000ca: REVERT
000000cb: JUMPDEST
000000cc: DUP1
000000cd: PUSH4 0x4b0a8854
000000d2: GT
000000d3: PUSH2 0x0122
000000d6: JUMPI
000000d7: DUP1
000000d8: PUSH4 0x6ccae054
000000dd: GT
000000de: PUSH2 0x0107
000000e1: JUMPI
000000e2: DUP1
000000e3: PUSH4 0x6ccae054
000000e8: EQ
000000e9: PUSH2 0x027b
000000ec: JUMPI
000000ed: DUP1
000000ee: PUSH4 0x70bab2c0
000000f3: EQ
000000f4: PUSH2 0x029b
000000f7: JUMPI
000000f8: DUP1
000000f9: PUSH4 0x873ea755
000000fe: EQ
000000ff: PUSH2 0x02c8
00000102: JUMPI
00000103: PUSH1 0x00
00000105: DUP1
00000106: REVERT
00000107: JUMPDEST
00000108: DUP1
00000109: PUSH4 0x4b0a8854
0000010e: EQ
0000010f: PUSH2 0x022e
00000112: JUMPI
00000113: DUP1
00000114: PUSH4 0x5b94db27
00000119: EQ
0000011a: PUSH2 0x025b
0000011d: JUMPI
0000011e: PUSH1 0x00
00000120: DUP1
00000121: REVERT
00000122: JUMPDEST
00000123: DUP1
00000124: PUSH4 0x2f2ff15d
00000129: GT
0000012a: PUSH2 0x0153
0000012d: JUMPI
0000012e: DUP1
0000012f: PUSH4 0x2f2ff15d
00000134: EQ
00000135: PUSH2 0x01e4
00000138: JUMPI
00000139: DUP1
0000013a: PUSH4 0x3bd1adec
0000013f: EQ
00000140: PUSH2 0x0206
00000143: JUMPI
00000144: DUP1
00000145: PUSH4 0x405e720a
0000014a: EQ
0000014b: PUSH2 0x021b
0000014e: JUMPI
0000014f: PUSH1 0x00
00000151: DUP1
00000152: REVERT
00000153: JUMPDEST
00000154: DUP1
00000155: PUSH4 0x20f99c0a
0000015a: EQ
0000015b: PUSH2 0x016f
0000015e: JUMPI
0000015f: DUP1
00000160: PUSH4 0x2421e155
00000165: EQ
00000166: PUSH2 0x01c0
00000169: JUMPI
0000016a: JUMPDEST
0000016b: PUSH1 0x00
0000016d: DUP1
0000016e: REVERT
0000016f: JUMPDEST
00000170: CALLVALUE
00000171: DUP1
00000172: ISZERO
00000173: PUSH2 0x017b
00000176: JUMPI
00000177: PUSH1 0x00
00000179: DUP1
0000017a: REVERT
0000017b: JUMPDEST
0000017c: POP
0000017d: PUSH1 0x02
0000017f: SLOAD
00000180: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000195: AND
00000196: JUMPDEST
00000197: PUSH1 0x40
00000199: MLOAD
0000019a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000001af: SWAP1
000001b0: SWAP2
000001b1: AND
000001b2: DUP2
000001b3: MSTORE
000001b4: PUSH1 0x20
000001b6: ADD
000001b7: JUMPDEST
000001b8: PUSH1 0x40
000001ba: MLOAD
000001bb: DUP1
000001bc: SWAP2
000001bd: SUB
000001be: SWAP1
000001bf: RETURN
000001c0: JUMPDEST
000001c1: CALLVALUE
000001c2: DUP1
000001c3: ISZERO
000001c4: PUSH2 0x01cc
000001c7: JUMPI
000001c8: PUSH1 0x00
000001ca: DUP1
000001cb: REVERT
000001cc: JUMPDEST
000001cd: POP
000001ce: PUSH2 0x01d6
000001d1: PUSH1 0x04
000001d3: SLOAD
000001d4: DUP2
000001d5: JUMP
000001d6: JUMPDEST
000001d7: PUSH1 0x40
000001d9: MLOAD
000001da: SWAP1
000001db: DUP2
000001dc: MSTORE
000001dd: PUSH1 0x20
000001df: ADD
000001e0: PUSH2 0x01b7
000001e3: JUMP
000001e4: JUMPDEST
000001e5: CALLVALUE
000001e6: DUP1
000001e7: ISZERO
000001e8: PUSH2 0x01f0
000001eb: JUMPI
000001ec: PUSH1 0x00
000001ee: DUP1
000001ef: REVERT
000001f0: JUMPDEST
000001f1: POP
000001f2: PUSH2 0x0204
000001f5: PUSH2 0x01ff
000001f8: CALLDATASIZE
000001f9: PUSH1 0x04
000001fb: PUSH2 0x2848
000001fe: JUMP
000001ff: JUMPDEST
00000200: PUSH2 0x046d
00000203: JUMP
00000204: JUMPDEST
00000205: STOP
00000206: JUMPDEST
00000207: CALLVALUE
00000208: DUP1
00000209: ISZERO
0000020a: PUSH2 0x0212
0000020d: JUMPI
0000020e: PUSH1 0x00
00000210: DUP1
00000211: REVERT
00000212: JUMPDEST
00000213: POP
00000214: PUSH2 0x0204
00000217: PUSH2 0x04cc
0000021a: JUMP
0000021b: JUMPDEST
0000021c: PUSH2 0x0204
0000021f: PUSH2 0x0229
00000222: CALLDATASIZE
00000223: PUSH1 0x04
00000225: PUSH2 0x28ba
00000228: JUMP
00000229: JUMPDEST
0000022a: PUSH2 0x0528
0000022d: JUMP
0000022e: JUMPDEST
0000022f: CALLVALUE
00000230: DUP1
00000231: ISZERO
00000232: PUSH2 0x023a
00000235: JUMPI
00000236: PUSH1 0x00
00000238: DUP1
00000239: REVERT
0000023a: JUMPDEST
0000023b: POP
0000023c: PUSH2 0x024e
0000023f: PUSH2 0x0249
00000242: CALLDATASIZE
00000243: PUSH1 0x04
00000245: PUSH2 0x2962
00000248: JUMP
00000249: JUMPDEST
0000024a: PUSH2 0x0679
0000024d: JUMP
0000024e: JUMPDEST
0000024f: PUSH1 0x40
00000251: MLOAD
00000252: PUSH2 0x01b7
00000255: SWAP2
00000256: SWAP1
00000257: PUSH2 0x29f5
0000025a: JUMP
0000025b: JUMPDEST
0000025c: CALLVALUE
0000025d: DUP1
0000025e: ISZERO
0000025f: PUSH2 0x0267
00000262: JUMPI
00000263: PUSH1 0x00
00000265: DUP1
00000266: REVERT
00000267: JUMPDEST
00000268: POP
00000269: PUSH2 0x0204
0000026c: PUSH2 0x0276
0000026f: CALLDATASIZE
00000270: PUSH1 0x04
00000272: PUSH2 0x2962
00000275: JUMP
00000276: JUMPDEST
00000277: PUSH2 0x0713
0000027a: JUMP
0000027b: JUMPDEST
0000027c: CALLVALUE
0000027d: DUP1
0000027e: ISZERO
0000027f: PUSH2 0x0287
00000282: JUMPI
00000283: PUSH1 0x00
00000285: DUP1
00000286: REVERT
00000287: JUMPDEST
00000288: POP
00000289: PUSH2 0x0204
0000028c: PUSH2 0x0296
0000028f: CALLDATASIZE
00000290: PUSH1 0x04
00000292: PUSH2 0x2a08
00000295: JUMP
00000296: JUMPDEST
00000297: PUSH2 0x07d3
0000029a: JUMP
0000029b: JUMPDEST
0000029c: CALLVALUE
0000029d: DUP1
0000029e: ISZERO
0000029f: PUSH2 0x02a7
000002a2: JUMPI
000002a3: PUSH1 0x00
000002a5: DUP1
000002a6: REVERT
000002a7: JUMPDEST
000002a8: POP
000002a9: PUSH1 0x05
000002ab: SLOAD
000002ac: PUSH2 0x0196
000002af: SWAP1
000002b0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000002c5: AND
000002c6: DUP2
000002c7: JUMP
000002c8: JUMPDEST
000002c9: PUSH2 0x0204
000002cc: PUSH2 0x02d6
000002cf: CALLDATASIZE
000002d0: PUSH1 0x04
000002d2: PUSH2 0x2b0d
000002d5: JUMP
000002d6: JUMPDEST
000002d7: PUSH2 0x0871
000002da: JUMP
000002db: JUMPDEST
000002dc: CALLVALUE
000002dd: DUP1
000002de: ISZERO
000002df: PUSH2 0x02e7
000002e2: JUMPI
000002e3: PUSH1 0x00
000002e5: DUP1
000002e6: REVERT
000002e7: JUMPDEST
000002e8: POP
000002e9: PUSH1 0x01
000002eb: SLOAD
000002ec: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000301: AND
00000302: PUSH2 0x0196
00000305: JUMP
00000306: JUMPDEST
00000307: CALLVALUE
00000308: DUP1
00000309: ISZERO
0000030a: PUSH2 0x0312
0000030d: JUMPI
0000030e: PUSH1 0x00
00000310: DUP1
00000311: REVERT
00000312: JUMPDEST
00000313: POP
00000314: PUSH2 0x0326
00000317: PUSH2 0x0321
0000031a: CALLDATASIZE
0000031b: PUSH1 0x04
0000031d: PUSH2 0x2848
00000320: JUMP
00000321: JUMPDEST
00000322: PUSH2 0x097a
00000325: JUMP
00000326: JUMPDEST
00000327: PUSH1 0x40
00000329: MLOAD
0000032a: SWAP1
0000032b: ISZERO
0000032c: ISZERO
0000032d: DUP2
0000032e: MSTORE
0000032f: PUSH1 0x20
00000331: ADD
00000332: PUSH2 0x01b7
00000335: JUMP
00000336: JUMPDEST
00000337: CALLVALUE
00000338: DUP1
00000339: ISZERO
0000033a: PUSH2 0x0342
0000033d: JUMPI
0000033e: PUSH1 0x00
00000340: DUP1
00000341: REVERT
00000342: JUMPDEST
00000343: POP
00000344: PUSH2 0x0204
00000347: PUSH2 0x0351
0000034a: CALLDATASIZE
0000034b: PUSH1 0x04
0000034d: PUSH2 0x2ba9
00000350: JUMP
00000351: JUMPDEST
00000352: PUSH2 0x09b5
00000355: JUMP
00000356: JUMPDEST
00000357: CALLVALUE
00000358: DUP1
00000359: ISZERO
0000035a: PUSH2 0x0362
0000035d: JUMPI
0000035e: PUSH1 0x00
00000360: DUP1
00000361: REVERT
00000362: JUMPDEST
00000363: POP
00000364: PUSH2 0x0204
00000367: PUSH2 0x0371
0000036a: CALLDATASIZE
0000036b: PUSH1 0x04
0000036d: PUSH2 0x2be5
00000370: JUMP
00000371: JUMPDEST
00000372: PUSH2 0x0a5f
00000375: JUMP
00000376: JUMPDEST
00000377: PUSH2 0x0204
0000037a: PUSH2 0x0384
0000037d: CALLDATASIZE
0000037e: PUSH1 0x04
00000380: PUSH2 0x2c2b
00000383: JUMP
00000384: JUMPDEST
00000385: PUSH2 0x0cd4
00000388: JUMP
00000389: JUMPDEST
0000038a: CALLVALUE
0000038b: DUP1
0000038c: ISZERO
0000038d: PUSH2 0x0395
00000390: JUMPI
00000391: PUSH1 0x00
00000393: DUP1
00000394: REVERT
00000395: JUMPDEST
00000396: POP
00000397: PUSH2 0x0204
0000039a: PUSH2 0x03a4
0000039d: CALLDATASIZE
0000039e: PUSH1 0x04
000003a0: PUSH2 0x2848
000003a3: JUMP
000003a4: JUMPDEST
000003a5: PUSH2 0x0dbc
000003a8: JUMP
000003a9: JUMPDEST
000003aa: CALLVALUE
000003ab: DUP1
000003ac: ISZERO
000003ad: PUSH2 0x03b5
000003b0: JUMPI
000003b1: PUSH1 0x00
000003b3: DUP1
000003b4: REVERT
000003b5: JUMPDEST
000003b6: POP
000003b7: PUSH2 0x0204
000003ba: PUSH2 0x03c4
000003bd: CALLDATASIZE
000003be: PUSH1 0x04
000003c0: PUSH2 0x2d4b
000003c3: JUMP
000003c4: JUMPDEST
000003c5: PUSH2 0x0e17
000003c8: JUMP
000003c9: JUMPDEST
000003ca: CALLVALUE
000003cb: DUP1
000003cc: ISZERO
000003cd: PUSH2 0x03d5
000003d0: JUMPI
000003d1: PUSH1 0x00
000003d3: DUP1
000003d4: REVERT
000003d5: JUMPDEST
000003d6: POP
000003d7: PUSH2 0x0326
000003da: PUSH2 0x03e4
000003dd: CALLDATASIZE
000003de: PUSH1 0x04
000003e0: PUSH2 0x2962
000003e3: JUMP
000003e4: JUMPDEST
000003e5: PUSH1 0x08
000003e7: PUSH1 0x20
000003e9: MSTORE
000003ea: PUSH1 0x00
000003ec: SWAP1
000003ed: DUP2
000003ee: MSTORE
000003ef: PUSH1 0x40
000003f1: SWAP1
000003f2: KECCAK256
000003f3: SLOAD
000003f4: PUSH1 0xff
000003f6: AND
000003f7: DUP2
000003f8: JUMP
000003f9: JUMPDEST
000003fa: CALLVALUE
000003fb: DUP1
000003fc: ISZERO
000003fd: PUSH2 0x0405
00000400: JUMPI
00000401: PUSH1 0x00
00000403: DUP1
00000404: REVERT
00000405: JUMPDEST
00000406: POP
00000407: PUSH2 0x024e
0000040a: PUSH2 0x0414
0000040d: CALLDATASIZE
0000040e: PUSH1 0x04
00000410: PUSH2 0x2db7
00000413: JUMP
00000414: JUMPDEST
00000415: PUSH2 0x0fd1
00000418: JUMP
00000419: JUMPDEST
0000041a: CALLVALUE
0000041b: DUP1
0000041c: ISZERO
0000041d: PUSH2 0x0425
00000420: JUMPI
00000421: PUSH1 0x00
00000423: DUP1
00000424: REVERT
00000425: JUMPDEST
00000426: POP
00000427: PUSH2 0x0196
0000042a: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
0000044b: DUP2
0000044c: JUMP
0000044d: JUMPDEST
0000044e: CALLVALUE
0000044f: DUP1
00000450: ISZERO
00000451: PUSH2 0x0459
00000454: JUMPI
00000455: PUSH1 0x00
00000457: DUP1
00000458: REVERT
00000459: JUMPDEST
0000045a: POP
0000045b: PUSH2 0x01d6
0000045e: PUSH2 0x0468
00000461: CALLDATASIZE
00000462: PUSH1 0x04
00000464: PUSH2 0x2dd0
00000467: JUMP
00000468: JUMPDEST
00000469: PUSH2 0x0fea
0000046c: JUMP
0000046d: JUMPDEST
0000046e: PUSH1 0x01
00000470: SLOAD
00000471: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000486: AND
00000487: CALLER
00000488: EQ
00000489: PUSH2 0x04be
0000048c: JUMPI
0000048d: PUSH1 0x40
0000048f: MLOAD
00000490: PUSH32 0x5fc483c500000000000000000000000000000000000000000000000000000000
000004b1: DUP2
000004b2: MSTORE
000004b3: PUSH1 0x04
000004b5: ADD
000004b6: PUSH1 0x40
000004b8: MLOAD
000004b9: DUP1
000004ba: SWAP2
000004bb: SUB
000004bc: SWAP1
000004bd: REVERT
000004be: JUMPDEST
000004bf: PUSH2 0x04c8
000004c2: DUP3
000004c3: DUP3
000004c4: PUSH2 0x108b
000004c7: JUMP
000004c8: JUMPDEST
000004c9: POP
000004ca: POP
000004cb: JUMP
000004cc: JUMPDEST
000004cd: PUSH1 0x02
000004cf: SLOAD
000004d0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000004e5: AND
000004e6: CALLER
000004e7: EQ
000004e8: PUSH2 0x051d
000004eb: JUMPI
000004ec: PUSH1 0x40
000004ee: MLOAD
000004ef: PUSH32 0x7c91ccdd00000000000000000000000000000000000000000000000000000000
00000510: DUP2
00000511: MSTORE
00000512: PUSH1 0x04
00000514: ADD
00000515: PUSH1 0x40
00000517: MLOAD
00000518: DUP1
00000519: SWAP2
0000051a: SUB
0000051b: SWAP1
0000051c: REVERT
0000051d: JUMPDEST
0000051e: PUSH2 0x0526
00000521: CALLER
00000522: PUSH2 0x1111
00000525: JUMP
00000526: JUMPDEST
00000527: JUMP
00000528: JUMPDEST
00000529: PUSH1 0x00
0000052b: SLOAD
0000052c: PUSH1 0x01
0000052e: EQ
0000052f: PUSH2 0x0599
00000532: JUMPI
00000533: PUSH1 0x40
00000535: MLOAD
00000536: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000557: DUP2
00000558: MSTORE
00000559: PUSH1 0x20
0000055b: PUSH1 0x04
0000055d: DUP3
0000055e: ADD
0000055f: MSTORE
00000560: PUSH1 0x0a
00000562: PUSH1 0x24
00000564: DUP3
00000565: ADD
00000566: MSTORE
00000567: PUSH32 0x5245454e5452414e435900000000000000000000000000000000000000000000
00000588: PUSH1 0x44
0000058a: DUP3
0000058b: ADD
0000058c: MSTORE
0000058d: PUSH1 0x64
0000058f: ADD
00000590: JUMPDEST
00000591: PUSH1 0x40
00000593: MLOAD
00000594: DUP1
00000595: SWAP2
00000596: SUB
00000597: SWAP1
00000598: REVERT
00000599: JUMPDEST
0000059a: PUSH1 0x02
0000059c: PUSH1 0x00
0000059e: DUP2
0000059f: SWAP1
000005a0: SSTORE
000005a1: POP
000005a2: PUSH1 0x00
000005a4: DUP1
000005a5: PUSH2 0x0612
000005a8: DUP8
000005a9: PUSH1 0x40
000005ab: MLOAD
000005ac: DUP1
000005ad: PUSH1 0x60
000005af: ADD
000005b0: PUSH1 0x40
000005b2: MSTORE
000005b3: DUP1
000005b4: DUP14
000005b5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000005ca: AND
000005cb: DUP2
000005cc: MSTORE
000005cd: PUSH1 0x20
000005cf: ADD
000005d0: DUP13
000005d1: DUP2
000005d2: MSTORE
000005d3: PUSH1 0x20
000005d5: ADD
000005d6: DUP10
000005d7: DUP10
000005d8: DUP1
000005d9: DUP1
000005da: PUSH1 0x1f
000005dc: ADD
000005dd: PUSH1 0x20
000005df: DUP1
000005e0: SWAP2
000005e1: DIV
000005e2: MUL
000005e3: PUSH1 0x20
000005e5: ADD
000005e6: PUSH1 0x40
000005e8: MLOAD
000005e9: SWAP1
000005ea: DUP2
000005eb: ADD
000005ec: PUSH1 0x40
000005ee: MSTORE
000005ef: DUP1
000005f0: SWAP4
000005f1: SWAP3
000005f2: SWAP2
000005f3: SWAP1
000005f4: DUP2
000005f5: DUP2
000005f6: MSTORE
000005f7: PUSH1 0x20
000005f9: ADD
000005fa: DUP4
000005fb: DUP4
000005fc: DUP1
000005fd: DUP3
000005fe: DUP5
000005ff: CALLDATACOPY
00000600: PUSH1 0x00
00000602: SWAP3
00000603: ADD
00000604: SWAP2
00000605: SWAP1
00000606: SWAP2
00000607: MSTORE
00000608: POP
00000609: POP
0000060a: POP
0000060b: SWAP2
0000060c: MSTORE
0000060d: POP
0000060e: PUSH2 0x118a
00000611: JUMP
00000612: JUMPDEST
00000613: SWAP2
00000614: POP
00000615: SWAP2
00000616: POP
00000617: PUSH2 0x0623
0000061a: DUP3
0000061b: PUSH1 0x20
0000061d: ADD
0000061e: MLOAD
0000061f: PUSH2 0x13e9
00000622: JUMP
00000623: JUMPDEST
00000624: PUSH2 0x0668
00000627: DUP9
00000628: DUP9
00000629: DUP7
0000062a: DUP7
0000062b: DUP1
0000062c: DUP1
0000062d: PUSH1 0x1f
0000062f: ADD
00000630: PUSH1 0x20
00000632: DUP1
00000633: SWAP2
00000634: DIV
00000635: MUL
00000636: PUSH1 0x20
00000638: ADD
00000639: PUSH1 0x40
0000063b: MLOAD
0000063c: SWAP1
0000063d: DUP2
0000063e: ADD
0000063f: PUSH1 0x40
00000641: MSTORE
00000642: DUP1
00000643: SWAP4
00000644: SWAP3
00000645: SWAP2
00000646: SWAP1
00000647: DUP2
00000648: DUP2
00000649: MSTORE
0000064a: PUSH1 0x20
0000064c: ADD
0000064d: DUP4
0000064e: DUP4
0000064f: DUP1
00000650: DUP3
00000651: DUP5
00000652: CALLDATACOPY
00000653: PUSH1 0x00
00000655: SWAP3
00000656: ADD
00000657: SWAP2
00000658: SWAP1
00000659: SWAP2
0000065a: MSTORE
0000065b: POP
0000065c: DUP8
0000065d: SWAP3
0000065e: POP
0000065f: DUP9
00000660: SWAP2
00000661: POP
00000662: PUSH2 0x148c
00000665: SWAP1
00000666: POP
00000667: JUMP
00000668: JUMPDEST
00000669: POP
0000066a: POP
0000066b: PUSH1 0x01
0000066d: PUSH1 0x00
0000066f: SSTORE
00000670: POP
00000671: POP
00000672: POP
00000673: POP
00000674: POP
00000675: POP
00000676: POP
00000677: POP
00000678: JUMP
00000679: JUMPDEST
0000067a: PUSH1 0x07
0000067c: PUSH1 0x20
0000067e: MSTORE
0000067f: PUSH1 0x00
00000681: SWAP1
00000682: DUP2
00000683: MSTORE
00000684: PUSH1 0x40
00000686: SWAP1
00000687: KECCAK256
00000688: DUP1
00000689: SLOAD
0000068a: PUSH2 0x0692
0000068d: SWAP1
0000068e: PUSH2 0x2e05
00000691: JUMP
00000692: JUMPDEST
00000693: DUP1
00000694: PUSH1 0x1f
00000696: ADD
00000697: PUSH1 0x20
00000699: DUP1
0000069a: SWAP2
0000069b: DIV
0000069c: MUL
0000069d: PUSH1 0x20
0000069f: ADD
000006a0: PUSH1 0x40
000006a2: MLOAD
000006a3: SWAP1
000006a4: DUP2
000006a5: ADD
000006a6: PUSH1 0x40
000006a8: MSTORE
000006a9: DUP1
000006aa: SWAP3
000006ab: SWAP2
000006ac: SWAP1
000006ad: DUP2
000006ae: DUP2
000006af: MSTORE
000006b0: PUSH1 0x20
000006b2: ADD
000006b3: DUP3
000006b4: DUP1
000006b5: SLOAD
000006b6: PUSH2 0x06be
000006b9: SWAP1
000006ba: PUSH2 0x2e05
000006bd: JUMP
000006be: JUMPDEST
000006bf: DUP1
000006c0: ISZERO
000006c1: PUSH2 0x070b
000006c4: JUMPI
000006c5: DUP1
000006c6: PUSH1 0x1f
000006c8: LT
000006c9: PUSH2 0x06e0
000006cc: JUMPI
000006cd: PUSH2 0x0100
000006d0: DUP1
000006d1: DUP4
000006d2: SLOAD
000006d3: DIV
000006d4: MUL
000006d5: DUP4
000006d6: MSTORE
000006d7: SWAP2
000006d8: PUSH1 0x20
000006da: ADD
000006db: SWAP2
000006dc: PUSH2 0x070b
000006df: JUMP
000006e0: JUMPDEST
000006e1: DUP3
000006e2: ADD
000006e3: SWAP2
000006e4: SWAP1
000006e5: PUSH1 0x00
000006e7: MSTORE
000006e8: PUSH1 0x20
000006ea: PUSH1 0x00
000006ec: KECCAK256
000006ed: SWAP1
000006ee: JUMPDEST
000006ef: DUP2
000006f0: SLOAD
000006f1: DUP2
000006f2: MSTORE
000006f3: SWAP1
000006f4: PUSH1 0x01
000006f6: ADD
000006f7: SWAP1
000006f8: PUSH1 0x20
000006fa: ADD
000006fb: DUP1
000006fc: DUP4
000006fd: GT
000006fe: PUSH2 0x06ee
00000701: JUMPI
00000702: DUP3
00000703: SWAP1
00000704: SUB
00000705: PUSH1 0x1f
00000707: AND
00000708: DUP3
00000709: ADD
0000070a: SWAP2
0000070b: JUMPDEST
0000070c: POP
0000070d: POP
0000070e: POP
0000070f: POP
00000710: POP
00000711: DUP2
00000712: JUMP
00000713: JUMPDEST
00000714: PUSH1 0x01
00000716: SLOAD
00000717: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000072c: AND
0000072d: CALLER
0000072e: EQ
0000072f: PUSH2 0x0764
00000732: JUMPI
00000733: PUSH1 0x40
00000735: MLOAD
00000736: PUSH32 0x5fc483c500000000000000000000000000000000000000000000000000000000
00000757: DUP2
00000758: MSTORE
00000759: PUSH1 0x04
0000075b: ADD
0000075c: PUSH1 0x40
0000075e: MLOAD
0000075f: DUP1
00000760: SWAP2
00000761: SUB
00000762: SWAP1
00000763: REVERT
00000764: JUMPDEST
00000765: PUSH1 0x02
00000767: DUP1
00000768: SLOAD
00000769: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
0000078a: AND
0000078b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000007a0: DUP4
000007a1: AND
000007a2: SWAP1
000007a3: DUP2
000007a4: OR
000007a5: SWAP1
000007a6: SWAP2
000007a7: SSTORE
000007a8: PUSH1 0x40
000007aa: MLOAD
000007ab: PUSH32 0x906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce22
000007cc: SWAP1
000007cd: PUSH1 0x00
000007cf: SWAP1
000007d0: LOG2
000007d1: POP
000007d2: JUMP
000007d3: JUMPDEST
000007d4: CALLER
000007d5: PUSH1 0x00
000007d7: SWAP1
000007d8: DUP2
000007d9: MSTORE
000007da: PUSH32 0x271b3e2292ab6fd3ff496cd98d6d375af02f11568a701741f48bba7789f13a70
000007fb: PUSH1 0x20
000007fd: MSTORE
000007fe: PUSH1 0x40
00000800: SWAP1
00000801: KECCAK256
00000802: SLOAD
00000803: PUSH32 0xc4c453d647953c0fd35db5a34ee76e60fb4abc3a8fb891a25936b70b38f29253
00000824: SWAP1
00000825: PUSH1 0xff
00000827: AND
00000828: PUSH2 0x0860
0000082b: JUMPI
0000082c: PUSH1 0x40
0000082e: MLOAD
0000082f: PUSH32 0x962f633300000000000000000000000000000000000000000000000000000000
00000850: DUP2
00000851: MSTORE
00000852: PUSH1 0x04
00000854: DUP2
00000855: ADD
00000856: DUP3
00000857: SWAP1
00000858: MSTORE
00000859: PUSH1 0x24
0000085b: ADD
0000085c: PUSH2 0x0590
0000085f: JUMP
00000860: JUMPDEST
00000861: PUSH2 0x086b
00000864: DUP5
00000865: DUP5
00000866: DUP5
00000867: PUSH2 0x17d1
0000086a: JUMP
0000086b: JUMPDEST
0000086c: POP
0000086d: POP
0000086e: POP
0000086f: POP
00000870: JUMP
00000871: JUMPDEST
00000872: PUSH1 0x00
00000874: SLOAD
00000875: PUSH1 0x01
00000877: EQ
00000878: PUSH2 0x08dd
0000087b: JUMPI
0000087c: PUSH1 0x40
0000087e: MLOAD
0000087f: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000008a0: DUP2
000008a1: MSTORE
000008a2: PUSH1 0x20
000008a4: PUSH1 0x04
000008a6: DUP3
000008a7: ADD
000008a8: MSTORE
000008a9: PUSH1 0x0a
000008ab: PUSH1 0x24
000008ad: DUP3
000008ae: ADD
000008af: MSTORE
000008b0: PUSH32 0x5245454e5452414e435900000000000000000000000000000000000000000000
000008d1: PUSH1 0x44
000008d3: DUP3
000008d4: ADD
000008d5: MSTORE
000008d6: PUSH1 0x64
000008d8: ADD
000008d9: PUSH2 0x0590
000008dc: JUMP
000008dd: JUMPDEST
000008de: PUSH1 0x02
000008e0: PUSH1 0x00
000008e2: DUP2
000008e3: SWAP1
000008e4: SSTORE
000008e5: POP
000008e6: PUSH1 0x00
000008e8: DUP1
000008e9: PUSH1 0x00
000008eb: DUP1
000008ec: DUP5
000008ed: DUP1
000008ee: PUSH1 0x20
000008f0: ADD
000008f1: SWAP1
000008f2: MLOAD
000008f3: DUP2
000008f4: ADD
000008f5: SWAP1
000008f6: PUSH2 0x08ff
000008f9: SWAP2
000008fa: SWAP1
000008fb: PUSH2 0x2e9d
000008fe: JUMP
000008ff: JUMPDEST
00000900: SWAP4
00000901: POP
00000902: SWAP4
00000903: POP
00000904: SWAP4
00000905: POP
00000906: SWAP4
00000907: POP
00000908: PUSH1 0x00
0000090a: PUSH1 0x40
0000090c: MLOAD
0000090d: DUP1
0000090e: PUSH1 0x60
00000910: ADD
00000911: PUSH1 0x40
00000913: MSTORE
00000914: DUP1
00000915: DUP7
00000916: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000092b: AND
0000092c: DUP2
0000092d: MSTORE
0000092e: PUSH1 0x20
00000930: ADD
00000931: DUP6
00000932: DUP2
00000933: MSTORE
00000934: PUSH1 0x20
00000936: ADD
00000937: DUP4
00000938: DUP2
00000939: MSTORE
0000093a: POP
0000093b: SWAP1
0000093c: POP
0000093d: PUSH1 0x60
0000093f: PUSH2 0x0948
00000942: DUP9
00000943: DUP4
00000944: PUSH2 0x18c6
00000947: JUMP
00000948: JUMPDEST
00000949: DUP1
0000094a: MLOAD
0000094b: PUSH1 0x20
0000094d: DUP3
0000094e: ADD
0000094f: MLOAD
00000950: SWAP2
00000951: SWAP5
00000952: POP
00000953: SWAP2
00000954: SWAP3
00000955: POP
00000956: PUSH2 0x095f
00000959: SWAP2
0000095a: SWAP1
0000095b: PUSH2 0x1b49
0000095e: JUMP
0000095f: JUMPDEST
00000960: PUSH2 0x096b
00000963: DUP6
00000964: DUP6
00000965: DUP4
00000966: DUP6
00000967: PUSH2 0x1bfd
0000096a: JUMP
0000096b: JUMPDEST
0000096c: POP
0000096d: POP
0000096e: PUSH1 0x01
00000970: PUSH1 0x00
00000972: SSTORE
00000973: POP
00000974: POP
00000975: POP
00000976: POP
00000977: POP
00000978: POP
00000979: JUMP
0000097a: JUMPDEST
0000097b: PUSH1 0x00
0000097d: DUP3
0000097e: DUP2
0000097f: MSTORE
00000980: PUSH1 0x03
00000982: PUSH1 0x20
00000984: SWAP1
00000985: DUP2
00000986: MSTORE
00000987: PUSH1 0x40
00000989: DUP1
0000098a: DUP4
0000098b: KECCAK256
0000098c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000009a1: DUP6
000009a2: AND
000009a3: DUP5
000009a4: MSTORE
000009a5: SWAP1
000009a6: SWAP2
000009a7: MSTORE
000009a8: DUP2
000009a9: KECCAK256
000009aa: SLOAD
000009ab: PUSH1 0xff
000009ad: AND
000009ae: JUMPDEST
000009af: SWAP4
000009b0: SWAP3
000009b1: POP
000009b2: POP
000009b3: POP
000009b4: JUMP
000009b5: JUMPDEST
000009b6: PUSH1 0x00
000009b8: SLOAD
000009b9: PUSH1 0x01
000009bb: EQ
000009bc: PUSH2 0x0a21
000009bf: JUMPI
000009c0: PUSH1 0x40
000009c2: MLOAD
000009c3: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000009e4: DUP2
000009e5: MSTORE
000009e6: PUSH1 0x20
000009e8: PUSH1 0x04
000009ea: DUP3
000009eb: ADD
000009ec: MSTORE
000009ed: PUSH1 0x0a
000009ef: PUSH1 0x24
000009f1: DUP3
000009f2: ADD
000009f3: MSTORE
000009f4: PUSH32 0x5245454e5452414e435900000000000000000000000000000000000000000000
00000a15: PUSH1 0x44
00000a17: DUP3
00000a18: ADD
00000a19: MSTORE
00000a1a: PUSH1 0x64
00000a1c: ADD
00000a1d: PUSH2 0x0590
00000a20: JUMP
00000a21: JUMPDEST
00000a22: PUSH1 0x02
00000a24: PUSH1 0x00
00000a26: SWAP1
00000a27: DUP2
00000a28: SSTORE
00000a29: DUP1
00000a2a: PUSH2 0x0a33
00000a2d: DUP5
00000a2e: DUP5
00000a2f: PUSH2 0x1e39
00000a32: JUMP
00000a33: JUMPDEST
00000a34: SWAP2
00000a35: POP
00000a36: SWAP2
00000a37: POP
00000a38: PUSH2 0x0a49
00000a3b: DUP2
00000a3c: PUSH1 0x00
00000a3e: ADD
00000a3f: MLOAD
00000a40: DUP3
00000a41: PUSH1 0x20
00000a43: ADD
00000a44: MLOAD
00000a45: PUSH2 0x1b49
00000a48: JUMP
00000a49: JUMPDEST
00000a4a: PUSH2 0x0a54
00000a4d: DUP5
00000a4e: DUP5
00000a4f: DUP5
00000a50: PUSH2 0x2141
00000a53: JUMP
00000a54: JUMPDEST
00000a55: POP
00000a56: POP
00000a57: PUSH1 0x01
00000a59: PUSH1 0x00
00000a5b: SSTORE
00000a5c: POP
00000a5d: POP
00000a5e: JUMP
00000a5f: JUMPDEST
00000a60: PUSH1 0x01
00000a62: SLOAD
00000a63: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000a78: AND
00000a79: CALLER
00000a7a: EQ
00000a7b: PUSH2 0x0ab0
00000a7e: JUMPI
00000a7f: PUSH1 0x40
00000a81: MLOAD
00000a82: PUSH32 0x5fc483c500000000000000000000000000000000000000000000000000000000
00000aa3: DUP2
00000aa4: MSTORE
00000aa5: PUSH1 0x04
00000aa7: ADD
00000aa8: PUSH1 0x40
00000aaa: MLOAD
00000aab: DUP1
00000aac: SWAP2
00000aad: SUB
00000aae: SWAP1
00000aaf: REVERT
00000ab0: JUMPDEST
00000ab1: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
00000ad2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000ae7: AND
00000ae8: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
00000afd: EQ
00000afe: PUSH2 0x0c5a
00000b01: JUMPI
00000b02: PUSH1 0x05
00000b04: SLOAD
00000b05: PUSH1 0x40
00000b07: MLOAD
00000b08: PUSH32 0xdd62ed3e00000000000000000000000000000000000000000000000000000000
00000b29: DUP2
00000b2a: MSTORE
00000b2b: ADDRESS
00000b2c: PUSH1 0x04
00000b2e: DUP3
00000b2f: ADD
00000b30: MSTORE
00000b31: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000b46: SWAP2
00000b47: DUP3
00000b48: AND
00000b49: PUSH1 0x24
00000b4b: DUP3
00000b4c: ADD
00000b4d: MSTORE
00000b4e: PUSH1 0x00
00000b50: SWAP2
00000b51: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
00000b72: AND
00000b73: SWAP1
00000b74: PUSH4 0xdd62ed3e
00000b79: SWAP1
00000b7a: PUSH1 0x44
00000b7c: ADD
00000b7d: PUSH1 0x20
00000b7f: PUSH1 0x40
00000b81: MLOAD
00000b82: DUP1
00000b83: DUP4
00000b84: SUB
00000b85: DUP2
00000b86: DUP7
00000b87: GAS
00000b88: STATICCALL
00000b89: ISZERO
00000b8a: DUP1
00000b8b: ISZERO
00000b8c: PUSH2 0x0b99
00000b8f: JUMPI
00000b90: RETURNDATASIZE
00000b91: PUSH1 0x00
00000b93: DUP1
00000b94: RETURNDATACOPY
00000b95: RETURNDATASIZE
00000b96: PUSH1 0x00
00000b98: REVERT
00000b99: JUMPDEST
00000b9a: POP
00000b9b: POP
00000b9c: POP
00000b9d: POP
00000b9e: PUSH1 0x40
00000ba0: MLOAD
00000ba1: RETURNDATASIZE
00000ba2: PUSH1 0x1f
00000ba4: NOT
00000ba5: PUSH1 0x1f
00000ba7: DUP3
00000ba8: ADD
00000ba9: AND
00000baa: DUP3
00000bab: ADD
00000bac: DUP1
00000bad: PUSH1 0x40
00000baf: MSTORE
00000bb0: POP
00000bb1: DUP2
00000bb2: ADD
00000bb3: SWAP1
00000bb4: PUSH2 0x0bbd
00000bb7: SWAP2
00000bb8: SWAP1
00000bb9: PUSH2 0x2f02
00000bbc: JUMP
00000bbd: JUMPDEST
00000bbe: GT
00000bbf: ISZERO
00000bc0: PUSH2 0x0c09
00000bc3: JUMPI
00000bc4: PUSH1 0x05
00000bc6: SLOAD
00000bc7: PUSH2 0x0c09
00000bca: SWAP1
00000bcb: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
00000bec: SWAP1
00000bed: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000c02: AND
00000c03: PUSH1 0x00
00000c05: PUSH2 0x23fc
00000c08: JUMP
00000c09: JUMPDEST
00000c0a: DUP1
00000c0b: ISZERO
00000c0c: PUSH2 0x0c5a
00000c0f: JUMPI
00000c10: PUSH2 0x0c5a
00000c13: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
00000c34: DUP4
00000c35: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00000c56: PUSH2 0x23fc
00000c59: JUMP
00000c5a: JUMPDEST
00000c5b: PUSH1 0x05
00000c5d: DUP1
00000c5e: SLOAD
00000c5f: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
00000c80: AND
00000c81: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000c96: DUP5
00000c97: AND
00000c98: SWAP1
00000c99: DUP2
00000c9a: OR
00000c9b: SWAP1
00000c9c: SWAP2
00000c9d: SSTORE
00000c9e: PUSH1 0x40
00000ca0: MLOAD
00000ca1: SWAP1
00000ca2: DUP2
00000ca3: MSTORE
00000ca4: PUSH32 0xe816c20840d998c8612f9b624b91687a80510eeb293cb09f7637379f6d73342d
00000cc5: SWAP1
00000cc6: PUSH1 0x20
00000cc8: ADD
00000cc9: PUSH1 0x40
00000ccb: MLOAD
00000ccc: DUP1
00000ccd: SWAP2
00000cce: SUB
00000ccf: SWAP1
00000cd0: LOG1
00000cd1: POP
00000cd2: POP
00000cd3: JUMP
00000cd4: JUMPDEST
00000cd5: PUSH1 0x40
00000cd7: MLOAD
00000cd8: PUSH32 0xd505accf00000000000000000000000000000000000000000000000000000000
00000cf9: DUP2
00000cfa: MSTORE
00000cfb: CALLER
00000cfc: PUSH1 0x04
00000cfe: DUP3
00000cff: ADD
00000d00: MSTORE
00000d01: ADDRESS
00000d02: PUSH1 0x24
00000d04: DUP3
00000d05: ADD
00000d06: MSTORE
00000d07: PUSH1 0x44
00000d09: DUP2
00000d0a: ADD
00000d0b: DUP13
00000d0c: SWAP1
00000d0d: MSTORE
00000d0e: PUSH1 0x64
00000d10: DUP2
00000d11: ADD
00000d12: DUP6
00000d13: SWAP1
00000d14: MSTORE
00000d15: PUSH1 0xff
00000d17: DUP5
00000d18: AND
00000d19: PUSH1 0x84
00000d1b: DUP3
00000d1c: ADD
00000d1d: MSTORE
00000d1e: PUSH1 0xa4
00000d20: DUP2
00000d21: ADD
00000d22: DUP4
00000d23: SWAP1
00000d24: MSTORE
00000d25: PUSH1 0xc4
00000d27: DUP2
00000d28: ADD
00000d29: DUP3
00000d2a: SWAP1
00000d2b: MSTORE
00000d2c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000d41: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
00000d62: AND
00000d63: SWAP1
00000d64: PUSH4 0xd505accf
00000d69: SWAP1
00000d6a: PUSH1 0xe4
00000d6c: ADD
00000d6d: PUSH1 0x00
00000d6f: PUSH1 0x40
00000d71: MLOAD
00000d72: DUP1
00000d73: DUP4
00000d74: SUB
00000d75: DUP2
00000d76: PUSH1 0x00
00000d78: DUP8
00000d79: DUP1
00000d7a: EXTCODESIZE
00000d7b: ISZERO
00000d7c: DUP1
00000d7d: ISZERO
00000d7e: PUSH2 0x0d86
00000d81: JUMPI
00000d82: PUSH1 0x00
00000d84: DUP1
00000d85: REVERT
00000d86: JUMPDEST
00000d87: POP
00000d88: GAS
00000d89: CALL
00000d8a: ISZERO
00000d8b: DUP1
00000d8c: ISZERO
00000d8d: PUSH2 0x0d9a
00000d90: JUMPI
00000d91: RETURNDATASIZE
00000d92: PUSH1 0x00
00000d94: DUP1
00000d95: RETURNDATACOPY
00000d96: RETURNDATASIZE
00000d97: PUSH1 0x00
00000d99: REVERT
00000d9a: JUMPDEST
00000d9b: POP
00000d9c: POP
00000d9d: POP
00000d9e: POP
00000d9f: PUSH2 0x0dae
00000da2: DUP13
00000da3: DUP13
00000da4: DUP13
00000da5: DUP13
00000da6: DUP13
00000da7: DUP13
00000da8: DUP13
00000da9: DUP13
00000daa: PUSH2 0x0528
00000dad: JUMP
00000dae: JUMPDEST
00000daf: POP
00000db0: POP
00000db1: POP
00000db2: POP
00000db3: POP
00000db4: POP
00000db5: POP
00000db6: POP
00000db7: POP
00000db8: POP
00000db9: POP
00000dba: POP
00000dbb: JUMP
00000dbc: JUMPDEST
00000dbd: PUSH1 0x01
00000dbf: SLOAD
00000dc0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000dd5: AND
00000dd6: CALLER
00000dd7: EQ
00000dd8: PUSH2 0x0e0d
00000ddb: JUMPI
00000ddc: PUSH1 0x40
00000dde: MLOAD
00000ddf: PUSH32 0x5fc483c500000000000000000000000000000000000000000000000000000000
00000e00: DUP2
00000e01: MSTORE
00000e02: PUSH1 0x04
00000e04: ADD
00000e05: PUSH1 0x40
00000e07: MLOAD
00000e08: DUP1
00000e09: SWAP2
00000e0a: SUB
00000e0b: SWAP1
00000e0c: REVERT
00000e0d: JUMPDEST
00000e0e: PUSH2 0x04c8
00000e11: DUP3
00000e12: DUP3
00000e13: PUSH2 0x24cb
00000e16: JUMP
00000e17: JUMPDEST
00000e18: PUSH1 0x01
00000e1a: SLOAD
00000e1b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000e30: AND
00000e31: CALLER
00000e32: EQ
00000e33: PUSH2 0x0e68
00000e36: JUMPI
00000e37: PUSH1 0x40
00000e39: MLOAD
00000e3a: PUSH32 0x5fc483c500000000000000000000000000000000000000000000000000000000
00000e5b: DUP2
00000e5c: MSTORE
00000e5d: PUSH1 0x04
00000e5f: ADD
00000e60: PUSH1 0x40
00000e62: MLOAD
00000e63: DUP1
00000e64: SWAP2
00000e65: SUB
00000e66: SWAP1
00000e67: REVERT
00000e68: JUMPDEST
00000e69: DUP3
00000e6a: PUSH1 0x00
00000e6c: JUMPDEST
00000e6d: DUP2
00000e6e: DUP2
00000e6f: LT
00000e70: ISZERO
00000e71: PUSH2 0x0fc9
00000e74: JUMPI
00000e75: DUP4
00000e76: DUP4
00000e77: DUP3
00000e78: DUP2
00000e79: DUP2
00000e7a: LT
00000e7b: PUSH2 0x0e86
00000e7e: JUMPI
00000e7f: PUSH2 0x0e86
00000e82: PUSH2 0x2f1b
00000e85: JUMP
00000e86: JUMPDEST
00000e87: SWAP1
00000e88: POP
00000e89: PUSH1 0x20
00000e8b: MUL
00000e8c: ADD
00000e8d: PUSH1 0x20
00000e8f: DUP2
00000e90: ADD
00000e91: SWAP1
00000e92: PUSH2 0x0e9b
00000e95: SWAP2
00000e96: SWAP1
00000e97: PUSH2 0x2f4a
00000e9a: JUMP
00000e9b: JUMPDEST
00000e9c: PUSH1 0x08
00000e9e: PUSH1 0x00
00000ea0: DUP9
00000ea1: DUP9
00000ea2: DUP6
00000ea3: DUP2
00000ea4: DUP2
00000ea5: LT
00000ea6: PUSH2 0x0eb1
00000ea9: JUMPI
00000eaa: PUSH2 0x0eb1
00000ead: PUSH2 0x2f1b
00000eb0: JUMP
00000eb1: JUMPDEST
00000eb2: SWAP1
00000eb3: POP
00000eb4: PUSH1 0x20
00000eb6: MUL
00000eb7: ADD
00000eb8: PUSH1 0x20
00000eba: DUP2
00000ebb: ADD
00000ebc: SWAP1
00000ebd: PUSH2 0x0ec6
00000ec0: SWAP2
00000ec1: SWAP1
00000ec2: PUSH2 0x2962
00000ec5: JUMP
00000ec6: JUMPDEST
00000ec7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000edc: AND
00000edd: DUP2
00000ede: MSTORE
00000edf: PUSH1 0x20
00000ee1: DUP2
00000ee2: ADD
00000ee3: SWAP2
00000ee4: SWAP1
00000ee5: SWAP2
00000ee6: MSTORE
00000ee7: PUSH1 0x40
00000ee9: ADD
00000eea: PUSH1 0x00
00000eec: KECCAK256
00000eed: DUP1
00000eee: SLOAD
00000eef: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
00000f10: AND
00000f11: SWAP2
00000f12: ISZERO
00000f13: ISZERO
00000f14: SWAP2
00000f15: SWAP1
00000f16: SWAP2
00000f17: OR
00000f18: SWAP1
00000f19: SSTORE
00000f1a: PUSH32 0x857309f1a328784e9fc9749624be5d32fd8e7afab58e7fe9a218dd613a37f15c
00000f3b: DUP7
00000f3c: DUP7
00000f3d: DUP4
00000f3e: DUP2
00000f3f: DUP2
00000f40: LT
00000f41: PUSH2 0x0f4c
00000f44: JUMPI
00000f45: PUSH2 0x0f4c
00000f48: PUSH2 0x2f1b
00000f4b: JUMP
00000f4c: JUMPDEST
00000f4d: SWAP1
00000f4e: POP
00000f4f: PUSH1 0x20
00000f51: MUL
00000f52: ADD
00000f53: PUSH1 0x20
00000f55: DUP2
00000f56: ADD
00000f57: SWAP1
00000f58: PUSH2 0x0f61
00000f5b: SWAP2
00000f5c: SWAP1
00000f5d: PUSH2 0x2962
00000f60: JUMP
00000f61: JUMPDEST
00000f62: DUP6
00000f63: DUP6
00000f64: DUP5
00000f65: DUP2
00000f66: DUP2
00000f67: LT
00000f68: PUSH2 0x0f73
00000f6b: JUMPI
00000f6c: PUSH2 0x0f73
00000f6f: PUSH2 0x2f1b
00000f72: JUMP
00000f73: JUMPDEST
00000f74: SWAP1
00000f75: POP
00000f76: PUSH1 0x20
00000f78: MUL
00000f79: ADD
00000f7a: PUSH1 0x20
00000f7c: DUP2
00000f7d: ADD
00000f7e: SWAP1
00000f7f: PUSH2 0x0f88
00000f82: SWAP2
00000f83: SWAP1
00000f84: PUSH2 0x2f4a
00000f87: JUMP
00000f88: JUMPDEST
00000f89: PUSH1 0x40
00000f8b: DUP1
00000f8c: MLOAD
00000f8d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000fa2: SWAP1
00000fa3: SWAP4
00000fa4: AND
00000fa5: DUP4
00000fa6: MSTORE
00000fa7: SWAP1
00000fa8: ISZERO
00000fa9: ISZERO
00000faa: PUSH1 0x20
00000fac: DUP4
00000fad: ADD
00000fae: MSTORE
00000faf: ADD
00000fb0: PUSH1 0x40
00000fb2: MLOAD
00000fb3: DUP1
00000fb4: SWAP2
00000fb5: SUB
00000fb6: SWAP1
00000fb7: LOG1
00000fb8: DUP1
00000fb9: PUSH2 0x0fc1
00000fbc: DUP2
00000fbd: PUSH2 0x2f94
00000fc0: JUMP
00000fc1: JUMPDEST
00000fc2: SWAP2
00000fc3: POP
00000fc4: POP
00000fc5: PUSH2 0x0e6c
00000fc8: JUMP
00000fc9: JUMPDEST
00000fca: POP
00000fcb: POP
00000fcc: POP
00000fcd: POP
00000fce: POP
00000fcf: POP
00000fd0: JUMP
00000fd1: JUMPDEST
00000fd2: PUSH1 0x06
00000fd4: PUSH1 0x20
00000fd6: MSTORE
00000fd7: PUSH1 0x00
00000fd9: SWAP1
00000fda: DUP2
00000fdb: MSTORE
00000fdc: PUSH1 0x40
00000fde: SWAP1
00000fdf: KECCAK256
00000fe0: DUP1
00000fe1: SLOAD
00000fe2: PUSH2 0x0692
00000fe5: SWAP1
00000fe6: PUSH2 0x2e05
00000fe9: JUMP
00000fea: JUMPDEST
00000feb: PUSH1 0x40
00000fed: MLOAD
00000fee: PUSH32 0x666758ca00000000000000000000000000000000000000000000000000000000
0000100f: DUP2
00001010: MSTORE
00001011: PUSH1 0x04
00001013: DUP2
00001014: ADD
00001015: DUP4
00001016: SWAP1
00001017: MSTORE
00001018: PUSH1 0x24
0000101a: DUP2
0000101b: ADD
0000101c: DUP3
0000101d: SWAP1
0000101e: MSTORE
0000101f: PUSH1 0x00
00001021: SWAP1
00001022: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001037: DUP6
00001038: AND
00001039: SWAP1
0000103a: PUSH4 0x666758ca
0000103f: SWAP1
00001040: PUSH1 0x44
00001042: ADD
00001043: PUSH1 0x20
00001045: PUSH1 0x40
00001047: MLOAD
00001048: DUP1
00001049: DUP4
0000104a: SUB
0000104b: DUP2
0000104c: DUP7
0000104d: GAS
0000104e: STATICCALL
0000104f: ISZERO
00001050: DUP1
00001051: ISZERO
00001052: PUSH2 0x105f
00001055: JUMPI
00001056: RETURNDATASIZE
00001057: PUSH1 0x00
00001059: DUP1
0000105a: RETURNDATACOPY
0000105b: RETURNDATASIZE
0000105c: PUSH1 0x00
0000105e: REVERT
0000105f: JUMPDEST
00001060: POP
00001061: POP
00001062: POP
00001063: POP
00001064: PUSH1 0x40
00001066: MLOAD
00001067: RETURNDATASIZE
00001068: PUSH1 0x1f
0000106a: NOT
0000106b: PUSH1 0x1f
0000106d: DUP3
0000106e: ADD
0000106f: AND
00001070: DUP3
00001071: ADD
00001072: DUP1
00001073: PUSH1 0x40
00001075: MSTORE
00001076: POP
00001077: DUP2
00001078: ADD
00001079: SWAP1
0000107a: PUSH2 0x1083
0000107d: SWAP2
0000107e: SWAP1
0000107f: PUSH2 0x2f02
00001082: JUMP
00001083: JUMPDEST
00001084: SWAP5
00001085: SWAP4
00001086: POP
00001087: POP
00001088: POP
00001089: POP
0000108a: JUMP
0000108b: JUMPDEST
0000108c: PUSH1 0x00
0000108e: DUP3
0000108f: DUP2
00001090: MSTORE
00001091: PUSH1 0x03
00001093: PUSH1 0x20
00001095: SWAP1
00001096: DUP2
00001097: MSTORE
00001098: PUSH1 0x40
0000109a: DUP1
0000109b: DUP4
0000109c: KECCAK256
0000109d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000010b2: DUP6
000010b3: AND
000010b4: DUP1
000010b5: DUP6
000010b6: MSTORE
000010b7: SWAP3
000010b8: MSTORE
000010b9: DUP1
000010ba: DUP4
000010bb: KECCAK256
000010bc: DUP1
000010bd: SLOAD
000010be: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
000010df: AND
000010e0: PUSH1 0x01
000010e2: OR
000010e3: SWAP1
000010e4: SSTORE
000010e5: MLOAD
000010e6: SWAP1
000010e7: SWAP2
000010e8: DUP5
000010e9: SWAP2
000010ea: PUSH32 0x2ae6a113c0ed5b78a53413ffbb7679881f11145ccfba4fb92e863dfcd5a1d2f3
0000110b: SWAP2
0000110c: SWAP1
0000110d: LOG3
0000110e: POP
0000110f: POP
00001110: JUMP
00001111: JUMPDEST
00001112: PUSH1 0x01
00001114: DUP1
00001115: SLOAD
00001116: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000112b: DUP4
0000112c: AND
0000112d: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
0000114e: SWAP2
0000114f: DUP3
00001150: AND
00001151: DUP2
00001152: OR
00001153: SWAP1
00001154: SWAP3
00001155: SSTORE
00001156: PUSH1 0x02
00001158: DUP1
00001159: SLOAD
0000115a: SWAP1
0000115b: SWAP2
0000115c: AND
0000115d: SWAP1
0000115e: SSTORE
0000115f: PUSH1 0x40
00001161: MLOAD
00001162: PUSH32 0xfbe19c9b601f5ee90b44c7390f3fa2319eba01762d34ee372aeafd59b25c7f87
00001183: SWAP1
00001184: PUSH1 0x00
00001186: SWAP1
00001187: LOG2
00001188: POP
00001189: JUMP
0000118a: JUMPDEST
0000118b: PUSH1 0x40
0000118d: DUP1
0000118e: MLOAD
0000118f: PUSH1 0x60
00001191: DUP1
00001192: DUP3
00001193: ADD
00001194: DUP4
00001195: MSTORE
00001196: PUSH1 0x00
00001198: DUP1
00001199: DUP4
0000119a: MSTORE
0000119b: PUSH1 0x20
0000119d: DUP4
0000119e: ADD
0000119f: MSTORE
000011a0: SWAP2
000011a1: DUP2
000011a2: ADD
000011a3: SWAP2
000011a4: SWAP1
000011a5: SWAP2
000011a6: MSTORE
000011a7: DUP2
000011a8: MLOAD
000011a9: PUSH1 0x60
000011ab: SWAP1
000011ac: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000011c1: AND
000011c2: PUSH2 0x11f7
000011c5: JUMPI
000011c6: PUSH1 0x40
000011c8: MLOAD
000011c9: PUSH32 0x96bbcf1e00000000000000000000000000000000000000000000000000000000
000011ea: DUP2
000011eb: MSTORE
000011ec: PUSH1 0x04
000011ee: ADD
000011ef: PUSH1 0x40
000011f1: MLOAD
000011f2: DUP1
000011f3: SWAP2
000011f4: SUB
000011f5: SWAP1
000011f6: REVERT
000011f7: JUMPDEST
000011f8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000120d: DUP5
0000120e: AND
0000120f: PUSH1 0x00
00001211: SWAP1
00001212: DUP2
00001213: MSTORE
00001214: PUSH1 0x08
00001216: PUSH1 0x20
00001218: MSTORE
00001219: PUSH1 0x40
0000121b: SWAP1
0000121c: KECCAK256
0000121d: SLOAD
0000121e: PUSH1 0xff
00001220: AND
00001221: PUSH2 0x1256
00001224: JUMPI
00001225: PUSH1 0x40
00001227: MLOAD
00001228: PUSH32 0x5b0a758300000000000000000000000000000000000000000000000000000000
00001249: DUP2
0000124a: MSTORE
0000124b: PUSH1 0x04
0000124d: ADD
0000124e: PUSH1 0x40
00001250: MLOAD
00001251: DUP1
00001252: SWAP2
00001253: SUB
00001254: SWAP1
00001255: REVERT
00001256: JUMPDEST
00001257: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
00001278: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000128d: AND
0000128e: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
000012a3: EQ
000012a4: DUP1
000012a5: ISZERO
000012a6: PUSH2 0x12b2
000012a9: JUMPI
000012aa: POP
000012ab: DUP3
000012ac: PUSH1 0x20
000012ae: ADD
000012af: MLOAD
000012b0: CALLVALUE
000012b1: LT
000012b2: JUMPDEST
000012b3: ISZERO
000012b4: PUSH2 0x12e9
000012b7: JUMPI
000012b8: PUSH1 0x40
000012ba: MLOAD
000012bb: PUSH32 0x78f38f7600000000000000000000000000000000000000000000000000000000
000012dc: DUP2
000012dd: MSTORE
000012de: PUSH1 0x04
000012e0: ADD
000012e1: PUSH1 0x40
000012e3: MLOAD
000012e4: DUP1
000012e5: SWAP2
000012e6: SUB
000012e7: SWAP1
000012e8: REVERT
000012e9: JUMPDEST
000012ea: PUSH1 0x05
000012ec: SLOAD
000012ed: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001302: AND
00001303: ISZERO
00001304: PUSH2 0x13e2
00001307: JUMPI
00001308: PUSH1 0x05
0000130a: SLOAD
0000130b: PUSH1 0x40
0000130d: DUP1
0000130e: MLOAD
0000130f: PUSH1 0x60
00001311: DUP2
00001312: ADD
00001313: DUP3
00001314: MSTORE
00001315: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000132a: DUP8
0000132b: DUP2
0000132c: AND
0000132d: DUP3
0000132e: MSTORE
0000132f: CALLER
00001330: PUSH1 0x20
00001332: DUP4
00001333: ADD
00001334: MSTORE
00001335: DUP2
00001336: DUP4
00001337: ADD
00001338: DUP8
00001339: SWAP1
0000133a: MSTORE
0000133b: SWAP2
0000133c: MLOAD
0000133d: PUSH32 0xf59ad99000000000000000000000000000000000000000000000000000000000
0000135e: DUP2
0000135f: MSTORE
00001360: SWAP2
00001361: SWAP1
00001362: SWAP3
00001363: AND
00001364: SWAP2
00001365: PUSH4 0xf59ad990
0000136a: SWAP2
0000136b: PUSH2 0x1377
0000136e: SWAP2
0000136f: SWAP1
00001370: PUSH1 0x04
00001372: ADD
00001373: PUSH2 0x300b
00001376: JUMP
00001377: JUMPDEST
00001378: PUSH1 0x00
0000137a: PUSH1 0x40
0000137c: MLOAD
0000137d: DUP1
0000137e: DUP4
0000137f: SUB
00001380: DUP2
00001381: PUSH1 0x00
00001383: DUP8
00001384: GAS
00001385: CALL
00001386: ISZERO
00001387: DUP1
00001388: ISZERO
00001389: PUSH2 0x1396
0000138c: JUMPI
0000138d: RETURNDATASIZE
0000138e: PUSH1 0x00
00001390: DUP1
00001391: RETURNDATACOPY
00001392: RETURNDATASIZE
00001393: PUSH1 0x00
00001395: REVERT
00001396: JUMPDEST
00001397: POP
00001398: POP
00001399: POP
0000139a: POP
0000139b: PUSH1 0x40
0000139d: MLOAD
0000139e: RETURNDATASIZE
0000139f: PUSH1 0x00
000013a1: DUP3
000013a2: RETURNDATACOPY
000013a3: PUSH1 0x1f
000013a5: RETURNDATASIZE
000013a6: SWAP1
000013a7: DUP2
000013a8: ADD
000013a9: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
000013ca: AND
000013cb: DUP3
000013cc: ADD
000013cd: PUSH1 0x40
000013cf: MSTORE
000013d0: PUSH2 0x13dc
000013d3: SWAP2
000013d4: SWAP1
000013d5: DUP2
000013d6: ADD
000013d7: SWAP1
000013d8: PUSH2 0x30d9
000013db: JUMP
000013dc: JUMPDEST
000013dd: SWAP1
000013de: SWAP3
000013df: POP
000013e0: SWAP1
000013e1: POP
000013e2: JUMPDEST
000013e3: SWAP3
000013e4: POP
000013e5: SWAP3
000013e6: SWAP1
000013e7: POP
000013e8: JUMP
000013e9: JUMPDEST
000013ea: DUP1
000013eb: ISZERO
000013ec: DUP1
000013ed: PUSH2 0x143f
000013f0: JUMPI
000013f1: POP
000013f2: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
00001413: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001428: AND
00001429: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
0000143e: EQ
0000143f: JUMPDEST
00001440: ISZERO
00001441: PUSH2 0x1447
00001444: JUMPI
00001445: POP
00001446: JUMP
00001447: JUMPDEST
00001448: PUSH2 0x1489
0000144b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001460: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
00001481: AND
00001482: CALLER
00001483: ADDRESS
00001484: DUP5
00001485: PUSH2 0x254e
00001488: JUMP
00001489: JUMPDEST
0000148a: POP
0000148b: JUMP
0000148c: JUMPDEST
0000148d: PUSH1 0x05
0000148f: SLOAD
00001490: DUP2
00001491: SWAP1
00001492: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000014a7: AND
000014a8: ISZERO
000014a9: PUSH2 0x158c
000014ac: JUMPI
000014ad: PUSH1 0x05
000014af: SLOAD
000014b0: PUSH1 0x40
000014b2: DUP1
000014b3: MLOAD
000014b4: PUSH1 0x80
000014b6: DUP2
000014b7: ADD
000014b8: DUP3
000014b9: MSTORE
000014ba: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000014cf: DUP9
000014d0: DUP2
000014d1: AND
000014d2: DUP3
000014d3: MSTORE
000014d4: PUSH1 0x20
000014d6: DUP3
000014d7: ADD
000014d8: DUP9
000014d9: SWAP1
000014da: MSTORE
000014db: DUP2
000014dc: DUP4
000014dd: ADD
000014de: DUP8
000014df: SWAP1
000014e0: MSTORE
000014e1: PUSH1 0x60
000014e3: DUP3
000014e4: ADD
000014e5: DUP7
000014e6: SWAP1
000014e7: MSTORE
000014e8: SWAP2
000014e9: MLOAD
000014ea: PUSH32 0x62811bf200000000000000000000000000000000000000000000000000000000
0000150b: DUP2
0000150c: MSTORE
0000150d: SWAP2
0000150e: SWAP1
0000150f: SWAP3
00001510: AND
00001511: SWAP2
00001512: PUSH4 0x62811bf2
00001517: SWAP2
00001518: PUSH2 0x1524
0000151b: SWAP2
0000151c: SWAP1
0000151d: PUSH1 0x04
0000151f: ADD
00001520: PUSH2 0x313d
00001523: JUMP
00001524: JUMPDEST
00001525: PUSH1 0x00
00001527: PUSH1 0x40
00001529: MLOAD
0000152a: DUP1
0000152b: DUP4
0000152c: SUB
0000152d: DUP2
0000152e: PUSH1 0x00
00001530: DUP8
00001531: GAS
00001532: CALL
00001533: ISZERO
00001534: DUP1
00001535: ISZERO
00001536: PUSH2 0x1543
00001539: JUMPI
0000153a: RETURNDATASIZE
0000153b: PUSH1 0x00
0000153d: DUP1
0000153e: RETURNDATACOPY
0000153f: RETURNDATASIZE
00001540: PUSH1 0x00
00001542: REVERT
00001543: JUMPDEST
00001544: POP
00001545: POP
00001546: POP
00001547: POP
00001548: PUSH1 0x40
0000154a: MLOAD
0000154b: RETURNDATASIZE
0000154c: PUSH1 0x00
0000154e: DUP3
0000154f: RETURNDATACOPY
00001550: PUSH1 0x1f
00001552: RETURNDATASIZE
00001553: SWAP1
00001554: DUP2
00001555: ADD
00001556: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00001577: AND
00001578: DUP3
00001579: ADD
0000157a: PUSH1 0x40
0000157c: MSTORE
0000157d: PUSH2 0x1589
00001580: SWAP2
00001581: SWAP1
00001582: DUP2
00001583: ADD
00001584: SWAP1
00001585: PUSH2 0x31dc
00001588: JUMP
00001589: JUMPDEST
0000158a: SWAP1
0000158b: POP
0000158c: JUMPDEST
0000158d: PUSH1 0x00
0000158f: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
000015b0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000015c5: AND
000015c6: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
000015db: EQ
000015dc: PUSH2 0x15e5
000015df: JUMPI
000015e0: CALLVALUE
000015e1: PUSH2 0x15f4
000015e4: JUMP
000015e5: JUMPDEST
000015e6: PUSH1 0x20
000015e8: DUP3
000015e9: ADD
000015ea: MLOAD
000015eb: PUSH2 0x15f4
000015ee: SWAP1
000015ef: CALLVALUE
000015f0: PUSH2 0x3211
000015f3: JUMP
000015f4: JUMPDEST
000015f5: SWAP1
000015f6: POP
000015f7: PUSH1 0x00
000015f9: DUP7
000015fa: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000160f: AND
00001610: PUSH4 0x74fa24a6
00001615: PUSH1 0x40
00001617: MLOAD
00001618: DUP2
00001619: PUSH4 0xffffffff
0000161e: AND
0000161f: PUSH1 0xe0
00001621: SHL
00001622: DUP2
00001623: MSTORE
00001624: PUSH1 0x04
00001626: ADD
00001627: PUSH1 0x20
00001629: PUSH1 0x40
0000162b: MLOAD
0000162c: DUP1
0000162d: DUP4
0000162e: SUB
0000162f: DUP2
00001630: DUP7
00001631: GAS
00001632: STATICCALL
00001633: ISZERO
00001634: DUP1
00001635: ISZERO
00001636: PUSH2 0x1643
00001639: JUMPI
0000163a: RETURNDATASIZE
0000163b: PUSH1 0x00
0000163d: DUP1
0000163e: RETURNDATACOPY
0000163f: RETURNDATASIZE
00001640: PUSH1 0x00
00001642: REVERT
00001643: JUMPDEST
00001644: POP
00001645: POP
00001646: POP
00001647: POP
00001648: PUSH1 0x40
0000164a: MLOAD
0000164b: RETURNDATASIZE
0000164c: PUSH1 0x1f
0000164e: NOT
0000164f: PUSH1 0x1f
00001651: DUP3
00001652: ADD
00001653: AND
00001654: DUP3
00001655: ADD
00001656: DUP1
00001657: PUSH1 0x40
00001659: MSTORE
0000165a: POP
0000165b: DUP2
0000165c: ADD
0000165d: SWAP1
0000165e: PUSH2 0x1667
00001661: SWAP2
00001662: SWAP1
00001663: PUSH2 0x2f02
00001666: JUMP
00001667: JUMPDEST
00001668: SWAP1
00001669: POP
0000166a: PUSH1 0x00
0000166c: DUP8
0000166d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001682: AND
00001683: PUSH4 0xac0710cb
00001688: DUP5
00001689: DUP12
0000168a: DUP8
0000168b: PUSH1 0x00
0000168d: ADD
0000168e: MLOAD
0000168f: DUP9
00001690: PUSH1 0x20
00001692: ADD
00001693: MLOAD
00001694: DUP8
00001695: DUP11
00001696: PUSH1 0x40
00001698: ADD
00001699: MLOAD
0000169a: PUSH1 0x40
0000169c: MLOAD
0000169d: PUSH1 0x20
0000169f: ADD
000016a0: PUSH2 0x16ac
000016a3: SWAP5
000016a4: SWAP4
000016a5: SWAP3
000016a6: SWAP2
000016a7: SWAP1
000016a8: PUSH2 0x3228
000016ab: JUMP
000016ac: JUMPDEST
000016ad: PUSH1 0x40
000016af: MLOAD
000016b0: PUSH1 0x20
000016b2: DUP2
000016b3: DUP4
000016b4: SUB
000016b5: SUB
000016b6: DUP2
000016b7: MSTORE
000016b8: SWAP1
000016b9: PUSH1 0x40
000016bb: MSTORE
000016bc: DUP12
000016bd: PUSH1 0x40
000016bf: MLOAD
000016c0: DUP6
000016c1: PUSH4 0xffffffff
000016c6: AND
000016c7: PUSH1 0xe0
000016c9: SHL
000016ca: DUP2
000016cb: MSTORE
000016cc: PUSH1 0x04
000016ce: ADD
000016cf: PUSH2 0x16da
000016d2: SWAP4
000016d3: SWAP3
000016d4: SWAP2
000016d5: SWAP1
000016d6: PUSH2 0x326d
000016d9: JUMP
000016da: JUMPDEST
000016db: PUSH1 0x20
000016dd: PUSH1 0x40
000016df: MLOAD
000016e0: DUP1
000016e1: DUP4
000016e2: SUB
000016e3: DUP2
000016e4: DUP6
000016e5: DUP9
000016e6: GAS
000016e7: CALL
000016e8: ISZERO
000016e9: DUP1
000016ea: ISZERO
000016eb: PUSH2 0x16f8
000016ee: JUMPI
000016ef: RETURNDATASIZE
000016f0: PUSH1 0x00
000016f2: DUP1
000016f3: RETURNDATACOPY
000016f4: RETURNDATASIZE
000016f5: PUSH1 0x00
000016f7: REVERT
000016f8: JUMPDEST
000016f9: POP
000016fa: POP
000016fb: POP
000016fc: POP
000016fd: POP
000016fe: PUSH1 0x40
00001700: MLOAD
00001701: RETURNDATASIZE
00001702: PUSH1 0x1f
00001704: NOT
00001705: PUSH1 0x1f
00001707: DUP3
00001708: ADD
00001709: AND
0000170a: DUP3
0000170b: ADD
0000170c: DUP1
0000170d: PUSH1 0x40
0000170f: MSTORE
00001710: POP
00001711: DUP2
00001712: ADD
00001713: SWAP1
00001714: PUSH2 0x171d
00001717: SWAP2
00001718: SWAP1
00001719: PUSH2 0x2f02
0000171c: JUMP
0000171d: JUMPDEST
0000171e: SWAP1
0000171f: POP
00001720: DUP2
00001721: DUP2
00001722: EQ
00001723: PUSH2 0x1758
00001726: JUMPI
00001727: PUSH1 0x40
00001729: MLOAD
0000172a: PUSH32 0x7b7bbbe000000000000000000000000000000000000000000000000000000000
0000174b: DUP2
0000174c: MSTORE
0000174d: PUSH1 0x04
0000174f: ADD
00001750: PUSH1 0x40
00001752: MLOAD
00001753: DUP1
00001754: SWAP2
00001755: SUB
00001756: SWAP1
00001757: REVERT
00001758: JUMPDEST
00001759: DUP4
0000175a: MLOAD
0000175b: PUSH1 0x20
0000175d: DUP1
0000175e: DUP7
0000175f: ADD
00001760: MLOAD
00001761: PUSH1 0x40
00001763: DUP1
00001764: MLOAD
00001765: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000177a: DUP14
0000177b: DUP2
0000177c: AND
0000177d: DUP3
0000177e: MSTORE
0000177f: CALLER
00001780: SWAP5
00001781: DUP3
00001782: ADD
00001783: SWAP5
00001784: SWAP1
00001785: SWAP5
00001786: MSTORE
00001787: SWAP3
00001788: SWAP1
00001789: SWAP4
0000178a: AND
0000178b: DUP3
0000178c: DUP5
0000178d: ADD
0000178e: MSTORE
0000178f: PUSH1 0x60
00001791: DUP3
00001792: ADD
00001793: MSTORE
00001794: PUSH1 0x80
00001796: DUP2
00001797: ADD
00001798: DUP5
00001799: SWAP1
0000179a: MSTORE
0000179b: SWAP1
0000179c: MLOAD
0000179d: PUSH32 0xc74a00177d2c63e6eead5ea7936974ad9d0121f86140723b8909f8ec9662cc61
000017be: SWAP2
000017bf: DUP2
000017c0: SWAP1
000017c1: SUB
000017c2: PUSH1 0xa0
000017c4: ADD
000017c5: SWAP1
000017c6: LOG1
000017c7: POP
000017c8: POP
000017c9: POP
000017ca: POP
000017cb: POP
000017cc: POP
000017cd: POP
000017ce: POP
000017cf: POP
000017d0: JUMP
000017d1: JUMPDEST
000017d2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000017e7: DUP3
000017e8: AND
000017e9: PUSH2 0x181e
000017ec: JUMPI
000017ed: PUSH1 0x40
000017ef: MLOAD
000017f0: PUSH32 0xd92e233d00000000000000000000000000000000000000000000000000000000
00001811: DUP2
00001812: MSTORE
00001813: PUSH1 0x04
00001815: ADD
00001816: PUSH1 0x40
00001818: MLOAD
00001819: DUP1
0000181a: SWAP2
0000181b: SUB
0000181c: SWAP1
0000181d: REVERT
0000181e: JUMPDEST
0000181f: PUSH32 0xffffffffffffffffffffffff1111111111111111111111111111111111111112
00001840: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001855: DUP5
00001856: AND
00001857: ADD
00001858: PUSH2 0x186a
0000185b: JUMPI
0000185c: PUSH2 0x1865
0000185f: DUP3
00001860: DUP3
00001861: PUSH2 0x2639
00001864: JUMP
00001865: JUMPDEST
00001866: POP
00001867: POP
00001868: POP
00001869: JUMP
0000186a: JUMPDEST
0000186b: DUP3
0000186c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001881: AND
00001882: EXTCODESIZE
00001883: PUSH1 0x00
00001885: SUB
00001886: PUSH2 0x18bb
00001889: JUMPI
0000188a: PUSH1 0x40
0000188c: MLOAD
0000188d: PUSH32 0x1eb00b0600000000000000000000000000000000000000000000000000000000
000018ae: DUP2
000018af: MSTORE
000018b0: PUSH1 0x04
000018b2: ADD
000018b3: PUSH1 0x40
000018b5: MLOAD
000018b6: DUP1
000018b7: SWAP2
000018b8: SUB
000018b9: SWAP1
000018ba: REVERT
000018bb: JUMPDEST
000018bc: PUSH2 0x1865
000018bf: DUP4
000018c0: DUP4
000018c1: DUP4
000018c2: PUSH2 0x26ae
000018c5: JUMP
000018c6: JUMPDEST
000018c7: PUSH1 0x40
000018c9: DUP1
000018ca: MLOAD
000018cb: PUSH1 0x60
000018cd: DUP2
000018ce: DUP2
000018cf: ADD
000018d0: DUP4
000018d1: MSTORE
000018d2: PUSH1 0x00
000018d4: DUP1
000018d5: DUP4
000018d6: MSTORE
000018d7: PUSH1 0x20
000018d9: DUP4
000018da: ADD
000018db: MSTORE
000018dc: SWAP2
000018dd: DUP2
000018de: ADD
000018df: DUP3
000018e0: SWAP1
000018e1: MSTORE
000018e2: CALLER
000018e3: PUSH1 0x00
000018e5: SWAP1
000018e6: DUP2
000018e7: MSTORE
000018e8: PUSH1 0x08
000018ea: PUSH1 0x20
000018ec: MSTORE
000018ed: PUSH1 0x40
000018ef: SWAP1
000018f0: KECCAK256
000018f1: SLOAD
000018f2: PUSH1 0xff
000018f4: AND
000018f5: PUSH2 0x192a
000018f8: JUMPI
000018f9: PUSH1 0x40
000018fb: MLOAD
000018fc: PUSH32 0x5b0a758300000000000000000000000000000000000000000000000000000000
0000191d: DUP2
0000191e: MSTORE
0000191f: PUSH1 0x04
00001921: ADD
00001922: PUSH1 0x40
00001924: MLOAD
00001925: DUP1
00001926: SWAP2
00001927: SUB
00001928: SWAP1
00001929: REVERT
0000192a: JUMPDEST
0000192b: DUP3
0000192c: MLOAD
0000192d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001942: AND
00001943: ADDRESS
00001944: EQ
00001945: DUP1
00001946: PUSH2 0x199e
00001949: JUMPI
0000194a: POP
0000194b: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
0000196c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001981: AND
00001982: DUP4
00001983: PUSH1 0x00
00001985: ADD
00001986: MLOAD
00001987: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000199c: AND
0000199d: EQ
0000199e: JUMPDEST
0000199f: ISZERO
000019a0: PUSH2 0x19d5
000019a3: JUMPI
000019a4: PUSH1 0x40
000019a6: MLOAD
000019a7: PUSH32 0x285c601600000000000000000000000000000000000000000000000000000000
000019c8: DUP2
000019c9: MSTORE
000019ca: PUSH1 0x04
000019cc: ADD
000019cd: PUSH1 0x40
000019cf: MLOAD
000019d0: DUP1
000019d1: SWAP2
000019d2: SUB
000019d3: SWAP1
000019d4: REVERT
000019d5: JUMPDEST
000019d6: PUSH1 0x05
000019d8: SLOAD
000019d9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000019ee: AND
000019ef: ISZERO
000019f0: PUSH2 0x13e2
000019f3: JUMPI
000019f4: PUSH1 0x05
000019f6: SLOAD
000019f7: PUSH1 0x40
000019f9: DUP1
000019fa: MLOAD
000019fb: PUSH1 0x60
000019fd: DUP2
000019fe: ADD
000019ff: DUP3
00001a00: MSTORE
00001a01: CALLER
00001a02: DUP1
00001a03: DUP3
00001a04: MSTORE
00001a05: PUSH1 0x00
00001a07: SWAP1
00001a08: DUP2
00001a09: MSTORE
00001a0a: PUSH1 0x07
00001a0c: PUSH1 0x20
00001a0e: SWAP1
00001a0f: DUP2
00001a10: MSTORE
00001a11: SWAP3
00001a12: SWAP1
00001a13: KECCAK256
00001a14: DUP1
00001a15: SLOAD
00001a16: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001a2b: SWAP1
00001a2c: SWAP5
00001a2d: AND
00001a2e: SWAP4
00001a2f: PUSH4 0xcf36b917
00001a34: SWAP4
00001a35: DUP4
00001a36: ADD
00001a37: SWAP2
00001a38: SWAP1
00001a39: PUSH2 0x1a41
00001a3c: SWAP1
00001a3d: PUSH2 0x2e05
00001a40: JUMP
00001a41: JUMPDEST
00001a42: DUP1
00001a43: PUSH1 0x1f
00001a45: ADD
00001a46: PUSH1 0x20
00001a48: DUP1
00001a49: SWAP2
00001a4a: DIV
00001a4b: MUL
00001a4c: PUSH1 0x20
00001a4e: ADD
00001a4f: PUSH1 0x40
00001a51: MLOAD
00001a52: SWAP1
00001a53: DUP2
00001a54: ADD
00001a55: PUSH1 0x40
00001a57: MSTORE
00001a58: DUP1
00001a59: SWAP3
00001a5a: SWAP2
00001a5b: SWAP1
00001a5c: DUP2
00001a5d: DUP2
00001a5e: MSTORE
00001a5f: PUSH1 0x20
00001a61: ADD
00001a62: DUP3
00001a63: DUP1
00001a64: SLOAD
00001a65: PUSH2 0x1a6d
00001a68: SWAP1
00001a69: PUSH2 0x2e05
00001a6c: JUMP
00001a6d: JUMPDEST
00001a6e: DUP1
00001a6f: ISZERO
00001a70: PUSH2 0x1aba
00001a73: JUMPI
00001a74: DUP1
00001a75: PUSH1 0x1f
00001a77: LT
00001a78: PUSH2 0x1a8f
00001a7b: JUMPI
00001a7c: PUSH2 0x0100
00001a7f: DUP1
00001a80: DUP4
00001a81: SLOAD
00001a82: DIV
00001a83: MUL
00001a84: DUP4
00001a85: MSTORE
00001a86: SWAP2
00001a87: PUSH1 0x20
00001a89: ADD
00001a8a: SWAP2
00001a8b: PUSH2 0x1aba
00001a8e: JUMP
00001a8f: JUMPDEST
00001a90: DUP3
00001a91: ADD
00001a92: SWAP2
00001a93: SWAP1
00001a94: PUSH1 0x00
00001a96: MSTORE
00001a97: PUSH1 0x20
00001a99: PUSH1 0x00
00001a9b: KECCAK256
00001a9c: SWAP1
00001a9d: JUMPDEST
00001a9e: DUP2
00001a9f: SLOAD
00001aa0: DUP2
00001aa1: MSTORE
00001aa2: SWAP1
00001aa3: PUSH1 0x01
00001aa5: ADD
00001aa6: SWAP1
00001aa7: PUSH1 0x20
00001aa9: ADD
00001aaa: DUP1
00001aab: DUP4
00001aac: GT
00001aad: PUSH2 0x1a9d
00001ab0: JUMPI
00001ab1: DUP3
00001ab2: SWAP1
00001ab3: SUB
00001ab4: PUSH1 0x1f
00001ab6: AND
00001ab7: DUP3
00001ab8: ADD
00001ab9: SWAP2
00001aba: JUMPDEST
00001abb: POP
00001abc: POP
00001abd: POP
00001abe: POP
00001abf: POP
00001ac0: DUP2
00001ac1: MSTORE
00001ac2: PUSH1 0x20
00001ac4: ADD
00001ac5: DUP7
00001ac6: DUP2
00001ac7: MSTORE
00001ac8: POP
00001ac9: PUSH1 0x40
00001acb: MLOAD
00001acc: DUP3
00001acd: PUSH4 0xffffffff
00001ad2: AND
00001ad3: PUSH1 0xe0
00001ad5: SHL
00001ad6: DUP2
00001ad7: MSTORE
00001ad8: PUSH1 0x04
00001ada: ADD
00001adb: PUSH2 0x1ae4
00001ade: SWAP2
00001adf: SWAP1
00001ae0: PUSH2 0x3298
00001ae3: JUMP
00001ae4: JUMPDEST
00001ae5: PUSH1 0x00
00001ae7: PUSH1 0x40
00001ae9: MLOAD
00001aea: DUP1
00001aeb: DUP4
00001aec: SUB
00001aed: DUP2
00001aee: PUSH1 0x00
00001af0: DUP8
00001af1: GAS
00001af2: CALL
00001af3: ISZERO
00001af4: DUP1
00001af5: ISZERO
00001af6: PUSH2 0x1b03
00001af9: JUMPI
00001afa: RETURNDATASIZE
00001afb: PUSH1 0x00
00001afd: DUP1
00001afe: RETURNDATACOPY
00001aff: RETURNDATASIZE
00001b00: PUSH1 0x00
00001b02: REVERT
00001b03: JUMPDEST
00001b04: POP
00001b05: POP
00001b06: POP
00001b07: POP
00001b08: PUSH1 0x40
00001b0a: MLOAD
00001b0b: RETURNDATASIZE
00001b0c: PUSH1 0x00
00001b0e: DUP3
00001b0f: RETURNDATACOPY
00001b10: PUSH1 0x1f
00001b12: RETURNDATASIZE
00001b13: SWAP1
00001b14: DUP2
00001b15: ADD
00001b16: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00001b37: AND
00001b38: DUP3
00001b39: ADD
00001b3a: PUSH1 0x40
00001b3c: MSTORE
00001b3d: PUSH2 0x13dc
00001b40: SWAP2
00001b41: SWAP1
00001b42: DUP2
00001b43: ADD
00001b44: SWAP1
00001b45: PUSH2 0x330f
00001b48: JUMP
00001b49: JUMPDEST
00001b4a: DUP1
00001b4b: PUSH1 0x00
00001b4d: SUB
00001b4e: PUSH2 0x1b55
00001b51: JUMPI
00001b52: POP
00001b53: POP
00001b54: JUMP
00001b55: JUMPDEST
00001b56: PUSH32 0xffffffffffffffffffffffff1111111111111111111111111111111111111112
00001b77: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
00001b98: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001bad: AND
00001bae: ADD
00001baf: PUSH2 0x1bbc
00001bb2: JUMPI
00001bb3: PUSH2 0x04c8
00001bb6: DUP3
00001bb7: DUP3
00001bb8: PUSH2 0x2639
00001bbb: JUMP
00001bbc: JUMPDEST
00001bbd: PUSH2 0x04c8
00001bc0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001bd5: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
00001bf6: AND
00001bf7: DUP4
00001bf8: DUP4
00001bf9: PUSH2 0x26ae
00001bfc: JUMP
00001bfd: JUMPDEST
00001bfe: PUSH1 0x05
00001c00: SLOAD
00001c01: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001c16: AND
00001c17: ISZERO
00001c18: PUSH2 0x1dcf
00001c1b: JUMPI
00001c1c: PUSH1 0x05
00001c1e: SLOAD
00001c1f: PUSH1 0x40
00001c21: DUP1
00001c22: MLOAD
00001c23: PUSH1 0xa0
00001c25: DUP2
00001c26: ADD
00001c27: DUP3
00001c28: MSTORE
00001c29: CALLER
00001c2a: DUP1
00001c2b: DUP3
00001c2c: MSTORE
00001c2d: PUSH1 0x20
00001c2f: DUP1
00001c30: DUP4
00001c31: ADD
00001c32: DUP9
00001c33: SWAP1
00001c34: MSTORE
00001c35: PUSH1 0x00
00001c37: SWAP2
00001c38: DUP3
00001c39: MSTORE
00001c3a: PUSH1 0x07
00001c3c: SWAP1
00001c3d: MSTORE
00001c3e: DUP3
00001c3f: DUP2
00001c40: KECCAK256
00001c41: DUP1
00001c42: SLOAD
00001c43: SWAP2
00001c44: SWAP5
00001c45: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001c5a: AND
00001c5b: SWAP4
00001c5c: PUSH4 0xdd19fe38
00001c61: SWAP4
00001c62: SWAP3
00001c63: SWAP1
00001c64: DUP4
00001c65: ADD
00001c66: SWAP2
00001c67: SWAP1
00001c68: PUSH2 0x1c70
00001c6b: SWAP1
00001c6c: PUSH2 0x2e05
00001c6f: JUMP
00001c70: JUMPDEST
00001c71: DUP1
00001c72: PUSH1 0x1f
00001c74: ADD
00001c75: PUSH1 0x20
00001c77: DUP1
00001c78: SWAP2
00001c79: DIV
00001c7a: MUL
00001c7b: PUSH1 0x20
00001c7d: ADD
00001c7e: PUSH1 0x40
00001c80: MLOAD
00001c81: SWAP1
00001c82: DUP2
00001c83: ADD
00001c84: PUSH1 0x40
00001c86: MSTORE
00001c87: DUP1
00001c88: SWAP3
00001c89: SWAP2
00001c8a: SWAP1
00001c8b: DUP2
00001c8c: DUP2
00001c8d: MSTORE
00001c8e: PUSH1 0x20
00001c90: ADD
00001c91: DUP3
00001c92: DUP1
00001c93: SLOAD
00001c94: PUSH2 0x1c9c
00001c97: SWAP1
00001c98: PUSH2 0x2e05
00001c9b: JUMP
00001c9c: JUMPDEST
00001c9d: DUP1
00001c9e: ISZERO
00001c9f: PUSH2 0x1ce9
00001ca2: JUMPI
00001ca3: DUP1
00001ca4: PUSH1 0x1f
00001ca6: LT
00001ca7: PUSH2 0x1cbe
00001caa: JUMPI
00001cab: PUSH2 0x0100
00001cae: DUP1
00001caf: DUP4
00001cb0: SLOAD
00001cb1: DIV
00001cb2: MUL
00001cb3: DUP4
00001cb4: MSTORE
00001cb5: SWAP2
00001cb6: PUSH1 0x20
00001cb8: ADD
00001cb9: SWAP2
00001cba: PUSH2 0x1ce9
00001cbd: JUMP
00001cbe: JUMPDEST
00001cbf: DUP3
00001cc0: ADD
00001cc1: SWAP2
00001cc2: SWAP1
00001cc3: PUSH1 0x00
00001cc5: MSTORE
00001cc6: PUSH1 0x20
00001cc8: PUSH1 0x00
00001cca: KECCAK256
00001ccb: SWAP1
00001ccc: JUMPDEST
00001ccd: DUP2
00001cce: SLOAD
00001ccf: DUP2
00001cd0: MSTORE
00001cd1: SWAP1
00001cd2: PUSH1 0x01
00001cd4: ADD
00001cd5: SWAP1
00001cd6: PUSH1 0x20
00001cd8: ADD
00001cd9: DUP1
00001cda: DUP4
00001cdb: GT
00001cdc: PUSH2 0x1ccc
00001cdf: JUMPI
00001ce0: DUP3
00001ce1: SWAP1
00001ce2: SUB
00001ce3: PUSH1 0x1f
00001ce5: AND
00001ce6: DUP3
00001ce7: ADD
00001ce8: SWAP2
00001ce9: JUMPDEST
00001cea: POP
00001ceb: POP
00001cec: POP
00001ced: POP
00001cee: POP
00001cef: DUP2
00001cf0: MSTORE
00001cf1: PUSH1 0x20
00001cf3: ADD
00001cf4: DUP7
00001cf5: DUP2
00001cf6: MSTORE
00001cf7: PUSH1 0x20
00001cf9: ADD
00001cfa: DUP6
00001cfb: DUP2
00001cfc: MSTORE
00001cfd: POP
00001cfe: PUSH1 0x40
00001d00: MLOAD
00001d01: DUP3
00001d02: PUSH4 0xffffffff
00001d07: AND
00001d08: PUSH1 0xe0
00001d0a: SHL
00001d0b: DUP2
00001d0c: MSTORE
00001d0d: PUSH1 0x04
00001d0f: ADD
00001d10: PUSH2 0x1d19
00001d13: SWAP2
00001d14: SWAP1
00001d15: PUSH2 0x3369
00001d18: JUMP
00001d19: JUMPDEST
00001d1a: PUSH1 0x00
00001d1c: PUSH1 0x40
00001d1e: MLOAD
00001d1f: DUP1
00001d20: DUP4
00001d21: SUB
00001d22: DUP2
00001d23: PUSH1 0x00
00001d25: DUP8
00001d26: GAS
00001d27: CALL
00001d28: ISZERO
00001d29: DUP1
00001d2a: ISZERO
00001d2b: PUSH2 0x1d38
00001d2e: JUMPI
00001d2f: RETURNDATASIZE
00001d30: PUSH1 0x00
00001d32: DUP1
00001d33: RETURNDATACOPY
00001d34: RETURNDATASIZE
00001d35: PUSH1 0x00
00001d37: REVERT
00001d38: JUMPDEST
00001d39: POP
00001d3a: POP
00001d3b: POP
00001d3c: POP
00001d3d: PUSH1 0x40
00001d3f: MLOAD
00001d40: RETURNDATASIZE
00001d41: PUSH1 0x00
00001d43: DUP3
00001d44: RETURNDATACOPY
00001d45: PUSH1 0x1f
00001d47: RETURNDATASIZE
00001d48: SWAP1
00001d49: DUP2
00001d4a: ADD
00001d4b: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00001d6c: AND
00001d6d: DUP3
00001d6e: ADD
00001d6f: PUSH1 0x40
00001d71: MSTORE
00001d72: PUSH2 0x1d7e
00001d75: SWAP2
00001d76: SWAP1
00001d77: DUP2
00001d78: ADD
00001d79: SWAP1
00001d7a: PUSH2 0x3409
00001d7d: JUMP
00001d7e: JUMPDEST
00001d7f: DUP1
00001d80: MLOAD
00001d81: PUSH1 0x00
00001d83: DUP7
00001d84: DUP2
00001d85: MSTORE
00001d86: PUSH1 0x06
00001d88: PUSH1 0x20
00001d8a: SWAP1
00001d8b: DUP2
00001d8c: MSTORE
00001d8d: PUSH1 0x40
00001d8f: SWAP1
00001d90: SWAP2
00001d91: KECCAK256
00001d92: DUP3
00001d93: MLOAD
00001d94: SWAP4
00001d95: SWAP5
00001d96: POP
00001d97: PUSH2 0x1da6
00001d9a: SWAP4
00001d9b: SWAP1
00001d9c: SWAP3
00001d9d: SWAP2
00001d9e: SWAP1
00001d9f: SWAP2
00001da0: ADD
00001da1: SWAP1
00001da2: PUSH2 0x277d
00001da5: JUMP
00001da6: JUMPDEST
00001da7: POP
00001da8: PUSH1 0x20
00001daa: DUP1
00001dab: DUP3
00001dac: ADD
00001dad: MLOAD
00001dae: CALLER
00001daf: PUSH1 0x00
00001db1: SWAP1
00001db2: DUP2
00001db3: MSTORE
00001db4: PUSH1 0x07
00001db6: DUP4
00001db7: MSTORE
00001db8: PUSH1 0x40
00001dba: SWAP1
00001dbb: KECCAK256
00001dbc: DUP2
00001dbd: MLOAD
00001dbe: PUSH2 0x1dcc
00001dc1: SWAP4
00001dc2: SWAP2
00001dc3: SWAP3
00001dc4: SWAP1
00001dc5: SWAP2
00001dc6: ADD
00001dc7: SWAP1
00001dc8: PUSH2 0x277d
00001dcb: JUMP
00001dcc: JUMPDEST
00001dcd: POP
00001dce: POP
00001dcf: JUMPDEST
00001dd0: DUP1
00001dd1: MLOAD
00001dd2: PUSH1 0x20
00001dd4: DUP1
00001dd5: DUP4
00001dd6: ADD
00001dd7: MLOAD
00001dd8: PUSH1 0x40
00001dda: DUP1
00001ddb: MLOAD
00001ddc: CALLER
00001ddd: DUP2
00001dde: MSTORE
00001ddf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001df4: SWAP1
00001df5: SWAP5
00001df6: AND
00001df7: SWAP3
00001df8: DUP5
00001df9: ADD
00001dfa: SWAP3
00001dfb: SWAP1
00001dfc: SWAP3
00001dfd: MSTORE
00001dfe: DUP3
00001dff: DUP3
00001e00: ADD
00001e01: MSTORE
00001e02: PUSH1 0x60
00001e04: DUP3
00001e05: ADD
00001e06: DUP6
00001e07: SWAP1
00001e08: MSTORE
00001e09: MLOAD
00001e0a: PUSH32 0x9afd47907e25028cdaca89d193518c302bbb128617d5a992c5abd45815526593
00001e2b: SWAP2
00001e2c: DUP2
00001e2d: SWAP1
00001e2e: SUB
00001e2f: PUSH1 0x80
00001e31: ADD
00001e32: SWAP1
00001e33: LOG1
00001e34: POP
00001e35: POP
00001e36: POP
00001e37: POP
00001e38: JUMP
00001e39: JUMPDEST
00001e3a: PUSH1 0x40
00001e3c: DUP1
00001e3d: MLOAD
00001e3e: PUSH1 0x60
00001e40: DUP2
00001e41: DUP2
00001e42: ADD
00001e43: DUP4
00001e44: MSTORE
00001e45: PUSH1 0x00
00001e47: DUP1
00001e48: DUP4
00001e49: MSTORE
00001e4a: PUSH1 0x20
00001e4c: DUP4
00001e4d: ADD
00001e4e: MSTORE
00001e4f: SWAP2
00001e50: DUP2
00001e51: ADD
00001e52: DUP3
00001e53: SWAP1
00001e54: MSTORE
00001e55: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001e6a: DUP5
00001e6b: AND
00001e6c: PUSH1 0x00
00001e6e: SWAP1
00001e6f: DUP2
00001e70: MSTORE
00001e71: PUSH1 0x08
00001e73: PUSH1 0x20
00001e75: MSTORE
00001e76: PUSH1 0x40
00001e78: SWAP1
00001e79: KECCAK256
00001e7a: SLOAD
00001e7b: PUSH1 0xff
00001e7d: AND
00001e7e: PUSH2 0x1eb3
00001e81: JUMPI
00001e82: PUSH1 0x40
00001e84: MLOAD
00001e85: PUSH32 0x5b0a758300000000000000000000000000000000000000000000000000000000
00001ea6: DUP2
00001ea7: MSTORE
00001ea8: PUSH1 0x04
00001eaa: ADD
00001eab: PUSH1 0x40
00001ead: MLOAD
00001eae: DUP1
00001eaf: SWAP2
00001eb0: SUB
00001eb1: SWAP1
00001eb2: REVERT
00001eb3: JUMPDEST
00001eb4: PUSH1 0x40
00001eb6: DUP1
00001eb7: MLOAD
00001eb8: DUP1
00001eb9: DUP3
00001eba: ADD
00001ebb: DUP3
00001ebc: MSTORE
00001ebd: PUSH1 0x00
00001ebf: DUP6
00001ec0: DUP2
00001ec1: MSTORE
00001ec2: PUSH1 0x06
00001ec4: PUSH1 0x20
00001ec6: MSTORE
00001ec7: SWAP2
00001ec8: DUP3
00001ec9: KECCAK256
00001eca: DUP1
00001ecb: SLOAD
00001ecc: DUP3
00001ecd: SWAP2
00001ece: SWAP1
00001ecf: PUSH2 0x1ed7
00001ed2: SWAP1
00001ed3: PUSH2 0x2e05
00001ed6: JUMP
00001ed7: JUMPDEST
00001ed8: DUP1
00001ed9: PUSH1 0x1f
00001edb: ADD
00001edc: PUSH1 0x20
00001ede: DUP1
00001edf: SWAP2
00001ee0: DIV
00001ee1: MUL
00001ee2: PUSH1 0x20
00001ee4: ADD
00001ee5: PUSH1 0x40
00001ee7: MLOAD
00001ee8: SWAP1
00001ee9: DUP2
00001eea: ADD
00001eeb: PUSH1 0x40
00001eed: MSTORE
00001eee: DUP1
00001eef: SWAP3
00001ef0: SWAP2
00001ef1: SWAP1
00001ef2: DUP2
00001ef3: DUP2
00001ef4: MSTORE
00001ef5: PUSH1 0x20
00001ef7: ADD
00001ef8: DUP3
00001ef9: DUP1
00001efa: SLOAD
00001efb: PUSH2 0x1f03
00001efe: SWAP1
00001eff: PUSH2 0x2e05
00001f02: JUMP
00001f03: JUMPDEST
00001f04: DUP1
00001f05: ISZERO
00001f06: PUSH2 0x1f50
00001f09: JUMPI
00001f0a: DUP1
00001f0b: PUSH1 0x1f
00001f0d: LT
00001f0e: PUSH2 0x1f25
00001f11: JUMPI
00001f12: PUSH2 0x0100
00001f15: DUP1
00001f16: DUP4
00001f17: SLOAD
00001f18: DIV
00001f19: MUL
00001f1a: DUP4
00001f1b: MSTORE
00001f1c: SWAP2
00001f1d: PUSH1 0x20
00001f1f: ADD
00001f20: SWAP2
00001f21: PUSH2 0x1f50
00001f24: JUMP
00001f25: JUMPDEST
00001f26: DUP3
00001f27: ADD
00001f28: SWAP2
00001f29: SWAP1
00001f2a: PUSH1 0x00
00001f2c: MSTORE
00001f2d: PUSH1 0x20
00001f2f: PUSH1 0x00
00001f31: KECCAK256
00001f32: SWAP1
00001f33: JUMPDEST
00001f34: DUP2
00001f35: SLOAD
00001f36: DUP2
00001f37: MSTORE
00001f38: SWAP1
00001f39: PUSH1 0x01
00001f3b: ADD
00001f3c: SWAP1
00001f3d: PUSH1 0x20
00001f3f: ADD
00001f40: DUP1
00001f41: DUP4
00001f42: GT
00001f43: PUSH2 0x1f33
00001f46: JUMPI
00001f47: DUP3
00001f48: SWAP1
00001f49: SUB
00001f4a: PUSH1 0x1f
00001f4c: AND
00001f4d: DUP3
00001f4e: ADD
00001f4f: SWAP2
00001f50: JUMPDEST
00001f51: POP
00001f52: POP
00001f53: POP
00001f54: POP
00001f55: POP
00001f56: DUP2
00001f57: MSTORE
00001f58: PUSH1 0x20
00001f5a: ADD
00001f5b: PUSH1 0x07
00001f5d: PUSH1 0x00
00001f5f: DUP9
00001f60: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001f75: AND
00001f76: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001f8b: AND
00001f8c: DUP2
00001f8d: MSTORE
00001f8e: PUSH1 0x20
00001f90: ADD
00001f91: SWAP1
00001f92: DUP2
00001f93: MSTORE
00001f94: PUSH1 0x20
00001f96: ADD
00001f97: PUSH1 0x00
00001f99: KECCAK256
00001f9a: DUP1
00001f9b: SLOAD
00001f9c: PUSH2 0x1fa4
00001f9f: SWAP1
00001fa0: PUSH2 0x2e05
00001fa3: JUMP
00001fa4: JUMPDEST
00001fa5: DUP1
00001fa6: PUSH1 0x1f
00001fa8: ADD
00001fa9: PUSH1 0x20
00001fab: DUP1
00001fac: SWAP2
00001fad: DIV
00001fae: MUL
00001faf: PUSH1 0x20
00001fb1: ADD
00001fb2: PUSH1 0x40
00001fb4: MLOAD
00001fb5: SWAP1
00001fb6: DUP2
00001fb7: ADD
00001fb8: PUSH1 0x40
00001fba: MSTORE
00001fbb: DUP1
00001fbc: SWAP3
00001fbd: SWAP2
00001fbe: SWAP1
00001fbf: DUP2
00001fc0: DUP2
00001fc1: MSTORE
00001fc2: PUSH1 0x20
00001fc4: ADD
00001fc5: DUP3
00001fc6: DUP1
00001fc7: SLOAD
00001fc8: PUSH2 0x1fd0
00001fcb: SWAP1
00001fcc: PUSH2 0x2e05
00001fcf: JUMP
00001fd0: JUMPDEST
00001fd1: DUP1
00001fd2: ISZERO
00001fd3: PUSH2 0x201d
00001fd6: JUMPI
00001fd7: DUP1
00001fd8: PUSH1 0x1f
00001fda: LT
00001fdb: PUSH2 0x1ff2
00001fde: JUMPI
00001fdf: PUSH2 0x0100
00001fe2: DUP1
00001fe3: DUP4
00001fe4: SLOAD
00001fe5: DIV
00001fe6: MUL
00001fe7: DUP4
00001fe8: MSTORE
00001fe9: SWAP2
00001fea: PUSH1 0x20
00001fec: ADD
00001fed: SWAP2
00001fee: PUSH2 0x201d
00001ff1: JUMP
00001ff2: JUMPDEST
00001ff3: DUP3
00001ff4: ADD
00001ff5: SWAP2
00001ff6: SWAP1
00001ff7: PUSH1 0x00
00001ff9: MSTORE
00001ffa: PUSH1 0x20
00001ffc: PUSH1 0x00
00001ffe: KECCAK256
00001fff: SWAP1
00002000: JUMPDEST
00002001: DUP2
00002002: SLOAD
00002003: DUP2
00002004: MSTORE
00002005: SWAP1
00002006: PUSH1 0x01
00002008: ADD
00002009: SWAP1
0000200a: PUSH1 0x20
0000200c: ADD
0000200d: DUP1
0000200e: DUP4
0000200f: GT
00002010: PUSH2 0x2000
00002013: JUMPI
00002014: DUP3
00002015: SWAP1
00002016: SUB
00002017: PUSH1 0x1f
00002019: AND
0000201a: DUP3
0000201b: ADD
0000201c: SWAP2
0000201d: JUMPDEST
0000201e: POP
0000201f: POP
00002020: POP
00002021: POP
00002022: POP
00002023: DUP2
00002024: MSTORE
00002025: POP
00002026: SWAP1
00002027: POP
00002028: DUP1
00002029: PUSH1 0x00
0000202b: ADD
0000202c: MLOAD
0000202d: MLOAD
0000202e: PUSH1 0x00
00002030: SUB
00002031: PUSH2 0x2066
00002034: JUMPI
00002035: PUSH1 0x40
00002037: MLOAD
00002038: PUSH32 0xd3d38f6800000000000000000000000000000000000000000000000000000000
00002059: DUP2
0000205a: MSTORE
0000205b: PUSH1 0x04
0000205d: ADD
0000205e: PUSH1 0x40
00002060: MLOAD
00002061: DUP1
00002062: SWAP2
00002063: SUB
00002064: SWAP1
00002065: REVERT
00002066: JUMPDEST
00002067: PUSH1 0x05
00002069: SLOAD
0000206a: PUSH1 0x40
0000206c: DUP1
0000206d: MLOAD
0000206e: DUP1
0000206f: DUP3
00002070: ADD
00002071: DUP3
00002072: MSTORE
00002073: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002088: DUP9
00002089: DUP2
0000208a: AND
0000208b: DUP3
0000208c: MSTORE
0000208d: PUSH1 0x20
0000208f: DUP3
00002090: ADD
00002091: DUP6
00002092: SWAP1
00002093: MSTORE
00002094: SWAP2
00002095: MLOAD
00002096: PUSH32 0x7afb995300000000000000000000000000000000000000000000000000000000
000020b7: DUP2
000020b8: MSTORE
000020b9: SWAP2
000020ba: SWAP1
000020bb: SWAP3
000020bc: AND
000020bd: SWAP2
000020be: PUSH4 0x7afb9953
000020c3: SWAP2
000020c4: PUSH2 0x20d0
000020c7: SWAP2
000020c8: SWAP1
000020c9: PUSH1 0x04
000020cb: ADD
000020cc: PUSH2 0x34de
000020cf: JUMP
000020d0: JUMPDEST
000020d1: PUSH1 0x00
000020d3: PUSH1 0x40
000020d5: MLOAD
000020d6: DUP1
000020d7: DUP4
000020d8: SUB
000020d9: DUP2
000020da: PUSH1 0x00
000020dc: DUP8
000020dd: GAS
000020de: CALL
000020df: ISZERO
000020e0: DUP1
000020e1: ISZERO
000020e2: PUSH2 0x20ef
000020e5: JUMPI
000020e6: RETURNDATASIZE
000020e7: PUSH1 0x00
000020e9: DUP1
000020ea: RETURNDATACOPY
000020eb: RETURNDATASIZE
000020ec: PUSH1 0x00
000020ee: REVERT
000020ef: JUMPDEST
000020f0: POP
000020f1: POP
000020f2: POP
000020f3: POP
000020f4: PUSH1 0x40
000020f6: MLOAD
000020f7: RETURNDATASIZE
000020f8: PUSH1 0x00
000020fa: DUP3
000020fb: RETURNDATACOPY
000020fc: PUSH1 0x1f
000020fe: RETURNDATASIZE
000020ff: SWAP1
00002100: DUP2
00002101: ADD
00002102: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00002123: AND
00002124: DUP3
00002125: ADD
00002126: PUSH1 0x40
00002128: MSTORE
00002129: PUSH2 0x2135
0000212c: SWAP2
0000212d: SWAP1
0000212e: DUP2
0000212f: ADD
00002130: SWAP1
00002131: PUSH2 0x330f
00002134: JUMP
00002135: JUMPDEST
00002136: SWAP1
00002137: SWAP7
00002138: SWAP1
00002139: SWAP6
0000213a: POP
0000213b: SWAP4
0000213c: POP
0000213d: POP
0000213e: POP
0000213f: POP
00002140: JUMP
00002141: JUMPDEST
00002142: PUSH1 0x40
00002144: DUP1
00002145: MLOAD
00002146: DUP1
00002147: DUP3
00002148: ADD
00002149: DUP3
0000214a: MSTORE
0000214b: PUSH1 0x00
0000214d: DUP5
0000214e: DUP2
0000214f: MSTORE
00002150: PUSH1 0x06
00002152: PUSH1 0x20
00002154: MSTORE
00002155: SWAP2
00002156: DUP3
00002157: KECCAK256
00002158: DUP1
00002159: SLOAD
0000215a: DUP3
0000215b: SWAP2
0000215c: SWAP1
0000215d: PUSH2 0x2165
00002160: SWAP1
00002161: PUSH2 0x2e05
00002164: JUMP
00002165: JUMPDEST
00002166: DUP1
00002167: PUSH1 0x1f
00002169: ADD
0000216a: PUSH1 0x20
0000216c: DUP1
0000216d: SWAP2
0000216e: DIV
0000216f: MUL
00002170: PUSH1 0x20
00002172: ADD
00002173: PUSH1 0x40
00002175: MLOAD
00002176: SWAP1
00002177: DUP2
00002178: ADD
00002179: PUSH1 0x40
0000217b: MSTORE
0000217c: DUP1
0000217d: SWAP3
0000217e: SWAP2
0000217f: SWAP1
00002180: DUP2
00002181: DUP2
00002182: MSTORE
00002183: PUSH1 0x20
00002185: ADD
00002186: DUP3
00002187: DUP1
00002188: SLOAD
00002189: PUSH2 0x2191
0000218c: SWAP1
0000218d: PUSH2 0x2e05
00002190: JUMP
00002191: JUMPDEST
00002192: DUP1
00002193: ISZERO
00002194: PUSH2 0x21de
00002197: JUMPI
00002198: DUP1
00002199: PUSH1 0x1f
0000219b: LT
0000219c: PUSH2 0x21b3
0000219f: JUMPI
000021a0: PUSH2 0x0100
000021a3: DUP1
000021a4: DUP4
000021a5: SLOAD
000021a6: DIV
000021a7: MUL
000021a8: DUP4
000021a9: MSTORE
000021aa: SWAP2
000021ab: PUSH1 0x20
000021ad: ADD
000021ae: SWAP2
000021af: PUSH2 0x21de
000021b2: JUMP
000021b3: JUMPDEST
000021b4: DUP3
000021b5: ADD
000021b6: SWAP2
000021b7: SWAP1
000021b8: PUSH1 0x00
000021ba: MSTORE
000021bb: PUSH1 0x20
000021bd: PUSH1 0x00
000021bf: KECCAK256
000021c0: SWAP1
000021c1: JUMPDEST
000021c2: DUP2
000021c3: SLOAD
000021c4: DUP2
000021c5: MSTORE
000021c6: SWAP1
000021c7: PUSH1 0x01
000021c9: ADD
000021ca: SWAP1
000021cb: PUSH1 0x20
000021cd: ADD
000021ce: DUP1
000021cf: DUP4
000021d0: GT
000021d1: PUSH2 0x21c1
000021d4: JUMPI
000021d5: DUP3
000021d6: SWAP1
000021d7: SUB
000021d8: PUSH1 0x1f
000021da: AND
000021db: DUP3
000021dc: ADD
000021dd: SWAP2
000021de: JUMPDEST
000021df: POP
000021e0: POP
000021e1: POP
000021e2: POP
000021e3: POP
000021e4: DUP2
000021e5: MSTORE
000021e6: PUSH1 0x20
000021e8: ADD
000021e9: PUSH1 0x07
000021eb: PUSH1 0x00
000021ed: DUP8
000021ee: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002203: AND
00002204: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002219: AND
0000221a: DUP2
0000221b: MSTORE
0000221c: PUSH1 0x20
0000221e: ADD
0000221f: SWAP1
00002220: DUP2
00002221: MSTORE
00002222: PUSH1 0x20
00002224: ADD
00002225: PUSH1 0x00
00002227: KECCAK256
00002228: DUP1
00002229: SLOAD
0000222a: PUSH2 0x2232
0000222d: SWAP1
0000222e: PUSH2 0x2e05
00002231: JUMP
00002232: JUMPDEST
00002233: DUP1
00002234: PUSH1 0x1f
00002236: ADD
00002237: PUSH1 0x20
00002239: DUP1
0000223a: SWAP2
0000223b: DIV
0000223c: MUL
0000223d: PUSH1 0x20
0000223f: ADD
00002240: PUSH1 0x40
00002242: MLOAD
00002243: SWAP1
00002244: DUP2
00002245: ADD
00002246: PUSH1 0x40
00002248: MSTORE
00002249: DUP1
0000224a: SWAP3
0000224b: SWAP2
0000224c: SWAP1
0000224d: DUP2
0000224e: DUP2
0000224f: MSTORE
00002250: PUSH1 0x20
00002252: ADD
00002253: DUP3
00002254: DUP1
00002255: SLOAD
00002256: PUSH2 0x225e
00002259: SWAP1
0000225a: PUSH2 0x2e05
0000225d: JUMP
0000225e: JUMPDEST
0000225f: DUP1
00002260: ISZERO
00002261: PUSH2 0x22ab
00002264: JUMPI
00002265: DUP1
00002266: PUSH1 0x1f
00002268: LT
00002269: PUSH2 0x2280
0000226c: JUMPI
0000226d: PUSH2 0x0100
00002270: DUP1
00002271: DUP4
00002272: SLOAD
00002273: DIV
00002274: MUL
00002275: DUP4
00002276: MSTORE
00002277: SWAP2
00002278: PUSH1 0x20
0000227a: ADD
0000227b: SWAP2
0000227c: PUSH2 0x22ab
0000227f: JUMP
00002280: JUMPDEST
00002281: DUP3
00002282: ADD
00002283: SWAP2
00002284: SWAP1
00002285: PUSH1 0x00
00002287: MSTORE
00002288: PUSH1 0x20
0000228a: PUSH1 0x00
0000228c: KECCAK256
0000228d: SWAP1
0000228e: JUMPDEST
0000228f: DUP2
00002290: SLOAD
00002291: DUP2
00002292: MSTORE
00002293: SWAP1
00002294: PUSH1 0x01
00002296: ADD
00002297: SWAP1
00002298: PUSH1 0x20
0000229a: ADD
0000229b: DUP1
0000229c: DUP4
0000229d: GT
0000229e: PUSH2 0x228e
000022a1: JUMPI
000022a2: DUP3
000022a3: SWAP1
000022a4: SUB
000022a5: PUSH1 0x1f
000022a7: AND
000022a8: DUP3
000022a9: ADD
000022aa: SWAP2
000022ab: JUMPDEST
000022ac: POP
000022ad: POP
000022ae: POP
000022af: SWAP2
000022b0: SWAP1
000022b1: SWAP3
000022b2: MSTORE
000022b3: POP
000022b4: POP
000022b5: PUSH1 0x05
000022b7: SLOAD
000022b8: PUSH1 0x40
000022ba: DUP1
000022bb: MLOAD
000022bc: PUSH1 0x80
000022be: DUP2
000022bf: ADD
000022c0: DUP3
000022c1: MSTORE
000022c2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000022d7: DUP9
000022d8: DUP2
000022d9: AND
000022da: DUP3
000022db: MSTORE
000022dc: PUSH1 0x20
000022de: DUP3
000022df: ADD
000022e0: DUP9
000022e1: SWAP1
000022e2: MSTORE
000022e3: DUP2
000022e4: DUP4
000022e5: ADD
000022e6: DUP8
000022e7: SWAP1
000022e8: MSTORE
000022e9: PUSH1 0x60
000022eb: DUP3
000022ec: ADD
000022ed: DUP6
000022ee: SWAP1
000022ef: MSTORE
000022f0: SWAP2
000022f1: MLOAD
000022f2: PUSH32 0x1306ac3b00000000000000000000000000000000000000000000000000000000
00002313: DUP2
00002314: MSTORE
00002315: SWAP4
00002316: SWAP5
00002317: POP
00002318: SWAP2
00002319: AND
0000231a: SWAP2
0000231b: PUSH4 0x1306ac3b
00002320: SWAP2
00002321: PUSH2 0x232c
00002324: SWAP2
00002325: PUSH1 0x04
00002327: ADD
00002328: PUSH2 0x3519
0000232b: JUMP
0000232c: JUMPDEST
0000232d: PUSH1 0x00
0000232f: PUSH1 0x40
00002331: MLOAD
00002332: DUP1
00002333: DUP4
00002334: SUB
00002335: DUP2
00002336: PUSH1 0x00
00002338: DUP8
00002339: GAS
0000233a: CALL
0000233b: ISZERO
0000233c: DUP1
0000233d: ISZERO
0000233e: PUSH2 0x234b
00002341: JUMPI
00002342: RETURNDATASIZE
00002343: PUSH1 0x00
00002345: DUP1
00002346: RETURNDATACOPY
00002347: RETURNDATASIZE
00002348: PUSH1 0x00
0000234a: REVERT
0000234b: JUMPDEST
0000234c: POP
0000234d: POP
0000234e: POP
0000234f: POP
00002350: PUSH1 0x40
00002352: MLOAD
00002353: RETURNDATASIZE
00002354: PUSH1 0x00
00002356: DUP3
00002357: RETURNDATACOPY
00002358: PUSH1 0x1f
0000235a: RETURNDATASIZE
0000235b: SWAP1
0000235c: DUP2
0000235d: ADD
0000235e: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
0000237f: AND
00002380: DUP3
00002381: ADD
00002382: PUSH1 0x40
00002384: MSTORE
00002385: PUSH2 0x2391
00002388: SWAP2
00002389: SWAP1
0000238a: DUP2
0000238b: ADD
0000238c: SWAP1
0000238d: PUSH2 0x3409
00002390: JUMP
00002391: JUMPDEST
00002392: DUP1
00002393: MLOAD
00002394: PUSH1 0x00
00002396: DUP6
00002397: DUP2
00002398: MSTORE
00002399: PUSH1 0x06
0000239b: PUSH1 0x20
0000239d: SWAP1
0000239e: DUP2
0000239f: MSTORE
000023a0: PUSH1 0x40
000023a2: SWAP1
000023a3: SWAP2
000023a4: KECCAK256
000023a5: DUP3
000023a6: MLOAD
000023a7: SWAP4
000023a8: SWAP5
000023a9: POP
000023aa: PUSH2 0x23b9
000023ad: SWAP4
000023ae: SWAP1
000023af: SWAP3
000023b0: SWAP2
000023b1: SWAP1
000023b2: SWAP2
000023b3: ADD
000023b4: SWAP1
000023b5: PUSH2 0x277d
000023b8: JUMP
000023b9: JUMPDEST
000023ba: POP
000023bb: PUSH1 0x20
000023bd: DUP1
000023be: DUP3
000023bf: ADD
000023c0: MLOAD
000023c1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000023d6: DUP7
000023d7: AND
000023d8: PUSH1 0x00
000023da: SWAP1
000023db: DUP2
000023dc: MSTORE
000023dd: PUSH1 0x07
000023df: DUP4
000023e0: MSTORE
000023e1: PUSH1 0x40
000023e3: SWAP1
000023e4: KECCAK256
000023e5: DUP2
000023e6: MLOAD
000023e7: PUSH2 0x23f5
000023ea: SWAP4
000023eb: SWAP2
000023ec: SWAP3
000023ed: SWAP1
000023ee: SWAP2
000023ef: ADD
000023f0: SWAP1
000023f1: PUSH2 0x277d
000023f4: JUMP
000023f5: JUMPDEST
000023f6: POP
000023f7: POP
000023f8: POP
000023f9: POP
000023fa: POP
000023fb: JUMP
000023fc: JUMPDEST
000023fd: PUSH1 0x00
000023ff: PUSH1 0x40
00002401: MLOAD
00002402: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000
00002423: DUP2
00002424: MSTORE
00002425: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000243a: DUP5
0000243b: AND
0000243c: PUSH1 0x04
0000243e: DUP3
0000243f: ADD
00002440: MSTORE
00002441: DUP3
00002442: PUSH1 0x24
00002444: DUP3
00002445: ADD
00002446: MSTORE
00002447: PUSH1 0x20
00002449: PUSH1 0x00
0000244b: PUSH1 0x44
0000244d: DUP4
0000244e: PUSH1 0x00
00002450: DUP10
00002451: GAS
00002452: CALL
00002453: RETURNDATASIZE
00002454: ISZERO
00002455: PUSH1 0x1f
00002457: RETURNDATASIZE
00002458: GT
00002459: PUSH1 0x01
0000245b: PUSH1 0x00
0000245d: MLOAD
0000245e: EQ
0000245f: AND
00002460: OR
00002461: AND
00002462: SWAP2
00002463: POP
00002464: POP
00002465: DUP1
00002466: PUSH2 0x086b
00002469: JUMPI
0000246a: PUSH1 0x40
0000246c: MLOAD
0000246d: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
0000248e: DUP2
0000248f: MSTORE
00002490: PUSH1 0x20
00002492: PUSH1 0x04
00002494: DUP3
00002495: ADD
00002496: MSTORE
00002497: PUSH1 0x0e
00002499: PUSH1 0x24
0000249b: DUP3
0000249c: ADD
0000249d: MSTORE
0000249e: PUSH32 0x415050524f56455f4641494c4544000000000000000000000000000000000000
000024bf: PUSH1 0x44
000024c1: DUP3
000024c2: ADD
000024c3: MSTORE
000024c4: PUSH1 0x64
000024c6: ADD
000024c7: PUSH2 0x0590
000024ca: JUMP
000024cb: JUMPDEST
000024cc: PUSH1 0x00
000024ce: DUP3
000024cf: DUP2
000024d0: MSTORE
000024d1: PUSH1 0x03
000024d3: PUSH1 0x20
000024d5: SWAP1
000024d6: DUP2
000024d7: MSTORE
000024d8: PUSH1 0x40
000024da: DUP1
000024db: DUP4
000024dc: KECCAK256
000024dd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000024f2: DUP6
000024f3: AND
000024f4: DUP1
000024f5: DUP6
000024f6: MSTORE
000024f7: SWAP3
000024f8: MSTORE
000024f9: DUP1
000024fa: DUP4
000024fb: KECCAK256
000024fc: DUP1
000024fd: SLOAD
000024fe: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
0000251f: AND
00002520: SWAP1
00002521: SSTORE
00002522: MLOAD
00002523: SWAP1
00002524: SWAP2
00002525: DUP5
00002526: SWAP2
00002527: PUSH32 0x155aaafb6329a2098580462df33ec4b7441b19729b9601c5fc17ae1cf99a8a52
00002548: SWAP2
00002549: SWAP1
0000254a: LOG3
0000254b: POP
0000254c: POP
0000254d: JUMP
0000254e: JUMPDEST
0000254f: PUSH1 0x00
00002551: PUSH1 0x40
00002553: MLOAD
00002554: PUSH32 0x23b872dd00000000000000000000000000000000000000000000000000000000
00002575: DUP2
00002576: MSTORE
00002577: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000258c: DUP6
0000258d: AND
0000258e: PUSH1 0x04
00002590: DUP3
00002591: ADD
00002592: MSTORE
00002593: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000025a8: DUP5
000025a9: AND
000025aa: PUSH1 0x24
000025ac: DUP3
000025ad: ADD
000025ae: MSTORE
000025af: DUP3
000025b0: PUSH1 0x44
000025b2: DUP3
000025b3: ADD
000025b4: MSTORE
000025b5: PUSH1 0x20
000025b7: PUSH1 0x00
000025b9: PUSH1 0x64
000025bb: DUP4
000025bc: PUSH1 0x00
000025be: DUP11
000025bf: GAS
000025c0: CALL
000025c1: RETURNDATASIZE
000025c2: ISZERO
000025c3: PUSH1 0x1f
000025c5: RETURNDATASIZE
000025c6: GT
000025c7: PUSH1 0x01
000025c9: PUSH1 0x00
000025cb: MLOAD
000025cc: EQ
000025cd: AND
000025ce: OR
000025cf: AND
000025d0: SWAP2
000025d1: POP
000025d2: POP
000025d3: DUP1
000025d4: PUSH2 0x23f5
000025d7: JUMPI
000025d8: PUSH1 0x40
000025da: MLOAD
000025db: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000025fc: DUP2
000025fd: MSTORE
000025fe: PUSH1 0x20
00002600: PUSH1 0x04
00002602: DUP3
00002603: ADD
00002604: MSTORE
00002605: PUSH1 0x14
00002607: PUSH1 0x24
00002609: DUP3
0000260a: ADD
0000260b: MSTORE
0000260c: PUSH32 0x5452414e534645525f46524f4d5f4641494c4544000000000000000000000000
0000262d: PUSH1 0x44
0000262f: DUP3
00002630: ADD
00002631: MSTORE
00002632: PUSH1 0x64
00002634: ADD
00002635: PUSH2 0x0590
00002638: JUMP
00002639: JUMPDEST
0000263a: PUSH1 0x00
0000263c: DUP1
0000263d: PUSH1 0x00
0000263f: DUP1
00002640: PUSH1 0x00
00002642: DUP6
00002643: DUP8
00002644: GAS
00002645: CALL
00002646: SWAP1
00002647: POP
00002648: DUP1
00002649: PUSH2 0x1865
0000264c: JUMPI
0000264d: PUSH1 0x40
0000264f: MLOAD
00002650: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00002671: DUP2
00002672: MSTORE
00002673: PUSH1 0x20
00002675: PUSH1 0x04
00002677: DUP3
00002678: ADD
00002679: MSTORE
0000267a: PUSH1 0x13
0000267c: PUSH1 0x24
0000267e: DUP3
0000267f: ADD
00002680: MSTORE
00002681: PUSH32 0x4554485f5452414e534645525f4641494c454400000000000000000000000000
000026a2: PUSH1 0x44
000026a4: DUP3
000026a5: ADD
000026a6: MSTORE
000026a7: PUSH1 0x64
000026a9: ADD
000026aa: PUSH2 0x0590
000026ad: JUMP
000026ae: JUMPDEST
000026af: PUSH1 0x00
000026b1: PUSH1 0x40
000026b3: MLOAD
000026b4: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000
000026d5: DUP2
000026d6: MSTORE
000026d7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000026ec: DUP5
000026ed: AND
000026ee: PUSH1 0x04
000026f0: DUP3
000026f1: ADD
000026f2: MSTORE
000026f3: DUP3
000026f4: PUSH1 0x24
000026f6: DUP3
000026f7: ADD
000026f8: MSTORE
000026f9: PUSH1 0x20
000026fb: PUSH1 0x00
000026fd: PUSH1 0x44
000026ff: DUP4
00002700: PUSH1 0x00
00002702: DUP10
00002703: GAS
00002704: CALL
00002705: RETURNDATASIZE
00002706: ISZERO
00002707: PUSH1 0x1f
00002709: RETURNDATASIZE
0000270a: GT
0000270b: PUSH1 0x01
0000270d: PUSH1 0x00
0000270f: MLOAD
00002710: EQ
00002711: AND
00002712: OR
00002713: AND
00002714: SWAP2
00002715: POP
00002716: POP
00002717: DUP1
00002718: PUSH2 0x086b
0000271b: JUMPI
0000271c: PUSH1 0x40
0000271e: MLOAD
0000271f: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00002740: DUP2
00002741: MSTORE
00002742: PUSH1 0x20
00002744: PUSH1 0x04
00002746: DUP3
00002747: ADD
00002748: MSTORE
00002749: PUSH1 0x0f
0000274b: PUSH1 0x24
0000274d: DUP3
0000274e: ADD
0000274f: MSTORE
00002750: PUSH32 0x5452414e534645525f4641494c45440000000000000000000000000000000000
00002771: PUSH1 0x44
00002773: DUP3
00002774: ADD
00002775: MSTORE
00002776: PUSH1 0x64
00002778: ADD
00002779: PUSH2 0x0590
0000277c: JUMP
0000277d: JUMPDEST
0000277e: DUP3
0000277f: DUP1
00002780: SLOAD
00002781: PUSH2 0x2789
00002784: SWAP1
00002785: PUSH2 0x2e05
00002788: JUMP
00002789: JUMPDEST
0000278a: SWAP1
0000278b: PUSH1 0x00
0000278d: MSTORE
0000278e: PUSH1 0x20
00002790: PUSH1 0x00
00002792: KECCAK256
00002793: SWAP1
00002794: PUSH1 0x1f
00002796: ADD
00002797: PUSH1 0x20
00002799: SWAP1
0000279a: DIV
0000279b: DUP2
0000279c: ADD
0000279d: SWAP3
0000279e: DUP3
0000279f: PUSH2 0x27ab
000027a2: JUMPI
000027a3: PUSH1 0x00
000027a5: DUP6
000027a6: SSTORE
000027a7: PUSH2 0x27f1
000027aa: JUMP
000027ab: JUMPDEST
000027ac: DUP3
000027ad: PUSH1 0x1f
000027af: LT
000027b0: PUSH2 0x27c4
000027b3: JUMPI
000027b4: DUP1
000027b5: MLOAD
000027b6: PUSH1 0xff
000027b8: NOT
000027b9: AND
000027ba: DUP4
000027bb: DUP1
000027bc: ADD
000027bd: OR
000027be: DUP6
000027bf: SSTORE
000027c0: PUSH2 0x27f1
000027c3: JUMP
000027c4: JUMPDEST
000027c5: DUP3
000027c6: DUP1
000027c7: ADD
000027c8: PUSH1 0x01
000027ca: ADD
000027cb: DUP6
000027cc: SSTORE
000027cd: DUP3
000027ce: ISZERO
000027cf: PUSH2 0x27f1
000027d2: JUMPI
000027d3: SWAP2
000027d4: DUP3
000027d5: ADD
000027d6: JUMPDEST
000027d7: DUP3
000027d8: DUP2
000027d9: GT
000027da: ISZERO
000027db: PUSH2 0x27f1
000027de: JUMPI
000027df: DUP3
000027e0: MLOAD
000027e1: DUP3
000027e2: SSTORE
000027e3: SWAP2
000027e4: PUSH1 0x20
000027e6: ADD
000027e7: SWAP2
000027e8: SWAP1
000027e9: PUSH1 0x01
000027eb: ADD
000027ec: SWAP1
000027ed: PUSH2 0x27d6
000027f0: JUMP
000027f1: JUMPDEST
000027f2: POP
000027f3: PUSH2 0x27fd
000027f6: SWAP3
000027f7: SWAP2
000027f8: POP
000027f9: PUSH2 0x2801
000027fc: JUMP
000027fd: JUMPDEST
000027fe: POP
000027ff: SWAP1
00002800: JUMP
00002801: JUMPDEST
00002802: JUMPDEST
00002803: DUP1
00002804: DUP3
00002805: GT
00002806: ISZERO
00002807: PUSH2 0x27fd
0000280a: JUMPI
0000280b: PUSH1 0x00
0000280d: DUP2
0000280e: SSTORE
0000280f: PUSH1 0x01
00002811: ADD
00002812: PUSH2 0x2802
00002815: JUMP
00002816: JUMPDEST
00002817: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000282c: DUP2
0000282d: AND
0000282e: DUP2
0000282f: EQ
00002830: PUSH2 0x1489
00002833: JUMPI
00002834: PUSH1 0x00
00002836: DUP1
00002837: REVERT
00002838: JUMPDEST
00002839: DUP1
0000283a: CALLDATALOAD
0000283b: PUSH2 0x2843
0000283e: DUP2
0000283f: PUSH2 0x2816
00002842: JUMP
00002843: JUMPDEST
00002844: SWAP2
00002845: SWAP1
00002846: POP
00002847: JUMP
00002848: JUMPDEST
00002849: PUSH1 0x00
0000284b: DUP1
0000284c: PUSH1 0x40
0000284e: DUP4
0000284f: DUP6
00002850: SUB
00002851: SLT
00002852: ISZERO
00002853: PUSH2 0x285b
00002856: JUMPI
00002857: PUSH1 0x00
00002859: DUP1
0000285a: REVERT
0000285b: JUMPDEST
0000285c: DUP3
0000285d: CALLDATALOAD
0000285e: SWAP2
0000285f: POP
00002860: PUSH1 0x20
00002862: DUP4
00002863: ADD
00002864: CALLDATALOAD
00002865: PUSH2 0x286d
00002868: DUP2
00002869: PUSH2 0x2816
0000286c: JUMP
0000286d: JUMPDEST
0000286e: DUP1
0000286f: SWAP2
00002870: POP
00002871: POP
00002872: SWAP3
00002873: POP
00002874: SWAP3
00002875: SWAP1
00002876: POP
00002877: JUMP
00002878: JUMPDEST
00002879: PUSH1 0x00
0000287b: DUP1
0000287c: DUP4
0000287d: PUSH1 0x1f
0000287f: DUP5
00002880: ADD
00002881: SLT
00002882: PUSH2 0x288a
00002885: JUMPI
00002886: PUSH1 0x00
00002888: DUP1
00002889: REVERT
0000288a: JUMPDEST
0000288b: POP
0000288c: DUP2
0000288d: CALLDATALOAD
0000288e: PUSH8 0xffffffffffffffff
00002897: DUP2
00002898: GT
00002899: ISZERO
0000289a: PUSH2 0x28a2
0000289d: JUMPI
0000289e: PUSH1 0x00
000028a0: DUP1
000028a1: REVERT
000028a2: JUMPDEST
000028a3: PUSH1 0x20
000028a5: DUP4
000028a6: ADD
000028a7: SWAP2
000028a8: POP
000028a9: DUP4
000028aa: PUSH1 0x20
000028ac: DUP3
000028ad: DUP6
000028ae: ADD
000028af: ADD
000028b0: GT
000028b1: ISZERO
000028b2: PUSH2 0x13e2
000028b5: JUMPI
000028b6: PUSH1 0x00
000028b8: DUP1
000028b9: REVERT
000028ba: JUMPDEST
000028bb: PUSH1 0x00
000028bd: DUP1
000028be: PUSH1 0x00
000028c0: DUP1
000028c1: PUSH1 0x00
000028c3: DUP1
000028c4: PUSH1 0x00
000028c6: DUP1
000028c7: PUSH1 0xc0
000028c9: DUP10
000028ca: DUP12
000028cb: SUB
000028cc: SLT
000028cd: ISZERO
000028ce: PUSH2 0x28d6
000028d1: JUMPI
000028d2: PUSH1 0x00
000028d4: DUP1
000028d5: REVERT
000028d6: JUMPDEST
000028d7: DUP9
000028d8: CALLDATALOAD
000028d9: PUSH2 0x28e1
000028dc: DUP2
000028dd: PUSH2 0x2816
000028e0: JUMP
000028e1: JUMPDEST
000028e2: SWAP8
000028e3: POP
000028e4: PUSH1 0x20
000028e6: DUP10
000028e7: ADD
000028e8: CALLDATALOAD
000028e9: SWAP7
000028ea: POP
000028eb: PUSH1 0x40
000028ed: DUP10
000028ee: ADD
000028ef: CALLDATALOAD
000028f0: SWAP6
000028f1: POP
000028f2: PUSH1 0x60
000028f4: DUP10
000028f5: ADD
000028f6: CALLDATALOAD
000028f7: PUSH2 0x28ff
000028fa: DUP2
000028fb: PUSH2 0x2816
000028fe: JUMP
000028ff: JUMPDEST
00002900: SWAP5
00002901: POP
00002902: PUSH1 0x80
00002904: DUP10
00002905: ADD
00002906: CALLDATALOAD
00002907: PUSH8 0xffffffffffffffff
00002910: DUP1
00002911: DUP3
00002912: GT
00002913: ISZERO
00002914: PUSH2 0x291c
00002917: JUMPI
00002918: PUSH1 0x00
0000291a: DUP1
0000291b: REVERT
0000291c: JUMPDEST
0000291d: PUSH2 0x2928
00002920: DUP13
00002921: DUP4
00002922: DUP14
00002923: ADD
00002924: PUSH2 0x2878
00002927: JUMP
00002928: JUMPDEST
00002929: SWAP1
0000292a: SWAP7
0000292b: POP
0000292c: SWAP5
0000292d: POP
0000292e: PUSH1 0xa0
00002930: DUP12
00002931: ADD
00002932: CALLDATALOAD
00002933: SWAP2
00002934: POP
00002935: DUP1
00002936: DUP3
00002937: GT
00002938: ISZERO
00002939: PUSH2 0x2941
0000293c: JUMPI
0000293d: PUSH1 0x00
0000293f: DUP1
00002940: REVERT
00002941: JUMPDEST
00002942: POP
00002943: PUSH2 0x294e
00002946: DUP12
00002947: DUP3
00002948: DUP13
00002949: ADD
0000294a: PUSH2 0x2878
0000294d: JUMP
0000294e: JUMPDEST
0000294f: SWAP10
00002950: SWAP13
00002951: SWAP9
00002952: SWAP12
00002953: POP
00002954: SWAP7
00002955: SWAP10
00002956: POP
00002957: SWAP5
00002958: SWAP8
00002959: SWAP4
0000295a: SWAP7
0000295b: SWAP3
0000295c: SWAP6
0000295d: SWAP5
0000295e: POP
0000295f: POP
00002960: POP
00002961: JUMP
00002962: JUMPDEST
00002963: PUSH1 0x00
00002965: PUSH1 0x20
00002967: DUP3
00002968: DUP5
00002969: SUB
0000296a: SLT
0000296b: ISZERO
0000296c: PUSH2 0x2974
0000296f: JUMPI
00002970: PUSH1 0x00
00002972: DUP1
00002973: REVERT
00002974: JUMPDEST
00002975: DUP2
00002976: CALLDATALOAD
00002977: PUSH2 0x09ae
0000297a: DUP2
0000297b: PUSH2 0x2816
0000297e: JUMP
0000297f: JUMPDEST
00002980: PUSH1 0x00
00002982: JUMPDEST
00002983: DUP4
00002984: DUP2
00002985: LT
00002986: ISZERO
00002987: PUSH2 0x299a
0000298a: JUMPI
0000298b: DUP2
0000298c: DUP2
0000298d: ADD
0000298e: MLOAD
0000298f: DUP4
00002990: DUP3
00002991: ADD
00002992: MSTORE
00002993: PUSH1 0x20
00002995: ADD
00002996: PUSH2 0x2982
00002999: JUMP
0000299a: JUMPDEST
0000299b: DUP4
0000299c: DUP2
0000299d: GT
0000299e: ISZERO
0000299f: PUSH2 0x086b
000029a2: JUMPI
000029a3: POP
000029a4: POP
000029a5: PUSH1 0x00
000029a7: SWAP2
000029a8: ADD
000029a9: MSTORE
000029aa: JUMP
000029ab: JUMPDEST
000029ac: PUSH1 0x00
000029ae: DUP2
000029af: MLOAD
000029b0: DUP1
000029b1: DUP5
000029b2: MSTORE
000029b3: PUSH2 0x29c3
000029b6: DUP2
000029b7: PUSH1 0x20
000029b9: DUP7
000029ba: ADD
000029bb: PUSH1 0x20
000029bd: DUP7
000029be: ADD
000029bf: PUSH2 0x297f
000029c2: JUMP
000029c3: JUMPDEST
000029c4: PUSH1 0x1f
000029c6: ADD
000029c7: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
000029e8: AND
000029e9: SWAP3
000029ea: SWAP1
000029eb: SWAP3
000029ec: ADD
000029ed: PUSH1 0x20
000029ef: ADD
000029f0: SWAP3
000029f1: SWAP2
000029f2: POP
000029f3: POP
000029f4: JUMP
000029f5: JUMPDEST
000029f6: PUSH1 0x20
000029f8: DUP2
000029f9: MSTORE
000029fa: PUSH1 0x00
000029fc: PUSH2 0x09ae
000029ff: PUSH1 0x20
00002a01: DUP4
00002a02: ADD
00002a03: DUP5
00002a04: PUSH2 0x29ab
00002a07: JUMP
00002a08: JUMPDEST
00002a09: PUSH1 0x00
00002a0b: DUP1
00002a0c: PUSH1 0x00
00002a0e: PUSH1 0x60
00002a10: DUP5
00002a11: DUP7
00002a12: SUB
00002a13: SLT
00002a14: ISZERO
00002a15: PUSH2 0x2a1d
00002a18: JUMPI
00002a19: PUSH1 0x00
00002a1b: DUP1
00002a1c: REVERT
00002a1d: JUMPDEST
00002a1e: DUP4
00002a1f: CALLDATALOAD
00002a20: PUSH2 0x2a28
00002a23: DUP2
00002a24: PUSH2 0x2816
00002a27: JUMP
00002a28: JUMPDEST
00002a29: SWAP3
00002a2a: POP
00002a2b: PUSH1 0x20
00002a2d: DUP5
00002a2e: ADD
00002a2f: CALLDATALOAD
00002a30: PUSH2 0x2a38
00002a33: DUP2
00002a34: PUSH2 0x2816
00002a37: JUMP
00002a38: JUMPDEST
00002a39: SWAP3
00002a3a: SWAP6
00002a3b: SWAP3
00002a3c: SWAP5
00002a3d: POP
00002a3e: POP
00002a3f: POP
00002a40: PUSH1 0x40
00002a42: SWAP2
00002a43: SWAP1
00002a44: SWAP2
00002a45: ADD
00002a46: CALLDATALOAD
00002a47: SWAP1
00002a48: JUMP
00002a49: JUMPDEST
00002a4a: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00002a6b: PUSH1 0x00
00002a6d: MSTORE
00002a6e: PUSH1 0x41
00002a70: PUSH1 0x04
00002a72: MSTORE
00002a73: PUSH1 0x24
00002a75: PUSH1 0x00
00002a77: REVERT
00002a78: JUMPDEST
00002a79: PUSH1 0x40
00002a7b: MLOAD
00002a7c: PUSH1 0x1f
00002a7e: DUP3
00002a7f: ADD
00002a80: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00002aa1: AND
00002aa2: DUP2
00002aa3: ADD
00002aa4: PUSH8 0xffffffffffffffff
00002aad: DUP2
00002aae: GT
00002aaf: DUP3
00002ab0: DUP3
00002ab1: LT
00002ab2: OR
00002ab3: ISZERO
00002ab4: PUSH2 0x2abf
00002ab7: JUMPI
00002ab8: PUSH2 0x2abf
00002abb: PUSH2 0x2a49
00002abe: JUMP
00002abf: JUMPDEST
00002ac0: PUSH1 0x40
00002ac2: MSTORE
00002ac3: SWAP2
00002ac4: SWAP1
00002ac5: POP
00002ac6: JUMP
00002ac7: JUMPDEST
00002ac8: PUSH1 0x00
00002aca: PUSH8 0xffffffffffffffff
00002ad3: DUP3
00002ad4: GT
00002ad5: ISZERO
00002ad6: PUSH2 0x2ae1
00002ad9: JUMPI
00002ada: PUSH2 0x2ae1
00002add: PUSH2 0x2a49
00002ae0: JUMP
00002ae1: JUMPDEST
00002ae2: POP
00002ae3: PUSH1 0x1f
00002ae5: ADD
00002ae6: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00002b07: AND
00002b08: PUSH1 0x20
00002b0a: ADD
00002b0b: SWAP1
00002b0c: JUMP
00002b0d: JUMPDEST
00002b0e: PUSH1 0x00
00002b10: DUP1
00002b11: PUSH1 0x40
00002b13: DUP4
00002b14: DUP6
00002b15: SUB
00002b16: SLT
00002b17: ISZERO
00002b18: PUSH2 0x2b20
00002b1b: JUMPI
00002b1c: PUSH1 0x00
00002b1e: DUP1
00002b1f: REVERT
00002b20: JUMPDEST
00002b21: DUP3
00002b22: CALLDATALOAD
00002b23: PUSH4 0xffffffff
00002b28: DUP2
00002b29: AND
00002b2a: DUP2
00002b2b: EQ
00002b2c: PUSH2 0x2b34
00002b2f: JUMPI
00002b30: PUSH1 0x00
00002b32: DUP1
00002b33: REVERT
00002b34: JUMPDEST
00002b35: SWAP2
00002b36: POP
00002b37: PUSH1 0x20
00002b39: DUP4
00002b3a: ADD
00002b3b: CALLDATALOAD
00002b3c: PUSH8 0xffffffffffffffff
00002b45: DUP2
00002b46: GT
00002b47: ISZERO
00002b48: PUSH2 0x2b50
00002b4b: JUMPI
00002b4c: PUSH1 0x00
00002b4e: DUP1
00002b4f: REVERT
00002b50: JUMPDEST
00002b51: DUP4
00002b52: ADD
00002b53: PUSH1 0x1f
00002b55: DUP2
00002b56: ADD
00002b57: DUP6
00002b58: SGT
00002b59: PUSH2 0x2b61
00002b5c: JUMPI
00002b5d: PUSH1 0x00
00002b5f: DUP1
00002b60: REVERT
00002b61: JUMPDEST
00002b62: DUP1
00002b63: CALLDATALOAD
00002b64: PUSH2 0x2b74
00002b67: PUSH2 0x2b6f
00002b6a: DUP3
00002b6b: PUSH2 0x2ac7
00002b6e: JUMP
00002b6f: JUMPDEST
00002b70: PUSH2 0x2a78
00002b73: JUMP
00002b74: JUMPDEST
00002b75: DUP2
00002b76: DUP2
00002b77: MSTORE
00002b78: DUP7
00002b79: PUSH1 0x20
00002b7b: DUP4
00002b7c: DUP6
00002b7d: ADD
00002b7e: ADD
00002b7f: GT
00002b80: ISZERO
00002b81: PUSH2 0x2b89
00002b84: JUMPI
00002b85: PUSH1 0x00
00002b87: DUP1
00002b88: REVERT
00002b89: JUMPDEST
00002b8a: DUP2
00002b8b: PUSH1 0x20
00002b8d: DUP5
00002b8e: ADD
00002b8f: PUSH1 0x20
00002b91: DUP4
00002b92: ADD
00002b93: CALLDATACOPY
00002b94: PUSH1 0x00
00002b96: PUSH1 0x20
00002b98: DUP4
00002b99: DUP4
00002b9a: ADD
00002b9b: ADD
00002b9c: MSTORE
00002b9d: DUP1
00002b9e: SWAP4
00002b9f: POP
00002ba0: POP
00002ba1: POP
00002ba2: POP
00002ba3: SWAP3
00002ba4: POP
00002ba5: SWAP3
00002ba6: SWAP1
00002ba7: POP
00002ba8: JUMP
00002ba9: JUMPDEST
00002baa: PUSH1 0x00
00002bac: DUP1
00002bad: PUSH1 0x40
00002baf: DUP4
00002bb0: DUP6
00002bb1: SUB
00002bb2: SLT
00002bb3: ISZERO
00002bb4: PUSH2 0x2bbc
00002bb7: JUMPI
00002bb8: PUSH1 0x00
00002bba: DUP1
00002bbb: REVERT
00002bbc: JUMPDEST
00002bbd: DUP3
00002bbe: CALLDATALOAD
00002bbf: PUSH2 0x2bc7
00002bc2: DUP2
00002bc3: PUSH2 0x2816
00002bc6: JUMP
00002bc7: JUMPDEST
00002bc8: SWAP5
00002bc9: PUSH1 0x20
00002bcb: SWAP4
00002bcc: SWAP1
00002bcd: SWAP4
00002bce: ADD
00002bcf: CALLDATALOAD
00002bd0: SWAP4
00002bd1: POP
00002bd2: POP
00002bd3: POP
00002bd4: JUMP
00002bd5: JUMPDEST
00002bd6: DUP1
00002bd7: CALLDATALOAD
00002bd8: DUP1
00002bd9: ISZERO
00002bda: ISZERO
00002bdb: DUP2
00002bdc: EQ
00002bdd: PUSH2 0x2843
00002be0: JUMPI
00002be1: PUSH1 0x00
00002be3: DUP1
00002be4: REVERT
00002be5: JUMPDEST
00002be6: PUSH1 0x00
00002be8: DUP1
00002be9: PUSH1 0x40
00002beb: DUP4
00002bec: DUP6
00002bed: SUB
00002bee: SLT
00002bef: ISZERO
00002bf0: PUSH2 0x2bf8
00002bf3: JUMPI
00002bf4: PUSH1 0x00
00002bf6: DUP1
00002bf7: REVERT
00002bf8: JUMPDEST
00002bf9: DUP3
00002bfa: CALLDATALOAD
00002bfb: PUSH2 0x2c03
00002bfe: DUP2
00002bff: PUSH2 0x2816
00002c02: JUMP
00002c03: JUMPDEST
00002c04: SWAP2
00002c05: POP
00002c06: PUSH2 0x2c11
00002c09: PUSH1 0x20
00002c0b: DUP5
00002c0c: ADD
00002c0d: PUSH2 0x2bd5
00002c10: JUMP
00002c11: JUMPDEST
00002c12: SWAP1
00002c13: POP
00002c14: SWAP3
00002c15: POP
00002c16: SWAP3
00002c17: SWAP1
00002c18: POP
00002c19: JUMP
00002c1a: JUMPDEST
00002c1b: DUP1
00002c1c: CALLDATALOAD
00002c1d: PUSH1 0xff
00002c1f: DUP2
00002c20: AND
00002c21: DUP2
00002c22: EQ
00002c23: PUSH2 0x2843
00002c26: JUMPI
00002c27: PUSH1 0x00
00002c29: DUP1
00002c2a: REVERT
00002c2b: JUMPDEST
00002c2c: PUSH1 0x00
00002c2e: DUP1
00002c2f: PUSH1 0x00
00002c31: DUP1
00002c32: PUSH1 0x00
00002c34: DUP1
00002c35: PUSH1 0x00
00002c37: DUP1
00002c38: PUSH1 0x00
00002c3a: DUP1
00002c3b: PUSH1 0x00
00002c3d: DUP1
00002c3e: PUSH2 0x0140
00002c41: DUP14
00002c42: DUP16
00002c43: SUB
00002c44: SLT
00002c45: ISZERO
00002c46: PUSH2 0x2c4e
00002c49: JUMPI
00002c4a: PUSH1 0x00
00002c4c: DUP1
00002c4d: REVERT
00002c4e: JUMPDEST
00002c4f: PUSH2 0x2c57
00002c52: DUP14
00002c53: PUSH2 0x2838
00002c56: JUMP
00002c57: JUMPDEST
00002c58: SWAP12
00002c59: POP
00002c5a: PUSH1 0x20
00002c5c: DUP14
00002c5d: ADD
00002c5e: CALLDATALOAD
00002c5f: SWAP11
00002c60: POP
00002c61: PUSH1 0x40
00002c63: DUP14
00002c64: ADD
00002c65: CALLDATALOAD
00002c66: SWAP10
00002c67: POP
00002c68: PUSH2 0x2c73
00002c6b: PUSH1 0x60
00002c6d: DUP15
00002c6e: ADD
00002c6f: PUSH2 0x2838
00002c72: JUMP
00002c73: JUMPDEST
00002c74: SWAP9
00002c75: POP
00002c76: PUSH8 0xffffffffffffffff
00002c7f: PUSH1 0x80
00002c81: DUP15
00002c82: ADD
00002c83: CALLDATALOAD
00002c84: GT
00002c85: ISZERO
00002c86: PUSH2 0x2c8e
00002c89: JUMPI
00002c8a: PUSH1 0x00
00002c8c: DUP1
00002c8d: REVERT
00002c8e: JUMPDEST
00002c8f: PUSH2 0x2c9e
00002c92: DUP15
00002c93: PUSH1 0x80
00002c95: DUP16
00002c96: ADD
00002c97: CALLDATALOAD
00002c98: DUP16
00002c99: ADD
00002c9a: PUSH2 0x2878
00002c9d: JUMP
00002c9e: JUMPDEST
00002c9f: SWAP1
00002ca0: SWAP9
00002ca1: POP
00002ca2: SWAP7
00002ca3: POP
00002ca4: PUSH8 0xffffffffffffffff
00002cad: PUSH1 0xa0
00002caf: DUP15
00002cb0: ADD
00002cb1: CALLDATALOAD
00002cb2: GT
00002cb3: ISZERO
00002cb4: PUSH2 0x2cbc
00002cb7: JUMPI
00002cb8: PUSH1 0x00
00002cba: DUP1
00002cbb: REVERT
00002cbc: JUMPDEST
00002cbd: PUSH2 0x2ccc
00002cc0: DUP15
00002cc1: PUSH1 0xa0
00002cc3: DUP16
00002cc4: ADD
00002cc5: CALLDATALOAD
00002cc6: DUP16
00002cc7: ADD
00002cc8: PUSH2 0x2878
00002ccb: JUMP
00002ccc: JUMPDEST
00002ccd: SWAP1
00002cce: SWAP7
00002ccf: POP
00002cd0: SWAP5
00002cd1: POP
00002cd2: PUSH1 0xc0
00002cd4: DUP14
00002cd5: ADD
00002cd6: CALLDATALOAD
00002cd7: SWAP4
00002cd8: POP
00002cd9: PUSH2 0x2ce4
00002cdc: PUSH1 0xe0
00002cde: DUP15
00002cdf: ADD
00002ce0: PUSH2 0x2c1a
00002ce3: JUMP
00002ce4: JUMPDEST
00002ce5: SWAP3
00002ce6: POP
00002ce7: PUSH2 0x0100
00002cea: DUP14
00002ceb: ADD
00002cec: CALLDATALOAD
00002ced: SWAP2
00002cee: POP
00002cef: PUSH2 0x0120
00002cf2: DUP14
00002cf3: ADD
00002cf4: CALLDATALOAD
00002cf5: SWAP1
00002cf6: POP
00002cf7: SWAP3
00002cf8: SWAP6
00002cf9: SWAP9
00002cfa: SWAP12
00002cfb: POP
00002cfc: SWAP3
00002cfd: SWAP6
00002cfe: SWAP9
00002cff: SWAP12
00002d00: POP
00002d01: SWAP3
00002d02: SWAP6
00002d03: SWAP9
00002d04: SWAP12
00002d05: JUMP
00002d06: JUMPDEST
00002d07: PUSH1 0x00
00002d09: DUP1
00002d0a: DUP4
00002d0b: PUSH1 0x1f
00002d0d: DUP5
00002d0e: ADD
00002d0f: SLT
00002d10: PUSH2 0x2d18
00002d13: JUMPI
00002d14: PUSH1 0x00
00002d16: DUP1
00002d17: REVERT
00002d18: JUMPDEST
00002d19: POP
00002d1a: DUP2
00002d1b: CALLDATALOAD
00002d1c: PUSH8 0xffffffffffffffff
00002d25: DUP2
00002d26: GT
00002d27: ISZERO
00002d28: PUSH2 0x2d30
00002d2b: JUMPI
00002d2c: PUSH1 0x00
00002d2e: DUP1
00002d2f: REVERT
00002d30: JUMPDEST
00002d31: PUSH1 0x20
00002d33: DUP4
00002d34: ADD
00002d35: SWAP2
00002d36: POP
00002d37: DUP4
00002d38: PUSH1 0x20
00002d3a: DUP3
00002d3b: PUSH1 0x05
00002d3d: SHL
00002d3e: DUP6
00002d3f: ADD
00002d40: ADD
00002d41: GT
00002d42: ISZERO
00002d43: PUSH2 0x13e2
00002d46: JUMPI
00002d47: PUSH1 0x00
00002d49: DUP1
00002d4a: REVERT
00002d4b: JUMPDEST
00002d4c: PUSH1 0x00
00002d4e: DUP1
00002d4f: PUSH1 0x00
00002d51: DUP1
00002d52: PUSH1 0x40
00002d54: DUP6
00002d55: DUP8
00002d56: SUB
00002d57: SLT
00002d58: ISZERO
00002d59: PUSH2 0x2d61
00002d5c: JUMPI
00002d5d: PUSH1 0x00
00002d5f: DUP1
00002d60: REVERT
00002d61: JUMPDEST
00002d62: DUP5
00002d63: CALLDATALOAD
00002d64: PUSH8 0xffffffffffffffff
00002d6d: DUP1
00002d6e: DUP3
00002d6f: GT
00002d70: ISZERO
00002d71: PUSH2 0x2d79
00002d74: JUMPI
00002d75: PUSH1 0x00
00002d77: DUP1
00002d78: REVERT
00002d79: JUMPDEST
00002d7a: PUSH2 0x2d85
00002d7d: DUP9
00002d7e: DUP4
00002d7f: DUP10
00002d80: ADD
00002d81: PUSH2 0x2d06
00002d84: JUMP
00002d85: JUMPDEST
00002d86: SWAP1
00002d87: SWAP7
00002d88: POP
00002d89: SWAP5
00002d8a: POP
00002d8b: PUSH1 0x20
00002d8d: DUP8
00002d8e: ADD
00002d8f: CALLDATALOAD
00002d90: SWAP2
00002d91: POP
00002d92: DUP1
00002d93: DUP3
00002d94: GT
00002d95: ISZERO
00002d96: PUSH2 0x2d9e
00002d99: JUMPI
00002d9a: PUSH1 0x00
00002d9c: DUP1
00002d9d: REVERT
00002d9e: JUMPDEST
00002d9f: POP
00002da0: PUSH2 0x2dab
00002da3: DUP8
00002da4: DUP3
00002da5: DUP9
00002da6: ADD
00002da7: PUSH2 0x2d06
00002daa: JUMP
00002dab: JUMPDEST
00002dac: SWAP6
00002dad: SWAP9
00002dae: SWAP5
00002daf: SWAP8
00002db0: POP
00002db1: SWAP6
00002db2: POP
00002db3: POP
00002db4: POP
00002db5: POP
00002db6: JUMP
00002db7: JUMPDEST
00002db8: PUSH1 0x00
00002dba: PUSH1 0x20
00002dbc: DUP3
00002dbd: DUP5
00002dbe: SUB
00002dbf: SLT
00002dc0: ISZERO
00002dc1: PUSH2 0x2dc9
00002dc4: JUMPI
00002dc5: PUSH1 0x00
00002dc7: DUP1
00002dc8: REVERT
00002dc9: JUMPDEST
00002dca: POP
00002dcb: CALLDATALOAD
00002dcc: SWAP2
00002dcd: SWAP1
00002dce: POP
00002dcf: JUMP
00002dd0: JUMPDEST
00002dd1: PUSH1 0x00
00002dd3: DUP1
00002dd4: PUSH1 0x00
00002dd6: PUSH1 0x60
00002dd8: DUP5
00002dd9: DUP7
00002dda: SUB
00002ddb: SLT
00002ddc: ISZERO
00002ddd: PUSH2 0x2de5
00002de0: JUMPI
00002de1: PUSH1 0x00
00002de3: DUP1
00002de4: REVERT
00002de5: JUMPDEST
00002de6: DUP4
00002de7: CALLDATALOAD
00002de8: PUSH2 0x2df0
00002deb: DUP2
00002dec: PUSH2 0x2816
00002def: JUMP
00002df0: JUMPDEST
00002df1: SWAP6
00002df2: PUSH1 0x20
00002df4: DUP6
00002df5: ADD
00002df6: CALLDATALOAD
00002df7: SWAP6
00002df8: POP
00002df9: PUSH1 0x40
00002dfb: SWAP1
00002dfc: SWAP5
00002dfd: ADD
00002dfe: CALLDATALOAD
00002dff: SWAP4
00002e00: SWAP3
00002e01: POP
00002e02: POP
00002e03: POP
00002e04: JUMP
00002e05: JUMPDEST
00002e06: PUSH1 0x01
00002e08: DUP2
00002e09: DUP2
00002e0a: SHR
00002e0b: SWAP1
00002e0c: DUP3
00002e0d: AND
00002e0e: DUP1
00002e0f: PUSH2 0x2e19
00002e12: JUMPI
00002e13: PUSH1 0x7f
00002e15: DUP3
00002e16: AND
00002e17: SWAP2
00002e18: POP
00002e19: JUMPDEST
00002e1a: PUSH1 0x20
00002e1c: DUP3
00002e1d: LT
00002e1e: DUP2
00002e1f: SUB
00002e20: PUSH2 0x2e52
00002e23: JUMPI
00002e24: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00002e45: PUSH1 0x00
00002e47: MSTORE
00002e48: PUSH1 0x22
00002e4a: PUSH1 0x04
00002e4c: MSTORE
00002e4d: PUSH1 0x24
00002e4f: PUSH1 0x00
00002e51: REVERT
00002e52: JUMPDEST
00002e53: POP
00002e54: SWAP2
00002e55: SWAP1
00002e56: POP
00002e57: JUMP
00002e58: JUMPDEST
00002e59: PUSH1 0x00
00002e5b: DUP3
00002e5c: PUSH1 0x1f
00002e5e: DUP4
00002e5f: ADD
00002e60: SLT
00002e61: PUSH2 0x2e69
00002e64: JUMPI
00002e65: PUSH1 0x00
00002e67: DUP1
00002e68: REVERT
00002e69: JUMPDEST
00002e6a: DUP2
00002e6b: MLOAD
00002e6c: PUSH2 0x2e77
00002e6f: PUSH2 0x2b6f
00002e72: DUP3
00002e73: PUSH2 0x2ac7
00002e76: JUMP
00002e77: JUMPDEST
00002e78: DUP2
00002e79: DUP2
00002e7a: MSTORE
00002e7b: DUP5
00002e7c: PUSH1 0x20
00002e7e: DUP4
00002e7f: DUP7
00002e80: ADD
00002e81: ADD
00002e82: GT
00002e83: ISZERO
00002e84: PUSH2 0x2e8c
00002e87: JUMPI
00002e88: PUSH1 0x00
00002e8a: DUP1
00002e8b: REVERT
00002e8c: JUMPDEST
00002e8d: PUSH2 0x1083
00002e90: DUP3
00002e91: PUSH1 0x20
00002e93: DUP4
00002e94: ADD
00002e95: PUSH1 0x20
00002e97: DUP8
00002e98: ADD
00002e99: PUSH2 0x297f
00002e9c: JUMP
00002e9d: JUMPDEST
00002e9e: PUSH1 0x00
00002ea0: DUP1
00002ea1: PUSH1 0x00
00002ea3: DUP1
00002ea4: PUSH1 0x80
00002ea6: DUP6
00002ea7: DUP8
00002ea8: SUB
00002ea9: SLT
00002eaa: ISZERO
00002eab: PUSH2 0x2eb3
00002eae: JUMPI
00002eaf: PUSH1 0x00
00002eb1: DUP1
00002eb2: REVERT
00002eb3: JUMPDEST
00002eb4: DUP5
00002eb5: MLOAD
00002eb6: PUSH2 0x2ebe
00002eb9: DUP2
00002eba: PUSH2 0x2816
00002ebd: JUMP
00002ebe: JUMPDEST
00002ebf: DUP1
00002ec0: SWAP5
00002ec1: POP
00002ec2: POP
00002ec3: PUSH1 0x20
00002ec5: DUP6
00002ec6: ADD
00002ec7: MLOAD
00002ec8: SWAP3
00002ec9: POP
00002eca: PUSH1 0x40
00002ecc: DUP6
00002ecd: ADD
00002ece: MLOAD
00002ecf: SWAP2
00002ed0: POP
00002ed1: PUSH1 0x60
00002ed3: DUP6
00002ed4: ADD
00002ed5: MLOAD
00002ed6: PUSH8 0xffffffffffffffff
00002edf: DUP2
00002ee0: GT
00002ee1: ISZERO
00002ee2: PUSH2 0x2eea
00002ee5: JUMPI
00002ee6: PUSH1 0x00
00002ee8: DUP1
00002ee9: REVERT
00002eea: JUMPDEST
00002eeb: PUSH2 0x2ef6
00002eee: DUP8
00002eef: DUP3
00002ef0: DUP9
00002ef1: ADD
00002ef2: PUSH2 0x2e58
00002ef5: JUMP
00002ef6: JUMPDEST
00002ef7: SWAP2
00002ef8: POP
00002ef9: POP
00002efa: SWAP3
00002efb: SWAP6
00002efc: SWAP2
00002efd: SWAP5
00002efe: POP
00002eff: SWAP3
00002f00: POP
00002f01: JUMP
00002f02: JUMPDEST
00002f03: PUSH1 0x00
00002f05: PUSH1 0x20
00002f07: DUP3
00002f08: DUP5
00002f09: SUB
00002f0a: SLT
00002f0b: ISZERO
00002f0c: PUSH2 0x2f14
00002f0f: JUMPI
00002f10: PUSH1 0x00
00002f12: DUP1
00002f13: REVERT
00002f14: JUMPDEST
00002f15: POP
00002f16: MLOAD
00002f17: SWAP2
00002f18: SWAP1
00002f19: POP
00002f1a: JUMP
00002f1b: JUMPDEST
00002f1c: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00002f3d: PUSH1 0x00
00002f3f: MSTORE
00002f40: PUSH1 0x32
00002f42: PUSH1 0x04
00002f44: MSTORE
00002f45: PUSH1 0x24
00002f47: PUSH1 0x00
00002f49: REVERT
00002f4a: JUMPDEST
00002f4b: PUSH1 0x00
00002f4d: PUSH1 0x20
00002f4f: DUP3
00002f50: DUP5
00002f51: SUB
00002f52: SLT
00002f53: ISZERO
00002f54: PUSH2 0x2f5c
00002f57: JUMPI
00002f58: PUSH1 0x00
00002f5a: DUP1
00002f5b: REVERT
00002f5c: JUMPDEST
00002f5d: PUSH2 0x09ae
00002f60: DUP3
00002f61: PUSH2 0x2bd5
00002f64: JUMP
00002f65: JUMPDEST
00002f66: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00002f87: PUSH1 0x00
00002f89: MSTORE
00002f8a: PUSH1 0x11
00002f8c: PUSH1 0x04
00002f8e: MSTORE
00002f8f: PUSH1 0x24
00002f91: PUSH1 0x00
00002f93: REVERT
00002f94: JUMPDEST
00002f95: PUSH1 0x00
00002f97: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00002fb8: DUP3
00002fb9: SUB
00002fba: PUSH2 0x2fc5
00002fbd: JUMPI
00002fbe: PUSH2 0x2fc5
00002fc1: PUSH2 0x2f65
00002fc4: JUMP
00002fc5: JUMPDEST
00002fc6: POP
00002fc7: PUSH1 0x01
00002fc9: ADD
00002fca: SWAP1
00002fcb: JUMP
00002fcc: JUMPDEST
00002fcd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002fe2: DUP2
00002fe3: MLOAD
00002fe4: AND
00002fe5: DUP3
00002fe6: MSTORE
00002fe7: PUSH1 0x20
00002fe9: DUP2
00002fea: ADD
00002feb: MLOAD
00002fec: PUSH1 0x20
00002fee: DUP4
00002fef: ADD
00002ff0: MSTORE
00002ff1: PUSH1 0x00
00002ff3: PUSH1 0x40
00002ff5: DUP3
00002ff6: ADD
00002ff7: MLOAD
00002ff8: PUSH1 0x60
00002ffa: PUSH1 0x40
00002ffc: DUP6
00002ffd: ADD
00002ffe: MSTORE
00002fff: PUSH2 0x1083
00003002: PUSH1 0x60
00003004: DUP6
00003005: ADD
00003006: DUP3
00003007: PUSH2 0x29ab
0000300a: JUMP
0000300b: JUMPDEST
0000300c: PUSH1 0x20
0000300e: DUP2
0000300f: MSTORE
00003010: PUSH1 0x00
00003012: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003027: DUP1
00003028: DUP5
00003029: MLOAD
0000302a: AND
0000302b: PUSH1 0x20
0000302d: DUP5
0000302e: ADD
0000302f: MSTORE
00003030: DUP1
00003031: PUSH1 0x20
00003033: DUP6
00003034: ADD
00003035: MLOAD
00003036: AND
00003037: PUSH1 0x40
00003039: DUP5
0000303a: ADD
0000303b: MSTORE
0000303c: POP
0000303d: PUSH1 0x40
0000303f: DUP4
00003040: ADD
00003041: MLOAD
00003042: PUSH1 0x60
00003044: DUP1
00003045: DUP5
00003046: ADD
00003047: MSTORE
00003048: PUSH2 0x1083
0000304b: PUSH1 0x80
0000304d: DUP5
0000304e: ADD
0000304f: DUP3
00003050: PUSH2 0x2fcc
00003053: JUMP
00003054: JUMPDEST
00003055: PUSH1 0x00
00003057: PUSH1 0x60
00003059: DUP3
0000305a: DUP5
0000305b: SUB
0000305c: SLT
0000305d: ISZERO
0000305e: PUSH2 0x3066
00003061: JUMPI
00003062: PUSH1 0x00
00003064: DUP1
00003065: REVERT
00003066: JUMPDEST
00003067: PUSH1 0x40
00003069: MLOAD
0000306a: PUSH1 0x60
0000306c: DUP2
0000306d: ADD
0000306e: PUSH8 0xffffffffffffffff
00003077: DUP3
00003078: DUP3
00003079: LT
0000307a: DUP2
0000307b: DUP4
0000307c: GT
0000307d: OR
0000307e: ISZERO
0000307f: PUSH2 0x308a
00003082: JUMPI
00003083: PUSH2 0x308a
00003086: PUSH2 0x2a49
00003089: JUMP
0000308a: JUMPDEST
0000308b: DUP2
0000308c: PUSH1 0x40
0000308e: MSTORE
0000308f: DUP3
00003090: SWAP4
00003091: POP
00003092: DUP5
00003093: MLOAD
00003094: SWAP2
00003095: POP
00003096: PUSH2 0x309e
00003099: DUP3
0000309a: PUSH2 0x2816
0000309d: JUMP
0000309e: JUMPDEST
0000309f: DUP2
000030a0: DUP4
000030a1: MSTORE
000030a2: PUSH1 0x20
000030a4: DUP6
000030a5: ADD
000030a6: MLOAD
000030a7: PUSH1 0x20
000030a9: DUP5
000030aa: ADD
000030ab: MSTORE
000030ac: PUSH1 0x40
000030ae: DUP6
000030af: ADD
000030b0: MLOAD
000030b1: SWAP2
000030b2: POP
000030b3: DUP1
000030b4: DUP3
000030b5: GT
000030b6: ISZERO
000030b7: PUSH2 0x30bf
000030ba: JUMPI
000030bb: PUSH1 0x00
000030bd: DUP1
000030be: REVERT
000030bf: JUMPDEST
000030c0: POP
000030c1: PUSH2 0x30cc
000030c4: DUP6
000030c5: DUP3
000030c6: DUP7
000030c7: ADD
000030c8: PUSH2 0x2e58
000030cb: JUMP
000030cc: JUMPDEST
000030cd: PUSH1 0x40
000030cf: DUP4
000030d0: ADD
000030d1: MSTORE
000030d2: POP
000030d3: POP
000030d4: SWAP3
000030d5: SWAP2
000030d6: POP
000030d7: POP
000030d8: JUMP
000030d9: JUMPDEST
000030da: PUSH1 0x00
000030dc: DUP1
000030dd: PUSH1 0x40
000030df: DUP4
000030e0: DUP6
000030e1: SUB
000030e2: SLT
000030e3: ISZERO
000030e4: PUSH2 0x30ec
000030e7: JUMPI
000030e8: PUSH1 0x00
000030ea: DUP1
000030eb: REVERT
000030ec: JUMPDEST
000030ed: DUP3
000030ee: MLOAD
000030ef: PUSH8 0xffffffffffffffff
000030f8: DUP1
000030f9: DUP3
000030fa: GT
000030fb: ISZERO
000030fc: PUSH2 0x3104
000030ff: JUMPI
00003100: PUSH1 0x00
00003102: DUP1
00003103: REVERT
00003104: JUMPDEST
00003105: PUSH2 0x3110
00003108: DUP7
00003109: DUP4
0000310a: DUP8
0000310b: ADD
0000310c: PUSH2 0x3054
0000310f: JUMP
00003110: JUMPDEST
00003111: SWAP4
00003112: POP
00003113: PUSH1 0x20
00003115: DUP6
00003116: ADD
00003117: MLOAD
00003118: SWAP2
00003119: POP
0000311a: DUP1
0000311b: DUP3
0000311c: GT
0000311d: ISZERO
0000311e: PUSH2 0x3126
00003121: JUMPI
00003122: PUSH1 0x00
00003124: DUP1
00003125: REVERT
00003126: JUMPDEST
00003127: POP
00003128: PUSH2 0x3133
0000312b: DUP6
0000312c: DUP3
0000312d: DUP7
0000312e: ADD
0000312f: PUSH2 0x2e58
00003132: JUMP
00003133: JUMPDEST
00003134: SWAP2
00003135: POP
00003136: POP
00003137: SWAP3
00003138: POP
00003139: SWAP3
0000313a: SWAP1
0000313b: POP
0000313c: JUMP
0000313d: JUMPDEST
0000313e: PUSH1 0x20
00003140: DUP2
00003141: MSTORE
00003142: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003157: DUP3
00003158: MLOAD
00003159: AND
0000315a: PUSH1 0x20
0000315c: DUP3
0000315d: ADD
0000315e: MSTORE
0000315f: PUSH1 0x00
00003161: PUSH1 0x20
00003163: DUP4
00003164: ADD
00003165: MLOAD
00003166: PUSH1 0x80
00003168: PUSH1 0x40
0000316a: DUP5
0000316b: ADD
0000316c: MSTORE
0000316d: PUSH2 0x3179
00003170: PUSH1 0xa0
00003172: DUP5
00003173: ADD
00003174: DUP3
00003175: PUSH2 0x29ab
00003178: JUMP
00003179: JUMPDEST
0000317a: SWAP1
0000317b: POP
0000317c: PUSH1 0x40
0000317e: DUP5
0000317f: ADD
00003180: MLOAD
00003181: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
000031a2: DUP1
000031a3: DUP6
000031a4: DUP5
000031a5: SUB
000031a6: ADD
000031a7: PUSH1 0x60
000031a9: DUP7
000031aa: ADD
000031ab: MSTORE
000031ac: PUSH2 0x31b5
000031af: DUP4
000031b0: DUP4
000031b1: PUSH2 0x29ab
000031b4: JUMP
000031b5: JUMPDEST
000031b6: SWAP3
000031b7: POP
000031b8: PUSH1 0x60
000031ba: DUP7
000031bb: ADD
000031bc: MLOAD
000031bd: SWAP2
000031be: POP
000031bf: DUP1
000031c0: DUP6
000031c1: DUP5
000031c2: SUB
000031c3: ADD
000031c4: PUSH1 0x80
000031c6: DUP7
000031c7: ADD
000031c8: MSTORE
000031c9: POP
000031ca: PUSH2 0x31d3
000031cd: DUP3
000031ce: DUP3
000031cf: PUSH2 0x2fcc
000031d2: JUMP
000031d3: JUMPDEST
000031d4: SWAP6
000031d5: SWAP5
000031d6: POP
000031d7: POP
000031d8: POP
000031d9: POP
000031da: POP
000031db: JUMP
000031dc: JUMPDEST
000031dd: PUSH1 0x00
000031df: PUSH1 0x20
000031e1: DUP3
000031e2: DUP5
000031e3: SUB
000031e4: SLT
000031e5: ISZERO
000031e6: PUSH2 0x31ee
000031e9: JUMPI
000031ea: PUSH1 0x00
000031ec: DUP1
000031ed: REVERT
000031ee: JUMPDEST
000031ef: DUP2
000031f0: MLOAD
000031f1: PUSH8 0xffffffffffffffff
000031fa: DUP2
000031fb: GT
000031fc: ISZERO
000031fd: PUSH2 0x3205
00003200: JUMPI
00003201: PUSH1 0x00
00003203: DUP1
00003204: REVERT
00003205: JUMPDEST
00003206: PUSH2 0x1083
00003209: DUP5
0000320a: DUP3
0000320b: DUP6
0000320c: ADD
0000320d: PUSH2 0x3054
00003210: JUMP
00003211: JUMPDEST
00003212: PUSH1 0x00
00003214: DUP3
00003215: DUP3
00003216: LT
00003217: ISZERO
00003218: PUSH2 0x3223
0000321b: JUMPI
0000321c: PUSH2 0x3223
0000321f: PUSH2 0x2f65
00003222: JUMP
00003223: JUMPDEST
00003224: POP
00003225: SUB
00003226: SWAP1
00003227: JUMP
00003228: JUMPDEST
00003229: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000323e: DUP6
0000323f: AND
00003240: DUP2
00003241: MSTORE
00003242: DUP4
00003243: PUSH1 0x20
00003245: DUP3
00003246: ADD
00003247: MSTORE
00003248: DUP3
00003249: PUSH1 0x40
0000324b: DUP3
0000324c: ADD
0000324d: MSTORE
0000324e: PUSH1 0x80
00003250: PUSH1 0x60
00003252: DUP3
00003253: ADD
00003254: MSTORE
00003255: PUSH1 0x00
00003257: PUSH2 0x3263
0000325a: PUSH1 0x80
0000325c: DUP4
0000325d: ADD
0000325e: DUP5
0000325f: PUSH2 0x29ab
00003262: JUMP
00003263: JUMPDEST
00003264: SWAP7
00003265: SWAP6
00003266: POP
00003267: POP
00003268: POP
00003269: POP
0000326a: POP
0000326b: POP
0000326c: JUMP
0000326d: JUMPDEST
0000326e: DUP4
0000326f: DUP2
00003270: MSTORE
00003271: PUSH1 0x60
00003273: PUSH1 0x20
00003275: DUP3
00003276: ADD
00003277: MSTORE
00003278: PUSH1 0x00
0000327a: PUSH2 0x3286
0000327d: PUSH1 0x60
0000327f: DUP4
00003280: ADD
00003281: DUP6
00003282: PUSH2 0x29ab
00003285: JUMP
00003286: JUMPDEST
00003287: DUP3
00003288: DUP2
00003289: SUB
0000328a: PUSH1 0x40
0000328c: DUP5
0000328d: ADD
0000328e: MSTORE
0000328f: PUSH2 0x3263
00003292: DUP2
00003293: DUP6
00003294: PUSH2 0x29ab
00003297: JUMP
00003298: JUMPDEST
00003299: PUSH1 0x20
0000329b: DUP2
0000329c: MSTORE
0000329d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000032b2: DUP3
000032b3: MLOAD
000032b4: AND
000032b5: PUSH1 0x20
000032b7: DUP3
000032b8: ADD
000032b9: MSTORE
000032ba: PUSH1 0x00
000032bc: PUSH1 0x20
000032be: DUP4
000032bf: ADD
000032c0: MLOAD
000032c1: PUSH1 0x60
000032c3: PUSH1 0x40
000032c5: DUP5
000032c6: ADD
000032c7: MSTORE
000032c8: PUSH2 0x32d4
000032cb: PUSH1 0x80
000032cd: DUP5
000032ce: ADD
000032cf: DUP3
000032d0: PUSH2 0x29ab
000032d3: JUMP
000032d4: JUMPDEST
000032d5: SWAP1
000032d6: POP
000032d7: PUSH1 0x40
000032d9: DUP5
000032da: ADD
000032db: MLOAD
000032dc: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
000032fd: DUP5
000032fe: DUP4
000032ff: SUB
00003300: ADD
00003301: PUSH1 0x60
00003303: DUP6
00003304: ADD
00003305: MSTORE
00003306: PUSH2 0x31d3
00003309: DUP3
0000330a: DUP3
0000330b: PUSH2 0x2fcc
0000330e: JUMP
0000330f: JUMPDEST
00003310: PUSH1 0x00
00003312: DUP1
00003313: PUSH1 0x40
00003315: DUP4
00003316: DUP6
00003317: SUB
00003318: SLT
00003319: ISZERO
0000331a: PUSH2 0x3322
0000331d: JUMPI
0000331e: PUSH1 0x00
00003320: DUP1
00003321: REVERT
00003322: JUMPDEST
00003323: DUP3
00003324: MLOAD
00003325: PUSH8 0xffffffffffffffff
0000332e: DUP1
0000332f: DUP3
00003330: GT
00003331: ISZERO
00003332: PUSH2 0x333a
00003335: JUMPI
00003336: PUSH1 0x00
00003338: DUP1
00003339: REVERT
0000333a: JUMPDEST
0000333b: PUSH2 0x3346
0000333e: DUP7
0000333f: DUP4
00003340: DUP8
00003341: ADD
00003342: PUSH2 0x2e58
00003345: JUMP
00003346: JUMPDEST
00003347: SWAP4
00003348: POP
00003349: PUSH1 0x20
0000334b: DUP6
0000334c: ADD
0000334d: MLOAD
0000334e: SWAP2
0000334f: POP
00003350: DUP1
00003351: DUP3
00003352: GT
00003353: ISZERO
00003354: PUSH2 0x335c
00003357: JUMPI
00003358: PUSH1 0x00
0000335a: DUP1
0000335b: REVERT
0000335c: JUMPDEST
0000335d: POP
0000335e: PUSH2 0x3133
00003361: DUP6
00003362: DUP3
00003363: DUP7
00003364: ADD
00003365: PUSH2 0x3054
00003368: JUMP
00003369: JUMPDEST
0000336a: PUSH1 0x20
0000336c: DUP2
0000336d: MSTORE
0000336e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003383: DUP3
00003384: MLOAD
00003385: AND
00003386: PUSH1 0x20
00003388: DUP3
00003389: ADD
0000338a: MSTORE
0000338b: PUSH1 0x20
0000338d: DUP3
0000338e: ADD
0000338f: MLOAD
00003390: PUSH1 0x40
00003392: DUP3
00003393: ADD
00003394: MSTORE
00003395: PUSH1 0x00
00003397: PUSH1 0x40
00003399: DUP4
0000339a: ADD
0000339b: MLOAD
0000339c: PUSH1 0xa0
0000339e: PUSH1 0x60
000033a0: DUP5
000033a1: ADD
000033a2: MSTORE
000033a3: PUSH2 0x33af
000033a6: PUSH1 0xc0
000033a8: DUP5
000033a9: ADD
000033aa: DUP3
000033ab: PUSH2 0x29ab
000033ae: JUMP
000033af: JUMPDEST
000033b0: SWAP1
000033b1: POP
000033b2: PUSH1 0x60
000033b4: DUP5
000033b5: ADD
000033b6: MLOAD
000033b7: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
000033d8: DUP1
000033d9: DUP6
000033da: DUP5
000033db: SUB
000033dc: ADD
000033dd: PUSH1 0x80
000033df: DUP7
000033e0: ADD
000033e1: MSTORE
000033e2: PUSH2 0x33eb
000033e5: DUP4
000033e6: DUP4
000033e7: PUSH2 0x29ab
000033ea: JUMP
000033eb: JUMPDEST
000033ec: SWAP3
000033ed: POP
000033ee: PUSH1 0x80
000033f0: DUP7
000033f1: ADD
000033f2: MLOAD
000033f3: SWAP2
000033f4: POP
000033f5: DUP1
000033f6: DUP6
000033f7: DUP5
000033f8: SUB
000033f9: ADD
000033fa: PUSH1 0xa0
000033fc: DUP7
000033fd: ADD
000033fe: MSTORE
000033ff: POP
00003400: PUSH2 0x31d3
00003403: DUP3
00003404: DUP3
00003405: PUSH2 0x2fcc
00003408: JUMP
00003409: JUMPDEST
0000340a: PUSH1 0x00
0000340c: PUSH1 0x20
0000340e: DUP3
0000340f: DUP5
00003410: SUB
00003411: SLT
00003412: ISZERO
00003413: PUSH2 0x341b
00003416: JUMPI
00003417: PUSH1 0x00
00003419: DUP1
0000341a: REVERT
0000341b: JUMPDEST
0000341c: DUP2
0000341d: MLOAD
0000341e: PUSH8 0xffffffffffffffff
00003427: DUP1
00003428: DUP3
00003429: GT
0000342a: ISZERO
0000342b: PUSH2 0x3433
0000342e: JUMPI
0000342f: PUSH1 0x00
00003431: DUP1
00003432: REVERT
00003433: JUMPDEST
00003434: SWAP1
00003435: DUP4
00003436: ADD
00003437: SWAP1
00003438: PUSH1 0x40
0000343a: DUP3
0000343b: DUP7
0000343c: SUB
0000343d: SLT
0000343e: ISZERO
0000343f: PUSH2 0x3447
00003442: JUMPI
00003443: PUSH1 0x00
00003445: DUP1
00003446: REVERT
00003447: JUMPDEST
00003448: PUSH1 0x40
0000344a: MLOAD
0000344b: PUSH1 0x40
0000344d: DUP2
0000344e: ADD
0000344f: DUP2
00003450: DUP2
00003451: LT
00003452: DUP4
00003453: DUP3
00003454: GT
00003455: OR
00003456: ISZERO
00003457: PUSH2 0x3462
0000345a: JUMPI
0000345b: PUSH2 0x3462
0000345e: PUSH2 0x2a49
00003461: JUMP
00003462: JUMPDEST
00003463: PUSH1 0x40
00003465: MSTORE
00003466: DUP3
00003467: MLOAD
00003468: DUP3
00003469: DUP2
0000346a: GT
0000346b: ISZERO
0000346c: PUSH2 0x3474
0000346f: JUMPI
00003470: PUSH1 0x00
00003472: DUP1
00003473: REVERT
00003474: JUMPDEST
00003475: PUSH2 0x3480
00003478: DUP8
00003479: DUP3
0000347a: DUP7
0000347b: ADD
0000347c: PUSH2 0x2e58
0000347f: JUMP
00003480: JUMPDEST
00003481: DUP3
00003482: MSTORE
00003483: POP
00003484: PUSH1 0x20
00003486: DUP4
00003487: ADD
00003488: MLOAD
00003489: DUP3
0000348a: DUP2
0000348b: GT
0000348c: ISZERO
0000348d: PUSH2 0x3495
00003490: JUMPI
00003491: PUSH1 0x00
00003493: DUP1
00003494: REVERT
00003495: JUMPDEST
00003496: PUSH2 0x34a1
00003499: DUP8
0000349a: DUP3
0000349b: DUP7
0000349c: ADD
0000349d: PUSH2 0x2e58
000034a0: JUMP
000034a1: JUMPDEST
000034a2: PUSH1 0x20
000034a4: DUP4
000034a5: ADD
000034a6: MSTORE
000034a7: POP
000034a8: SWAP6
000034a9: SWAP5
000034aa: POP
000034ab: POP
000034ac: POP
000034ad: POP
000034ae: POP
000034af: JUMP
000034b0: JUMPDEST
000034b1: PUSH1 0x00
000034b3: DUP2
000034b4: MLOAD
000034b5: PUSH1 0x40
000034b7: DUP5
000034b8: MSTORE
000034b9: PUSH2 0x34c5
000034bc: PUSH1 0x40
000034be: DUP6
000034bf: ADD
000034c0: DUP3
000034c1: PUSH2 0x29ab
000034c4: JUMP
000034c5: JUMPDEST
000034c6: SWAP1
000034c7: POP
000034c8: PUSH1 0x20
000034ca: DUP4
000034cb: ADD
000034cc: MLOAD
000034cd: DUP5
000034ce: DUP3
000034cf: SUB
000034d0: PUSH1 0x20
000034d2: DUP7
000034d3: ADD
000034d4: MSTORE
000034d5: PUSH2 0x31d3
000034d8: DUP3
000034d9: DUP3
000034da: PUSH2 0x29ab
000034dd: JUMP
000034de: JUMPDEST
000034df: PUSH1 0x20
000034e1: DUP2
000034e2: MSTORE
000034e3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000034f8: DUP3
000034f9: MLOAD
000034fa: AND
000034fb: PUSH1 0x20
000034fd: DUP3
000034fe: ADD
000034ff: MSTORE
00003500: PUSH1 0x00
00003502: PUSH1 0x20
00003504: DUP4
00003505: ADD
00003506: MLOAD
00003507: PUSH1 0x40
00003509: DUP1
0000350a: DUP5
0000350b: ADD
0000350c: MSTORE
0000350d: PUSH2 0x1083
00003510: PUSH1 0x60
00003512: DUP5
00003513: ADD
00003514: DUP3
00003515: PUSH2 0x34b0
00003518: JUMP
00003519: JUMPDEST
0000351a: PUSH1 0x20
0000351c: DUP2
0000351d: MSTORE
0000351e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003533: DUP3
00003534: MLOAD
00003535: AND
00003536: PUSH1 0x20
00003538: DUP3
00003539: ADD
0000353a: MSTORE
0000353b: PUSH1 0x20
0000353d: DUP3
0000353e: ADD
0000353f: MLOAD
00003540: PUSH1 0x40
00003542: DUP3
00003543: ADD
00003544: MSTORE
00003545: PUSH1 0x00
00003547: PUSH1 0x40
00003549: DUP4
0000354a: ADD
0000354b: MLOAD
0000354c: PUSH1 0x80
0000354e: PUSH1 0x60
00003550: DUP5
00003551: ADD
00003552: MSTORE
00003553: PUSH2 0x355f
00003556: PUSH1 0xa0
00003558: DUP5
00003559: ADD
0000355a: DUP3
0000355b: PUSH2 0x29ab
0000355e: JUMP
0000355f: JUMPDEST
00003560: SWAP1
00003561: POP
00003562: PUSH1 0x60
00003564: DUP5
00003565: ADD
00003566: MLOAD
00003567: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00003588: DUP5
00003589: DUP4
0000358a: SUB
0000358b: ADD
0000358c: PUSH1 0x80
0000358e: DUP6
0000358f: ADD
00003590: MSTORE
00003591: PUSH2 0x31d3
00003594: DUP3
00003595: DUP3
00003596: PUSH2 0x34b0
00003599: JUMP
0000359a: INVALID
0000359b: LOG2
0000359c: PUSH5 0x6970667358
000035a2: UNKNOWN(0x22)
000035a3: SLT
000035a4: KECCAK256
000035a5: UNKNOWN(0xAB)
000035a6: UNKNOWN(0xD9)
000035a7: UNKNOWN(0x4E)
000035a8: PUSH5 0x85cdaf8fdd
000035ae: UNKNOWN(0xEE)
000035af: UNKNOWN(0xF7)
000035b0: UNKNOWN(0xAD)
000035b1: SWAP9
000035b2: UNKNOWN(0xBC)
000035b3: UNKNOWN(0xDF)
000035b4: DUP11
000035b5: MSTORE
000035b6: SWAP9
000035b7: UNKNOWN(0x2E)
000035b8: UNKNOWN(0x2A)
000035b9: REVERT
000035ba: UNKNOWN(0xD2)
000035bb: UNKNOWN(0xA7)
000035bc: PUSH30

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high other detector Untrusted CALL target/value reachable 60 no no
view
trace_id: 0x1d760b6d6faaca21bd53196246261e408ab9dfa00336e59d98b7d1681d5d5a70
call_targets: 0xde1617ddb7c8a250a409d986930001985cfad76f
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x1d760b6d6faaca21bd53196246261e408ab9dfa00336e59d98b7d1681d5d5a70",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xde1617ddb7c8a250a409d986930001985cfad76f"
    ],
    "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": "0xf290aafa",
            "selector": "0xf290aafa",
            "calldata_variants": [
                "0xf290aafa",
                "0xf290aafa0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfc0c546a",
            "selector": "0xfc0c546a",
            "calldata_variants": [
                "0xfc0c546a",
                "0xfc0c546a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfc3a7b98",
            "selector": "0xfc3a7b98",
            "calldata_variants": [
                "0xfc3a7b98",
                "0xfc3a7b980000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd547741f",
            "selector": "0xd547741f",
            "calldata_variants": [
                "0xd547741f",
                "0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe272ad3f",
            "selector": "0xe272ad3f",
            "calldata_variants": [
                "0xe272ad3f",
                "0xe272ad3f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe9ee1eaf",
            "selector": "0xe9ee1eaf",
            "calldata_variants": [
                "0xe9ee1eaf",
                "0xe9ee1eaf0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x9dc7b023",
            "selector": "0x9dc7b023",
            "calldata_variants": [
                "0x9dc7b023",
                "0x9dc7b0230000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xaad48d80",
            "selector": "0xaad48d80",
            "calldata_variants": [
                "0xaad48d80",
                "0xaad48d800000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 3465,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 4997,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 5426,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 12,
    "guards_detected": [],
    "untrusted_call_count": 12
}
high other detector ETH value transfer possible 55 no no
view
trace_id: 0x1d760b6d6faaca21bd53196246261e408ab9dfa00336e59d98b7d1681d5d5a70
call_targets: 0xde1617ddb7c8a250a409d986930001985cfad76f
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x1d760b6d6faaca21bd53196246261e408ab9dfa00336e59d98b7d1681d5d5a70",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xde1617ddb7c8a250a409d986930001985cfad76f"
    ],
    "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": "0xf290aafa",
            "selector": "0xf290aafa",
            "calldata_variants": [
                "0xf290aafa",
                "0xf290aafa0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfc0c546a",
            "selector": "0xfc0c546a",
            "calldata_variants": [
                "0xfc0c546a",
                "0xfc0c546a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfc3a7b98",
            "selector": "0xfc3a7b98",
            "calldata_variants": [
                "0xfc3a7b98",
                "0xfc3a7b980000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd547741f",
            "selector": "0xd547741f",
            "calldata_variants": [
                "0xd547741f",
                "0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe272ad3f",
            "selector": "0xe272ad3f",
            "calldata_variants": [
                "0xe272ad3f",
                "0xe272ad3f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe9ee1eaf",
            "selector": "0xe9ee1eaf",
            "calldata_variants": [
                "0xe9ee1eaf",
                "0xe9ee1eaf0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x9dc7b023",
            "selector": "0x9dc7b023",
            "calldata_variants": [
                "0x9dc7b023",
                "0x9dc7b0230000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xaad48d80",
            "selector": "0xaad48d80",
            "calldata_variants": [
                "0xaad48d80",
                "0xaad48d800000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 3465,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 4997,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 5426,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 12,
    "guards_detected": []
}
high other codex YieldLimitExec hooks encode/decode mismatch can revert inbound mints and corrupt accounting 85 no
view
evidence_json
{
    "evidence": "Controller hook encodes bytes but destination decodes uint256; vault hook encodes uint256 but destination decodes bytes.",
    "locations": [
        "contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:87",
        "contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:110",
        "contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:104",
        "contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:133"
    ],
    "recommendation": "Make the encoding/decoding types consistent on both ends. Use a single struct or explicit `(uint256 increasedUnderlying, bytes payload)` in both `srcPostHookCall` and `dstPreHookCall`, and add cross-chain payload encoding/decoding tests to prevent regressions.",
    "exploit_scenario": "When these hooks are enabled, the source hook encodes `transferInfo.data` as `(bytes, bytes)` (controller) or `(uint256, bytes)` (vault), but the destination hook decodes it as `(uint256, bytes)` (controller) or `(bytes, bytes)` (vault). This ABI mismatch causes `dstPreHookCall` to revert for most payloads (locking funds that were burned/locked on the source chain), or to misinterpret offsets as `increasedUnderlying`, skewing pool limits and totalUnderlyingAssets. A malicious sender can craft payloads to maximize the misdecode or guarantee reverts."
}
medium access_control codex StakeEasy lets any caller spend contract-held tokens 75 no
view
evidence_json
{
    "evidence": "No access control on `createAccountAndStake`, and `_wrapAndStake` uses the contract\u2019s balances with approvals to external contracts.",
    "locations": [
        "contracts/contracts/bridge/StakeEasy.sol:89",
        "contracts/contracts/bridge/StakeEasy.sol:122"
    ],
    "recommendation": "Restrict `createAccountAndStake` to a trusted caller (bridge/hook/execution helper) or require `msg.sender == walletAddress` and pull tokens from the caller with `transferFrom` before staking. Consider adding a rescue function for unexpected balances.",
    "exploit_scenario": "`createAccountAndStake` is permissionless and uses the contract\u2019s own balances (bridgedToken/fUSDC/fxUSD) without pulling funds from the caller. If StakeEasy ever receives tokens (e.g., failed execution payload or accidental transfer), any user can call this function with their own `walletAddress` and stake those tokens into their account, effectively stealing assets."
}
medium math codex Pending-share calculation uses pendingUnderlying instead of consumedUnderlying 75 no
view
evidence_json
{
    "evidence": "`consumedShares` is calculated using `pendingUnderlying` instead of `consumedUnderlying`, flipping the pending/consumed split.",
    "locations": [
        "contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:175",
        "contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:179"
    ],
    "recommendation": "Compute `consumedShares` from `consumedUnderlying` (or compute `pendingShares` directly from `pendingUnderlying`), and add invariants to ensure `pendingShares` equals the hook\u2019s remaining share balance.",
    "exploit_scenario": "When a transfer exceeds the limit, `pendingUnderlying > 0` and shares are minted to the hook. The hook computes `consumedShares` using `pendingUnderlying`, which inverts the split and stores `pendingShares` larger than the remaining shares. An attacker can then call `retry` and attempt to withdraw more shares than the hook actually holds, potentially draining shares reserved for other pending transfers or permanently blocking retries due to insufficient balance."
}
low other codex Unchecked ERC20 transfer/transferFrom can enable free unwrap or silent accounting drift 65 no
view
evidence_json
{
    "evidence": "Raw ERC20 `transfer/transferFrom` calls are made without checking return values.",
    "locations": [
        "contracts/contracts/bridge/UnWrapper.sol:14",
        "contracts/contracts/bridge/UnWrapper.sol:19",
        "contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:223",
        "contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:235"
    ],
    "recommendation": "Use `SafeTransferLib.safeTransfer`/`safeTransferFrom` (or check return values explicitly) for all external token transfers.",
    "exploit_scenario": "If `baseToken`/`wrappedToken` (or the vault\u2019s underlying asset) return `false` without reverting, `Unwrapper.wrap/unwrap` can send tokens out even when `transferFrom` failed, letting users obtain tokens without paying. In `Vault_YieldLimitExecHook`, transfers back to the vault can silently fail while accounting is updated, leading to asset/ledger divergence."
}
info other cast Heavy CALL-family usage 55 no
view
evidence_json
{
    "notes": "large number of CALL/CALLCODE/STATICCALL opcodes; review external call patterns",
    "call_family_count": 15
}